mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 21:31:46 +00:00
feat(costs): rework Budget into Costs — Splitwise-style, multi-currency, mobile (#1106)
* fix(journey): authorize reads of the journey share link GET /api/journeys/:id/share-link now requires journey access (canAccessJourney), matching the create/delete share-link routes and the get_journey_share_link MCP tool. Returns no link when the caller lacks access to the journey. * feat(costs): rework Budget into Costs — Splitwise-style, multi-currency, mobile Renames the Budget addon to "Costs" (UI only) and reworks it into a Tricount/ Splitwise-style cost tracker: multiple payers per expense, equal split across chosen members, settle-up with persisted history + undo, 12 fixed categories, per-expense currency with live FX conversion to a user-set display currency (Settings -> Display), and locale-correct money formatting. Adds a desktop and a dedicated mobile layout. A migration backfills existing budget items (single payer, split members, currency). Closes #551 (per-expense currency). Also switches the app font to self-hosted Poppins (Geist for secondary subtext), replacing the Google Fonts CDN dependency. * fix(costs): neutral dashboard dark palette + liquid glass, full page width, entry-count badge - Dark mode used a warm oklch palette that read brownish; switch to the neutral zinc tokens used by the dashboard (#121215 bg, #f4f4f5 ink) and add a subtle backdrop-blur glass on cards. - Costs now uses the full available page width on desktop instead of a 1280px cap. - Render the expense count next to the Expenses title as a badge. - Adapt budget/journey unit tests to the new payer-based settlement model and the Costs rename (category default 'other', Costs tab/CostsPanel). * fix(costs): drop the entry-count badge, always show row edit/delete actions Removes the count badge next to the Expenses title and makes the per-row edit/delete actions permanently visible (no longer hover-only) on desktop too. * feat(costs): currency-native money formatting, custom select/date, rename addon to Costs - Format every amount in its own currency convention (symbol position, grouping and decimal separators) regardless of app language, via a currency->locale map (EUR -> '12,00 €', USD -> '$12.00', JPY -> '¥12', ...). Previously Intl used the app locale, so EUR showed the symbol in front under an English UI. - Use TREK's CustomSelect (searchable, with symbols) and CustomDatePicker in the add/edit expense modal instead of the native <select>/<input type=date>. - Rename the 'Budget Planner' add-on to 'Costs' in the admin list (display only; id/tables/permissions/MCP stay 'budget') via seed + a migration for existing DBs. * feat(auth): configurable session duration via SESSION_DURATION Adds a SESSION_DURATION env var (ms-style strings: 1h, 7d, 30d, ...) controlling how long a session stays valid before re-login. It drives both the trek_session JWT exp claim and the cookie maxAge from one source, so they never drift. Invalid values warn at startup and fall back to the default (24h — unchanged). The MFA challenge token and MCP OAuth tokens keep their own TTL. Implements the request from discussion #946. Documented in the env-var wiki page, .env.example and docker-compose.yml.
This commit is contained in:
@@ -27,10 +27,49 @@ export const budgetItemMemberSchema = z.object({
|
||||
});
|
||||
export type BudgetItemMember = z.infer<typeof budgetItemMemberSchema>;
|
||||
|
||||
/**
|
||||
* The fixed "Costs" expense categories. Unlike the old budget, users cannot
|
||||
* create their own categories — every expense maps to one of these keys. The
|
||||
* label/icon/colour per key live in the client; the server only stores the key.
|
||||
* Pre-rework rows used free-text categories; those are shown as `other`.
|
||||
*/
|
||||
export const COST_CATEGORIES = [
|
||||
'accommodation',
|
||||
'food',
|
||||
'groceries',
|
||||
'transport',
|
||||
'flights',
|
||||
'activities',
|
||||
'sightseeing',
|
||||
'shopping',
|
||||
'fees',
|
||||
'health',
|
||||
'tips',
|
||||
'other',
|
||||
] as const;
|
||||
export type CostCategory = (typeof COST_CATEGORIES)[number];
|
||||
|
||||
/**
|
||||
* One payer of an expense — a row of budget_item_payers. `amount` is in the
|
||||
* expense's own currency (budget_items.currency). Several payers can split who
|
||||
* actually paid one bill. Username/avatar are joined for display.
|
||||
*/
|
||||
export const budgetItemPayerSchema = z.object({
|
||||
user_id: z.number(),
|
||||
amount: z.number(),
|
||||
username: z.string().optional(),
|
||||
avatar_url: z.string().nullable().optional(),
|
||||
avatar: z.string().nullable().optional(),
|
||||
budget_item_id: z.number().optional(),
|
||||
});
|
||||
export type BudgetItemPayer = z.infer<typeof budgetItemPayerSchema>;
|
||||
|
||||
/**
|
||||
* Budget item entity as returned by the budget list/create/update endpoints
|
||||
* (server/src/services/budgetService.ts). Columns of the `budget_items` table
|
||||
* plus the embedded `members` array. total_price is SQLite REAL.
|
||||
* plus the embedded `members` (equal-split participants) and `payers` arrays.
|
||||
* total_price is the sum of payer amounts in `currency`; `exchange_rate` converts
|
||||
* that to the trip base currency (NULL currency + rate 1 = base currency).
|
||||
*/
|
||||
export const budgetItemSchema = z.object({
|
||||
id: z.number(),
|
||||
@@ -38,6 +77,8 @@ export const budgetItemSchema = z.object({
|
||||
category: z.string(),
|
||||
name: z.string(),
|
||||
total_price: z.number(),
|
||||
currency: z.string().nullable().optional(),
|
||||
exchange_rate: z.number().optional(),
|
||||
persons: z.number().nullable().optional(),
|
||||
days: z.number().nullable().optional(),
|
||||
note: z.string().nullable().optional(),
|
||||
@@ -47,13 +88,26 @@ export const budgetItemSchema = z.object({
|
||||
sort_order: z.number().optional(),
|
||||
created_at: z.string().optional(),
|
||||
members: z.array(budgetItemMemberSchema).optional(),
|
||||
payers: z.array(budgetItemPayerSchema).optional(),
|
||||
});
|
||||
export type BudgetItem = z.infer<typeof budgetItemSchema>;
|
||||
|
||||
const payerInputSchema = z.object({
|
||||
user_id: z.number(),
|
||||
amount: z.number(),
|
||||
});
|
||||
|
||||
export const budgetCreateItemRequestSchema = z.object({
|
||||
name: z.string().min(1),
|
||||
category: z.string().optional(),
|
||||
total_price: z.number().optional(),
|
||||
currency: z.string().nullable().optional(),
|
||||
exchange_rate: z.number().optional(),
|
||||
// Multi-payer: who paid how much (in the expense currency). When omitted, the
|
||||
// server falls back to total_price with no explicit payer.
|
||||
payers: z.array(payerInputSchema).optional(),
|
||||
// Equal-split participants. When omitted, the item has no split (planning-only).
|
||||
member_ids: z.array(z.number()).optional(),
|
||||
persons: z.number().nullable().optional(),
|
||||
days: z.number().nullable().optional(),
|
||||
note: z.string().nullable().optional(),
|
||||
@@ -68,6 +122,10 @@ export const budgetUpdateItemRequestSchema = z.object({
|
||||
name: z.string().optional(),
|
||||
category: z.string().optional(),
|
||||
total_price: z.number().optional(),
|
||||
currency: z.string().nullable().optional(),
|
||||
exchange_rate: z.number().optional(),
|
||||
payers: z.array(payerInputSchema).optional(),
|
||||
member_ids: z.array(z.number()).optional(),
|
||||
persons: z.number().nullable().optional(),
|
||||
days: z.number().nullable().optional(),
|
||||
note: z.string().nullable().optional(),
|
||||
@@ -77,6 +135,43 @@ export type BudgetUpdateItemRequest = z.infer<
|
||||
typeof budgetUpdateItemRequestSchema
|
||||
>;
|
||||
|
||||
/** Replace the explicit payers of an expense (amounts in expense currency). */
|
||||
export const budgetUpdatePayersRequestSchema = z.object({
|
||||
payers: z.array(payerInputSchema),
|
||||
});
|
||||
export type BudgetUpdatePayersRequest = z.infer<
|
||||
typeof budgetUpdatePayersRequestSchema
|
||||
>;
|
||||
|
||||
/**
|
||||
* A persisted settle-up transfer (budget_settlements row): "from paid to" a
|
||||
* given amount in the trip base currency. Creating one marks a suggested flow as
|
||||
* paid; deleting it (undo) brings the flow back. Names joined for display.
|
||||
*/
|
||||
export const budgetSettlementSchema = z.object({
|
||||
id: z.number(),
|
||||
trip_id: z.number(),
|
||||
from_user_id: z.number(),
|
||||
to_user_id: z.number(),
|
||||
amount: z.number(),
|
||||
created_at: z.string().optional(),
|
||||
created_by_user_id: z.number().nullable().optional(),
|
||||
from_username: z.string().optional(),
|
||||
from_avatar_url: z.string().nullable().optional(),
|
||||
to_username: z.string().optional(),
|
||||
to_avatar_url: z.string().nullable().optional(),
|
||||
});
|
||||
export type BudgetSettlement = z.infer<typeof budgetSettlementSchema>;
|
||||
|
||||
export const budgetCreateSettlementRequestSchema = z.object({
|
||||
from_user_id: z.number(),
|
||||
to_user_id: z.number(),
|
||||
amount: z.number(),
|
||||
});
|
||||
export type BudgetCreateSettlementRequest = z.infer<
|
||||
typeof budgetCreateSettlementRequestSchema
|
||||
>;
|
||||
|
||||
export const budgetUpdateMembersRequestSchema = z.object({
|
||||
user_ids: z.array(z.number()),
|
||||
});
|
||||
|
||||
@@ -38,5 +38,78 @@ const budget: TranslationStrings = {
|
||||
'انقر على صورة العضو في بند الميزانية لتحديده باللون الأخضر — وهذا يعني أنه دفع. ثم تُظهر التسوية من يدين لمن وبكم.',
|
||||
'budget.netBalances': 'الأرصدة الصافية',
|
||||
'budget.categoriesLabel': 'فئات',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -288,5 +288,8 @@ const settings: TranslationStrings = {
|
||||
'Business Class Dreamer', // en-fallback
|
||||
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', // en-fallback
|
||||
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', // en-fallback
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'تجهيز',
|
||||
'trip.tabs.lists': 'القوائم',
|
||||
'trip.tabs.listsShort': 'القوائم',
|
||||
'trip.tabs.budget': 'الميزانية',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'الملفات',
|
||||
'trip.loading': 'جارٍ تحميل الرحلة...',
|
||||
'trip.loadingPhotos': 'جارٍ تحميل صور الأماكن...',
|
||||
|
||||
@@ -39,5 +39,78 @@ const budget: TranslationStrings = {
|
||||
'Clique no avatar de um membro em um item do orçamento para marcá-lo em verde — significa que ele pagou. O acerto mostra quem deve quanto a quem.',
|
||||
'budget.netBalances': 'Saldos líquidos',
|
||||
'budget.categoriesLabel': 'categorias',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -294,5 +294,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.email': 'Email',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Mala',
|
||||
'trip.tabs.lists': 'Listas',
|
||||
'trip.tabs.listsShort': 'Listas',
|
||||
'trip.tabs.budget': 'Orçamento',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Arquivos',
|
||||
'trip.loading': 'Carregando viagem...',
|
||||
'trip.mobilePlan': 'Plano',
|
||||
|
||||
@@ -39,5 +39,78 @@ const budget: TranslationStrings = {
|
||||
'Klikněte na avatar člena u rozpočtové položky pro zelené označení – to znamená, že zaplatil. Vyúčtování pak ukazuje, kdo komu a kolik dluží.',
|
||||
'budget.netBalances': 'Čisté zůstatky',
|
||||
'budget.categoriesLabel': 'kategorie',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -295,5 +295,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.email': 'Email',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Balení',
|
||||
'trip.tabs.lists': 'Seznamy',
|
||||
'trip.tabs.listsShort': 'Seznamy',
|
||||
'trip.tabs.budget': 'Rozpočet',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Soubory',
|
||||
'trip.loading': 'Načítání cesty...',
|
||||
'trip.loadingPhotos': 'Načítání fotek míst...',
|
||||
|
||||
@@ -40,5 +40,78 @@ const budget: TranslationStrings = {
|
||||
'Klicke auf ein Mitglied-Bild bei einem Eintrag, um es grün zu markieren — das bedeutet, diese Person hat bezahlt. Der Ausgleich zeigt dann, wer wem wie viel schuldet.',
|
||||
'budget.netBalances': 'Netto-Salden',
|
||||
'budget.categoriesLabel': 'Kategorien',
|
||||
"costs.you": "Du",
|
||||
"costs.youShort": "Du",
|
||||
"costs.youLower": "dir",
|
||||
"costs.youOwe": "Du schuldest",
|
||||
"costs.youOweSub": "Du solltest anderen zahlen",
|
||||
"costs.youreOwed": "Dir wird geschuldet",
|
||||
"costs.youreOwedSub": "Andere sollten dir zahlen",
|
||||
"costs.totalSpend": "Gesamtausgaben",
|
||||
"costs.totalSpendSub": "Über alle Reisenden",
|
||||
"costs.to": "An",
|
||||
"costs.from": "Von",
|
||||
"costs.allSettled": "Alles ausgeglichen",
|
||||
"costs.nothingOwed": "Dir wird nichts geschuldet",
|
||||
"costs.yourShare": "Dein Anteil",
|
||||
"costs.youPaid": "Du zahltest",
|
||||
"costs.expenses": "Ausgaben",
|
||||
"costs.entries": "{count} Einträge",
|
||||
"costs.searchPlaceholder": "Ausgaben suchen…",
|
||||
"costs.filter.all": "Alle",
|
||||
"costs.filter.mine": "Von mir bezahlt",
|
||||
"costs.filter.owed": "Mir geschuldet",
|
||||
"costs.addExpense": "Ausgabe hinzufügen",
|
||||
"costs.editExpense": "Ausgabe bearbeiten",
|
||||
"costs.noMatch": "Keine Ausgaben passen zur Suche.",
|
||||
"costs.emptyText": "Noch keine Ausgaben. Füge die erste hinzu.",
|
||||
"costs.spent": "{amount} ausgegeben",
|
||||
"costs.noDate": "Kein Datum",
|
||||
"costs.noOnePaid": "Noch niemand bezahlt",
|
||||
"costs.youLent": "{amount} ausgelegt",
|
||||
"costs.youBorrowed": "{amount} geliehen",
|
||||
"costs.settleUp": "Ausgleichen",
|
||||
"costs.history": "Verlauf",
|
||||
"costs.everyoneSquare": "Alle quitt",
|
||||
"costs.nothingOutstanding": "Aktuell keine offenen Zahlungen.",
|
||||
"costs.pay": "zahlst",
|
||||
"costs.pays": "zahlt",
|
||||
"costs.settle": "Ausgleichen",
|
||||
"costs.balances": "Salden",
|
||||
"costs.byCategory": "Nach Kategorie",
|
||||
"costs.noCategories": "Noch keine Ausgaben.",
|
||||
"costs.settleHistory": "Ausgleichs-Verlauf",
|
||||
"costs.noSettlements": "Noch keine ausgeglichenen Zahlungen.",
|
||||
"costs.paymentsSettled": "{count} Zahlungen ausgeglichen",
|
||||
"costs.paid": "zahlte",
|
||||
"costs.undo": "Rückgängig",
|
||||
"costs.whatFor": "Wofür war es?",
|
||||
"costs.namePlaceholder": "z.B. Abendessen, Souvenirs, Benzin…",
|
||||
"costs.totalAmount": "Gesamtbetrag",
|
||||
"costs.currency": "Währung",
|
||||
"costs.day": "Tag",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Kategorie",
|
||||
"costs.whoPaid": "Wer hat bezahlt?",
|
||||
"costs.splitBetween": "Gleichmäßig teilen zwischen",
|
||||
"costs.pickSomeone": "Wähle mindestens eine Person zum Teilen.",
|
||||
"costs.splitSummary": "Auf {count} aufgeteilt · {amount} pro Person",
|
||||
"costs.cat.accommodation": "Unterkunft",
|
||||
"costs.cat.food": "Essen & Trinken",
|
||||
"costs.cat.groceries": "Lebensmittel",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flüge",
|
||||
"costs.cat.activities": "Aktivitäten",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Gebühren & Tickets",
|
||||
"costs.cat.health": "Gesundheit",
|
||||
"costs.cat.tips": "Trinkgeld",
|
||||
"costs.cat.other": "Sonstiges",
|
||||
"costs.daysCount": "{count} Tage",
|
||||
"costs.travelers": "{count} Reisende",
|
||||
"costs.liveRate": "Live-Kurs",
|
||||
"costs.settleAll": "Alle ausgleichen",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -298,5 +298,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.email': 'Email',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
"settings.currency": "Währung",
|
||||
"settings.currencyHint": "Alle Beträge in Costs werden in diese Währung umgerechnet und angezeigt.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Liste',
|
||||
'trip.tabs.lists': 'Listen',
|
||||
'trip.tabs.listsShort': 'Listen',
|
||||
'trip.tabs.budget': 'Budget',
|
||||
'trip.tabs.budget': "Kosten",
|
||||
'trip.tabs.files': 'Dateien',
|
||||
'trip.loading': 'Reise wird geladen...',
|
||||
'trip.loadingPhotos': 'Fotos der Orte werden geladen...',
|
||||
|
||||
@@ -39,5 +39,78 @@ const budget: TranslationStrings = {
|
||||
'Click a member avatar on a budget item to mark them green — this means they paid. The settlement then shows who owes whom and how much.',
|
||||
'budget.netBalances': 'Net Balances',
|
||||
'budget.categoriesLabel': 'categories',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -288,5 +288,8 @@ const settings: TranslationStrings = {
|
||||
'settings.mfa.toastEnabled': 'Two-factor authentication enabled',
|
||||
'settings.mfa.toastDisabled': 'Two-factor authentication disabled',
|
||||
'settings.mfa.demoBlocked': 'Not available in demo mode',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Packing',
|
||||
'trip.tabs.lists': 'Lists',
|
||||
'trip.tabs.listsShort': 'Lists',
|
||||
'trip.tabs.budget': 'Budget',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Files',
|
||||
'trip.loading': 'Loading trip...',
|
||||
'trip.loadingPhotos': 'Loading place photos...',
|
||||
|
||||
@@ -40,5 +40,78 @@ const budget: TranslationStrings = {
|
||||
'Haz clic en el avatar de un miembro en una partida del presupuesto para marcarlo en verde — esto significa que ha pagado. La liquidación muestra quién debe cuánto a quién.',
|
||||
'budget.netBalances': 'Saldos netos',
|
||||
'budget.categoriesLabel': 'categorías',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -295,5 +295,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.email': 'Email',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Equipaje',
|
||||
'trip.tabs.lists': 'Listas',
|
||||
'trip.tabs.listsShort': 'Listas',
|
||||
'trip.tabs.budget': 'Presupuesto',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Archivos',
|
||||
'trip.loading': 'Cargando viaje...',
|
||||
'trip.loadingPhotos': 'Cargando fotos de los lugares...',
|
||||
|
||||
@@ -40,5 +40,78 @@ const budget: TranslationStrings = {
|
||||
"Cliquez sur l'avatar d'un membre sur un poste budgétaire pour le marquer en vert — cela signifie qu'il a payé. Le règlement indique ensuite qui doit combien à qui.",
|
||||
'budget.netBalances': 'Soldes nets',
|
||||
'budget.categoriesLabel': 'catégories',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -299,5 +299,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.email': 'Email',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Bagages',
|
||||
'trip.tabs.lists': 'Listes',
|
||||
'trip.tabs.listsShort': 'Listes',
|
||||
'trip.tabs.budget': 'Budget',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Fichiers',
|
||||
'trip.loading': 'Chargement du voyage…',
|
||||
'trip.loadingPhotos': 'Chargement des photos des lieux...',
|
||||
|
||||
@@ -40,5 +40,78 @@ const budget: TranslationStrings = {
|
||||
'Κάντε κλικ στο avatar ενός μέλους σε μια εγγραφή προϋπολογισμού για να το επισημάνετε πράσινο — αυτό σημαίνει ότι πλήρωσε. Η εκκαθάριση δείχνει στη συνέχεια ποιος χρωστάει σε ποιον και πόσα.',
|
||||
'budget.netBalances': 'Καθαρά Υπόλοιπα',
|
||||
'budget.categoriesLabel': 'κατηγορίες',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -301,5 +301,8 @@ const settings: TranslationStrings = {
|
||||
'settings.mfa.toastDisabled':
|
||||
'Ο έλεγχος ταυτότητας δύο παραγόντων απενεργοποιήθηκε',
|
||||
'settings.mfa.demoBlocked': 'Δεν είναι διαθέσιμο σε λειτουργία demo',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Αποσκευές',
|
||||
'trip.tabs.lists': 'Λίστες',
|
||||
'trip.tabs.listsShort': 'Λίστες',
|
||||
'trip.tabs.budget': 'Προϋπολογισμός',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Αρχεία',
|
||||
'trip.loading': 'Φόρτωση ταξιδιού...',
|
||||
'trip.loadingPhotos': 'Φόρτωση φωτογραφιών μέρους...',
|
||||
|
||||
@@ -40,5 +40,78 @@ const budget: TranslationStrings = {
|
||||
'Kattints egy tag avatárjára egy költségvetési tételen a zöld jelöléshez — ez azt jelenti, hogy fizetett. Az elszámolás ezután mutatja, ki kinek mennyivel tartozik.',
|
||||
'budget.netBalances': 'Nettó egyenlegek',
|
||||
'budget.categoriesLabel': 'kategóriák',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -297,5 +297,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.email': 'Email',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Csomag',
|
||||
'trip.tabs.lists': 'Listák',
|
||||
'trip.tabs.listsShort': 'Listák',
|
||||
'trip.tabs.budget': 'Költségvetés',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Fájlok',
|
||||
'trip.loading': 'Utazás betöltése...',
|
||||
'trip.mobilePlan': 'Tervezés',
|
||||
|
||||
@@ -39,5 +39,78 @@ const budget: TranslationStrings = {
|
||||
'Klik foto anggota di item anggaran untuk menandainya hijau — artinya mereka sudah bayar. Penyelesaian lalu menunjukkan siapa berhutang ke siapa dan berapa.',
|
||||
'budget.netBalances': 'Saldo Bersih',
|
||||
'budget.categoriesLabel': 'kategori',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -295,5 +295,8 @@ const settings: TranslationStrings = {
|
||||
'settings.bookingLabels': 'Label rute pemesanan',
|
||||
'settings.bookingLabelsHint':
|
||||
'Menampilkan nama stasiun / bandara di peta. Jika mati, hanya ikon ditampilkan.',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Perlengkapan',
|
||||
'trip.tabs.lists': 'Daftar',
|
||||
'trip.tabs.listsShort': 'Daftar',
|
||||
'trip.tabs.budget': 'Anggaran',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'File',
|
||||
'trip.loading': 'Memuat perjalanan...',
|
||||
'trip.loadingPhotos': 'Memuat foto tempat...',
|
||||
|
||||
@@ -40,5 +40,78 @@ const budget: TranslationStrings = {
|
||||
"Clicca sull'avatar di un membro su una voce di budget per contrassegnarlo in verde — significa che ha pagato. Il regolamento mostra poi chi deve quanto a chi.",
|
||||
'budget.netBalances': 'Saldi netti',
|
||||
'budget.categoriesLabel': 'categorie',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -294,5 +294,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.email': 'Email',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Valigia',
|
||||
'trip.tabs.lists': 'Liste',
|
||||
'trip.tabs.listsShort': 'Liste',
|
||||
'trip.tabs.budget': 'Budget',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'File',
|
||||
'trip.loading': 'Caricamento viaggio...',
|
||||
'trip.mobilePlan': 'Programma',
|
||||
|
||||
@@ -38,5 +38,78 @@ const budget: TranslationStrings = {
|
||||
'予算項目のメンバーアイコンをクリックして緑にすると、支払い済みを示します。精算では、誰が誰にいくら支払うべきかを表示します。',
|
||||
'budget.netBalances': '差引残高',
|
||||
'budget.categoriesLabel': 'カテゴリ',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -274,5 +274,8 @@ const settings: TranslationStrings = {
|
||||
'settings.oauth.modal.machineClientUsage':
|
||||
'トークンを取得するには、grant_type=client_credentials、client_id、client_secret を指定して POST /oauth/token を呼び出します。ブラウザもリフレッシュトークンも不要です。',
|
||||
'settings.oauth.badge.machine': 'マシン',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': '持ち物',
|
||||
'trip.tabs.lists': 'リスト',
|
||||
'trip.tabs.listsShort': 'リスト',
|
||||
'trip.tabs.budget': '予算',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'ファイル',
|
||||
'trip.loading': '旅行を読み込み中...',
|
||||
'trip.loadingPhotos': '場所の写真を読み込み中...',
|
||||
|
||||
@@ -38,5 +38,78 @@ const budget: TranslationStrings = {
|
||||
'예산 항목의 멤버 아바타를 클릭하면 녹색으로 표시됩니다 — 해당 멤버가 지불했음을 의미합니다. 그러면 정산에서 누가 누구에게 얼마를 지불해야 하는지 보여줍니다.',
|
||||
'budget.netBalances': '순 잔액',
|
||||
'budget.categoriesLabel': '카테고리',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -291,5 +291,8 @@ const settings: TranslationStrings = {
|
||||
'settings.oauth.modal.machineClientUsage':
|
||||
'토큰 받기: grant_type=client_credentials, client_id, client_secret으로 POST /oauth/token을 호출하세요. 브라우저도 새로 고침 토큰도 필요 없습니다.',
|
||||
'settings.oauth.badge.machine': '머신',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': '짐',
|
||||
'trip.tabs.lists': '목록',
|
||||
'trip.tabs.listsShort': '목록',
|
||||
'trip.tabs.budget': '예산',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': '파일',
|
||||
'trip.loading': '여행 불러오는 중...',
|
||||
'trip.loadingPhotos': '장소 사진 불러오는 중...',
|
||||
|
||||
@@ -40,5 +40,78 @@ const budget: TranslationStrings = {
|
||||
'Klik op de avatar van een lid bij een budgetpost om deze groen te markeren — dit betekent dat diegene heeft betaald. De afrekening toont vervolgens wie wie hoeveel verschuldigd is.',
|
||||
'budget.netBalances': 'Nettosaldi',
|
||||
'budget.categoriesLabel': 'categorieën',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -294,5 +294,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.email': 'Email',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Inpakken',
|
||||
'trip.tabs.lists': 'Lijsten',
|
||||
'trip.tabs.listsShort': 'Lijsten',
|
||||
'trip.tabs.budget': 'Budget',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Bestanden',
|
||||
'trip.loading': 'Reis laden...',
|
||||
'trip.loadingPhotos': 'Plaatsfoto laden...',
|
||||
|
||||
@@ -38,5 +38,78 @@ const budget: TranslationStrings = {
|
||||
'budget.exportCsv': 'Eksportuj CSV',
|
||||
'budget.table.date': 'Data',
|
||||
'budget.categoriesLabel': 'kategorie',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -296,5 +296,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationsManagedByAdmin':
|
||||
'Zdarzenia konfigurowane przez administratora.',
|
||||
'settings.mustChangePassword': 'Musisz zmienić hasło przed kontynuowaniem.',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Pakowanie',
|
||||
'trip.tabs.lists': 'Listy',
|
||||
'trip.tabs.listsShort': 'Listy',
|
||||
'trip.tabs.budget': 'Budżet',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Pliki',
|
||||
'trip.loading': 'Ładowanie podróży...',
|
||||
'trip.mobilePlan': 'Plan',
|
||||
|
||||
@@ -40,5 +40,78 @@ const budget: TranslationStrings = {
|
||||
'Нажмите на аватар участника в строке бюджета, чтобы отметить его зелёным — это значит, что он заплатил. Взаиморасчёт покажет, кто кому и сколько должен.',
|
||||
'budget.netBalances': 'Чистые балансы',
|
||||
'budget.categoriesLabel': 'категорий',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -295,5 +295,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.email': 'Email',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Вещи',
|
||||
'trip.tabs.lists': 'Списки',
|
||||
'trip.tabs.listsShort': 'Списки',
|
||||
'trip.tabs.budget': 'Бюджет',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Файлы',
|
||||
'trip.loading': 'Загрузка поездки...',
|
||||
'trip.loadingPhotos': 'Загрузка фото мест...',
|
||||
|
||||
@@ -39,5 +39,78 @@ const budget: TranslationStrings = {
|
||||
'Bir bütçe kalemindeki üye avatarına tıklayarak yeşil işaretleyin — bu ödedikleri anlamına gelir. Hesaplaşma kimin kime ne kadar borçlu olduğunu gösterir.',
|
||||
'budget.netBalances': 'Net Bakiyeler',
|
||||
'budget.categoriesLabel': 'kategoriler',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -295,5 +295,8 @@ const settings: TranslationStrings = {
|
||||
'settings.oauth.modal.machineClientUsage':
|
||||
'Bir jeton alın: grant_type=client_credentials, client_id ve client_secret ile POST /oauth/token. Tarayıcı yok, yenileme belirteci yok.',
|
||||
'settings.oauth.badge.machine': 'makine',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Paket',
|
||||
'trip.tabs.lists': 'Listeler',
|
||||
'trip.tabs.listsShort': 'Liste',
|
||||
'trip.tabs.budget': 'Bütçe',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Dosyalar',
|
||||
'trip.loading': 'Seyahat yükleniyor...',
|
||||
'trip.loadingPhotos': 'Yer fotoğrafları yükleniyor...',
|
||||
|
||||
@@ -39,5 +39,78 @@ const budget: TranslationStrings = {
|
||||
'Натисніть на аватар учасника в рядку бюджету, щоб відзначити його зеленим — це означає, що він заплатив. Взаєморозрахунок покаже, хто кому і скільки винен.',
|
||||
'budget.netBalances': 'Чисті баланси',
|
||||
'budget.categoriesLabel': 'категорії',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -293,5 +293,8 @@ const settings: TranslationStrings = {
|
||||
'settings.oauth.modal.machineClientUsage':
|
||||
'Отримати токен: POST /oauth/token з grant_type=client_credentials, client_id і client_secret. Без браузера, без токена оновлення.',
|
||||
'settings.oauth.badge.machine': 'машина',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Речі',
|
||||
'trip.tabs.lists': 'Списки',
|
||||
'trip.tabs.listsShort': 'Списки',
|
||||
'trip.tabs.budget': 'Бюджет',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': 'Файли',
|
||||
'trip.loading': 'Завантаження поїздки...',
|
||||
'trip.loadingPhotos': 'Завантаження фото місць...',
|
||||
|
||||
@@ -38,5 +38,78 @@ const budget: TranslationStrings = {
|
||||
'點選預算專案上的成員頭像將其標記為綠色——表示該成員已付款。結算會顯示誰欠誰多少。',
|
||||
'budget.netBalances': '淨餘額',
|
||||
'budget.categoriesLabel': '類別',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -282,5 +282,8 @@ const settings: TranslationStrings = {
|
||||
'settings.bookingLabels': '預訂路線標籤',
|
||||
'settings.bookingLabelsHint':
|
||||
'在地圖上顯示車站 / 機場名稱。關閉時僅顯示圖示。',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': '行李',
|
||||
'trip.tabs.lists': '清單',
|
||||
'trip.tabs.listsShort': '清單',
|
||||
'trip.tabs.budget': '預算',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': '檔案',
|
||||
'trip.loading': '載入旅行中...',
|
||||
'trip.loadingPhotos': '正在載入地點照片...',
|
||||
|
||||
@@ -38,5 +38,78 @@ const budget: TranslationStrings = {
|
||||
'点击预算项目上的成员头像将其标记为绿色——表示该成员已付款。结算会显示谁欠谁多少。',
|
||||
'budget.netBalances': '净余额',
|
||||
'budget.categoriesLabel': '类别',
|
||||
"costs.you": "You",
|
||||
"costs.youShort": "Y",
|
||||
"costs.youLower": "you",
|
||||
"costs.youOwe": "You owe",
|
||||
"costs.youOweSub": "You should pay others",
|
||||
"costs.youreOwed": "You're owed",
|
||||
"costs.youreOwedSub": "Others should pay you",
|
||||
"costs.totalSpend": "Total trip spend",
|
||||
"costs.totalSpendSub": "Across all travelers",
|
||||
"costs.to": "To",
|
||||
"costs.from": "From",
|
||||
"costs.allSettled": "You're all settled up",
|
||||
"costs.nothingOwed": "Nothing owed to you",
|
||||
"costs.yourShare": "Your share",
|
||||
"costs.youPaid": "You paid",
|
||||
"costs.expenses": "Expenses",
|
||||
"costs.entries": "{count} entries",
|
||||
"costs.searchPlaceholder": "Search expenses…",
|
||||
"costs.filter.all": "All",
|
||||
"costs.filter.mine": "Paid by me",
|
||||
"costs.filter.owed": "I'm owed",
|
||||
"costs.addExpense": "Add expense",
|
||||
"costs.editExpense": "Edit expense",
|
||||
"costs.noMatch": "No expenses match your search.",
|
||||
"costs.emptyText": "No expenses yet. Add your first one.",
|
||||
"costs.spent": "{amount} spent",
|
||||
"costs.noDate": "No date",
|
||||
"costs.noOnePaid": "No one paid yet",
|
||||
"costs.youLent": "you lent {amount}",
|
||||
"costs.youBorrowed": "you borrowed {amount}",
|
||||
"costs.settleUp": "Settle up",
|
||||
"costs.history": "History",
|
||||
"costs.everyoneSquare": "Everyone's square",
|
||||
"costs.nothingOutstanding": "No payments outstanding right now.",
|
||||
"costs.pay": "pay",
|
||||
"costs.pays": "pays",
|
||||
"costs.settle": "Settle",
|
||||
"costs.balances": "Balances",
|
||||
"costs.byCategory": "By category",
|
||||
"costs.noCategories": "No expenses yet.",
|
||||
"costs.settleHistory": "Settle history",
|
||||
"costs.noSettlements": "No settled payments yet.",
|
||||
"costs.paymentsSettled": "{count} payments settled",
|
||||
"costs.paid": "paid",
|
||||
"costs.undo": "Undo",
|
||||
"costs.whatFor": "What was it for?",
|
||||
"costs.namePlaceholder": "e.g. Dinner, souvenirs, gas…",
|
||||
"costs.totalAmount": "Total amount",
|
||||
"costs.currency": "Currency",
|
||||
"costs.day": "Day",
|
||||
"costs.rateLabel": "1 {from} in {to}",
|
||||
"costs.category": "Category",
|
||||
"costs.whoPaid": "Who paid?",
|
||||
"costs.splitBetween": "Split equally between",
|
||||
"costs.pickSomeone": "Pick at least one person to split with.",
|
||||
"costs.splitSummary": "Split {count} ways · {amount} each",
|
||||
"costs.cat.accommodation": "Accommodation",
|
||||
"costs.cat.food": "Food & drink",
|
||||
"costs.cat.groceries": "Groceries",
|
||||
"costs.cat.transport": "Transport",
|
||||
"costs.cat.flights": "Flights",
|
||||
"costs.cat.activities": "Activities",
|
||||
"costs.cat.sightseeing": "Sightseeing",
|
||||
"costs.cat.shopping": "Shopping",
|
||||
"costs.cat.fees": "Fees & tickets",
|
||||
"costs.cat.health": "Health",
|
||||
"costs.cat.tips": "Tips",
|
||||
"costs.cat.other": "Other",
|
||||
"costs.daysCount": "{count} days",
|
||||
"costs.travelers": "{count} travelers",
|
||||
"costs.liveRate": "live rate",
|
||||
"costs.settleAll": "Settle all",
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -281,5 +281,8 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.email': 'Email',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
};
|
||||
|
||||
export default settings;
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': '行李',
|
||||
'trip.tabs.lists': '列表',
|
||||
'trip.tabs.listsShort': '列表',
|
||||
'trip.tabs.budget': '预算',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.files': '文件',
|
||||
'trip.loading': '加载旅行中...',
|
||||
'trip.loadingPhotos': '正在加载地点照片...',
|
||||
|
||||
Reference in New Issue
Block a user