diff --git a/next.config.js b/next.config.js index eee0158..28374d1 100644 --- a/next.config.js +++ b/next.config.js @@ -16,6 +16,8 @@ const withPwa = pwa({ dest: 'public', // Next 15 emits this build-only manifest; it isn't served, so precaching it breaks SW install buildExcludes: [/dynamic-css-manifest\.json$/], + // Translations are fetched on demand, so most users never download them + publicExcludes: ['!noprecache/**/*', '!locales/**/*'], // disable: process.env.NODE_ENV === 'development', }); diff --git a/package.json b/package.json index cc2471f..0eb7b76 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,10 @@ "date-fns": "^3.3.1", "framer-motion": "^11.0.3", "geist": "^1.7.2", + "i18next": "^26.4.5", + "i18next-icu": "^2.4.4", "input-otp": "^1.2.3", + "intl-messageformat": "^10.7.18", "lucide-react": "^0.312.0", "marked": "^18.1.0", "nanoid": "^5.1.16", @@ -70,6 +73,7 @@ "react-day-picker": "^8.10.0", "react-dom": "18.2.0", "react-hook-form": "^7.50.1", + "react-i18next": "^15.7.4", "sonner": "^1.4.0", "superjson": "^2.2.1", "tailwind-merge": "^2.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d6b2b9..57cbc45 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,9 +112,18 @@ dependencies: geist: specifier: ^1.7.2 version: 1.7.2(next@15.5.27) + i18next: + specifier: ^26.4.5 + version: 26.4.7(typescript@5.3.3) + i18next-icu: + specifier: ^2.4.4 + version: 2.5.0(intl-messageformat@10.7.18) input-otp: specifier: ^1.2.3 version: 1.2.3(react-dom@18.2.0)(react@18.2.0) + intl-messageformat: + specifier: ^10.7.18 + version: 10.7.18 lucide-react: specifier: ^0.312.0 version: 0.312.0(react@18.2.0) @@ -151,6 +160,9 @@ dependencies: react-hook-form: specifier: ^7.50.1 version: 7.50.1(react@18.2.0) + react-i18next: + specifier: ^15.7.4 + version: 15.7.4(i18next@26.4.7)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) sonner: specifier: ^1.4.0 version: 1.4.0(react-dom@18.2.0)(react@18.2.0) @@ -1647,6 +1659,11 @@ packages: dependencies: regenerator-runtime: 0.14.1 + /@babel/runtime@7.29.10: + resolution: {integrity: sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA==} + engines: {node: '>=6.9.0'} + dev: false + /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} @@ -2003,6 +2020,42 @@ packages: resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} dev: false + /@formatjs/ecma402-abstract@2.3.6: + resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} + dependencies: + '@formatjs/fast-memoize': 2.2.7 + '@formatjs/intl-localematcher': 0.6.2 + decimal.js: 10.6.0 + tslib: 2.8.1 + dev: false + + /@formatjs/fast-memoize@2.2.7: + resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} + dependencies: + tslib: 2.8.1 + dev: false + + /@formatjs/icu-messageformat-parser@2.11.4: + resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==} + dependencies: + '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/icu-skeleton-parser': 1.8.16 + tslib: 2.8.1 + dev: false + + /@formatjs/icu-skeleton-parser@1.8.16: + resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==} + dependencies: + '@formatjs/ecma402-abstract': 2.3.6 + tslib: 2.8.1 + dev: false + + /@formatjs/intl-localematcher@0.6.2: + resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} + dependencies: + tslib: 2.8.1 + dev: false + /@heroicons/react@2.1.1(react@18.2.0): resolution: {integrity: sha512-JyyN9Lo66kirbCMuMMRPtJxtKJoIsXKS569ebHGGRKbl8s4CtUfLnyKJxteA+vIKySocO4s1SkTkGS4xtG/yEA==} peerDependencies: @@ -4744,6 +4797,10 @@ packages: dependencies: ms: 2.1.2 + /decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + dev: false + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true @@ -5897,6 +5954,12 @@ packages: function-bind: 1.1.2 dev: true + /html-parse-stringify@3.1.0: + resolution: {integrity: sha512-E0oAXcELOtsXe+BmpJ2EZyedbldPpriV5vICzEuo6xjC/D1lDukOI7KrpfQGF2Qc4wWEy0nk3bFORS2K5ZAhFQ==} + dependencies: + void-elements: 3.1.0 + dev: false + /http_ece@1.2.0: resolution: {integrity: sha512-JrF8SSLVmcvc5NducxgyOrKXe3EsyHMgBFgSaIUGmArKe+rwr0uphRkRXvwiom3I+fpIfoItveHrfudL8/rxuA==} engines: {node: '>=16'} @@ -5912,6 +5975,25 @@ packages: - supports-color dev: false + /i18next-icu@2.5.0(intl-messageformat@10.7.18): + resolution: {integrity: sha512-/du0wHUfcJhP3gzHw4ZHp9n0XA6xpDD029ZVNy9e2ohWEZHJUnW8X/ZAC0ltE72hceRa+XcAz72NU2UVF+Guuw==} + peerDependencies: + intl-messageformat: '>=10.3.3 <13.0.0' + dependencies: + intl-messageformat: 10.7.18 + dev: false + + /i18next@26.4.7(typescript@5.3.3): + resolution: {integrity: sha512-p/3hqy6EcuqRs6wNwBYwGGC1fzBJSMxV9zMuN814ab/7QjdZbXfjXwuPZdQbngX6KDOTxM01uUiZyqmMB8ghZg==} + peerDependencies: + typescript: ^5 || ^6 || ^7 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.3.3 + dev: false + /idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -5968,6 +6050,15 @@ packages: side-channel: 1.1.1 dev: true + /intl-messageformat@10.7.18: + resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==} + dependencies: + '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/fast-memoize': 2.2.7 + '@formatjs/icu-messageformat-parser': 2.11.4 + tslib: 2.8.1 + dev: false + /invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: @@ -7314,6 +7405,30 @@ packages: react: 18.2.0 dev: false + /react-i18next@15.7.4(i18next@26.4.7)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3): + resolution: {integrity: sha512-nyU8iKNrI5uDJch0z9+Y5XEr34b0wkyYj3Rp+tfbahxtlswxSCjcUL9H0nqXo9IR3/t5Y5PKIA3fx3MfUyR9Xw==} + peerDependencies: + i18next: '>= 23.4.0' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + typescript: ^5 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + typescript: + optional: true + dependencies: + '@babel/runtime': 7.29.10 + html-parse-stringify: 3.1.0 + i18next: 26.4.7(typescript@5.3.3) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + typescript: 5.3.3 + dev: false + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true @@ -8489,6 +8604,11 @@ packages: - '@types/react-dom' dev: false + /void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + dev: false + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json new file mode 100644 index 0000000..9fcaa64 --- /dev/null +++ b/public/locales/cs/common.json @@ -0,0 +1,417 @@ +{ + "account": { + "change_language": "Změnit jazyk", + "change_language_details": { + "messages": { + "language_changed": "Změna jazyka byla úspěšná" + }, + "placeholder": "Vyberte jazyk", + "title": "Vyberte jazyk" + }, + "debug_info": "Informace pro ladění", + "debug_info_details": { + "copy_failed": "Nepodařilo se zkopírovat informace o ladění do schránky", + "description": "Při vytváření požadavku na podporu zkopírujte následující informace:", + "git": "Git", + "new_version_available": "Je k dispozici nová verze:", + "title": "Informace pro ladění", + "user_agent": "UserAgent", + "version": "Verze" + }, + "download_app": "Stáhnout aplikaci", + "download_app_details": { + "download_as_pwa": "SplitPro si můžete stáhnout na domovskou obrazovku jako PWA.", + "title": "Stáhnout aplikaci", + "using_android": "Používáte-li Android, podívejte se zde", + "using_ios": "Používáte-li iOS, podívejte se zde", + "video": "video" + }, + "download_splitpro_data": "Stáhnout data SplitPro", + "edit_name": { + "placeholder": "Zadejte jméno", + "title": "Upravit jméno" + }, + "follow_on_x": "Sledujte nás na X", + "import_from_splitwise": "Import ze Splitwise", + "import_from_splitwise_details": { + "choose_file": "Vyberte soubor", + "export_splitwise_data_button": "Exportovat data ze Splitwise", + "follow_to_export_splitwise_data": "Klikněte na tento odkaz pro export dat ze splitwise", + "messages": { + "import_success": "Import byl úspěšný" + }, + "no_file_chosen": "Není vybrán žádný soubor", + "note": "Poznámka: V současnosti je podporován pouze import přátel a skupin. Transakce importovány nebudou. Pracujeme na tom." + }, + "logout": "Odhlásit se", + "messages": { + "submit_error": "Nepodařilo se odeslat zpětnou vazbu", + "submit_success": "Zpětná vazba odeslána" + }, + "notifications": { + "disable_notification": "Vypnout notifikace", + "enable_notification": "Zapnout notifikace", + "messages": { + "notification_granted": "Nyní budete dostávat notifikace" + } + }, + "star_on_github": "Ohodnoťte nás na GitHubu", + "submit_feedback": "Odeslat zpětnou vazbu", + "submit_feedback_details": { + "placeholder": "Zadejte vaši zpětnou vazbu", + "title": "Odeslat zpětnou vazbu" + }, + "support_us": "Podpořte nás", + "title": "Účet", + "write_review": "Napište recenzi" + }, + "actions": { + "add_expense": "Přidat výdaj", + "back": "Zpět", + "cancel": "Zrušit", + "close": "Zavřít", + "confirm": "Potvrdit", + "connect": "Připojit se", + "copy": "Kopírovat", + "create": "Vytvořit", + "edit_expense": "Upravit výdaj", + "export": "Exportovat", + "fetch": "Načíst", + "import": "Importovat", + "invite": "Pozvat", + "leave": "Opustit", + "next": "Další", + "reconnect": "Znovu připojit", + "save": "Uložit", + "settle_up": "Vyrovnat se", + "submit": "Odeslat" + }, + "actors": { + "all": "Vše", + "friends": "Přátelé", + "groups": "Skupiny", + "members": "Členové", + "owner": "Vlastník", + "you": "Vy", + "you_accusativus": "Vás", + "you_dativus": "Vám" + }, + "auth": { + "continue_with": "Pokračovat s {provider}", + "email_placeholder": "Zadejte váš email", + "no_providers_configured": "Není nastaven žádný poskytovatel přihlášení", + "no_providers_instructions": "Abyste se mohli přihlásit, nastavte prosím alespoň jednoho poskytovatele přihlášení. Pro více informací se podívejte na", + "otp_sent": "Poslali jsme vám email s jednorázovým heslem. Prosím zkontrolujte si přijatou poštu a klikněte na odkaz v emailu pro přihlášení.", + "send_magic_link": "Poslat magický odkaz", + "sending": "Odesílání...", + "setup_instructions": "Instrukce pro Docker", + "trouble_logging_in": "Potíže s přihlášením? Kontaktujte" + }, + "bank_transactions": { + "choose_bank_provider": "Vyberte poskytovatele bankovních služeb", + "no_bank_providers_found": "Nebyli nalezeni žádní poskytovatelé bankovních služeb", + "plaid": { + "bank_connected_successfully": "Banka úspěšně připojena", + "bank_connection_cancelled": "Spojení s bankou bylo zrušeno", + "bank_connection_failed": "S bankou se nepodařilo spojit" + }, + "search_bank": "Vyhledat banku", + "select_bank_provider": "Zvolte poskytovatele bankovních služeb", + "to_bank": "do banky" + }, + "currency_conversion": { + "amount_to_receive": "Částka k přijetí", + "description": "Převede částku do jiné měny.", + "exchange_rate": "Směnný kurz", + "fetching_rate": "Načítání kurzu...", + "rate": "Kurz", + "success_toast": "Převod měny úspěšně nastaven", + "title": "Převod měny" + }, + "errors": { + "currency_conversion_error": "Chyba při nastavování převodu měny", + "currency_conversion_failed": "Měny se nepodařilo převést", + "currency_conversion_malformed": "Data o převodu měny jsou poškozena", + "email_invalid": "Email není platný, prosím zkuste přihlášení zopakovat.", + "email_required": "Email je povinný", + "feedback_min_length": "Zpětná vazba musí mít alespoň 10 znaků", + "feedback_required": "Musí být vyplněna zpětná vazba", + "group_balances_malformed": "Data o zůstatcích skupiny jsou poškozena. Nahlašte prosím problém, nebo zkuste provést nový výpočet.", + "group_name_update_failed": "Chyba při aktualizaci jména skupiny", + "import_failed": "Chyba při importování souboru", + "invalid_cron_expression": "Neplatný cron výraz", + "invalid_currency_code": "Neplatný kód měny {code}", + "language_change_failed": "Chyba při změně jazyka", + "less_than": "Soubor by měl být menší než", + "name_required": "Musí být zadáno jméno", + "no_providers": "Chyba při načítání poskytovatelů ověření. Zkontrolujte prosím záznamy v backendu.", + "notification_not_supported": "Notifikace nejsou podporovány", + "otp_invalid": "Neplatný jednorázový kód", + "otp_required": "Je nutný jednorázový kód", + "recurrence_delete_failed": "Opakování se nepodařilo smazat", + "recurrence_update_failed": "Opakování se nepodařilo aktualizovat", + "request_error": "Chyba při požadavku na notifikace", + "saving_expense": "Chyba při ukládání výdaje", + "setting_update_failed": "Nastavení se nepodařilo aktualizovat", + "signin_error": "Při přihlašování došlo k chybě: {error}", + "signup_disabled": "Registrace nových účtů je v této instanci zakázána", + "something_went_wrong": "Něco se pokazilo", + "subscribe_error": "Nelze se přihlásit k odběru oznámení", + "unsubscribe_error": "Chyba při odhlášení odběru oznámení", + "upload_failed": "Soubor se nepodařilo nahrát", + "uploading_error": "Chyba při nahrávání souboru", + "valid_email": "Zadejte platný email" + }, + "expense_details": { + "add_expense": "Přidat výdaj", + "add_expense_details": { + "add_new_expense": "Přidat nový výdaj", + "amount_placeholder": "Zadejte částku", + "description_placeholder": "Zadejte popis", + "pick_a_date": "Vyberte datum", + "select_user_or_group": { + "add_to_split_pro": "Přidat do Split Pro", + "note": "Poznámka: odesílání pozvánek je prozatím vypnuto kvůli spamu", + "only_one_group_time": "Můžete mít jen jednu skupinu najednou", + "send_invite": "Odeslat uživateli pozvánku", + "warning": "Varování: Pokud email není platný, nepoužívejte odeslat pozvánku. Místo toho použijte přidat do Split Pro. Při zneužití této funkce bude váš účet zablokován" + }, + "split_type_section": { + "split_equally": "rozdělit rovnoměrně", + "split_unequally": "rozdělit nerovnoměrně", + "types": { + "adjustment": { + "remaining_to_split_equally": "Zbývá rozdělit rovnoměrně", + "title": "Úprava" + }, + "equal": { + "per_person": "na osobu", + "title": "Rovnoměrně" + }, + "exact": { + "remaining": "Zbývá", + "title": "Přesně" + }, + "percentage": { + "remaining": "Zbývá", + "title": "Procentuálně" + }, + "share": { + "shares": "Podíl(y)", + "title": "Podle podílu", + "total_shares": "Celkový podíl" + } + } + }, + "sponsor_us": "Podpořte nás", + "upload_file": { + "messages": { + "upload_success": "Soubor byl úspěšně nahrán" + } + }, + "user_input": { + "add_more_friends": "Vyhledat přátele, skupiny nebo přidat email", + "cannot_change_group": "Při upravování nelze změnit skupinu", + "remove_group": "Pro smazání skupiny stiskněte delete", + "search_friends": "Vyhledat přátele, skupiny nebo přidat email" + } + }, + "already_added": "Již přidáno", + "balance_list": { + "are_settled_up": "jsou vyrovnány", + "is_settled_up": "je vyrovnán", + "press_balance_info": "Stiskněte konkrétní zůstatek pro zahájení vypořádání" + }, + "bank_transactions": "Bankovní transakce", + "clear": "Smazat", + "delete_expense_details": { + "text": "Tato akce nemůže být vrácena. Výš výdaj bude nenávratně smazán.", + "title": "Jste si naprosto jistí?" + }, + "multiple_transactions": { + "add_all": "Přidat vše", + "add_one_by_one": "Přidat po jedné", + "description": "Vybrali jste více transakcí. Vyberte, zda-li chcete všechny přidat se současným nastavením rozdělení, nebo chcete nastavení upravit pro každou zvlášť.", + "title": "Přidat více transakcí" + }, + "no_transactions_yet": "Zatím žádné transakce", + "pending": "Čekající", + "submit_all": "Odeslat vše", + "title": "Přidat výdaj", + "title_mobile": "Přidat" + }, + "group_details": { + "add_members": "Přidat členy", + "copied": "Zkopírováno", + "create_group": { + "group_name_placeholder": "Název skupiny", + "title": "Vytvořit skupinu" + }, + "group_info": { + "actions": "Akce", + "archive_group": "Archivovat skupinu", + "archive_group_details": { + "can_archive": "Tato skupina bude archivována a skryta z hlavního seznamu vašich skupin. V budoucnu do skupiny stále budete mít přístup, bude-li to nutné.", + "cant_archive": "Není možné archivovat skupina která má nesplacené zůstatky. Všechny dluhy musí být nejdříve vyrovnány.", + "title": "Určitě chcete tuto skupinu archivovat?" + }, + "archived": "Archivováno", + "delete_group": "Smazat skupinu", + "delete_group_details": { + "can_delete": "Tuto akci nelze vzít zpět", + "cant_delete": "Skupina nemůže být smazána dokud všichni nevyrovnají dluh", + "title": "Jste si naprosto jisti?" + }, + "group_created": "Skupina vytvořena", + "leave_group": "Opustit skupinu", + "leave_group_details": { + "can_leave": "Tuto akci nelze vzít zpět", + "cant_leave": "Nemůžete opustit skupinu dokud nevyrovnáte svůj dluh", + "title": "Jste si zcela jisti?" + }, + "members": "Členové", + "recalculate_balances": "Přepočítat zůstatky", + "recalculate_balances_details": { + "description": "Pokud se zůstatky neshodují s výdaji, můžete je přepočítat. Pokud je počet výdajů vysoký, může to chvíli trvat. Zůstatky mimo skupinu nebudou ovlivněny.", + "title": "Jste si jisti?" + }, + "remove_member_details": { + "can_remove": "Chystáte se tohoto člena odstranit ze skupiny", + "cant_remove": "Člena nelze odstranit dokud nevyrovná své dluhy", + "title": "Jste si zcela jisti?" + }, + "simplify_debts": "Zjednodušte dluhy", + "title": "Informace o skupině" + }, + "group_statistics": { + "first_expense": "První výdaj", + "title": "Statistiky skupiny", + "total_expenses": "Celkové výdaje" + }, + "messages": { + "balances_recalculated": "Zůstatky byly úspěšně přepočítány", + "group_archived": "Skupina byla úspěšně archivována", + "group_name_updated": "Název skupiny byl aktualizován" + }, + "no_members": { + "add_members": "Přidat členy", + "add_members_details": { + "add_to_split_pro": "Přidat do Split Pro", + "note": "Poznámka: odesílání pozvánek emailem je vypnuto", + "placeholder": "Zadejte jméno nebo email", + "send_invite": "Odeslat uživateli pozvánku", + "title": "Přidat členy", + "warning": "Varování: Pokud email není platný, nepoužívejte odeslat pozvánku. Místo toho použijte přidat do Split Pro. Při zneužití této funkce bude váš účet zablokován" + }, + "invite_link": "Pozvánka", + "no_members": "Ve skupině zatím nejsou žádní členové." + }, + "tabs": { + "balances": "Dluhy", + "expenses": "Výdaje" + }, + "title": "Dluhy skupiny" + }, + "invite_message": { + "in_splitpro": "ve Splitpro", + "join_to": "Připojte se k", + "text": "Připojte se ke skupině a můžete přidávat a spravovat výdaje a sledovat své zůstatky" + }, + "meta": { + "application_name": "SplitPro", + "description": "Rozdělte si zdarma výdaje se svými přáteli", + "title": "SplitPro: Rozdělte si zdarma výdaje se svými přáteli" + }, + "navigation": { + "account": "Účet", + "activity": "Aktivita", + "add": "Přidat", + "add_expense": "Přidat výdaj", + "balances": "Zůstatky", + "groups": "Skupiny", + "recurring": "Opakované" + }, + "recurrence": { + "cron_expression": "Cronový výraz", + "days_of_month": "Dny v měsící", + "days_of_week": "Dny v týdnu", + "delete_description": "Toto zastaví vytváření dalších výdajů v budoucnu. Existující výdaje vytvořené tímto opakováním smazány nebudou.", + "delete_title": "Smazat opakování", + "derived_delete_warning": "Tento výdaj je součástí opakování. Smazán bude pouze tento konkrétní výdaj. Budoucí opakované výdaje budou pokračovat.", + "derived_edit_warning": "Tento výdaj je součastí opakování. Změny se projeví pouze v tomto záznamu, nikoliv ve všech opakovaných výdajích.", + "description": "Nastavte pro tento výdaj automatické opakování.", + "edit_confirmation_title": "Upravit opakovaný výdaj", + "edit_description": "Toto změní rozvrh pro budoucí výdaje. Existující výdaje upraveny nebudou.", + "edit_title": "Upravit opakování", + "empty": "Žádné výdaje zatím nejsou opakované", + "expense_for_the_amount_of": "Výdaj {name} za {amount} {currency}", + "last_day": "Poslední den", + "months": "Měsíce", + "never": "Není nastaven žádný plán", + "recurring": "Opakované", + "schedule_type": { + "custom": "Vlastní", + "day": "Denně", + "month": "Měsíčně", + "never": "Nikdy", + "week": "Týdně", + "year": "Ročně" + }, + "template_delete_warning": "Toto je šablona pro opakované výdaje. Jejím smazáním dojde k zastavení všech budoucích opakovaných výdajů.", + "template_edit_warning": "Toto je šablona pro opakované výdaje. Změny se projeví ve všech budoucích opakovaných výdajích.", + "time_of_day": "Čas dne", + "title": "Opakování", + "view_recurring_page": "Zobrazit stránku opakování" + }, + "ui": { + "added_by": "Přidáno", + "and": "a", + "balance": "zůstatek", + "balances": "zůstatky", + "delete": "Smazat", + "deleted_by": "Smazáno", + "edited_by": "Upraveno", + "expense": { + "for": "pro", + "from": "od", + "paid_by": "Zaplaceno", + "received_by": "Obdrženo", + "to": "komu", + "user": { + "deleted": "smazán/a", + "get": "dostane", + "lent": "půjčil/a", + "owe": "dluží", + "paid": "zaplatil/a", + "pay": "platí", + "received": "dostal/a" + }, + "you": { + "deleted": "smazal/a", + "get": "dostanete", + "lent": "půjčil/a jste", + "owe": "dlužíte", + "paid": "zaplatil/a jste", + "pay": "zaplatíte", + "received": "dostal/a jste" + } + }, + "expense_details": "Detaily výdaje", + "in_group": "Ve skupině", + "no_activity": "Zatím žádná aktivita", + "not_involved": "Nezúčastněn", + "not_set": "Nenastaveno", + "on": "zapnuto", + "or": "nebo", + "outstanding_balances": "Zbývající dluhy", + "select_balance": "Vyberte zůstatek", + "select_currency": "Vyberte měnu", + "settle_up_name": "Vyrovnat se", + "settled_up": "Vyrovnáno", + "settlement": "Vyrovnání", + "share_text": "Mrkni na SplitPro. Je to otevřená alternative ke Splitwise", + "show_all_currencies": "Zobrazit všechny měny", + "today": "Dnes", + "total_balance": "Celkový zůstatek" + } +} diff --git a/public/locales/de/common.json b/public/locales/de/common.json new file mode 100644 index 0000000..53027a7 --- /dev/null +++ b/public/locales/de/common.json @@ -0,0 +1,450 @@ +{ + "account": { + "change_language": "Sprache ändern", + "change_language_details": { + "messages": { + "language_changed": "Sprache erfolgreich geändert" + }, + "no_language_found": "Sprache nicht gefunden", + "placeholder": "Sprache auswählen", + "title": "Sprache auswählen" + }, + "debug_info": "Debug-Informationen", + "debug_info_details": { + "copy_failed": "Debug-Informationen konnten nicht in die Zwischenablage kopiert werden", + "description": "Fügen Sie nachfolgend die Informationen ein, wenn Sie eine Supportanfrage erstellen:", + "git": "Git", + "new_version_available": "Eine neue Version ist verfügbar:", + "send_test_notification": "Testbenachrichtigung senden", + "test_notification_failed": "Testbenachrichtigung konnte nicht gesendet werden", + "test_notification_sent": "Testbenachrichtigung gesendet", + "title": "Fehlerbehebungsinformationen", + "user_agent": "Benutzeragent", + "version": "Version" + }, + "default_balance_currency": "Standardwährung", + "download_app": "App herunterladen", + "download_app_details": { + "download_as_pwa": "Du kannst SplitPro als App auf deinen Startbildschirm herunterladen.", + "title": "App herunterladen", + "using_android": "Wenn du Android benutzt, schau dir das an", + "using_ios": "Wenn du iOS benutzt, schau dir das an", + "video": "Video" + }, + "download_splitpro_data": "SplitPro-Daten herunterladen", + "edit_name": { + "apply_avatar": "Profilbild speichern", + "avatar_label": "Profilbild", + "avatar_preview": "Profilbildvorschau", + "placeholder": "Name eingeben", + "remove_avatar": "Profilbild entfernen", + "select_avatar": "Profilbild auswählen", + "title": "Details bearbeiten", + "zoom": "Zoom" + }, + "follow_on_x": "Folge uns auf X", + "import_from_splitwise": "Von Splitwise importieren", + "import_from_splitwise_details": { + "choose_file": "Datei auswählen", + "export_splitwise_data_button": "Splitwise-Daten exportieren", + "follow_to_export_splitwise_data": "Folge diesem Link, um Splitwise-Daten zu exportieren", + "messages": { + "import_success": "Import erfolgreich" + }, + "no_file_chosen": "Keine Datei ausgewählt", + "note": "Hinweis: Es werden derzeit nur Freunde und Gruppen importiert. Transaktionen werden nicht importiert. Wir arbeiten daran." + }, + "logout": "Abmelden", + "messages": { + "submit_error": "Fehler beim Aktualisieren deines Profils", + "submit_success": "Profil aktualisiert" + }, + "notifications": { + "disable_notification": "Benachrichtigung deaktivieren", + "enable_notification": "Benachrichtigung aktivieren", + "messages": { + "notification_granted": "Du erhältst jetzt Benachrichtigungen" + } + }, + "star_on_github": "Stern auf GitHub vergeben", + "submit_feedback": "Feedback senden", + "submit_feedback_details": { + "placeholder": "Dein Feedback eingeben", + "title": "Feedback senden" + }, + "support_us": "Unterstütze uns", + "title": "Konto", + "write_review": "Eine Bewertung schreiben" + }, + "actions": { + "add_expense": "Ausgabe hinzufügen", + "back": "Zurück", + "cancel": "Abbrechen", + "close": "Schließen", + "confirm": "Bestätigen", + "connect": "Verbinden", + "copy": "Kopieren", + "create": "Erstellen", + "edit_expense": "Ausgabe bearbeiten", + "export": "Exportieren", + "fetch": "Abrufen", + "import": "Importieren", + "invite": "Einladen", + "leave": "Verlassen", + "next": "Weiter", + "reconnect": "Wieder verbinden", + "save": "Speichern", + "settle_up": "Ausgleichen", + "submit": "Speichern" + }, + "actors": { + "all": "Alle", + "friends": "Freunde", + "groups": "Gruppen", + "members": "Mitglieder", + "owner": "Besitzer", + "you": "Du", + "you_accusativus": "Dich", + "you_dativus": "Dir" + }, + "auth": { + "continue_with": "Weiter mit {provider}", + "email_placeholder": "Mailadresse eingeben", + "no_providers_configured": "Keine Authentifizierungsanbieter konfiguriert", + "no_providers_instructions": "Bitte konfigurieren Sie mindestens einen Authentifizierungsanbieter, um sich anzumelden. Siehe die", + "otp_sent": "Wir haben dir eine Mail mit dem Einmalpasswort geschickt. Schau im Posteingang und folge dem Link in der Email um dich anzumelden.", + "send_magic_link": "Sende Magic Link", + "sending": "Senden...", + "setup_instructions": "Docker-Setup-Anleitung", + "trouble_logging_in": "Probleme beim anmelden? Kontakt" + }, + "balances": { + "default_split": { + "cleared": "Standardaufteilung zurückgesetzt", + "configure": "Standardaufteilung", + "updated": "Standardaufteilung aktualisiert" + }, + "user_preferences": { + "title": "Einstellungen" + } + }, + "bank_transactions": { + "choose_bank_provider": "Bankinstitut auswählen", + "no_bank_providers_found": "Keine Bankinstitute gefunden", + "plaid": { + "bank_connected_successfully": "Bankinstitut erfolgreich verknüpft", + "bank_connection_cancelled": "Verbindung zur Bank abgebrochen", + "bank_connection_failed": "Verbindung zur Bank gescheitert" + }, + "search_bank": "Bank suchen", + "select_bank_provider": "Bankinstitut auswählen", + "to_bank": "Zum Bankinstitut" + }, + "currency_conversion": { + "amount_to_receive": "Zu erhaltender Betrag", + "description": "Den Betrag in eine andere Währung umrechnen.", + "exchange_rate": "Wechselkurs", + "fetching_rate": "Kurs abrufen...", + "rate": "Kurs", + "success_toast": "Währungsumrechnung erfolgreich eingestellt", + "title": "Währungsumrechnung" + }, + "errors": { + "amount_required": "Betrag eingeben", + "currency_conversion_error": "Fehler beim Einstellen der Währungsumrechnung", + "currency_conversion_failed": "Währungsumrechnung fehlgeschlagen", + "currency_conversion_malformed": "Die Währungsumrechnungsdaten sind fehlerhaft", + "description_required": "Beschreibung eingeben", + "email_invalid": "Ungültige Mailadresse. Bitte starte den Anmeldevorgang neu.", + "email_required": "Email wird benötigt", + "feedback_min_length": "Feedback sollte mindestens 10 Zeichen lang sein", + "feedback_required": "Feedback ist erforderlich", + "group_balances_malformed": "Die Daten der Gruppenbilanz sind fehlerhaft. Bitte melden Sie das Problem oder versuchen Sie eine Neuberechnung.", + "group_name_update_failed": "Fehler beim Aktualisieren des Gruppennamens", + "group_required": "Gruppe eingeben", + "image_compression_failed": "Bildkomprimierung fehlgeschlagen, versuche Originaldatei hochzuladen", + "import_failed": "Fehler beim Importieren der Datei", + "invalid_cron_expression": "Ungültiger Cron-Ausdruck", + "invalid_currency_code": "Ungültiger Währungscode {code}", + "language_change_failed": "Fehler beim Ändern der Sprache", + "less_than": "Datei sollte kleiner als {size}MB sein", + "name_required": "Name ist erforderlich", + "no_providers": "Fehler beim Abrufen der Authentifizierungsanbieter. Bitte prüfen Sie die Backend-Logs.", + "notification_not_supported": "Benachrichtigungen werden nicht unterstützt", + "otp_invalid": "Ungültiges Einmalpassowrt", + "otp_required": "Einmalpasswort wird benötigt", + "recurrence_delete_failed": "Löschen der Wiederholung fehlgeschlagen", + "recurrence_update_failed": "Aktualisierung der Wiederholung fehlgeschlagen", + "request_error": "Fehler bei der Anfrage der Benachrichtigung", + "saving_expense": "Fehler beim Speichern der Ausgabe", + "setting_update_failed": "Einstellung konnte nicht aktualisiert werden", + "signin_error": "Beim Anmelden ist ein Fehler aufgetreten: {error}", + "signup_disabled": "Neuanmeldung ist in dieser Instanz deaktiviert", + "something_went_wrong": "Etwas ist schiefgelaufen", + "subscribe_error": "Fehler beim Abonnieren der Benachrichtigung", + "unsubscribe_error": "Fehler beim Abbestellen der Benachrichtigung", + "upload_failed": "Datei konnte nicht hochgeladen werden", + "uploading_error": "Fehler beim Hochladen der Datei", + "valid_email": "Gültige E-Mail-Adresse eingeben" + }, + "expense_details": { + "add_expense": "Ausgabe hinzufügen", + "add_expense_details": { + "add_new_expense": "Neue Ausgabe hinzufügen", + "amount_placeholder": "Betrag eingeben", + "description_placeholder": "Beschreibung eingeben", + "pick_a_date": "Datum wählen", + "select_user_or_group": { + "add_to_split_pro": "Nutzer hinzufügen", + "note": "Hinweis: Einladung senden ist momentan wegen Spam deaktiviert", + "only_one_group_time": "Du kannst jeweils nur eine Gruppe haben", + "send_invite": "Einladung an Nutzer senden", + "warning": "Warnung: Versende keine Einladungen an ungültige E-Mail-Adressen. Nutze stattdessen 'Zu Split Pro hinzufügen'. Dein Konto wird bei Missbrauch gesperrt" + }, + "split_type_section": { + "split_equally": "gleichmäßig verteilt", + "split_unequally": "nach Anteilen verteilt", + "types": { + "adjustment": { + "remaining_to_split_equally": "Verbleibend zum gleichen Teilen", + "title": "Anpassung" + }, + "equal": { + "per_person": "pro Person", + "title": "Gleich" + }, + "exact": { + "remaining": "Verbleibend", + "title": "Genau" + }, + "percentage": { + "remaining": "Verbleibend", + "title": "Prozentual" + }, + "share": { + "shares": "Anteil(e)", + "title": "Anteil", + "total_shares": "Gesamtanteile" + } + } + }, + "sponsor_us": "Unterstütze uns", + "upload_file": { + "messages": { + "upload_success": "Datei erfolgreich hochgeladen" + } + }, + "user_input": { + "add_more_friends": "Freunde, Gruppen suchen oder E-Mail hinzufügen", + "cannot_change_group": "Gruppe kann beim Bearbeiten nicht geändert werden", + "remove_group": "Drücke Löschen, um die Gruppe zu entfernen", + "search_friends": "Freunde, Gruppen suchen oder E-Mail hinzufügen" + } + }, + "already_added": "Bereits hinzugefügt", + "balance_list": { + "are_settled_up": "bist ausgeglichen", + "is_settled_up": "ist ausgeglichen", + "press_balance_info": "Drücke auf einen einzelnen Saldo, um die Abrechnung zu starten" + }, + "bank_transactions": "Banktransaktionen", + "clear": "Leeren", + "delete_expense_details": { + "text": "Diese Aktion kann nicht rückgängig gemacht werden. Diese Ausgabe wird dauerhaft gelöscht.", + "title": "Bist du dir absolut sicher?" + }, + "multiple_transactions": { + "add_all": "Alle hinzufügen", + "add_one_by_one": "Einzeln hinzufügen", + "description": "Du hast mehrere Transaktionen ausgewählt. Wähle aus, ob du diese alle zusammen entsprechend der aktuellen Aufteilungseinstellungen hinzufügen oder die Einstellungen einzeln anpassen möchtest.", + "title": "Mehrere Transaktionen hinzufügen" + }, + "no_transactions_yet": "Noch keine Transaktionen", + "pending": "Ausstehend", + "submit_all": "Alles absenden", + "title": "Ausgabe hinzufügen", + "title_mobile": "Hinzufügen" + }, + "group_details": { + "add_members": "Mitglieder hinzufügen", + "copied": "Kopiert", + "create_group": { + "group_name_placeholder": "Name der Gruppe", + "title": "Gruppe erstellen" + }, + "group_info": { + "actions": "Aktionen", + "archive_group": "Archiviere Gruppe", + "archive_group_details": { + "can_archive": "Diese Gruppe wird archiviert und aus deiner Hauptgruppen-Liste ausgeblendet. Du kannst später noch darauf zugreifen, falls nötig.", + "cant_archive": "Gruppe mit ausstehenden Salden kann nicht archiviert werden. Alle Salden müssen zuerst ausgeglichen werden.", + "title": "Bist du sicher, dass du diese Gruppe archivieren möchtest?" + }, + "archived": "Archiviert", + "configure_default_split": "Standardaufteilung bearbeiten", + "default_balance_currency": "Standardwährung für Saldo", + "default_split": "Standardaufteilung", + "delete_group": "Gruppe löschen", + "delete_group_details": { + "can_delete": "Diese Aktion kann nicht rückgängig gemacht werden", + "cant_delete": "Gruppe kann nicht gelöscht werden, bis alle Salden ausgeglichen sind", + "title": "Bist du dir absolut sicher?" + }, + "edit_group": "Gruppe bearbeiten", + "group_created": "Gruppe erstellt", + "leave_group": "Gruppe verlassen", + "leave_group_details": { + "can_leave": "Diese Aktion kann nicht rückgängig gemacht werden", + "cant_leave": "Gruppe kann nicht verlassen werden, bis dein ausstehender Saldo ausgeglichen ist", + "title": "Bist du dir absolut sicher?" + }, + "members": "Mitglieder", + "recalculate_balances": "Salden neu berechnen", + "recalculate_balances_details": { + "description": "Wenn die Salden nicht mit den Ausgaben übereinstimmen, kannst du sie neu berechnen. Das kann je nach Anzahl der Ausgaben etwas dauern. Salden außerhalb der Gruppe werden nicht beeinflusst.", + "title": "Bist du sicher?" + }, + "remove_member_details": { + "can_remove": "Du bist dabei, dieses Mitglied aus der Gruppe zu entfernen", + "cant_remove": "Mitglied kann nicht entfernt werden, bis dessen Saldo ausgeglichen ist", + "title": "Bist du dir absolut sicher?" + }, + "simplify_debts": "Schulden vereinfachen", + "title": "Gruppeninfo" + }, + "group_statistics": { + "first_expense": "Erste Ausgabe", + "title": "Gruppenstatistik", + "total_expenses": "Gesamtausgaben" + }, + "messages": { + "balances_recalculated": "Salden erfolgreich neu berechnet", + "default_balance_currency_cleared": "Standardwährung für Salden zurückgesetzt", + "default_balance_currency_updated": "Standardwährung für Salden aktualisiert", + "default_split_cleared": "Standardaufteilung zurückgesetzt", + "default_split_updated": "Standardaufteilung aktualisiert", + "group_archived": "Gruppe erfolgreich archiviert", + "group_name_updated": "Gruppeninfos aktualisiert" + }, + "no_members": { + "add_members": "Mitglied hinzufügen", + "add_members_details": { + "add_to_split_pro": "Benutzer hinzufügen", + "note": "Hinweis: Das Versenden von E-Mail-Einladungen ist deaktiviert", + "placeholder": "Name oder E-Mail eingeben", + "send_invite": "Einladung senden", + "title": "Mitglied hinzufügen", + "warning": "Warnung: Verwende 'Einladung senden' nicht bei ungültiger E-Mail. Nutze stattdessen 'Benutzer hinzufügen'. Dein Konto wird bei Missbrauch gesperrt" + }, + "invite_link": "Einladungs-Link", + "no_members": "Diese Gruppe hat noch keine Mitglieder." + }, + "tabs": { + "balances": "Salden", + "expenses": "Ausgaben" + }, + "title": "Ausstehende Gruppensalden" + }, + "invite_message": { + "in_splitpro": "in SplitPro", + "join_to": "Tritt bei", + "text": "Tritt der Gruppe bei und du kannst Ausgaben hinzufügen, verwalten und deine Salden verfolgen" + }, + "meta": { + "application_name": "SplitPro", + "description": "Ausgaben mit deinen Freunden kostenlos teilen", + "title": "SplitPro: Teile Ausgaben mit deinen Freunden. Kostenlos" + }, + "navigation": { + "account": "Konto", + "activity": "Aktivität", + "add": "Hinzufügen", + "add_expense": "Ausgabe hinzufügen", + "balances": "Salden", + "groups": "Gruppen", + "recurring": "Wiederkehrend" + }, + "recurrence": { + "cron_expression": "Cron-Ausdruck", + "days_of_month": "Tage des Monats", + "days_of_week": "Wochentage", + "delete_description": "Dadurch wird die Erstellung zukünftiger Ausgaben verhindert. Durch diese Wiederholung erstellte Ausgaben werden nicht gelöscht.", + "delete_title": "Wiederholung löschen", + "derived_delete_warning": "Diese Ausgabe ist Teil einer wiederkehrenden Ausgabe. Nur diese Ausgabe wird gelöscht. Zukünftige wiederkehrende Ausgaben bleiben bestehen.", + "derived_edit_warning": "Diese Ausgabe ist Teil einer wiederkehrenden Ausgabe. Änderungen wirken sich nur auf diese Ausgabe aus.", + "description": "Automatische Wiederholung für diese Ausgabe einrichten.", + "edit_confirmation_title": "Wiederkehrende Ausgaben bearbeiten", + "edit_description": "Dadurch ändert sich der Zeitplan für zukünftige Ausgaben. Bestehende Ausgaben werden nicht geändert.", + "edit_title": "Wiederholung bearbeiten", + "empty": "Noch keine wiederkehrenden Ausgaben", + "expense_for_the_amount_of": "Ausgabe {name} in Höhe von {amount} {currency}", + "last_day": "Letzter Tag", + "months": "Monate", + "never": "Kein Zeitplan festgelegt", + "recurring": "Wiederkehrend", + "schedule_type": { + "custom": "Benutzerdefiniert", + "day": "Täglich", + "month": "Monatlich", + "never": "Nie", + "week": "Wöchentlich", + "year": "Jährlich" + }, + "template_delete_warning": "Dies ist eine Vorlage für wiederkehrende Ausgaben. Durch das Löschen werden alle zukünftigen wiederkehrenden Ausgaben gestoppt.", + "template_edit_warning": "Dies ist eine Vorlage für wiederkehrende Ausgaben. Änderungen gelten für alle zukünftigen wiederkehrenden Ausgaben.", + "time_of_day": "Tageszeit", + "title": "Wiederholung", + "view_recurring_page": "Wiederkehrende Seite anzeigen" + }, + "ui": { + "added_by": "Hinzugefügt von", + "and": "und", + "balance": "Saldo", + "balances": "Salden", + "delete": "Löschen", + "deleted_by": "Gelöscht von", + "edited_by": "Bearbeitet von", + "expense": { + "for": "für", + "from": "von", + "paid_by": "Bezahlt von", + "received_by": "Erhalten von", + "to": "an", + "user": { + "deleted": "hat gelöscht", + "get": "bekommt", + "lent": "hat ausgegeben", + "owe": "schuldet", + "paid": "hat bezahlt", + "pay": "bezahlt", + "received": "hat erhalten" + }, + "you": { + "deleted": "hast gelöscht", + "get": "bekommst", + "lent": "hast ausgelegt", + "owe": "schuldest", + "paid": "hast bezahlt", + "pay": "bezahlst", + "received": "hast erhalten" + } + }, + "expense_details": "Ausgaben Details", + "in_group": "Grupiert", + "no_activity": "Noch keine Aktivitäten", + "not_involved": "Nicht beteiligt", + "not_set": "Nicht festgelegt", + "on": "am", + "or": "oder", + "outstanding_balances": "Ausstehende Salden", + "select_balance": "Guthaben auswählen", + "select_currency": "Währung auswählen", + "settle_up_name": "Ausgleichen", + "settled_up": "Ausgeglichen", + "settlement": "Ausgleich", + "share_text": "Schau dir SplitPro an, eine kostenlose Open-Source-Alternative zu Splitwise", + "show_all_currencies": "Alle Währungen anzeigen", + "today": "Heute", + "total_balance": "Gesamtguthaben" + } +} diff --git a/public/locales/en/common.json b/public/locales/en/common.json new file mode 100644 index 0000000..ee0cab5 --- /dev/null +++ b/public/locales/en/common.json @@ -0,0 +1,545 @@ +{ + "account": { + "change_language": "Change language", + "change_language_details": { + "messages": { + "language_changed": "Language changed successfully" + }, + "no_language_found": "No language found.", + "placeholder": "Select a language", + "title": "Select a language" + }, + "download_app": "Download app", + "download_app_details": { + "download_as_pwa": "You can download SplitPro as a PWA to your home screen.", + "title": "Download app", + "using_android": "If you are using Android, checkout this", + "using_ios": "If you are using iOS, checkout this", + "video": "video" + }, + "download_splitpro_data": "Download SplitPro data", + "default_balance_currency": "Default balance currency", + "edit_name": { + "apply_avatar": "Apply avatar", + "avatar_label": "Profile picture", + "avatar_preview": "Avatar preview", + "placeholder": "Enter name", + "remove_avatar": "Remove avatar", + "select_avatar": "Select picture", + "zoom": "Zoom", + "title": "Edit details" + }, + "follow_on_x": "Follow us on X", + "import_from_splitwise": "Import from Splitwise", + "import_from_splitwise_details": { + "choose_file": "Choose file", + "export_splitwise_data_button": "Export splitwise data", + "follow_to_export_splitwise_data": "Follow this link to export splitwise data", + "messages": { + "import_success": "Import successful" + }, + "no_file_chosen": "No file chosen", + "note": "Note: It currently only supports importing friends and groups. It will not import transactions. We are working on it." + }, + "logout": "Logout", + "messages": { + "submit_error": "Failed to update details", + "submit_success": "Details updated" + }, + "notifications": { + "disable_notification": "Disable notification", + "enable_notification": "Enable notification", + "messages": { + "notification_granted": "You will receive notifications now" + } + }, + "star_on_github": "Star us on GitHub", + "submit_feedback": "Submit feedback", + "submit_feedback_details": { + "placeholder": "Enter your feedback", + "title": "Submit feedback", + "messages": { + "submit_error": "Failed to send feedback", + "submit_success": "Feedback sent" + } + }, + "support_us": "Sponsor us", + "title": "Account", + "write_review": "Write a review", + "debug_info": "Debug info", + "debug_info_details": { + "title": "Debug Information", + "description": "Paste the information below when creating a support request:", + "user_agent": "UserAgent", + "git": "Git", + "version": "Version", + "new_version_available": "A new version is available:", + "copy_failed": "Failed to copy debug info to clipboard", + "send_test_notification": "Send test notification", + "test_notification_sent": "Test notification sent", + "test_notification_failed": "Could not send test notification" + } + }, + "actions": { + "add_expense": "Add expense", + "back": "Back", + "cancel": "Cancel", + "close": "Close", + "copy": "Copy", + "confirm": "Confirm", + "create": "Create", + "edit_expense": "Edit expense", + "export": "Export", + "fetch": "Fetch", + "import": "Import", + "invite": "Invite", + "leave": "Leave", + "next": "Next", + "save": "Save", + "settle_up": "Settle up", + "submit": "Submit", + "reconnect": "Reconnect", + "connect": "Connect", + "remind_later": "Remind me later" + }, + "actors": { + "all": "All", + "friends": "Friends", + "groups": "Groups", + "members": "Members", + "owner": "Owner", + "you": "You", + "you_accusativus": "You", + "you_dativus": "You" + }, + "auth": { + "continue_with": "Continue with {provider}", + "email_placeholder": "Enter your email", + "no_providers_configured": "No authentication providers configured", + "no_providers_instructions": "Please configure at least one authentication provider to sign in. See the", + "otp_sent": "We have sent an email with the OTP. Please check your inbox and click the link in the email to sign in.", + "send_magic_link": "Send magic link", + "sending": "Sending...", + "setup_instructions": "Docker setup instructions", + "trouble_logging_in": "Trouble logging in? Contact" + }, + "currency_conversion": { + "amount_to_receive": "Amount to receive", + "description": "Convert the amount to a different currency.", + "exchange_rate": "Exchange rate", + "fetching_rate": "Fetching rate...", + "rate": "Rate", + "success_toast": "Currency conversion set successfully", + "title": "Currency conversion", + "amount_aria_label": "Amount", + "converted_amount_aria_label": "Converted amount" + }, + "errors": { + "currency_conversion_error": "Error while setting currency conversion", + "email_invalid": "Email is invalid, please try the signin flow again.", + "no_providers": "Error when fetching authentication providers. Please check backend logs.", + "email_required": "Email is required", + "feedback_min_length": "Feedback should be at least 10 characters", + "feedback_required": "Feedback is required", + "add_member_failed": "Failed to add member to the group", + "group_name_update_failed": "Error in updating group name", + "import_failed": "Error importing file", + "invalid_currency_code": "Invalid currency code {code}", + "invalid_split": "Adjust who owes this expense before saving.", + "language_change_failed": "Error changing language", + "less_than": "File should be less than {size}MB", + "image_compression_failed": "Image compression failed, trying to upload original file", + "name_required": "Name is required", + "notification_not_supported": "Notification is not supported", + "otp_invalid": "Invalid OTP", + "otp_required": "OTP is required", + "request_error": "Error requesting notification", + "saving_expense": "Error while saving expense", + "setting_update_failed": "Failed to update setting", + "signin_error": "An error occurred while signing in: {error}", + "signup_disabled": "Signup of new accounts is disabled on this instance", + "something_went_wrong": "Something went wrong", + "subscribe_error": "Cannot subscribe to notification", + "unsubscribe_error": "Error unsubscribing notification", + "upload_failed": "Failed to upload file", + "uploading_error": "Error uploading file", + "valid_email": "Enter valid email", + "group_balances_malformed": "Group balances data is malformed, please report an issue or try recalculating.", + "currency_conversion_malformed": "Currency conversion data is malformed", + "invalid_cron_expression": "Invalid cron expression", + "currency_conversion_failed": "Failed to convert currencies", + "recurrence_delete_failed": "Failed to delete recurrence", + "recurrence_update_failed": "Failed to update recurrence", + "notification_request_failed": "Error requesting notification permission", + "notification_subscribe_failed": "Cannot subscribe to notifications", + "expense_submission_failed": "An unexpected error occurred while submitting the expense.", + "expense_deletion_failed": "An unexpected error occurred while deleting the expense.", + "friend_deletion_failed": "Failed to delete friend", + "signin_failed": "Sign-in failed. Please try again.", + "invite_email_failed": "Failed to send invite email. Check the SMTP configuration." + }, + "bank_transactions": { + "choose_bank_provider": "Choose bank provider", + "select_bank_provider": "Select bank provider", + "search_bank": "Search bank", + "no_bank_providers_found": "No bank providers found", + "to_bank": "to bank", + "plaid": { + "bank_connected_successfully": "Bank connected successfully", + "bank_connection_failed": "Failed to connect to bank", + "bank_connection_cancelled": "Bank connection cancelled" + } + }, + "expense_details": { + "add_expense": "Add expense", + "add_expense_details": { + "add_new_expense": "Add new expense", + "amount_placeholder": "Enter amount", + "description_placeholder": "Enter description", + "pick_a_date": "Pick a date", + "select_user_or_group": { + "add_to_split_pro": "Add to Split Pro", + "note": "Note: sending invite is disabled for now because of spam", + "only_one_group_time": "You can have only one group at a time", + "send_invite": "Send invite to user", + "warning": "Warning: Don't use send invite if it's invalid email. use add to Split Pro instead. Your account will be blocked if this feature is misused", + "empty_image_alt": "No users found" + }, + "split_type_section": { + "direction": { + "no_money_flow": "No one else owes anything", + "owes_payer": "{debtor} owes {payer}", + "owes_you": "{debtor} owes you", + "you_owe": "You owe {payer}" + }, + "split_equally": "split equally", + "split_unequally": "split unequally", + "types": { + "adjustment": { + "remaining_to_split_equally": "Remaining to split equally", + "title": "Adjustment" + }, + "equal": { + "per_person": "per person", + "title": "Equal" + }, + "exact": { + "remaining": "Remaining", + "title": "Exact" + }, + "percentage": { + "remaining": "Remaining", + "title": "Percentage" + }, + "share": { + "shares": "Share(s)", + "title": "Share", + "total_shares": "Total shares" + } + }, + "split_equally_with_count": "split equally among {count, plural, one {# person} other {# people}}" + }, + "sponsor_us": "Sponsor us", + "upload_file": { + "messages": { + "upload_success": "File uploaded successfully" + } + }, + "user_input": { + "add_more_friends": "Search friends, groups or add email", + "cannot_change_group": "Cannot change group while editing", + "remove_group": "Press delete to remove group", + "search_friends": "Search friends, groups or add email" + } + }, + "balance_list": { + "are_settled_up": "are settled up", + "is_settled_up": "is settled up", + "press_balance_info": "Press on individual balance to initiate settlement", + "settled": "{actor, select, you {You are settled up} other {{person} is settled up}}", + "lent": "{actor, select, you {You lent} other {{person} lent}}", + "owes": "{actor, select, you {You owe} other {{person} owes}}" + }, + "delete_expense_details": { + "text": "This action cannot be undone. This will permanently delete your expense.", + "title": "Are you absolutely sure?" + }, + "multiple_transactions": { + "title": "Add multiple transactions", + "description": "You have selected multiple transactions. Pick whether you want them added all together with the current split settings or adjust the settings one by one.", + "add_all": "Add all", + "add_one_by_one": "Add one by one" + }, + "title": "Add expense", + "title_mobile": "Add", + "clear": "Clear", + "bank_transactions": "Bank transactions", + "submit_all": "Submit all", + "pending": "Pending", + "no_transactions_yet": "No transactions yet", + "already_added": "Already added", + "receipt": { + "title": "Expense receipt", + "thumbnail_alt": "Expense receipt thumbnail", + "image_alt": "Expense receipt" + }, + "empty_state_image_alt": "No expenses" + }, + "group_details": { + "add_members": "Add members", + "copied": "Copied", + "create_group": { + "group_name_placeholder": "Group name", + "title": "Create a group" + }, + "group_info": { + "actions": "Actions", + "archive_group": "Archive group", + "configure_default_split": "Configure default split", + "default_split": "Default split", + "default_balance_currency": "Default balance currency", + "edit_group": "Edit group", + "archive_group_details": { + "can_archive": "This group will be archived and hidden from your main groups list. You can still access it later if needed.", + "cant_archive": "Cannot archive group with outstanding balances. All balances must be settled first.", + "title": "Are you sure you want to archive this group?" + }, + "archived": "Archived", + "delete_group": "Delete group", + "delete_group_details": { + "can_delete": "This action cannot be reversed", + "cant_delete": "Can't delete the group until everyone settles up the balance", + "title": "Are you absolutely sure?" + }, + "group_created": "Group created", + "leave_group": "Leave group", + "leave_group_details": { + "can_leave": "This action cannot be reversed", + "cant_leave": "Can't leave the group until your outstanding balance is settled", + "title": "Are you absolutely sure?" + }, + "members": "Members", + "recalculate_balances": "Recalculate balances", + "recalculate_balances_details": { + "description": "If balances do not match expenses, you can recalculate them. Note that it may take some time if the expense count is large. Balances outside the group will not be affected.", + "title": "Are you sure?" + }, + "remove_member_details": { + "can_remove": "You are about to remove this member from the group", + "cant_remove": "Can't remove member until their outstanding balance is settled", + "title": "Are you absolutely sure?" + }, + "simplify_debts": "Simplify debts", + "title": "Group info" + }, + "group_statistics": { + "first_expense": "First expense", + "title": "Group statistics", + "total_expenses": "Total expenses" + }, + "messages": { + "default_split_cleared": "Default split cleared", + "default_split_updated": "Default split updated", + "default_balance_currency_cleared": "Default balance currency cleared", + "default_balance_currency_updated": "Default balance currency updated", + "balances_recalculated": "Balances recalculated successfully", + "group_archived": "Group archived successfully", + "group_name_updated": "Updated group details" + }, + "no_members": { + "add_members": "Add members", + "add_members_details": { + "add_to_split_pro": "Add to Split Pro", + "note": "Note: sending email invites is disabled", + "placeholder": "Enter name or email", + "send_invite": "Send invite to user", + "title": "Add members", + "warning": "Warning: Don't use send invite if it's invalid email. use add to Split Pro instead. Your account will be blocked if this feature is misused" + }, + "invite_link": "Invite link", + "no_members": "No members in the group yet." + }, + "tabs": { + "balances": "Balances", + "expenses": "Expenses" + }, + "title": "Group outstanding balances" + }, + "invite_message": { + "in_splitpro": "in Splitpro", + "join_to": "Join to", + "text": "Join to the group and you can add, manage expenses, and track your balances" + }, + "meta": { + "application_name": "SplitPro", + "description": "Split Expenses with your friends for free", + "title": "SplitPro: Split Expenses with your friends for free" + }, + "balances": { + "user_preferences": { + "title": "Preferences" + }, + "default_split": { + "cleared": "Default split cleared", + "configure": "Default split", + "updated": "Default split updated" + } + }, + "navigation": { + "account": "Account", + "activity": "Activity", + "add": "Add", + "add_expense": "Add Expense", + "recurring": "Recurring", + "balances": "Balances", + "groups": "Groups" + }, + "recurrence": { + "title": "Recurrence", + "description": "Set up automatic recurrence for this expense.", + "cron_expression": "Cron Expression", + "time_of_day": "Time of Day", + "days_of_week": "Days of Week", + "days_of_month": "Days of Month", + "months": "Months", + "last_day": "Last day", + "never": "No schedule configured", + "empty": "No recurring expenses yet", + "recurring": "Recurring", + "expense_for_the_amount_of": "Expense {name} for the amount of {amount} {currency}", + "delete_title": "Delete Recurrence", + "delete_description": "This will stop future expense creation. Existing expenses created by this recurrence will not be deleted.", + "edit_title": "Edit Recurrence", + "edit_description": "This will change the schedule for future expenses. Existing expenses will not be modified.", + "schedule_type": { + "never": "Never", + "custom": "Custom", + "day": "Daily", + "month": "Monthly", + "week": "Weekly", + "year": "Yearly" + }, + "edit_confirmation_title": "Edit Recurring Expense", + "template_edit_warning": "This is a recurring expense template. Changes will apply to all future recurring expenses.", + "derived_edit_warning": "This expense is part of a recurrence. Changes will only affect this expense.", + "template_delete_warning": "This is a recurring expense template. Deleting it will stop all future recurring expenses.", + "derived_delete_warning": "This expense is part of a recurrence. Only this expense will be deleted. Future recurring expenses will continue.", + "view_recurring_page": "View Recurring page", + "toggle_options": "Toggle recurring expense options" + }, + "ui": { + "added_by": "Added by", + "and": "and", + "balance": "balance", + "balances": "balances", + "delete": "Delete", + "deleted_by": "Deleted by", + "edited_by": "Edited by", + "expense": { + "for": "for", + "from": "from", + "paid_by": "Paid by", + "received_by": "Received by", + "to": "to", + "user": { + "deleted": "deleted", + "get": "gets", + "lent": "lent", + "owe": "owes", + "paid": "paid", + "pay": "pays", + "received": "received" + }, + "you": { + "deleted": "deleted", + "get": "get", + "lent": "lent", + "owe": "owe", + "paid": "paid", + "pay": "pay", + "received": "received" + }, + "payer": { + "current_user": "You" + }, + "recipient": { + "current_user": "You" + }, + "statements": { + "you_lent": "You lent", + "you_owe": "You owe", + "you_lent_amount": "You lent {amount}", + "you_owe_amount": "You owe {amount}", + "you_pay_user": "You pay {user}", + "user_pays_you": "{user} pays you", + "user_pays_user": "{payer} pays {receiver}" + } + }, + "expense_details": "Expense details", + "no_activity": "No activities yet", + "not_involved": "Not involved", + "not_set": "Not set", + "on": "on", + "or": "or", + "outstanding_balances": "Outstanding balances", + "total_balance": "Total balance", + "select_currency": "Select currency", + "select_balance": "Select balance", + "settle_up_name": "Settle up", + "settled_up": "Settled up", + "settlement": "Settlement", + "share_text": "Check out SplitPro. It's an open source free alternative for Splitwise", + "show_all_currencies": "Show all currencies", + "today": "Today", + "in_group": "In group", + "transfer": "{senderRole, select, you {You pay {receiver}} other {{receiverRole, select, you {{sender} pays you} other {{sender} pays {receiver}}}}}" + }, + "friend": { + "delete_confirmation": { + "title": "Are you absolutely sure?", + "description": "Do you really want to continue?", + "outstanding_balance": "You cannot remove a friend with outstanding balances. Settle up first." + } + }, + "activity": { + "you_paid_for_expense": "You paid {amount} for {expense}", + "you_received_for_expense": "You received {amount} for {expense}", + "user_paid_for_expense": "{user} paid {amount} for {expense}", + "user_received_for_expense": "{user} received {amount} for {expense}", + "user_deleted_expense": "{actor, select, you {You deleted {expense}} other {{user} deleted {expense}}}", + "you_paid_amount": "You paid {amount}", + "you_received_amount": "You received {amount}" + }, + "balance_summary": { + "friend_owes_you": "{friend} owes you {amount}", + "you_owe_friend": "You owe {friend} {amount}", + "more": "{count, plural, one {# more balance} other {# more balances}}" + }, + "balance_list": { + "pays": "{payerRole, select, you {You pay {amount} to {receiver}} other {{payer} pays {amount} to {receiverRole, select, you {you} other {{receiver}}}}}", + "gets": "{receiverRole, select, you {You get {amount} from {payer}} other {{receiver} gets {amount} from {payerRole, select, you {you} other {{payer}}}}}" + }, + "expense_participant": { + "gets": "{actor, select, you { get } other { gets }}", + "owes": "{actor, select, you { owe } other { owes }}", + "paid": " paid ", + "received": " received " + }, + "expense_metadata": { + "edited_by": "{actor, select, you {Edited by you on {date}} other {Edited by {user} on {date}}}", + "deleted_by": "{actor, select, you {Deleted by you on {date}} other {Deleted by {user} on {date}}}", + "added_by": "{actor, select, you {Added by you on {date}} other {Added by {user} on {date}}}" + }, + "expense_list": { + "user_paid": "{actor, select, you {You paid {amount}} other {{user} paid {amount}}}", + "user_received": "{actor, select, you {You received {amount}} other {{user} received {amount}}}", + "settlement": "{payerRole, select, you {You paid {amount} to {receiver}} other {{receiverRole, select, you {{payer} paid you {amount}} other {{payer} paid {amount} to {receiver}}}}}", + "conversion_for_users": "Currency conversion for {payerRole, select, you {you} other {{payer}}} and {receiverRole, select, you {you} other {{receiver}}}" + }, + "notifications": { + "enable_title": "Enable notifications", + "enable_description": "Don't miss important events. Subscribe to receive notifications when expenses are added or updated.", + "permission_granted": "You will receive notifications now", + "subscribe": "Subscribe" + } +} diff --git a/public/locales/es-AR/common.json b/public/locales/es-AR/common.json new file mode 100644 index 0000000..4479273 --- /dev/null +++ b/public/locales/es-AR/common.json @@ -0,0 +1,421 @@ +{ + "account": { + "change_language": "Cambiar idioma", + "change_language_details": { + "messages": { + "language_changed": "Idioma cambiado exitosamente" + }, + "placeholder": "Seleccionar un idioma", + "title": "Seleccionar un idioma" + }, + "debug_info": "Info de depuración", + "debug_info_details": { + "copy_failed": "Error al copiar información de depuración al portapapeles", + "description": "Pegá la info de abajo cuando crees un pedido de soporte:", + "git": "Git", + "new_version_available": "Hay una nueva versión disponible:", + "title": "Info de depuración", + "user_agent": "UserAgent", + "version": "Versión" + }, + "download_app": "Descargar aplicación", + "download_app_details": { + "download_as_pwa": "Podés descargar SplitPro como una PWA a tu pantalla de inicio.", + "title": "Descargar aplicación", + "using_android": "Si usás Android, revisá este", + "using_ios": "Si usás iOS, revisá este", + "video": "video" + }, + "download_splitpro_data": "Descargar datos de SplitPro", + "edit_name": { + "placeholder": "Ingresá el nombre", + "title": "Editar nombre" + }, + "follow_on_x": "Seguinos en X", + "import_from_splitwise": "Importar desde Splitwise", + "import_from_splitwise_details": { + "choose_file": "Elegir archivo", + "export_splitwise_data_button": "Exportar datos de Splitwise", + "follow_to_export_splitwise_data": "Seguí este enlace para exportar datos de Splitwise", + "messages": { + "import_success": "Importación exitosa" + }, + "no_file_chosen": "Ningún archivo seleccionado", + "note": "Nota: Actualmente solo soporta la importación de amigos y grupos. No importará transacciones. Estamos trabajando en ello." + }, + "logout": "Cerrar sesión", + "messages": { + "submit_error": "Error al enviar los comentarios", + "submit_success": "Comentarios enviados" + }, + "notifications": { + "disable_notification": "Deshabilitar notificaciones", + "enable_notification": "Habilitar notificaciones", + "messages": { + "notification_granted": "Ahora recibirás notificaciones" + } + }, + "star_on_github": "Danos una estrella en GitHub", + "submit_feedback": "Enviar comentarios", + "submit_feedback_details": { + "placeholder": "Ingresá tus comentarios", + "title": "Enviar comentarios" + }, + "support_us": "Patrocinanos", + "title": "Cuenta", + "write_review": "Escribir una reseña" + }, + "actions": { + "add_expense": "Agregar gasto", + "back": "Volver", + "cancel": "Cancelar", + "close": "Cerrar", + "confirm": "Confirmar", + "connect": "Conectar", + "copy": "Copiar", + "create": "Crear", + "edit_expense": "Editar gasto", + "export": "Exportar", + "fetch": "Obtener", + "import": "Importar", + "invite": "Invitar", + "leave": "Salir", + "next": "Siguiente", + "reconnect": "Reconectar", + "save": "Guardar", + "settle_up": "Liquidar", + "submit": "Enviar" + }, + "actors": { + "all": "Todos", + "friends": "Amigos", + "groups": "Grupos", + "members": "Miembros", + "owner": "Propietario", + "you": "Vos", + "you_accusativus": "A vos", + "you_dativus": "A vos" + }, + "auth": { + "continue_with": "Continuar con {provider}", + "email_placeholder": "Ingresá tu correo electrónico", + "no_providers_configured": "No hay proveedores de autenticación configurados", + "no_providers_instructions": "Por favor, configurá al menos un proveedor de autenticación para iniciar sesión. Consultá las", + "otp_sent": "Hemos enviado un correo electrónico con el OTP. Por favor, revisá tu bandeja de entrada y hacé clic en el enlace del correo electrónico para iniciar sesión.", + "send_magic_link": "Enviar enlace mágico", + "sending": "Enviando...", + "setup_instructions": "instrucciones de configuración de Docker", + "trouble_logging_in": "¿Problemas para iniciar sesión? Contactá a" + }, + "bank_transactions": { + "choose_bank_provider": "Elegí proveedor bancario", + "no_bank_providers_found": "No se encontraron proveedores bancarios", + "plaid": { + "bank_connected_successfully": "Banco conectado exitosamente", + "bank_connection_cancelled": "Conexión con Banco cancelada", + "bank_connection_failed": "Fallo al conectar al banco" + }, + "search_bank": "Buscar banco", + "select_bank_provider": "Seleccioná proveedor bancario", + "to_bank": "al banco" + }, + "currency_conversion": { + "amount_to_receive": "Monto a recibir", + "description": "Convertir el monto a una moneda diferente.", + "exchange_rate": "Tipo de cambio", + "fetching_rate": "Obteniendo tipo...", + "rate": "Tipo", + "success_toast": "Conversión de moneda configurada exitosamente", + "title": "Conversión de moneda" + }, + "errors": { + "amount_required": "La cantidad es requerida", + "currency_conversion_error": "Error al configurar la conversión de moneda", + "currency_conversion_failed": "No se pudo convertir las monedas", + "currency_conversion_malformed": "Los datos de conversión de moneda están mal formados", + "email_invalid": "El correo electrónico no es válido, por favor, intentá el proceso de inicio de sesión de nuevo.", + "email_required": "El correo electrónico es obligatorio", + "feedback_min_length": "Los comentarios deben tener al menos 10 caracteres", + "feedback_required": "Los comentarios son obligatorios", + "group_balances_malformed": "Los datos de balance del grupo están mal formados. Por favor, reportá el problema o probá recalcular.", + "group_name_update_failed": "Error al actualizar el nombre del grupo", + "import_failed": "Error al importar el archivo", + "invalid_cron_expression": "Expresión cron inválida", + "invalid_currency_code": "Código de moneda inválido {code}", + "language_change_failed": "Error al cambiar el idioma", + "less_than": "El archivo debe ser menor que", + "name_required": "El nombre es requerido", + "no_providers": "Error al obtener los proveedores de autenticación. Por favor, revisá los logs del backend.", + "notification_not_supported": "Las notificaciones no son compatibles", + "otp_invalid": "OTP inválido", + "otp_required": "El OTP es obligatorio", + "recurrence_delete_failed": "No se pudo eliminar la recurrencia", + "recurrence_update_failed": "No se pudo actualizar la recurrencia", + "request_error": "Error al solicitar notificaciones", + "saving_expense": "Error al guardar el gasto", + "setting_update_failed": "Error al actualizar la configuración", + "signin_error": "Ocurrió un error al iniciar sesión: {error}", + "signup_disabled": "El registro de nuevas cuentas está deshabilitado en esta instancia", + "something_went_wrong": "Algo salió mal", + "subscribe_error": "No se puede suscribir a las notificaciones", + "unsubscribe_error": "Error al cancelar la suscripción a las notificaciones", + "upload_failed": "Error al subir el archivo", + "upload_file_less_than": "El archivo debe ser menor de", + "uploading_error": "Error al subir el archivo", + "valid_email": "Ingresá un correo electrónico válido" + }, + "expense_details": { + "add_expense": "Agregar gasto", + "add_expense_details": { + "add_new_expense": "Agregar nuevo gasto", + "amount_placeholder": "Ingresá la cantidad", + "description_placeholder": "Ingresá una descripción", + "pick_a_date": "Seleccionar una fecha", + "select_user_or_group": { + "add_to_split_pro": "Agregar a Split Pro", + "note": "Nota: el envío de invitaciones está deshabilitado por ahora debido al spam", + "only_one_group_time": "Solo podés tener un grupo a la vez", + "send_invite": "Enviar invitación al usuario", + "warning": "Advertencia: No uses enviar invitación si el correo electrónico no es válido. Usá agregar a Split Pro en su lugar. Tu cuenta será bloqueada si se abusa de esta función" + }, + "split_type_section": { + "split_equally": "dividir por igual", + "split_unequally": "dividir de forma desigual", + "types": { + "adjustment": { + "remaining_to_split_equally": "Restante para dividir por igual", + "title": "Ajuste" + }, + "equal": { + "per_person": "por persona", + "title": "Igual" + }, + "exact": { + "remaining": "Restante", + "title": "Exacto" + }, + "percentage": { + "remaining": "Restante", + "title": "Porcentaje" + }, + "share": { + "shares": "Cuota(s)", + "title": "Cuota", + "total_shares": "Total de cuotas" + } + } + }, + "sponsor_us": "Patrocinanos", + "upload_file": { + "messages": { + "upload_success": "Archivo subido exitosamente" + } + }, + "user_input": { + "add_more_friends": "Buscar amigos, grupos o agregar correo electrónico", + "cannot_change_group": "No se puede cambiar el grupo mientras se edita", + "remove_group": "Presioná eliminar para quitar el grupo", + "search_friends": "Buscar amigos, grupos o agregar correo electrónico" + } + }, + "already_added": "Ya agregado", + "balance_list": { + "are_settled_up": "están liquidados", + "is_settled_up": "está liquidado", + "press_balance_info": "Presioná en el saldo individual para iniciar la liquidación" + }, + "bank_transactions": "Transacciones bancarias", + "clear": "Limpiar", + "delete_expense_details": { + "text": "Esta acción no se puede deshacer. Esto eliminará permanentemente tu gasto.", + "title": "¿Estás absolutamente seguro?" + }, + "multiple_transactions": { + "add_all": "Agregar todas", + "add_one_by_one": "Agregar una por una", + "description": "Seleccionaste múltiples transacciones. Elegí si querés agregarlas todas juntas con la configuración de división actual o ajustar la configuración una por una.", + "title": "Agregar múltiples transacciones" + }, + "no_transactions_yet": "Sin transacciones aún", + "pending": "Pendiente", + "submit_all": "Enviar todo", + "title": "Agregar gasto", + "title_mobile": "Agregar" + }, + "group_details": { + "add_members": "Agregar miembros", + "copied": "Copiado", + "create_group": { + "group_name_placeholder": "Nombre de Grupo", + "title": "Crear un grupo" + }, + "group_info": { + "actions": "Acciones", + "archive_group": "Archivar grupo", + "archive_group_details": { + "can_archive": "Este grupo será archivado y ocultado de tu lista principal de grupos. Podrás acceder a él más tarde si es necesario.", + "cant_archive": "No se puede archivar el grupo con saldos pendientes. Todos los saldos deben liquidarse primero.", + "title": "¿Estás seguro de que querés archivar este grupo?" + }, + "archived": "Archivado", + "delete_group": "Eliminar grupo", + "delete_group_details": { + "can_delete": "Esta acción no se puede revertir", + "cant_delete": "No se puede eliminar el grupo hasta que todos liquiden el saldo", + "title": "¿Estás absolutamente seguro?" + }, + "group_created": "Grupo creado", + "leave_group": "Abandonar grupo", + "leave_group_details": { + "can_leave": "Esta acción no se puede revertir", + "cant_leave": "No se puede abandonar el grupo hasta que tu saldo pendiente esté liquidado", + "title": "¿Estás absolutamente seguro?" + }, + "members": "Miembros", + "recalculate_balances": "Recalcular saldos", + "recalculate_balances_details": { + "description": "Si los saldos no coinciden con los gastos, podés recalculalos. Tené en cuenta que puede llevar algún tiempo si la cantidad de gastos es grande. Los saldos fuera del grupo no se verán afectados.", + "title": "¿Estás seguro?" + }, + "remove_member_details": { + "can_remove": "Estás a punto de eliminar a este miembro del grupo", + "cant_remove": "No se puede eliminar al miembro hasta que su saldo pendiente esté liquidado", + "title": "¿Estás absolutamente seguro?" + }, + "simplify_debts": "Simplificar deudas", + "title": "Información del grupo" + }, + "group_statistics": { + "first_expense": "Primer gasto", + "title": "Estadísticas del grupo", + "total_expenses": "Gastos totales" + }, + "messages": { + "balances_recalculated": "Saldos recalculados exitosamente", + "group_archived": "Grupo archivado exitosamente", + "group_name_updated": "Nombre del grupo actualizado" + }, + "no_members": { + "add_members": "Agregar miembros", + "add_members_details": { + "add_to_split_pro": "Agregar a Split Pro", + "note": "Nota: el envío de invitaciones está deshabilitado por ahora debido al spam", + "placeholder": "Ingresá nombre o correo electrónico", + "send_invite": "Enviar invitación al usuario", + "title": "Agregar miembros", + "warning": "Advertencia: No uses enviar invitación si el correo electrónico no es válido. Usá agregar a Split Pro en su lugar. Tu cuenta será bloqueada si se abusa de esta función" + }, + "copied": "Copiado", + "invite_link": "Compartir enlace de invitación", + "no_members": "Aún no hay miembros en el grupo." + }, + "tabs": { + "balances": "Saldos", + "expenses": "Gastos" + }, + "title": "Saldos pendientes del grupo" + }, + "invite_message": { + "in_splitpro": "en Splitpro", + "join_to": "Unite a", + "text": "Unite al grupo y podrás agregar, gestionar gastos y seguir tus saldos" + }, + "meta": { + "application_name": "SplitPro", + "description": "Dividí gastos con tus amigos gratis", + "title": "SplitPro: Dividí gastos con tus amigos gratis" + }, + "navigation": { + "account": "Cuenta", + "activity": "Actividad", + "add": "Agregar", + "add_expense": "Agregar Gasto", + "app_name": "SplitPro", + "balances": "Saldos", + "groups": "Grupos", + "recurring": "Recurrente" + }, + "recurrence": { + "cron_expression": "Expresión Cron", + "days_of_month": "Días del mes", + "days_of_week": "Días de la semana", + "delete_description": "Esto detendrá la creación de gastos futuros. Los gastos existentes creados por esta recurrencia no se eliminarán.", + "delete_title": "Eliminar recurrencia", + "derived_delete_warning": "Este gasto forma parte de una recurrencia. Solo se eliminará este gasto. Los gastos recurrentes futuros continuarán.", + "derived_edit_warning": "Este gasto forma parte de una recurrencia. Los cambios solo afectarán a este gasto.", + "description": "Configurá una recurrencia automática para este gasto.", + "edit_confirmation_title": "Editar gasto recurrente", + "edit_description": "Esto cambiará el cronograma de los gastos futuros. Los gastos existentes no se modificarán.", + "edit_title": "Editar recurrencia", + "empty": "Sin gastos recurrentes aún", + "expense_for_the_amount_of": "Gasto {name} por el monto de {amount} {currency}", + "last_day": "Último día", + "months": "Meses", + "never": "Sin agenda configurada", + "recurring": "Recurrente", + "schedule_type": { + "custom": "Personalizado", + "day": "Diariamente", + "month": "Mensualmente", + "never": "Nunca", + "week": "Semanalmente", + "year": "Anualmente" + }, + "template_delete_warning": "Esta es una plantilla de gasto recurrente. Al eliminarla se detendrán todos los gastos recurrentes futuros.", + "template_edit_warning": "Esta es una plantilla de gasto recurrente. Los cambios se aplicarán a todos los gastos recurrentes futuros.", + "time_of_day": "Hora del día", + "title": "Recurrencia", + "view_recurring_page": "Ver página de recurrentes" + }, + "ui": { + "added_by": "Agregado por", + "and": "y", + "balance": "saldo", + "balances": "saldos", + "delete": "Eliminar", + "deleted_by": "Eliminado por", + "edited_by": "Editado por", + "expense": { + "for": "para", + "from": "de", + "paid_by": "Pagado por", + "received_by": "Recibido por", + "to": "a", + "user": { + "deleted": "eliminó", + "get": "recibe", + "lent": "prestó", + "owe": "debe", + "paid": "pagó", + "pay": "paga", + "received": "recibió" + }, + "you": { + "deleted": "eliminaste", + "get": "recibís", + "lent": "prestaste", + "owe": "debés", + "paid": "pagaste", + "pay": "pagar", + "received": "recibiste" + } + }, + "expense_details": "Detalles del gasto", + "in_group": "En grupo", + "no_activity": "Aún no hay actividades", + "not_involved": "No involucrado", + "not_set": "No establecido", + "on": "el", + "or": "o", + "outstanding_balances": "Saldos pendientes", + "select_balance": "Seleccionar balance", + "select_currency": "Seleccionar moneda", + "settle_up_name": "Liquidar", + "settled_up": "Liquidado", + "settlement": "Liquidación", + "share_text": "Echale un vistazo a SplitPro. Es una alternativa gratuita de código abierto a Splitwise", + "show_all_currencies": "Mostrar todas las monedas", + "today": "Hoy", + "total_balance": "Balance total" + } +} diff --git a/public/locales/es-MX/common.json b/public/locales/es-MX/common.json new file mode 100644 index 0000000..a29da7d --- /dev/null +++ b/public/locales/es-MX/common.json @@ -0,0 +1,420 @@ +{ + "account": { + "change_language": "Cambiar idioma", + "change_language_details": { + "messages": { + "language_changed": "Idioma cambiado exitosamente" + }, + "placeholder": "Seleccionar un idioma", + "title": "Seleccionar un idioma" + }, + "debug_info": "Info de depuración", + "debug_info_details": { + "copy_failed": "No se pudo copiar la información de depuración al portapapeles", + "description": "Pega la información abajo cuando hagas una solicitud de soporte:", + "git": "Git", + "new_version_available": "Nueva versión disponible:", + "title": "Información de depuración", + "user_agent": "UserAgent", + "version": "Versión" + }, + "download_app": "Descargar aplicación", + "download_app_details": { + "download_as_pwa": "Puedes descargar SplitPro como una PWA a tu pantalla de inicio.", + "title": "Descargar aplicación", + "using_android": "Si usas Android, revisa este", + "using_ios": "Si usas iOS, revisa este", + "video": "video" + }, + "download_splitpro_data": "Descargar datos de SplitPro", + "edit_name": { + "placeholder": "Introduce el nombre", + "title": "Editar nombre" + }, + "follow_on_x": "Síguenos en X", + "import_from_splitwise": "Importar desde Splitwise", + "import_from_splitwise_details": { + "choose_file": "Elegir archivo", + "export_splitwise_data_button": "Exportar datos de Splitwise", + "follow_to_export_splitwise_data": "Sigue este enlace para exportar datos de Splitwise", + "messages": { + "import_success": "Importación exitosa" + }, + "no_file_chosen": "Ningún archivo seleccionado", + "note": "Nota: Actualmente solo soporta la importación de amigos y grupos. No importará transacciones. Estamos trabajando en ello." + }, + "logout": "Cerrar sesión", + "messages": { + "submit_error": "No se pudo enviar el comentario", + "submit_success": "Comentario enviado" + }, + "notifications": { + "disable_notification": "Deshabilitar notificaciones", + "enable_notification": "Habilitar notificaciones", + "messages": { + "notification_granted": "Ahora recibirás notificaciones" + } + }, + "star_on_github": "Danos una estrella en GitHub", + "submit_feedback": "Enviar comentarios", + "submit_feedback_details": { + "placeholder": "Introduce tus comentarios", + "title": "Enviar comentarios" + }, + "support_us": "Patrocínanos", + "title": "Cuenta", + "write_review": "Escribir una reseña" + }, + "actions": { + "add_expense": "Añadir gasto", + "back": "Volver", + "cancel": "Cancelar", + "close": "Cerrar", + "confirm": "Confirmar", + "connect": "Conectar", + "copy": "Copiar", + "create": "Crear", + "edit_expense": "Editar gasto", + "export": "Exportar", + "fetch": "Obtener", + "import": "Importar", + "invite": "Invitar", + "leave": "Salir", + "next": "", + "reconnect": "Reconectar", + "save": "Guardar", + "settle_up": "Liquidar", + "submit": "Enviar" + }, + "actors": { + "all": "Todos", + "friends": "Amigos", + "groups": "Grupos", + "members": "Miembros", + "owner": "Propietario", + "you": "Tú", + "you_accusativus": "A ti", + "you_dativus": "A ti" + }, + "auth": { + "continue_with": "Continuar con {provider}", + "email_placeholder": "Introduce tu correo electrónico", + "no_providers_configured": "No hay proveedores de autenticación configurados", + "no_providers_instructions": "Por favor, configure al menos un proveedor de autenticación para iniciar sesión. Consulte las", + "otp_sent": "Hemos enviado un correo electrónico con el OTP. Por favor, revisa tu bandeja de entrada y haz clic en el enlace del correo electrónico para iniciar sesión.", + "send_magic_link": "Enviar enlace mágico", + "sending": "Enviando...", + "setup_instructions": "instrucciones de configuración de Docker", + "trouble_logging_in": "¿Problemas para iniciar sesión? Contacta a" + }, + "bank_transactions": { + "choose_bank_provider": "Elige proveedor bancario", + "no_bank_providers_found": "No se encontraron proveedores bancarios", + "plaid": { + "bank_connected_successfully": "Banco conectado exitosamente", + "bank_connection_cancelled": "Conexión bancaria cancelada", + "bank_connection_failed": "No se pudo conectar banco" + }, + "search_bank": "Buscar banco", + "select_bank_provider": "Selecciona proveedor bancario", + "to_bank": "al banco" + }, + "currency_conversion": { + "amount_to_receive": "Monto a recibir", + "description": "Convierte el monto a una moneda diferente.", + "exchange_rate": "Tipo de cambio", + "fetching_rate": "Obteniendo tipo...", + "rate": "Tipo", + "success_toast": "Conversión de moneda establecida exitosamente", + "title": "Conversión de moneda" + }, + "errors": { + "currency_conversion_error": "Error al establecer la conversión de moneda", + "currency_conversion_failed": "Error al convertir monedas", + "currency_conversion_malformed": "El formato de la conversión de moneda es incorrecto", + "email_invalid": "El correo electrónico no es válido, por favor, intenta el proceso de inicio de sesión de nuevo.", + "email_required": "El correo electrónico es obligatorio", + "feedback_min_length": "Los comentarios deben tener al menos 10 caracteres", + "feedback_required": "Los comentarios son obligatorios", + "group_balances_malformed": "El formato de los datos de los saldos de grupo es incorrecto. Informe del problema o intente recalcular.", + "group_name_update_failed": "Error al actualizar el nombre del grupo", + "import_failed": "Error al importar el archivo", + "invalid_cron_expression": "Expresión cron inválida", + "invalid_currency_code": "Código de moneda inválido {code}", + "language_change_failed": "Error al cambiar el idioma", + "less_than": "El archivo debe ser menor que", + "name_required": "El nombre es requerido", + "no_providers": "Error al obtener los proveedores de autenticación. Compruebe los logs del servidor.", + "notification_not_supported": "Las notificaciones no son compatibles", + "otp_invalid": "OTP inválido", + "otp_required": "El OTP es obligatorio", + "recurrence_delete_failed": "", + "recurrence_update_failed": "", + "request_error": "Error al solicitar notificaciones", + "saving_expense": "Error al guardar el gasto", + "setting_update_failed": "Error al actualizar la configuración", + "signin_error": "Ocurrió un error al iniciar sesión: {error}", + "signup_disabled": "El registro de nuevas cuentas está deshabilitado en esta instancia", + "something_went_wrong": "Algo salió mal", + "submit_error": "Error al enviar los comentarios", + "subscribe_error": "No se puede suscribir a las notificaciones", + "unsubscribe_error": "Error al cancelar la suscripción a las notificaciones", + "upload_failed": "Error al subir el archivo", + "uploading_error": "Error al subir archivo", + "valid_email": "Introduce un correo electrónico válido" + }, + "expense_details": { + "add_expense": "Añadir gasto", + "add_expense_details": { + "add_new_expense": "Añadir nuevo gasto", + "amount_placeholder": "Introduce la cantidad", + "description_placeholder": "Introduce una descripción", + "pick_a_date": "Seleccionar una fecha", + "select_user_or_group": { + "add_to_split_pro": "Añadir a Split Pro", + "note": "Nota: el envío de invitaciones está deshabilitado por ahora debido al spam", + "only_one_group_time": "Solo puedes tener un grupo a la vez", + "send_invite": "Enviar invitación al usuario", + "warning": "Advertencia: No uses enviar invitación si el correo electrónico no es válido. Usa añadir a Split Pro en su lugar. Tu cuenta será bloqueada si se abusa de esta función" + }, + "split_type_section": { + "split_equally": "dividir por igual", + "split_unequally": "dividir de forma desigual", + "types": { + "adjustment": { + "remaining_to_split_equally": "Restante para dividir por igual", + "title": "Ajuste" + }, + "equal": { + "per_person": "por persona", + "title": "Igual" + }, + "exact": { + "remaining": "Restante", + "title": "Exacto" + }, + "percentage": { + "remaining": "Restante", + "title": "Porcentaje" + }, + "share": { + "shares": "Cuota(s)", + "title": "Cuota", + "total_shares": "Total de cuotas" + } + } + }, + "sponsor_us": "Patrocínanos", + "upload_file": { + "messages": { + "upload_success": "Archivo subido exitosamente" + } + }, + "user_input": { + "add_more_friends": "Buscar amigos, grupos o añadir correo electrónico", + "cannot_change_group": "No se puede cambiar el grupo mientras se edita", + "remove_group": "Pulsa eliminar para quitar el grupo", + "search_friends": "Buscar amigos, grupos o añadir correo electrónico" + } + }, + "already_added": "Ya agregado", + "balance_list": { + "are_settled_up": "están liquidados", + "is_settled_up": "está liquidado", + "press_balance_info": "Pulsa en el saldo individual para iniciar la liquidación" + }, + "bank_transactions": "Transacciones bancarias", + "clear": "Limpiar", + "delete_expense_details": { + "text": "Esta acción no se puede deshacer. Esto eliminará permanentemente tu gasto.", + "title": "¿Estás absolutamente seguro?" + }, + "multiple_transactions": { + "add_all": "Añadir todas", + "add_one_by_one": "Añadir una por una", + "description": "Has seleccionado varias transacciones. Elije si quieres añadirlas usando el ajuste de división actual o si quieres ajustar cada una por separado.", + "title": "Añadir multiples transacciones" + }, + "no_transactions_yet": "Aún sin transacciones", + "pending": "Pendiente", + "submit_all": "Enviar todo", + "title": "Añadir gasto", + "title_mobile": "Añadir" + }, + "group_details": { + "add_members": "Añadir miembros", + "copied": "Copiado", + "create_group": { + "group_name_placeholder": "Nombre del grupo", + "title": "Crear un grupo" + }, + "group_info": { + "actions": "Acciones", + "archive_group": "Archivar grupo", + "archive_group_details": { + "can_archive": "Este grupo será archivado y ocultado de tu lista principal de grupos. Podrás acceder a él más tarde si es necesario.", + "cant_archive": "No se puede archivar el grupo con saldos pendientes. Todos los saldos deben liquidarse primero.", + "title": "¿Estás seguro de que quieres archivar este grupo?" + }, + "archived": "Archivado", + "delete_group": "Eliminar grupo", + "delete_group_details": { + "can_delete": "Esta acción no se puede revertir", + "cant_delete": "No se puede eliminar el grupo hasta que todos liquiden el saldo", + "title": "¿Estás absolutamente seguro?" + }, + "group_created": "Grupo creado", + "leave_group": "Abandonar grupo", + "leave_group_details": { + "can_leave": "Esta acción no se puede revertir", + "cant_leave": "No se puede abandonar el grupo hasta que tu saldo pendiente esté liquidado", + "title": "¿Estás absolutamente seguro?" + }, + "members": "Miembros", + "recalculate_balances": "Recalcular saldos", + "recalculate_balances_details": { + "description": "Si los saldos no coinciden con los gastos, puedes recalculalos. Ten en cuenta que puede llevar algún tiempo si la cantidad de gastos es grande. Los saldos fuera del grupo no se verán afectados.", + "title": "¿Estás seguro?" + }, + "remove_member_details": { + "can_remove": "Estás a punto de eliminar a este miembro del grupo", + "cant_remove": "No se puede eliminar al miembro hasta que su saldo pendiente esté liquidado", + "title": "¿Estás absolutamente seguro?" + }, + "simplify_debts": "Simplificar deudas", + "title": "Información del grupo" + }, + "group_statistics": { + "first_expense": "Primer gasto", + "title": "Estadísticas del grupo", + "total_expenses": "Gastos totales" + }, + "messages": { + "balances_recalculated": "Saldos recalculados exitosamente", + "group_archived": "Grupo archivado exitosamente", + "group_name_updated": "Nombre del grupo actualizado" + }, + "no_members": { + "add_members": "Añadir miembros", + "add_members_details": { + "add_to_split_pro": "Añadir a Split Pro", + "note": "Nota: el envío de invitaciones está deshabilitado por ahora debido al spam", + "placeholder": "Introduce nombre o correo electrónico", + "send_invite": "Enviar invitación al usuario", + "title": "Añadir miembros", + "warning": "Advertencia: No uses enviar invitación si el correo electrónico no es válido. Usa añadir a Split Pro en su lugar. Tu cuenta será bloqueada si se abusa de esta función" + }, + "copied": "Copiado", + "invite_link": "Compartir enlace de invitación", + "no_members": "Aún no hay miembros en el grupo." + }, + "tabs": { + "balances": "Saldos", + "expenses": "Gastos" + }, + "title": "Saldos pendientes del grupo" + }, + "invite_message": { + "in_splitpro": "en Splitpro", + "join_to": "Únete a", + "text": "Únete al grupo y podrás añadir, gestionar gastos y seguir tus saldos" + }, + "meta": { + "application_name": "SplitPro", + "description": "Divide gastos con tus amigos gratis", + "title": "SplitPro: Divide gastos con tus amigos gratis" + }, + "navigation": { + "account": "Cuenta", + "activity": "Actividad", + "add": "Añadir", + "add_expense": "Añadir Gasto", + "app_name": "SplitPro", + "balances": "Saldos", + "groups": "Grupos", + "recurring": "Recurrente" + }, + "recurrence": { + "cron_expression": "Expresión Cron", + "days_of_month": "Día del mes", + "days_of_week": "Día de la semana", + "delete_description": "", + "delete_title": "", + "derived_delete_warning": "", + "derived_edit_warning": "", + "description": "Configurar una recurrencia automática para este gasto.", + "edit_confirmation_title": "", + "edit_description": "", + "edit_title": "", + "empty": "No hay gastos recurrentes aún", + "expense_for_the_amount_of": "Gasto {name} por la cantidad de {amount} {currency}", + "last_day": "", + "months": "Meses", + "never": "No hay horario configurado", + "recurring": "Recurrente", + "schedule_type": { + "custom": "Personalizado", + "day": "Diario", + "month": "Mensual", + "never": "Nunca", + "week": "Semanal", + "year": "Anual" + }, + "template_delete_warning": "", + "template_edit_warning": "", + "time_of_day": "Hora del día", + "title": "Recurrencia", + "view_recurring_page": "" + }, + "ui": { + "added_by": "Añadido por", + "and": "y", + "balance": "saldo", + "balances": "saldos", + "delete": "Eliminar", + "deleted_by": "Eliminado por", + "edited_by": "Editado por", + "expense": { + "for": "para", + "from": "de", + "paid_by": "Pagado por", + "received_by": "Recibido por", + "to": "a", + "user": { + "deleted": "eliminó", + "get": "recibe", + "lent": "prestó", + "owe": "debe", + "paid": "pagó", + "pay": "paga", + "received": "recibió" + }, + "you": { + "deleted": "eliminaste", + "get": "recibes", + "lent": "prestaste", + "owe": "debes", + "paid": "pagaste", + "pay": "pagar", + "received": "recibiste" + } + }, + "expense_details": "Detalles del gasto", + "in_group": "En grupo", + "no_activity": "Aún no hay actividades", + "not_involved": "No involucrado", + "not_set": "No establecido", + "on": "el", + "or": "o", + "outstanding_balances": "Saldos pendientes", + "select_balance": "", + "select_currency": "Seleccionar moneda", + "settle_up_name": "Liquidar", + "settled_up": "Liquidado", + "settlement": "Liquidación", + "share_text": "Echa un vistazo a SplitPro. Es una alternativa gratuita de código abierto a Splitwise", + "show_all_currencies": "Mostrar todas las monedas", + "today": "Hoy", + "total_balance": "Saldo total" + } +} diff --git a/public/locales/es/common.json b/public/locales/es/common.json new file mode 100644 index 0000000..4cba9fb --- /dev/null +++ b/public/locales/es/common.json @@ -0,0 +1,417 @@ +{ + "account": { + "change_language": "Modificar idioma", + "change_language_details": { + "messages": { + "language_changed": "Idioma modificado correctamente" + }, + "placeholder": "Seleccionar idioma", + "title": "Seleccionar idioma" + }, + "debug_info": "Información de depuración", + "debug_info_details": { + "copy_failed": "No se pudo copiar la información de depuración al portapapeles", + "description": "Copie la siguiente información cuando cree una solicitud de soporte:", + "git": "Git", + "new_version_available": "Hay una nueva versión disponible:", + "title": "Información de Depuración", + "user_agent": "UserAgent", + "version": "Versión" + }, + "download_app": "Descargar aplicación", + "download_app_details": { + "download_as_pwa": "Puedes descargar SplitPro como una PWA a tu pantalla de inicio.", + "title": "Descargar aplicación", + "using_android": "Si estás usando Android, comprueba lo siguiente", + "using_ios": "Si estás usando iOS, comprueba lo siguiente", + "video": "video" + }, + "download_splitpro_data": "Descargar datos de SplitPro", + "edit_name": { + "placeholder": "Nombre", + "title": "Editar nombre" + }, + "follow_on_x": "Síguenos en X", + "import_from_splitwise": "Importar Splitwise", + "import_from_splitwise_details": { + "choose_file": "Elegir archivo", + "export_splitwise_data_button": "Exportar datos de Splitwise", + "follow_to_export_splitwise_data": "Use este enlace para exportar los datos de Splitwise", + "messages": { + "import_success": "Importación completada" + }, + "no_file_chosen": "Ningún archivo seleccionado", + "note": "Nota: Actualmente solo está soportado importar amigos y grupos. La importación de transacciones aún está en desarrollo." + }, + "logout": "Cerrar sesión", + "messages": { + "submit_error": "Error al enviar comentario", + "submit_success": "Comentario enviado" + }, + "notifications": { + "disable_notification": "Desactivar notificaciones", + "enable_notification": "Activar notificaciones", + "messages": { + "notification_granted": "Ahora recibirás notificaciones" + } + }, + "star_on_github": "Danos una estrella en GitHub", + "submit_feedback": "Enviar comentario", + "submit_feedback_details": { + "placeholder": "Introduce tus comentarios", + "title": "Enviar comentarios" + }, + "support_us": "Patrocínanos", + "title": "Cuenta", + "write_review": "Escribir una reseña" + }, + "actions": { + "add_expense": "Añadir gasto", + "back": "Volver", + "cancel": "Cancelar", + "close": "Cerrar", + "confirm": "Confirmar", + "connect": "Conectar", + "copy": "Copiar", + "create": "Crear", + "edit_expense": "Editar gasto", + "export": "Exportar", + "fetch": "Obtener", + "import": "Importar", + "invite": "Invitar", + "leave": "Salir", + "next": "Siguiente", + "reconnect": "Reconectar", + "save": "Guardar", + "settle_up": "Liquidar deuda", + "submit": "Aplicar" + }, + "actors": { + "all": "Todos", + "friends": "Amigos", + "groups": "Grupos", + "members": "Miembros", + "owner": "Propietario", + "you": "Tú", + "you_accusativus": "A ti", + "you_dativus": "A ti" + }, + "auth": { + "continue_with": "Continuar con {provider}", + "email_placeholder": "Introduce tu correo electrónico", + "no_providers_configured": "No hay proveedores de autenticación configurados", + "no_providers_instructions": "Configure al menos un provedor de autenticación para iniciar sesión. Consulte las", + "otp_sent": "Hemos enviado un correo electrónico con el OTP. Por favor, revisa tu bandeja de entrada y haz clic en el enlace del correo electrónico para iniciar sesión.", + "send_magic_link": "Envair enlace mágico", + "sending": "Enviando...", + "setup_instructions": "intrucciones de configuración de Docker", + "trouble_logging_in": "¿Problemas para iniciar sesión? Contacta a" + }, + "bank_transactions": { + "choose_bank_provider": "Elija proveedor bancario", + "no_bank_providers_found": "No se encontraron proveedores bancarios", + "plaid": { + "bank_connected_successfully": "Banco conectado exitosamente", + "bank_connection_cancelled": "Conexión bancaria cancelada", + "bank_connection_failed": "No se pudo conectar al banco" + }, + "search_bank": "Buscar banco", + "select_bank_provider": "Seleccionar el proveedor bancario", + "to_bank": "al banco" + }, + "currency_conversion": { + "amount_to_receive": "Cantidad a recibir", + "description": "Convertir la cantidad a una moneda diferente.", + "exchange_rate": "Tipo de cambio", + "fetching_rate": "Obteniendo tipo de cambio...", + "rate": "Tipo", + "success_toast": "Conversión de moneda establecida exitosamente", + "title": "Conversión de moneda" + }, + "errors": { + "currency_conversion_error": "Error al establecer la conversión de moneda", + "currency_conversion_failed": "Error al convertir monedas", + "currency_conversion_malformed": "El formato de la conversión de moneda es incorrecto", + "email_invalid": "El correo electrónico no es válido, por favor, intenta el proceso de inicio de sesión de nuevo.", + "email_required": "El correo electrónico es obligatorio", + "feedback_min_length": "Los comentarios deben tener al menos 10 caracteres", + "feedback_required": "Los comentarios son obligatorios", + "group_balances_malformed": "El formato de los datos de los saldos de grupo es incorrecto. Informe del problema o intente recalcular.", + "group_name_update_failed": "Error al actualizar el nombre del grupo", + "import_failed": "Error al importar el archivo", + "invalid_cron_expression": "Expresión \"cron\" inválida", + "invalid_currency_code": "Código de moneda inválido {code}", + "language_change_failed": "Error al cambiar de idioma", + "less_than": "El archivo debe ser menor que", + "name_required": "El nombre es obligatorio", + "no_providers": "Error al obtener los proveedores de autenticación. Compruebe los logs del servidor.", + "notification_not_supported": "Las notificaciones no están soportadas", + "otp_invalid": "OTP inválido", + "otp_required": "El OTP es obligatorio", + "recurrence_delete_failed": "No fue posible eliminar la recurrencia", + "recurrence_update_failed": "No fue posible actualizar la recurrencia", + "request_error": "Error al solicitar notificaciones", + "saving_expense": "Error al guardar el gasto", + "setting_update_failed": "Error al actualizar los ajustes", + "signin_error": "Error al iniciar sesión: {error}", + "signup_disabled": "El registro de nuevas cuentas está deshabilitado", + "something_went_wrong": "Algo salió mal", + "subscribe_error": "No se pudo suscribir a la notificación", + "unsubscribe_error": "Error al cancelar la suscripción a la notificación", + "upload_failed": "Error al subir el archivo", + "uploading_error": "Error al subir el fichero", + "valid_email": "Introduce un correo electrónico válido" + }, + "expense_details": { + "add_expense": "Añadir gasto", + "add_expense_details": { + "add_new_expense": "Añadir nuevo gasto", + "amount_placeholder": "Cantidad", + "description_placeholder": "Descripción", + "pick_a_date": "Fecha", + "select_user_or_group": { + "add_to_split_pro": "Añadir a SplitPro", + "note": "Nota: el envío de invitaciones está deshabilitado por ahora debido al spam", + "only_one_group_time": "Solo puedes tener un grupo a la vez", + "send_invite": "Enviar invitación", + "warning": "Advertencia: No uses enviar invitación si el correo electrónico no es válido. Usa añadir a SplitPro en su lugar. Tu cuenta será bloqueada si se abusa de esta función" + }, + "split_type_section": { + "split_equally": "dividir por igual", + "split_unequally": "dividir de forma desigual", + "types": { + "adjustment": { + "remaining_to_split_equally": "Dividir por igual la cantidad restante", + "title": "Ajuste" + }, + "equal": { + "per_person": "por persona", + "title": "Igual" + }, + "exact": { + "remaining": "Restante", + "title": "Exacto" + }, + "percentage": { + "remaining": "Restante", + "title": "Porcentaje" + }, + "share": { + "shares": "Cuota(s)", + "title": "Cuota", + "total_shares": "Total de cuotas" + } + } + }, + "sponsor_us": "Patrocinanos", + "upload_file": { + "messages": { + "upload_success": "Archivo subido exitosamente" + } + }, + "user_input": { + "add_more_friends": "Buscar amigos, grupos o añadir correo electrónico", + "cannot_change_group": "No se puede cambiar el grupo mientras se edita", + "remove_group": "Pulsa eliminar para quitar el grupo", + "search_friends": "Buscar amigos, grupos o añadir correo electrónico" + } + }, + "already_added": "Ya se añadió", + "balance_list": { + "are_settled_up": "están liquidados", + "is_settled_up": "está liquidado", + "press_balance_info": "Pulsa en el saldo individual para iniciar la liquidación de deuda" + }, + "bank_transactions": "Transacciones bancarias", + "clear": "Limpiar", + "delete_expense_details": { + "text": "Esta acción no se puede deshacer. Esto eliminará permanentemente tu gasto.", + "title": "¿Estás seguro?" + }, + "multiple_transactions": { + "add_all": "Añadir todas", + "add_one_by_one": "Añadir una por una", + "description": "Has seleccionado varias transacciones. Elije si quieres añadirlas usando el ajuste de división actual o si quieres ajustar cada una por separado.", + "title": "Añadir multiples transacciones" + }, + "no_transactions_yet": "Sin transacciones", + "pending": "Pendiente", + "submit_all": "Enviar todo", + "title": "Añadir gasto", + "title_mobile": "Añadir" + }, + "group_details": { + "add_members": "Añadir miembros", + "copied": "Copiado", + "create_group": { + "group_name_placeholder": "Nombre del grupo", + "title": "Crear un grupo" + }, + "group_info": { + "actions": "Acciones", + "archive_group": "Archivar grupo", + "archive_group_details": { + "can_archive": "Este grupo será archivado y ocultado de tu lista principal de grupos. Podrás acceder a él más tarde si es necesario.", + "cant_archive": "No se puede archivar el grupo con saldos pendientes. Todos los saldos deben liquidarse primero.", + "title": "¿Seguro que quieres archivar este grupo?" + }, + "archived": "Archivado", + "delete_group": "Eliminar grupo", + "delete_group_details": { + "can_delete": "Esta acción no puede deshacerse", + "cant_delete": "No se puede eliminar el grupo hasta que todos liquiden el saldo", + "title": "¿Estás seguro?" + }, + "group_created": "Grupo creado", + "leave_group": "Abandonar grupo", + "leave_group_details": { + "can_leave": "Esta acción no se puede deshacer", + "cant_leave": "No se puede abandonar el grupo hasta que tu saldo pendiente esté liquidado", + "title": "¿Estás seguro?" + }, + "members": "Miembros", + "recalculate_balances": "Recalcular saldos", + "recalculate_balances_details": { + "description": "Si los saldos no coinciden con los gastos, puedes recalculalos. Ten en cuenta que puede llevar algún tiempo si la cantidad de gastos es grande. Los saldos fuera del grupo no se verán afectados.", + "title": "¿Estás seguro?" + }, + "remove_member_details": { + "can_remove": "Estás a punto de eliminar a este miembro del grupo", + "cant_remove": "No se puede eliminar al miembro hasta que su saldo pendiente esté liquidado", + "title": "¿Estás absolutamente seguro?" + }, + "simplify_debts": "Simplificar deudas", + "title": "Información del grupo" + }, + "group_statistics": { + "first_expense": "Primer gasto", + "title": "Estadísticas del grupo", + "total_expenses": "Gastos totales" + }, + "messages": { + "balances_recalculated": "Saldos recalculados", + "group_archived": "Grupo archivado", + "group_name_updated": "Nombre del grupo actualizado" + }, + "no_members": { + "add_members": "Añadir miembros", + "add_members_details": { + "add_to_split_pro": "Añadir a SplitPro", + "note": "Nota: el envío de invitaciones está deshabilitado", + "placeholder": "Nombre o correo electrónico", + "send_invite": "Enviar invitación", + "title": "Añadir miembros", + "warning": "Advertencia: No uses enviar invitación si el correo electrónico no es válido. Usa añadir a SplitPro en su lugar. Tu cuenta será bloqueada si se abusa de esta función" + }, + "invite_link": "Invitar miembros", + "no_members": "Aún no hay miembros en el grupo." + }, + "tabs": { + "balances": "Saldos", + "expenses": "Gastos" + }, + "title": "Saldos pendientes del grupo" + }, + "invite_message": { + "in_splitpro": "en SlipPro", + "join_to": "Únete a", + "text": "Únete al grupo y podrás añadir, gestionar gastos y seguir tus saldos" + }, + "meta": { + "application_name": "SplitPro", + "description": "Divide gastos con tus amigos gratis", + "title": "SplitPro: Divide gastos con tus amigos gratis" + }, + "navigation": { + "account": "Cuenta", + "activity": "Actividad", + "add": "Añadir", + "add_expense": "Añadir Gasto", + "balances": "Saldos", + "groups": "Grupos", + "recurring": "Recurrente" + }, + "recurrence": { + "cron_expression": "Expresión \"Cron\"", + "days_of_month": "Días del Mes", + "days_of_week": "Días de la Semana", + "delete_description": "Esto detendrá futuras creaciones de gastos. Los gastos existentes creados por esta recurrencia no serán eliminados.", + "delete_title": "Eliminar Recurrencia", + "derived_delete_warning": "Este gasto es parte de una recurrencia. Solamente este gasto será eliminado. Futuros gastos recurrentes continuarán.", + "derived_edit_warning": "Este gasto es parte de una recurrencia. Cambios solo afectarán este gasto.", + "description": "Configurar recurrencia para este gasto.", + "edit_confirmation_title": "Editar Gasto Recurrente", + "edit_description": "Esto modificará la programación de futuros gastos. Los gastos existentes no serán modificados.", + "edit_title": "Editar Recurrencia", + "empty": "Sin gastos recurrentes", + "expense_for_the_amount_of": "Gasto {name} por la cantidad de {amount} {currency}", + "last_day": "Último día", + "months": "Meses", + "never": "Sin recurrencia", + "recurring": "Recurrente", + "schedule_type": { + "custom": "Personalizado", + "day": "Diariamente", + "month": "Mensualmente", + "never": "Nunca", + "week": "Semanalmente", + "year": "Anualmente" + }, + "template_delete_warning": "Esto es una plantilla de un gasto recurrente. Eliminarlo detendrá todos los gastos recurrentes futuros.", + "template_edit_warning": "Esto es una plantilla de un gasto recurrente. Cambios serán aplicados a todos los gastos recurrentes futuros.", + "time_of_day": "Hora del Día", + "title": "Recurrencia", + "view_recurring_page": "Ver Página de Recurrencia" + }, + "ui": { + "added_by": "Añadido por", + "and": "y", + "balance": "saldo", + "balances": "saldos", + "delete": "Eliminar", + "deleted_by": "Eliminado por", + "edited_by": "Editado por", + "expense": { + "for": "para", + "from": "de", + "paid_by": "Pagado por", + "received_by": "Recibido por", + "to": "a", + "user": { + "deleted": "eliminó", + "get": "recibe", + "lent": "prestó", + "owe": "debe", + "paid": "pagó", + "pay": "paga", + "received": "recibió" + }, + "you": { + "deleted": "eliminaste", + "get": "recibes", + "lent": "prestaste", + "owe": "debes", + "paid": "pagaste", + "pay": "pagar", + "received": "recibiste" + } + }, + "expense_details": "Detalles del gasto", + "in_group": "En grupo", + "no_activity": "Sin actividad", + "not_involved": "No involucrado", + "not_set": "No establecido", + "on": "el", + "or": "o", + "outstanding_balances": "Saldos pendientes", + "select_balance": "Seleccionar balance", + "select_currency": "Seleccionar moneda", + "settle_up_name": "Liquidar deuda", + "settled_up": "Deuda liquidada", + "settlement": "Liquidación", + "share_text": "Echa un vistazo a SplitPro. Una alternativa gratuita de código abierto a Splitwise", + "show_all_currencies": "Mostrar todas las monedas", + "today": "Hoy", + "total_balance": "Saldo total" + } +} diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json new file mode 100644 index 0000000..d415f40 --- /dev/null +++ b/public/locales/fr/common.json @@ -0,0 +1,455 @@ +{ + "account": { + "change_language": "Changer de langue", + "change_language_details": { + "messages": { + "language_changed": "La langue a été changée avec succès" + }, + "no_language_found": "Aucune langue trouvée.", + "placeholder": "Choisir une langue", + "title": "Choisir une langue" + }, + "debug_info": "Info de débug", + "debug_info_details": { + "copy_failed": "Échec de la copie des infos de débug", + "description": "Collez les informations suivantes lorsque que vous faites une demande au support :", + "git": "Git", + "new_version_available": "Une nouvelle version est disponible :", + "send_test_notification": "Envoyer une notification de test", + "test_notification_failed": "Impossible d'envoyer une notification de test", + "test_notification_sent": "Notification de test envoyée", + "title": "Informations de débogage", + "user_agent": "UserAgent", + "version": "Version" + }, + "default_balance_currency": "Monnaie par défaut des soldes", + "download_app": "Télécharger l'app", + "download_app_details": { + "download_as_pwa": "Tu peux télécharger SplitPro en tant que PWA (Aplication Web Progressive) sur ton écran d'accueil.", + "title": "Télécharger l'app", + "using_android": "Pour Android, regarder cette", + "using_ios": "Pour iOS, regarder cette", + "video": "vidéo" + }, + "download_splitpro_data": "Télécharger les données de SplitPro", + "edit_name": { + "apply_avatar": "Enregistrer l'avatar", + "avatar_label": "Image de profil", + "avatar_preview": "Aperçu de l'avatar", + "placeholder": "Choisis ton pseudo", + "remove_avatar": "Supprimer l'avatar", + "select_avatar": "Choisir une image", + "title": "Modifier ton profil", + "zoom": "Zoom" + }, + "follow_on_x": "Nous suivre sur X", + "import_from_splitwise": "Importer depuis Splitwise", + "import_from_splitwise_details": { + "choose_file": "Choisir un fichier", + "export_splitwise_data_button": "Exporter les données Splitwise", + "follow_to_export_splitwise_data": "Exporter les données de Splitwise via ce lien", + "messages": { + "import_success": "L'import a bien fonctionné" + }, + "no_file_chosen": "Aucun fichier choisi", + "note": "Note : l'import ne fonctionne actuellement que pour les amis et les groupes, mais pas pour les transactions. On y travaille !" + }, + "logout": "Déconnexion", + "messages": { + "submit_error": "Une erreur est survenue lors de la mise à jour de tes infos de profil", + "submit_success": "Profil enregistré" + }, + "notifications": { + "disable_notification": "Désactiver les notifications", + "enable_notification": "Activer les notifications", + "messages": { + "notification_granted": "Les notifications sont désormais activées" + } + }, + "star_on_github": "Soutenir sur GitHub", + "submit_feedback": "Faire un feedback", + "submit_feedback_details": { + "placeholder": "Faire des retours sur l'appli", + "title": "Faire un feedback" + }, + "support_us": "Faire un don", + "title": "Compte", + "write_review": "Écrire un avis" + }, + "actions": { + "add_expense": "Nouvelle dépense", + "back": "Retour", + "cancel": "Annuler", + "close": "Fermer", + "confirm": "Confirmer", + "connect": "Se connecter", + "copy": "Copier", + "create": "Créer", + "edit_expense": "Éditer la dépense", + "export": "Exporter", + "fetch": "Récupérer", + "import": "Importer", + "invite": "Inviter", + "leave": "Quitter", + "next": "Suivant", + "reconnect": "Se reconnecter", + "save": "Enregistrer", + "settle_up": "Rembourser", + "submit": "Valider" + }, + "actors": { + "all": "Toustes", + "friends": "Amis", + "groups": "Groupes", + "members": "Membres", + "owner": "Gestionnaire", + "you": "Tu", + "you_accusativus": "Toi", + "you_dativus": "Toi" + }, + "auth": { + "continue_with": "Continuer avec {provider}", + "email_placeholder": "Ton adresse mail", + "no_providers_configured": "Aucun fournisseur d'authentification configuré", + "no_providers_instructions": "Veuillez configurer au moins un fournisseur d'authentification pour vous connecter. Voir les", + "otp_sent": "Nous t'avons envoyé un mail avec un code OTP. Vérifie ta boîte de réception et clique sur le lien dans le mail pour te connecter.", + "send_magic_link": "Envoyer le lien de connexion", + "sending": "Envoi en cours…", + "setup_instructions": "instructions de configuration Docker", + "trouble_logging_in": "Un problème pour te connecter ? Contact" + }, + "balances": { + "default_split": { + "cleared": "Méthode de répartition par défaut réinitialisée", + "configure": "Méthode de répartition par défaut", + "updated": "Méthode de partage par défaut mise à jour" + }, + "user_preferences": { + "title": "Préférences" + } + }, + "bank_transactions": { + "choose_bank_provider": "Choix de la banque", + "no_bank_providers_found": "Aucune banque trouvée", + "plaid": { + "bank_connected_successfully": "Banque connectée avec succès", + "bank_connection_cancelled": "La connexion avec la banque a été annulée", + "bank_connection_failed": "Échec de la connexion avec la banque" + }, + "search_bank": "Rechercher une banque", + "select_bank_provider": "Sélectionner une banque", + "to_bank": "à la banque" + }, + "currency_conversion": { + "amount_to_receive": "Montant à recevoir", + "description": "Convertir le montant vers une autre devise.", + "exchange_rate": "Taux de change", + "fetching_rate": "Récupération du taux de change…", + "rate": "Taux", + "success_toast": "La conversion monétaire a bien été enregistrée", + "title": "Conversion monétaire" + }, + "errors": { + "add_member_failed": "L'ajout d'un membre au groupe a échoué", + "currency_conversion_error": "Une erreur est survenue lors de l'enregistrement de la conversion monétaire", + "currency_conversion_failed": "Échec de la conversion des devises", + "currency_conversion_malformed": "Les données de conversion de devise sont corrompues", + "email_invalid": "Cette adresse mail est invalide, merci de recommencer le processus de connexion.", + "email_required": "L'adresse mail est requise", + "feedback_min_length": "Le texte doit faire au moins 10 caractères", + "feedback_required": "Fournis des informations", + "group_balances_malformed": "Les données des soldes de groupe sont erronées, merci d'essayer de relancer leur calcul ou de reporter une erreur sinon.", + "group_name_update_failed": "Une erreur est survenue lors de la mise à jour du nom du groupe", + "image_compression_failed": "Échec de compression de l'image, tentative d'envoi de l'image originale", + "import_failed": "Une erreur est survenue lors de l'import du fichier", + "invalid_cron_expression": "Expression cron invalide", + "invalid_currency_code": "Le code de devise {code} est invalide", + "invalid_split": "Indique qui a payé cette dépense avant d'enregistrer.", + "language_change_failed": "Le changement de langage a échoué", + "less_than": "Le poids du fichier doit être inférieur à {size}Mo", + "name_required": "Un nom est requis", + "no_providers": "Une erreur est survenue lors du chargement des fournisseurs d'authentification. Vérifiez les logs du backend sur le serveur.", + "notification_not_supported": "Notification non supportée", + "otp_invalid": "Code OTP invalide", + "otp_required": "Le code OTP est requis", + "recurrence_delete_failed": "Une erreur est survenue lors de la suppression de la récurrence", + "recurrence_update_failed": "Une erreur est survenue lors de la mise à jour de la récurrence", + "request_error": "Une erreur est survenue lors du chargement des notifications", + "saving_expense": "Un erreur est survenue lors de l'enregistrement de la dépense", + "setting_update_failed": "Une erreur est survenue lors de la mise à jour des paramètres", + "signin_error": "Une erreur est survenue lors de la connexion : {error}", + "signup_disabled": "L'inscription de nouveaux comptes est désactivée sur cette instance", + "something_went_wrong": "Une erreur est survenue", + "subscribe_error": "Une erreur est survenue lors de l'abonnement aux notifications", + "unsubscribe_error": "Une erreur est survenue lors du désabonnement des notifications", + "upload_failed": "Échec de l'envoi du fichier", + "uploading_error": "Une erreur est survenue lors de l'envoi du fichier", + "valid_email": "Entre une adresse mail valide" + }, + "expense_details": { + "add_expense": "Nouvelle dépense", + "add_expense_details": { + "add_new_expense": "Ajouter une dépense", + "amount_placeholder": "Montant", + "description_placeholder": "Description de la dépense", + "pick_a_date": "Choisir une date", + "select_user_or_group": { + "add_to_split_pro": "Inviter sur SplitPro", + "note": "Note : l'envoi de mails d'invitation est désactivé pour le moment pour éviter le spam", + "only_one_group_time": "Une dépense ne peut concerner qu'un seul groupe à la fois", + "send_invite": "Envoyer une invitation", + "warning": "Attention : N'envoyez pas d'invitation à des adresses mail non enregistrées ici, utilisez plutôt la fonction « inviter sur SplitPro ». Votre compte sera bloqué si vous utilisez mal cette fonctionnalité" + }, + "split_type_section": { + "direction": { + "no_money_flow": "Personne d'autre ne doit d'argent", + "owes_payer": "{debtor} doit cette somme à {payer}", + "owes_you": "{debtor} te doit", + "you_owe": "Ta dette envers {payer}" + }, + "split_equally": "partagé à parts égales", + "split_unequally": "partagé inégalement", + "types": { + "adjustment": { + "remaining_to_split_equally": "Montant partagé à parts égales :", + "title": "Ajustement manuel" + }, + "equal": { + "per_person": "par personne", + "title": "Parts égales" + }, + "exact": { + "remaining": "Montant restant", + "title": "Montants" + }, + "percentage": { + "remaining": "Pourcentage restant :", + "title": "Pourcentages" + }, + "share": { + "shares": "Part(s)", + "title": "Par parts", + "total_shares": "Nombre total de parts :" + } + } + }, + "sponsor_us": "Nous faire un don", + "upload_file": { + "messages": { + "upload_success": "Fichier envoyé avec succès" + } + }, + "user_input": { + "add_more_friends": "Rechercher des amis, des groupes ou ajouter une adresse mail", + "cannot_change_group": "Impossible de changer de groupe en cours d'édition", + "remove_group": "Presse « Retour Arrière » pour supprimer le groupe", + "search_friends": "Rechercher des amis, des groupes ou ajouter une adresse mail" + } + }, + "already_added": "Déjà ajouté", + "balance_list": { + "are_settled_up": "es quitte", + "is_settled_up": "est quitte", + "press_balance_info": "Clique sur un solde pour effectuer un règlement" + }, + "bank_transactions": "Transactions bancaires", + "clear": "Effacer", + "delete_expense_details": { + "text": "Cette action n'est pas réversible. Ceci supprimera définitivement ta dépense.", + "title": "Confirmer la suppression définitive ?" + }, + "multiple_transactions": { + "add_all": "Tout ajouter", + "add_one_by_one": "Ajuster par transaction", + "description": "Pour les transactions multiples, il est possible de les ajouter toutes d'un coup avec les paramètres de partage actuels, ou bien d'ajuster ces paramètres pour chacune des transactions.", + "title": "Ajouter des transactions multiples" + }, + "no_transactions_yet": "Aucune transaction pour l'instant", + "pending": "En attente", + "submit_all": "Tout enregistrer", + "title": "Nouvelle dépense", + "title_mobile": "Ajouter" + }, + "group_details": { + "add_members": "Ajouter des membres", + "copied": "Lien copié", + "create_group": { + "group_name_placeholder": "Nom du groupe", + "title": "Créer un groupe" + }, + "group_info": { + "actions": "Actions", + "archive_group": "Archiver le groupe", + "archive_group_details": { + "can_archive": "Ce groupe sera archivé et caché de ta liste de groupes principale. Tu pourras toujours y accéder ultérieurement si besoin.", + "cant_archive": "Impossible d'archiver le groupe tant qu'il y a des soldes en cours. Tous les soldes doivent être préalablement réglés.", + "title": "Es-tu sûr de vouloir archiver ce groupe ?" + }, + "archived": "Archivé", + "configure_default_split": "Choisir la méthode de répartition par défaut", + "default_balance_currency": "Monnaie par défaut des soldes", + "default_split": "Méthode de répartition par défaut", + "delete_group": "Supprimer le groupe", + "delete_group_details": { + "can_delete": "Cette action est irréversible", + "cant_delete": "Impossible de supprimer le groupe tant que tous les soldes ne sont pas réglés", + "title": "Confirmer la suppression définitive du groupe ?" + }, + "edit_group": "Éditer le groupe", + "group_created": "Création du groupe :", + "leave_group": "Quitter ce groupe", + "leave_group_details": { + "can_leave": "Cette action est irréversible", + "cant_leave": "Impossible de quitter le groupe tant que tes soldes avec ses membres ne sont pas réglés", + "title": "Es-tu sûr de quitter ce groupe ?" + }, + "members": "Membres", + "recalculate_balances": "Recalculer les soldes", + "recalculate_balances_details": { + "description": "Si les soldes ne correspondent pas aux dépenses, il est possible de les recalculer. Cela peut prendre un moment s'il y a beaucoup de dépenses. Les soldes en dehors de ce groupe ne seront pas affectés.", + "title": "Confirmer le re-calcul des soldes  ?" + }, + "remove_member_details": { + "can_remove": "Tu es sur le point de retirer ce membre du groupe", + "cant_remove": "Impossible de supprimer un membre tant que leur solde en cours n'est pas réglé", + "title": "Confirmer le retrait de ce membre du groupe ?" + }, + "simplify_debts": "Simplifier les dettes", + "title": "Informations du groupe" + }, + "group_statistics": { + "first_expense": "Première dépense", + "title": "Statistiques du groupe", + "total_expenses": "Total des dépenses" + }, + "messages": { + "balances_recalculated": "Soldes recalculés avec succès", + "default_balance_currency_cleared": "Monnaie par défaut des soldes effacée", + "default_balance_currency_updated": "Monnaie par défaut des soldes mise à jour", + "default_split_cleared": "Méthode de répartition par défaut réinitialisée", + "default_split_updated": "Méthode de répartition par défaut mise à jour", + "group_archived": "Groupe archivé avec succès", + "group_name_updated": "Paramètres de groupe mis à jour" + }, + "no_members": { + "add_members": "Ajouter des membres", + "add_members_details": { + "add_to_split_pro": "Ajouter à ce groupe", + "note": "Note : l'envoi d'invitation par mail est désactivé", + "placeholder": "Entrer un pseudo ou un mail", + "send_invite": "Envoyer une invitation", + "title": "Ajouter des membres", + "warning": "Attention : N'envoyez pas d'invitation à des adresses mail non enregistrées ici, utilisez plutôt la fonction « inviter sur SplitPro ». Votre compte sera bloqué si vous utilisez mal cette fonctionnalité" + }, + "invite_link": "Lien d'invitation", + "no_members": "Aucun membre dans ce groupe pour l'instant." + }, + "tabs": { + "balances": "Soldes", + "expenses": "Dépenses" + }, + "title": "Soldes en cours du groupe" + }, + "invite_message": { + "in_splitpro": "sur SplitPro", + "join_to": "Rejoindre", + "text": "Rejoins le groupe pour ajouter et gérer tes dépenses, et suivre tes soldes auprès des autres" + }, + "meta": { + "application_name": "SplitPro", + "description": "Partagez gratuitement vos dépenses entre amis", + "title": "SplitPro : partagez gratuitement vos dépenses entre amis" + }, + "navigation": { + "account": "Compte", + "activity": "Activité", + "add": "Ajouter", + "add_expense": "Nouvelle dépense", + "balances": "Soldes", + "groups": "Groupes", + "recurring": "Récurrences" + }, + "recurrence": { + "cron_expression": "Expression « cron »", + "days_of_month": "Jours dans le mois", + "days_of_week": "Jours de la semaine", + "delete_description": "Ceci arrêtera la création de futures dépenses sur ce modèle récurrent, mais les dépenses déjà créées seront conservées.", + "delete_title": "Supprimer la récurrence", + "derived_delete_warning": "Cette dépense fait partie d'une récurrence. Ici, uniquement cette dépense particulière sera supprimée, et les futures dépenses récurrentes de ce modèle continueront d'être créées.", + "derived_edit_warning": "Cette dépense fait partie d'une récurrence. Les modifications apportées ici n'affecteront que cette dépense en particulier.", + "description": "Définir une récurrence automatique pour cette dépense.", + "edit_confirmation_title": "Modifier la dépense récurrente", + "edit_description": "Ceci changera la programmation des futures dépenses sur ce modèle, mais les dépenses déjà créées ne seront pas modifiées.", + "edit_title": "Modifier la récurrence", + "empty": "Aucune dépense récurrente pour l'instant", + "expense_for_the_amount_of": "Dépense {name} pour un montant de {amount}{currency}", + "last_day": "Dernier jour", + "months": "Mois", + "never": "Aucun programme planifié", + "recurring": "Récurrente", + "schedule_type": { + "custom": "Personnalisée", + "day": "Quotidienne", + "month": "Mensuelle", + "never": "Jamais", + "week": "Hebdomadaire", + "year": "Annuelle" + }, + "template_delete_warning": "Ceci est un modèle de dépense récurrente. Sa suppression arrêtera la génération de toutes les futures dépenses récurrentes.", + "template_edit_warning": "Ceci est un modèle de dépense récurrente. Les paramètres seront appliqués à toutes les futures dépenses récurrentes.", + "time_of_day": "Heure journalière", + "title": "Récurrence", + "view_recurring_page": "Afficher cette récurrence" + }, + "ui": { + "added_by": "Ajoutée par", + "and": "et", + "balance": "solde", + "balances": "soldes", + "delete": "Supprimer", + "deleted_by": "Supprimée par", + "edited_by": "Éditée par", + "expense": { + "for": "pour", + "from": "de", + "paid_by": "Payé par", + "received_by": "Reçu par", + "to": "à", + "user": { + "deleted": "a supprimé", + "get": "reçoit", + "lent": "a avancé", + "owe": "doit à", + "paid": "a payé", + "pay": "doit", + "received": "a reçu" + }, + "you": { + "deleted": "as supprimé", + "get": "reçois", + "lent": "as avancé", + "owe": "dois", + "paid": "as payé", + "pay": "dois", + "received": "as reçu" + } + }, + "expense_details": "Détails de la dépense", + "in_group": "dans le groupe", + "no_activity": "Aucune activité pour l'instant", + "not_involved": "Non concerné⋅e", + "not_set": "Non défini", + "on": "le", + "or": "ou", + "outstanding_balances": "Soldes en cours", + "select_balance": "Choix du solde", + "select_currency": "Choix de la devise", + "settle_up_name": "Régler une dette", + "settled_up": "À l'équilibre", + "settlement": "Règlement de dette", + "share_text": "Jette un œil à SplitPro : c'est une alternative open source et gratuite à Splitwise", + "show_all_currencies": "Montrer toutes les devises", + "today": "Aujourd'hui", + "total_balance": "Solde global" + } +} diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json new file mode 100644 index 0000000..491aac2 --- /dev/null +++ b/public/locales/hu/common.json @@ -0,0 +1,455 @@ +{ + "account": { + "change_language": "Nyelv módosítása", + "change_language_details": { + "messages": { + "language_changed": "A nyelv sikeresen megváltoztatva" + }, + "no_language_found": "Nem található nyelv.", + "placeholder": "Válassz nyelvet", + "title": "Válassz nyelvet" + }, + "debug_info": "Hibakeresési infó", + "debug_info_details": { + "copy_failed": "Nem sikerült a hibakeresési információkat a vágólapra másolni", + "description": "Illesszd be az alábbi információkat a támogatási kérelem létrehozásakor:", + "git": "Git", + "new_version_available": "Új verzió érhető el:", + "send_test_notification": "Tesztértesítés küldése", + "test_notification_failed": "Nem sikerült elküldeni a tesztértesítést", + "test_notification_sent": "Tesztértesítés elküldve", + "title": "Hibakeresési információ", + "user_agent": "Felhasználói ügynök", + "version": "Verzió" + }, + "default_balance_currency": "Egyenleg alapértelmezett pénzneme", + "download_app": "Alkalmazás letöltése", + "download_app_details": { + "download_as_pwa": "A SplitPro-t PWA-ként letöltheted a kezdőképernyődre.", + "title": "Alkalmazás letöltése", + "using_android": "Ha Androidot használsz, nézd meg ezt", + "using_ios": "Ha iOS-t használsz, nézd meg ezt", + "video": "videó" + }, + "download_splitpro_data": "SplitPro adatok letöltése", + "edit_name": { + "apply_avatar": "Avatar alkalmazása", + "avatar_label": "Profilkép", + "avatar_preview": "Avatar előnézete", + "placeholder": "Írd be a neved", + "remove_avatar": "Avatar eltávolítása", + "select_avatar": "Kép kiválasztása", + "title": "Részletek szerkesztése", + "zoom": "Közelítés" + }, + "follow_on_x": "Kövess minket az X-en", + "import_from_splitwise": "Importálás a Splitwise-ból", + "import_from_splitwise_details": { + "choose_file": "Fájl kiválasztása", + "export_splitwise_data_button": "Splitwise adatok exportálása", + "follow_to_export_splitwise_data": "Kövesd ezt a linket a Splitwise adatok exportálásához", + "messages": { + "import_success": "Importálás sikeres" + }, + "no_file_chosen": "Nincs kiválasztott fájl", + "note": "Megjegyzés: Jelenleg csak a barátok és csoportok importálását támogatja. Tranzakciókat nem fog importálni. Dolgozunk rajta." + }, + "logout": "Kijelentkezés", + "messages": { + "submit_error": "Nem sikerült frissíteni a részleteket", + "submit_success": "Részletek frissítve" + }, + "notifications": { + "disable_notification": "Értesítések letiltása", + "enable_notification": "Értesítések engedélyezése", + "messages": { + "notification_granted": "Mostantól értesítéseket fogsz kapni" + } + }, + "star_on_github": "Adj csillagot a GitHubon", + "submit_feedback": "Visszajelzés küldése", + "submit_feedback_details": { + "placeholder": "Írd be a visszajelzésed", + "title": "Visszajelzés küldése" + }, + "support_us": "Támogass minket", + "title": "Fiók", + "write_review": "Írj véleményt" + }, + "actions": { + "add_expense": "Költség hozzáadása", + "back": "Vissza", + "cancel": "Mégsem", + "close": "Bezárás", + "confirm": "Megerősítés", + "connect": "Csatlakozás", + "copy": "Másolás", + "create": "Létrehozás", + "edit_expense": "Költség szerkesztése", + "export": "Exportálás", + "fetch": "Lehívás", + "import": "Importálás", + "invite": "Meghívás", + "leave": "Kilépés", + "next": "Következő", + "reconnect": "Újracsatlakozás", + "save": "Mentés", + "settle_up": "Kiegyenlítés", + "submit": "Küldés" + }, + "actors": { + "all": "Mind", + "friends": "Barátok", + "groups": "Csoportok", + "members": "Tagok", + "owner": "Tulajdonos", + "you": "Te", + "you_accusativus": "Téged", + "you_dativus": "Neked" + }, + "auth": { + "continue_with": "Folytatás ezzel: {provider}", + "email_placeholder": "Add meg az e-mail címed", + "no_providers_configured": "Nincsenek konfigurált hitelesítési szolgáltatók", + "no_providers_instructions": "Kérjük, konfigurálj legalább egy hitelesítési szolgáltatót a bejelentkezéshez. Lásd a", + "otp_sent": "Elküldtünk egy e-mailt az OTP-vel. Kérjük, ellenőrizd a beérkező leveleidet, és kattints az e-mailben található linkre a bejelentkezéshez.", + "send_magic_link": "Magic Link küldése", + "sending": "Küldés...", + "setup_instructions": "Docker beállítási utasítások", + "trouble_logging_in": "Problémád van a bejelentkezéssel? Lépj kapcsolatba" + }, + "balances": { + "default_split": { + "cleared": "Alapértelmezett felosztás törölve", + "configure": "Alapértelmezett felosztás", + "updated": "Alapértelmezett felosztás frissítve" + }, + "user_preferences": { + "title": "Beállítások" + } + }, + "bank_transactions": { + "choose_bank_provider": "Válassz banki szolgáltatót", + "no_bank_providers_found": "Nem található banki szolgáltató", + "plaid": { + "bank_connected_successfully": "Bank sikeresen összekapcsolva", + "bank_connection_cancelled": "Banki kapcsolat megszakítva", + "bank_connection_failed": "Nem sikerült csatlakozni a bankhoz" + }, + "search_bank": "Bank keresése", + "select_bank_provider": "Banki szolgáltató kiválasztása", + "to_bank": "bankba" + }, + "currency_conversion": { + "amount_to_receive": "Esedékes összeg", + "description": "Váltsd át az összeget egy másik pénznemre.", + "exchange_rate": "Átváltási árfolyam", + "fetching_rate": "Árfolyam lekérése...", + "rate": "Valutaárfolyam", + "success_toast": "A pénznemváltás sikeresen beállítva", + "title": "Pénznemváltás" + }, + "errors": { + "add_member_failed": "Nem sikerült hozzáadni a tagot a csoporthoz", + "currency_conversion_error": "Hiba a pénznemátváltás beállításakor", + "currency_conversion_failed": "Nem sikerült átváltani a pénznemet", + "currency_conversion_malformed": "A pénznemátváltási adatok hibásak", + "email_invalid": "Az e-mail cím érvénytelen, kérjük, próbáld újra a bejelentkezési folyamatot.", + "email_required": "E-mail cím megadása kötelező", + "feedback_min_length": "A visszajelzésnek legalább 10 karakterből kell állnia", + "feedback_required": "Visszajelzés szükséges", + "group_balances_malformed": "A csoportegyenlegek adatai hibásak, kérjük, jelentsd a problémát, vagy próbáld meg az újraszámolást.", + "group_name_update_failed": "Hiba a csoport nevének frissítésekor", + "image_compression_failed": "A képtömörítés sikertelen, eredeti fájl feltöltése", + "import_failed": "Hiba a fájl importálása során", + "invalid_cron_expression": "Érvénytelen cron kifejezés", + "invalid_currency_code": "Érvénytelen pénznemkód {code}", + "invalid_split": "Mentés előtt állítsd be, hogy ki tartozik ezzel a költséggel.", + "language_change_failed": "Hiba a nyelv módosításakor", + "less_than": "A fájl mérete nem haladhatja meg a {size} MB-ot", + "name_required": "Név megadása kötelező", + "no_providers": "Hiba történt a hitelesítési szolgáltatók lekérésekor. Kérjük, ellenőrizd a háttérnaplókat.", + "notification_not_supported": "Az értesítések nem támogatottak", + "otp_invalid": "Érvénytelen OTP", + "otp_required": "OTP megadása kötelező", + "recurrence_delete_failed": "Nem sikerült törölni az ismétlődést", + "recurrence_update_failed": "Nem sikerült frissíteni az ismétlődést", + "request_error": "Hiba az értesítés kérése során", + "saving_expense": "Hiba a költség mentése közben", + "setting_update_failed": "Nem sikerült frissíteni a beállítást", + "signin_error": "Hiba történt bejelentkezés közben: {error}", + "signup_disabled": "Új fiókok regisztrációja ebben az esetben le van tiltva", + "something_went_wrong": "Valami hiba történt", + "subscribe_error": "Nem lehet feliratkozni az értesítésekre", + "unsubscribe_error": "Hiba az értesítésekről történő leiratkozáskor", + "upload_failed": "Nem sikerült feltölteni a fájlt", + "uploading_error": "Nem sikerült feltölteni a fájlt", + "valid_email": "Adj meg érvényes e-mail címet" + }, + "expense_details": { + "add_expense": "Költség hozzáadása", + "add_expense_details": { + "add_new_expense": "Új költség hozzáadása", + "amount_placeholder": "Add meg az összeget", + "description_placeholder": "Írd be a leírást", + "pick_a_date": "Válassz egy dátumot", + "select_user_or_group": { + "add_to_split_pro": "Hozzáadás a SplitPro-hoz", + "note": "Megjegyzés: a meghívó küldése jelenleg le van tiltva a spam miatt", + "only_one_group_time": "Egyszerre csak egy csoportod lehet", + "send_invite": "Meghívó küldése felhasználónak", + "warning": "Figyelmeztetés: Ne használd a „meghívó küldése” funkciót, ha érvénytelen az e-mail cím. Helyette használd a „hozzáadás a SplitPro-hoz” funkciót. Fiókod blokkolásra kerül, ha ezt a funkciót nem rendeltetésszerűen használod" + }, + "split_type_section": { + "direction": { + "no_money_flow": "Senki sem tartozik semmivel", + "owes_payer": "{debtor} tartozik neki: {payer}", + "owes_you": "{debtor} tartozik neked", + "you_owe": "Te tartozol neki: {payer}" + }, + "split_equally": "egyenlően elosztva", + "split_unequally": "egyenlőtlenül oszlik meg", + "types": { + "adjustment": { + "remaining_to_split_equally": "Maradék, ami egyenlően oszlik meg", + "title": "Beállítás" + }, + "equal": { + "per_person": "személyenként", + "title": "Egyenlő" + }, + "exact": { + "remaining": "Maradék", + "title": "Pontos" + }, + "percentage": { + "remaining": "Maradék", + "title": "Százalék" + }, + "share": { + "shares": "Rész(ek)", + "title": "Rész", + "total_shares": "Összes rész" + } + } + }, + "sponsor_us": "Támogass minket", + "upload_file": { + "messages": { + "upload_success": "Fájl sikeresen feltöltve" + } + }, + "user_input": { + "add_more_friends": "Barátok, csoportok keresése vagy e-mail cím hozzáadása", + "cannot_change_group": "Szerkesztés közben nem lehet csoportot váltani", + "remove_group": "A csoport eltávolításához nyomd meg a törlés gombot", + "search_friends": "Barátok, csoportok keresése vagy e-mail cím hozzáadása" + } + }, + "already_added": "Már hozzáadva", + "balance_list": { + "are_settled_up": "kiegyenlítve", + "is_settled_up": "kiegyenlítve", + "press_balance_info": "Nyomj az egyéni egyenlegre az elszámolás indításához" + }, + "bank_transactions": "Banki tranzakciók", + "clear": "Kiürítés", + "delete_expense_details": { + "text": "Ez a művelet nem vonható vissza. Ezzel véglegesen törlöd a költséget.", + "title": "Teljesen biztos vagy benne?" + }, + "multiple_transactions": { + "add_all": "Összes hozzáadása", + "add_one_by_one": "Hozzáadás egyenként", + "description": "Több tranzakciót választottál ki. Válaszd ki, hogy az aktuális felosztási beállításokkal együtt szeretnéd-e hozzáadni őket, vagy egyenként módosítsd a beállításokat.", + "title": "Több tranzakció hozzáadása" + }, + "no_transactions_yet": "Még nincsenek tranzakciók", + "pending": "Függőben", + "submit_all": "Összes beküldése", + "title": "Költség hozzáadása", + "title_mobile": "Hozzáadás" + }, + "group_details": { + "add_members": "Tagok hozzáadása", + "copied": "Másolva", + "create_group": { + "group_name_placeholder": "Csoport neve", + "title": "Csoport létrehozása" + }, + "group_info": { + "actions": "Műveletek", + "archive_group": "Csoport archiválása", + "archive_group_details": { + "can_archive": "Ez a csoport archiválva lesz, és rejtve lesz a fő csoportok listájából. Szükség esetén később is hozzáférhetsz.", + "cant_archive": "Nem lehet archiválni a kiegyenlítetlen tartozással rendelkező csoportot. Előbb minden egyenleget rendezni kell.", + "title": "Biztosan archiválni szeretnéd ezt a csoportot?" + }, + "archived": "Archiválva", + "configure_default_split": "Alapértelmezett felosztás konfigurálása", + "default_balance_currency": "Egyenleg alapértelmezett pénzneme", + "default_split": "Alapértelmezett felosztás", + "delete_group": "Csoport törlése", + "delete_group_details": { + "can_delete": "Ez a művelet nem vonható vissza", + "cant_delete": "A csoportot nem lehet törölni, amíg van kiegyenlítetlen tartozás", + "title": "Teljesen biztos vagy benne?" + }, + "edit_group": "Csoport szerkesztése", + "group_created": "Csoport létrehozva", + "leave_group": "Kilépés a csoportból", + "leave_group_details": { + "can_leave": "Ez a művelet nem vonható vissza", + "cant_leave": "Nem hagyhatod el a csoportot, amíg a fennálló tartozást ki nem egyenlítetted", + "title": "Teljesen biztos vagy benne?" + }, + "members": "Tagok", + "recalculate_balances": "Egyenlegek újraszámítása", + "recalculate_balances_details": { + "description": "Ha az egyenlegek nem egyeznek meg a kiadásokkal, újraszámolhatod őket. Vedd figyelembe, hogy ez eltarthat egy ideig, ha a kiadások száma nagy. A csoporton kívüli egyenlegeket ez nem érinti.", + "title": "Biztos vagy benne?" + }, + "remove_member_details": { + "can_remove": "Arra készülsz, hogy eltávolítsd ezt a tagot a csoportból", + "cant_remove": "Nem lehet eltávolítani a tagot, amíg a fennálló tartozását ki nem egyenlítette", + "title": "Teljesen biztos vagy benne?" + }, + "simplify_debts": "Adósságok egyszerűsítése", + "title": "Csoportinformációk" + }, + "group_statistics": { + "first_expense": "Első kiadás", + "title": "Csoportstatisztikák", + "total_expenses": "Összes költség" + }, + "messages": { + "balances_recalculated": "Az egyenlegek újraszámítása sikeresen megtörtént", + "default_balance_currency_cleared": "Egyenleg alapértelmezett pénzneme törölve", + "default_balance_currency_updated": "Egyenleg alapértelmezett pénzneme frissítve", + "default_split_cleared": "Alapértelmezett felosztás törölve", + "default_split_updated": "Alapértelmezett felosztás frissítve", + "group_archived": "Csoport sikeresen archiválva", + "group_name_updated": "Csoport adatok frissítve" + }, + "no_members": { + "add_members": "Tagok hozzáadása", + "add_members_details": { + "add_to_split_pro": "Hozzáadás a SplitPro-hoz", + "note": "Megjegyzés: az e-mail meghívók küldése le van tiltva", + "placeholder": "Írd be a neved vagy az e-mail címed", + "send_invite": "Meghívó küldése felhasználónak", + "title": "Tagok hozzáadása", + "warning": "Figyelmeztetés: Ne használd a „meghívó küldése” funkciót, ha érvénytelen az e-mail cím. Helyette használd a „hozzáadás a SplitPro-hoz” funkciót. Fiókod blokkolásra kerül, ha ezt a funkciót nem rendeltetésszerűen használod" + }, + "invite_link": "Meghívólink", + "no_members": "Még nincsenek tagok a csoportban." + }, + "tabs": { + "balances": "Egyenlegek", + "expenses": "Költségek" + }, + "title": "Csoportszintű kintlévőségek" + }, + "invite_message": { + "in_splitpro": "a SplitPro-ban", + "join_to": "Csatlakozás", + "text": "Csatlakozz a csoporthoz, és hozzáadhatsz, kezelhetsz kiadásokat és nyomon követheted az egyenlegeidet" + }, + "meta": { + "application_name": "SplitPro", + "description": "Oszd meg költségeidet a barátaiddal ingyen", + "title": "SplitPro: Oszd meg költségeidet a barátaiddal ingyen" + }, + "navigation": { + "account": "Fiók", + "activity": "Tevékenység", + "add": "Hozzáadás", + "add_expense": "Költség hozzáadása", + "balances": "Egyenlegek", + "groups": "Csoportok", + "recurring": "Ismétlés" + }, + "recurrence": { + "cron_expression": "Cron kifejezés", + "days_of_month": "A hónap napjai", + "days_of_week": "A hét napjai", + "delete_description": "Ez leállítja a jövőbeli költségek létrehozását. Az ismétlődés által létrehozott meglévő költségek nem törlődnek.", + "delete_title": "Ismétlődés törlése", + "derived_delete_warning": "Ez a kiadás egy ismétlődő költség része. Csak ez a kiadás kerül törlésre. A jövőbeni ismétlődő költségek továbbra is fennállnak.", + "derived_edit_warning": "Ez a kiadás egy ismétlődő költség része. A változtatások csak ezt a költséget érintik.", + "description": "Állíts be automatikus ismétlődést ehhez a költséghez.", + "edit_confirmation_title": "Ismétlődő költség szerkesztése", + "edit_description": "Ez megváltoztatja a jövőbeli kiadások ütemezését. A meglévő kiadások nem módosulnak.", + "edit_title": "Ismétlődés szerkesztése", + "empty": "Még nincsenek ismétlődő költségek", + "expense_for_the_amount_of": "{name} kiadás {amount} {currency} összegben", + "last_day": "Utolsó nap", + "months": "Hónapok", + "never": "Nincs konfigurálva ütemezés", + "recurring": "Ismétlés", + "schedule_type": { + "custom": "Egyedi", + "day": "Naponta", + "month": "Havonta", + "never": "Soha", + "week": "Hetente", + "year": "Évente" + }, + "template_delete_warning": "Ez egy ismétlődő költségsablon. A törlése leállítja az összes jövőbeni ismétlődő költséget.", + "template_edit_warning": "Ez egy ismétlődő költségsablon. A változtatások minden jövőbeli ismétlődő költségre vonatkoznak.", + "time_of_day": "Napszak", + "title": "Ismétlődés", + "view_recurring_page": "Ismétlés oldal megtekintése" + }, + "ui": { + "added_by": "Hozzáadta", + "and": "és", + "balance": "egyenleg", + "balances": "egyenlegek", + "delete": "Törlés", + "deleted_by": "Törölte", + "edited_by": "Szerkesztette", + "expense": { + "for": "itt", + "from": "tőle", + "paid_by": "Fizette", + "received_by": "Megkapta", + "to": "neki", + "user": { + "deleted": "törölte", + "get": "kap", + "lent": "adott", + "owe": "tartozik", + "paid": "fizetett", + "pay": "fizet", + "received": "kapott" + }, + "you": { + "deleted": "törölted", + "get": "kapsz", + "lent": "adtál", + "owe": "tartozol", + "paid": "fizettél", + "pay": "fizetsz", + "received": "kaptál" + } + }, + "expense_details": "Költségadatok", + "in_group": "Csoportban", + "no_activity": "Még nincsenek tevékenységek", + "not_involved": "Nem vesz részt", + "not_set": "Nincs beállítva", + "on": "ekkor", + "or": "vagy", + "outstanding_balances": "Kiegyenlítetlen egyenlegek", + "select_balance": "Válassz egyenleget", + "select_currency": "Válassz pénznemet", + "settle_up_name": "Kiegyenlítés", + "settled_up": "Kiegyenlítve", + "settlement": "Elszámolás", + "share_text": "Nézd meg a SplitPro-t. Ez egy nyílt forráskódú, ingyenes alternatívája a Splitwise-nak", + "show_all_currencies": "Összes pénznem megjelenítése", + "today": "Ma", + "total_balance": "Összes egyenleg" + } +} diff --git a/public/locales/id/common.json b/public/locales/id/common.json new file mode 100644 index 0000000..c752ff5 --- /dev/null +++ b/public/locales/id/common.json @@ -0,0 +1,447 @@ +{ + "account": { + "change_language": "Ubah bahasa", + "change_language_details": { + "messages": { + "language_changed": "Bahasa berhasil diubah" + }, + "no_language_found": "Bahasa tidak ditemukan.", + "placeholder": "Pilih bahasa", + "title": "Pilih bahasa" + }, + "debug_info": "Info debug", + "debug_info_details": { + "copy_failed": "Gagal menyalin info debug ke papan klip", + "description": "Tempelkan informasi di bawah ini saat membuat permintaan bantuan:", + "git": "Git", + "new_version_available": "Versi baru telah tersedia:", + "send_test_notification": "Kirim notifikasi uji coba", + "test_notification_failed": "Tidak dapat mengirim notifikasi uji coba", + "test_notification_sent": "Notifikasi uji coba terkirim", + "title": "Informasi Debug", + "user_agent": "UserAgent", + "version": "Versi" + }, + "default_balance_currency": "Mata uang saldo bawaan", + "download_app": "Unduh aplikasi", + "download_app_details": { + "download_as_pwa": "Anda dapat mengunduh SplitPro sebagai PWA ke layar utama Anda.", + "title": "Unduh aplikasi", + "using_android": "Jika Anda menggunakan Android, lihat ini", + "using_ios": "Jika Anda menggunakan iOS, lihat ini", + "video": "video" + }, + "download_splitpro_data": "Unduh data SplitPro", + "edit_name": { + "apply_avatar": "Terapkan avatar", + "avatar_label": "Foto profil", + "avatar_preview": "Pratinjau avatar", + "placeholder": "Masukkan nama", + "remove_avatar": "Hapus avatar", + "select_avatar": "Pilih gambar", + "title": "Edit detail", + "zoom": "Zom" + }, + "follow_on_x": "Ikuti kami di X", + "import_from_splitwise": "Impor dari Splitwise", + "import_from_splitwise_details": { + "choose_file": "Pilih berkas", + "export_splitwise_data_button": "Ekspor data Splitwise", + "follow_to_export_splitwise_data": "Ikuti tautan ini untuk mengekspor data Splitwise", + "messages": { + "import_success": "Impor berhasil" + }, + "no_file_chosen": "Tidak ada berkas yang dipilih", + "note": "Catatan: Saat ini hanya mendukung pengimporan teman dan kelompok. Ini tidak akan mengimpor transaksi. Kami sedang mengerjakannya." + }, + "logout": "Keluar", + "messages": { + "submit_error": "Gagal memperbarui detail", + "submit_success": "Detail diperbarui" + }, + "notifications": { + "disable_notification": "Nonaktifkan notifikasi", + "enable_notification": "Aktifkan notifikasi", + "messages": { + "notification_granted": "Anda akan menerima notifikasi sekarang" + } + }, + "star_on_github": "Beri kami star di GitHub", + "submit_feedback": "Kirim masukan", + "submit_feedback_details": { + "placeholder": "Masukkan masukan Anda", + "title": "Kirim masukan" + }, + "support_us": "Sponsori kami", + "title": "Akun", + "write_review": "Tulis ulasan" + }, + "actions": { + "add_expense": "Tambah pengeluaran", + "back": "Kembali", + "cancel": "Batal", + "close": "Tutup", + "confirm": "Konfirmasi", + "connect": "Hubungkan", + "copy": "Salin", + "create": "Buat", + "edit_expense": "Edit pengeluaran", + "export": "Ekspor", + "fetch": "Ambil", + "import": "Impor", + "invite": "Undang", + "leave": "Keluar", + "next": "Lanjut", + "reconnect": "Hubungkan ulang", + "save": "Simpan", + "settle_up": "Lunasi", + "submit": "Kirim" + }, + "actors": { + "all": "Semua", + "friends": "Teman", + "groups": "Kelompok", + "members": "Anggota", + "owner": "Pemilik", + "you": "Anda", + "you_accusativus": "Anda", + "you_dativus": "Anda" + }, + "auth": { + "continue_with": "Lanjutkan dengan {provider}", + "email_placeholder": "Masukkan email Anda", + "no_providers_configured": "Tidak ada penyedia autentikasi yang dikonfigurasi", + "no_providers_instructions": "Harap konfigurasikan setidaknya satu penyedia autentikasi untuk masuk. Lihat", + "otp_sent": "Kami telah mengirimkan email berisi OTP. Harap periksa kotak masuk Anda dan klik tautan di dalam email untuk masuk.", + "send_magic_link": "Kirim magic link", + "sending": "Mengirim...", + "setup_instructions": "Petunjuk penyiapan Docker", + "trouble_logging_in": "Kendala saat masuk? Hubungi" + }, + "balances": { + "default_split": { + "cleared": "Pembagian bawaan dibersihkan", + "configure": "Pembagian bawaan", + "updated": "Pembagian bawaan diperbarui" + }, + "user_preferences": { + "title": "Preferensi" + } + }, + "bank_transactions": { + "choose_bank_provider": "Pilih penyedia bank", + "no_bank_providers_found": "Penyedia bank tidak ditemukan", + "plaid": { + "bank_connected_successfully": "Bank berhasil terhubung", + "bank_connection_cancelled": "Koneksi bank dibatalkan", + "bank_connection_failed": "Gagal terhubung ke bank" + }, + "search_bank": "Cari bank", + "select_bank_provider": "Pilih penyedia bank", + "to_bank": "ke bank" + }, + "currency_conversion": { + "amount_to_receive": "Jumlah yang diterima", + "description": "Konversikan jumlah tersebut ke mata uang yang berbeda.", + "exchange_rate": "Nilai tukar", + "fetching_rate": "Mengambil nilai tukar...", + "rate": "Nilai tukar", + "success_toast": "Konversi mata uang berhasil diatur", + "title": "Konversi mata uang" + }, + "errors": { + "currency_conversion_error": "Gagal saat mengatur konversi mata uang", + "currency_conversion_failed": "Gagal mengonversi mata uang", + "currency_conversion_malformed": "Data konversi mata uang cacat/rusak", + "email_invalid": "Email tidak valid, silakan coba alur masuk kembali.", + "email_required": "Email wajib diisi", + "feedback_min_length": "Masukan harus terdiri dari minimal 10 karakter", + "feedback_required": "Masukan wajib diisi", + "group_balances_malformed": "Data saldo kelompok cacat/rusak, silakan laporkan masalah atau coba hitung ulang.", + "group_name_update_failed": "Gagal memperbarui nama kelompok", + "image_compression_failed": "Kompresi gambar gagal, mencoba mengunggah berkas asli", + "import_failed": "Gagal mengimpor berkas", + "invalid_cron_expression": "Ekspresi cron tidak valid", + "invalid_currency_code": "Kode mata uang tidak valid {code}", + "language_change_failed": "Gagal mengubah bahasa", + "less_than": "Ukuran berkas harus kurang dari {size}MB", + "name_required": "Nama wajib diisi", + "no_providers": "Gagal saat mengambil penyedia autentikasi. Harap periksa log backend.", + "notification_not_supported": "Notifikasi tidak didukung", + "otp_invalid": "OTP tidak valid", + "otp_required": "OTP wajib diisi", + "recurrence_delete_failed": "Gagal menghapus pengulangan", + "recurrence_update_failed": "Gagal memperbarui pengulangan", + "request_error": "Gagal meminta notifikasi", + "saving_expense": "Gagal saat menyimpan pengeluaran", + "setting_update_failed": "Gagal memperbarui pengaturan", + "signin_error": "Terjadi kesalahan saat masuk: {error}", + "signup_disabled": "Pendaftaran akun baru dinonaktifkan pada instansi ini", + "something_went_wrong": "Ada yang salah", + "subscribe_error": "Tidak dapat berlangganan notifikasi", + "unsubscribe_error": "Gagal berhenti berlangganan notifikasi", + "upload_failed": "Gagal mengunggah berkas", + "uploading_error": "Gagal mengunggah berkas", + "valid_email": "Masukkan email yang valid" + }, + "expense_details": { + "add_expense": "Tambah pengeluaran", + "add_expense_details": { + "add_new_expense": "Tambah pengeluaran baru", + "amount_placeholder": "Masukkan jumlah", + "description_placeholder": "Masukkan deskripsi", + "pick_a_date": "Pilih tanggal", + "select_user_or_group": { + "add_to_split_pro": "Tambahkan ke Split Pro", + "note": "Catatan: pengiriman undangan dinonaktifkan untuk saat ini karena spam", + "only_one_group_time": "Anda hanya dapat memiliki satu kelompok dalam satu waktu", + "send_invite": "Kirim undangan ke pengguna", + "warning": "Peringatan: Jangan gunakan kirim undangan jika email tidak valid. Gunakan tambahkan ke Split Pro sebagai gantinya. Akun Anda akan diblokir jika fitur ini disalahgunakan" + }, + "split_type_section": { + "split_equally": "bagi rata", + "split_unequally": "bagi tidak sama rata", + "types": { + "adjustment": { + "remaining_to_split_equally": "Sisa yang akan dibagi rata", + "title": "Penyesuaian" + }, + "equal": { + "per_person": "per orang", + "title": "Sama rata" + }, + "exact": { + "remaining": "Sisa", + "title": "Pasti" + }, + "percentage": { + "remaining": "Sisa", + "title": "Persentase" + }, + "share": { + "shares": "Bagian", + "title": "Bagian", + "total_shares": "Total bagian" + } + } + }, + "sponsor_us": "Sponsori kami", + "upload_file": { + "messages": { + "upload_success": "Berkas berhasil diunggah" + } + }, + "user_input": { + "add_more_friends": "Cari teman, kelompok, atau tambah email", + "cannot_change_group": "Tidak dapat mengubah kelompok saat mengedit", + "remove_group": "Tekan hapus untuk menghapus kelompok", + "search_friends": "Cari teman, kelompok, atau tambah email" + } + }, + "already_added": "Sudah ditambahkan", + "balance_list": { + "are_settled_up": "sudah lunas", + "is_settled_up": "sudah lunas", + "press_balance_info": "Tekan pada saldo individu untuk memulai pelunasan" + }, + "bank_transactions": "Transaksi bank", + "clear": "Bersihkan", + "delete_expense_details": { + "text": "Tindakan ini tidak dapat dibatalkan. Ini akan menghapus pengeluaran Anda secara permanen.", + "title": "Apakah Anda benar-benar yakin?" + }, + "multiple_transactions": { + "add_all": "Tambah semua", + "add_one_by_one": "Tambah satu per satu", + "description": "Anda telah memilih beberapa transaksi. Pilih apakah Anda ingin semuanya ditambahkan sekaligus dengan pengaturan pembagian saat ini atau menyesuaikan pengaturannya satu per satu.", + "title": "Tambah beberapa transaksi" + }, + "no_transactions_yet": "Belum ada transaksi", + "pending": "Pending", + "submit_all": "Kirim semua", + "title": "Tambah pengeluaran", + "title_mobile": "Tambah" + }, + "group_details": { + "add_members": "Tambah anggota", + "copied": "Disalin", + "create_group": { + "group_name_placeholder": "Nama kelompok", + "title": "Buat kelompok" + }, + "group_info": { + "actions": "Tindakan", + "archive_group": "Arsipkan kelompok", + "archive_group_details": { + "can_archive": "Kelompok ini akan diarsipkan dan disembunyikan dari daftar kelompok utama Anda. Anda masih dapat mengaksesnya nanti jika diperlukan.", + "cant_archive": "Tidak dapat mengarsipkan kelompok yang masih memiliki saldo tertunggak. Semua saldo harus dilunasi terlebih dahulu.", + "title": "Apakah Anda yakin ingin mengarsipkan kelompok ini?" + }, + "archived": "Diarsipkan", + "configure_default_split": "Konfigurasikan pembagian bawaan", + "default_balance_currency": "Mata uang saldo bawaan", + "default_split": "Pembagian bawaan", + "delete_group": "Hapus kelompok", + "delete_group_details": { + "can_delete": "Tindakan ini tidak dapat dibatalkan", + "cant_delete": "Tidak dapat menghapus kelompok sampai semua orang melunasi saldonya", + "title": "Apakah Anda benar-benar yakin?" + }, + "edit_group": "Edit kelompok", + "group_created": "Kelompok berhasil dibuat", + "leave_group": "Tinggalkan kelompok", + "leave_group_details": { + "can_leave": "Tindakan ini tidak dapat dibatalkan", + "cant_leave": "Tidak dapat meninggalkan kelompok sampai saldo tertunggak Anda dilunasi", + "title": "Apakah Anda benar-benar yakin?" + }, + "members": "Anggota", + "recalculate_balances": "Hitung ulang saldo", + "recalculate_balances_details": { + "description": "Jika saldo tidak cocok dengan pengeluaran, Anda dapat menghitungnya kembali. Perhatikan bahwa ini mungkin memerlukan waktu jika jumlah pengeluaran banyak. Saldo di luar kelompok tidak akan terpengaruh.", + "title": "Apakah Anda yakin?" + }, + "remove_member_details": { + "can_remove": "Anda akan menghapus anggota ini dari kelompok", + "cant_remove": "Tidak dapat menghapus anggota sampai saldo tertunggak mereka dilunasi", + "title": "Apakah Anda benar-benar yakin?" + }, + "simplify_debts": "Sederhanakan utang", + "title": "Info kelompok" + }, + "group_statistics": { + "first_expense": "Pengeluaran pertama", + "title": "Statistik kelompok", + "total_expenses": "Total pengeluaran" + }, + "messages": { + "balances_recalculated": "Saldo berhasil dihitung ulang", + "default_balance_currency_cleared": "Mata uang saldo bawaan dibersihkan", + "default_balance_currency_updated": "Mata uang saldo bawaan diperbarui", + "default_split_cleared": "Pembagian bawaan dibersihkan", + "default_split_updated": "Pembagian bawaan diperbarui", + "group_archived": "Kelompok berhasil diarsipkan", + "group_name_updated": "Detail kelompok diperbarui" + }, + "no_members": { + "add_members": "Tambah anggota", + "add_members_details": { + "add_to_split_pro": "Tambahkan ke Split Pro", + "note": "Catatan: pengiriman undangan email dinonaktifkan", + "placeholder": "Masukkan nama atau email", + "send_invite": "Kirim undangan ke pengguna", + "title": "Tambah anggota", + "warning": "Peringatan: Jangan gunakan kirim undangan jika email tidak valid. Gunakan tambahkan ke Split Pro sebagai gantinya. Akun Anda akan diblokir jika fitur ini disalahgunakan" + }, + "invite_link": "Tautan undangan", + "no_members": "Belum ada anggota di kelompok ini." + }, + "tabs": { + "balances": "Saldo", + "expenses": "Pengeluaran" + }, + "title": "Saldo tertunggak kelompok" + }, + "invite_message": { + "in_splitpro": "di Splitpro", + "join_to": "Bergabung ke", + "text": "Bergabunglah ke kelompok dan Anda dapat menambahkan, mengelola pengeluaran, serta melacak saldo Anda" + }, + "meta": { + "application_name": "SplitPro", + "description": "Bagi Pengeluaran dengan teman-teman Anda secara gratis", + "title": "SplitPro: Bagi Pengeluaran dengan teman-teman Anda secara gratis" + }, + "navigation": { + "account": "Akun", + "activity": "Aktivitas", + "add": "Tambah", + "add_expense": "Tambah Pengeluaran", + "balances": "Saldo", + "groups": "Kelompok", + "recurring": "Berulang" + }, + "recurrence": { + "cron_expression": "Ekspresi Cron", + "days_of_month": "Hari dalam Sebulan", + "days_of_week": "Hari dalam Seminggu", + "delete_description": "Ini akan menghentikan pembuatan pengeluaran di masa mendatang. Pengeluaran yang sudah dibuat oleh pengulangan ini tidak akan dihapus.", + "delete_title": "Hapus Pengulangan", + "derived_delete_warning": "Pengeluaran ini adalah bagian dari pengulangan. Hanya pengeluaran ini yang akan dihapus. Pengeluaran berulang di masa mendatang akan tetap berlanjut.", + "derived_edit_warning": "Pengeluaran ini adalah bagian dari pengulangan. Perubahan hanya akan memengaruhi pengeluaran ini.", + "description": "Atur pengulangan otomatis untuk pengeluaran ini.", + "edit_confirmation_title": "Edit Pengeluaran Berulang", + "edit_description": "Ini akan mengubah jadwal untuk pengeluaran di masa mendatang. Pengeluaran yang ada tidak akan diubah.", + "edit_title": "Edit Pengulangan", + "empty": "Belum ada pengeluaran berulang", + "expense_for_the_amount_of": "Pengeluaran {name} sebesar {amount} {currency}", + "last_day": "Hari terakhir", + "months": "Bulan", + "never": "Tidak ada jadwal yang dikonfigurasi", + "recurring": "Berulang", + "schedule_type": { + "custom": "Kustom", + "day": "Harian", + "month": "Bulanan", + "never": "Tidak pernah", + "week": "Mingguan", + "year": "Tahunan" + }, + "template_delete_warning": "Ini adalah templat pengeluaran berulang. Menghapusnya akan menghentikan semua pengeluaran berulang di masa mendatang.", + "template_edit_warning": "Ini adalah templat pengeluaran berulang. Perubahan akan berlaku untuk semua pengeluaran berulang di masa mendatang.", + "time_of_day": "Waktu Hari", + "title": "Pengulangan", + "view_recurring_page": "Lihat halaman Berulang" + }, + "ui": { + "added_by": "Ditambahkan oleh", + "and": "dan", + "balance": "saldo", + "balances": "saldo", + "delete": "Hapus", + "deleted_by": "Dihapus oleh", + "edited_by": "Diedit oleh", + "expense": { + "for": "untuk", + "from": "dari", + "paid_by": "Dibayar oleh", + "received_by": "Diterima oleh", + "to": "kepada", + "user": { + "deleted": "dihapus", + "get": "mendapatkan", + "lent": "meminjamkan", + "owe": "berutang", + "paid": "membayar", + "pay": "membayar", + "received": "menerima" + }, + "you": { + "deleted": "dihapus", + "get": "mendapatkan", + "lent": "meminjamkan", + "owe": "berutang", + "paid": "membayar", + "pay": "membayar", + "received": "menerima" + } + }, + "expense_details": "Detail pengeluaran", + "in_group": "Dalam kelompok", + "no_activity": "Belum ada aktivitas", + "not_involved": "Tidak terlibat", + "not_set": "Belum diatur", + "on": "pada", + "or": "atau", + "outstanding_balances": "Saldo tertunggak", + "select_balance": "Pilih saldo", + "select_currency": "Pilih mata uang", + "settle_up_name": "Lunasi", + "settled_up": "Sudah dilunasi", + "settlement": "Pelunasan", + "share_text": "Coba SplitPro. Ini adalah alternatif gratis dan sumber terbuka untuk Splitwise", + "show_all_currencies": "Tampilkan semua mata uang", + "today": "Hari ini", + "total_balance": "Total saldo" + } +} diff --git a/public/locales/it/common.json b/public/locales/it/common.json new file mode 100644 index 0000000..e9bd52d --- /dev/null +++ b/public/locales/it/common.json @@ -0,0 +1,422 @@ +{ + "account": { + "change_language": "Cambia lingua", + "change_language_details": { + "messages": { + "language_changed": "Lingua cambiata con successo" + }, + "placeholder": "Seleziona una lingua", + "title": "Seleziona una lingua" + }, + "debug_info": "Informazioni di debug", + "debug_info_details": { + "copy_failed": "Errore nel copiare le informazioni di debug", + "description": "Incolla le informazioni qui sotto quando crei una richiesta di assistenza:", + "git": "Git", + "new_version_available": "È disponibile una nuova versione:", + "title": "Informazioni di Debug", + "user_agent": "UserAgent", + "version": "Versione" + }, + "download_app": "Scarica l'app", + "download_app_details": { + "download_as_pwa": "Puoi scaricare SplitPro come PWA sulla tua home screen.", + "title": "Scarica l'app", + "using_android": "Se utilizzi Android, guarda questo", + "using_ios": "Se utilizzi iOS, guarda questo", + "video": "video" + }, + "download_splitpro_data": "Scarica i dati di SplitPro", + "edit_name": { + "placeholder": "Inserisci il nome", + "title": "Modifica nome" + }, + "follow_on_x": "Seguici su X", + "import_from_splitwise": "Importa da Splitwise", + "import_from_splitwise_details": { + "choose_file": "Scegli file", + "export_splitwise_data_button": "Esporta dati Splitwise", + "follow_to_export_splitwise_data": "Segui questo link per esportare i dati splitwise", + "messages": { + "import_success": "Importazione riuscita" + }, + "no_file_chosen": "Nessun file scelto", + "note": "Nota: al momento supporta solo l'importazione di amici e gruppi. Non importerà transazioni. Ci stiamo lavorando." + }, + "logout": "Esci", + "messages": { + "submit_error": "Invio del feedback fallito", + "submit_success": "Feedback inviato" + }, + "notifications": { + "disable_notification": "Disabilita notifiche", + "enable_notification": "Abilita notifiche", + "messages": { + "notification_granted": "Riceverai ora le notifiche" + } + }, + "star_on_github": "Dacci una stella su GitHub", + "submit_feedback": "Invia feedback", + "submit_feedback_details": { + "placeholder": "Inserisci il tuo feedback", + "title": "Invia feedback" + }, + "support_us": "Supportaci", + "title": "Account", + "write_review": "Scrivi una recensione" + }, + "actions": { + "add_expense": "Aggiungi spesa", + "back": "Indietro", + "cancel": "Annulla", + "close": "Chiudi", + "confirm": "Conferma", + "connect": "Connettiti", + "copy": "Copia", + "create": "Crea", + "edit_expense": "Modifica spesa", + "export": "Esporta", + "fetch": "Recupera", + "import": "Importa", + "invite": "Invita", + "leave": "Abbandona", + "next": "Avanti", + "reconnect": "Riconnettiti", + "save": "Salva", + "settle_up": "Regola", + "submit": "Invia" + }, + "actors": { + "all": "Tutti", + "friends": "Amici", + "groups": "Gruppi", + "members": "Membri", + "owner": "Proprietario", + "you": "Tu", + "you_accusativus": "Tu", + "you_dativus": "Te" + }, + "auth": { + "continue_with": "Continua con {provider}", + "email_placeholder": "Inserisci la tua email", + "no_providers_configured": "Nessun provider di autenticazione configurato", + "no_providers_instructions": "Si prega di configurare almeno un provider di autenticazione per accedere. Consulta le", + "or": "oppure", + "otp_sent": "Abbiamo inviato un'e-mail con l'OTP. Controllare la posta in arrivo e fare clic sul link contenuto nell'e-mail per accedere.", + "send_magic_link": "Invia link magico", + "sending": "Invio in corso...", + "setup_instructions": "istruzioni di configurazione Docker", + "submit": "Invia", + "trouble_logging_in": "Problemi ad accedere? Contatta" + }, + "bank_transactions": { + "choose_bank_provider": "Scegli il fornitore bancario", + "no_bank_providers_found": "Nessun fornitore bancario trovato", + "plaid": { + "bank_connected_successfully": "Connessione alla banca riuscita", + "bank_connection_cancelled": "Connessione alla banca annullata", + "bank_connection_failed": "Impossibile connettersi alla banca" + }, + "search_bank": "Ricerca banca", + "select_bank_provider": "Seleziona il fornitore bancario", + "to_bank": "alla banca" + }, + "currency_conversion": { + "amount_to_receive": "Importo da ricevere", + "description": "Converti l'importo in una valuta diversa.", + "exchange_rate": "Tasso di cambio", + "fetching_rate": "Recupero tasso...", + "rate": "Tasso", + "success_toast": "Conversione valuta impostata con successo", + "title": "Conversione valuta" + }, + "errors": { + "currency_conversion_error": "Errore durante l'impostazione della conversione valuta", + "currency_conversion_failed": "Impossibile convertire le valute", + "currency_conversion_malformed": "I dati relativi alla conversione valutaria sono errati", + "email_invalid": "L'e-mail non è valida, si prega di riprovare l'accesso.", + "email_required": "Email richiesta", + "feedback_min_length": "Il feedback deve contenere almeno 10 caratteri", + "feedback_required": "Il feedback è obbligatorio", + "group_balances_malformed": "I dati relativi ai saldi di gruppo sono errati, segnalare il problema o provare a ricalcolarli.", + "group_name_update_failed": "Errore nell'aggiornamento del nome del gruppo", + "import_failed": "Errore durante l'importazione del file", + "invalid_cron_expression": "Espressione cron non valida", + "invalid_currency_code": "Codice valuta {code} non valido", + "language_change_failed": "Errore nel cambiare lingua", + "less_than": "Il file deve essere più piccolo di", + "name_required": "Il nome è obbligatorio", + "no_providers": "Errore durante lo scaricamento dei provider di autenticazione. Per favore controllare i log backend.", + "notification_not_supported": "Le notifiche non sono supportate", + "otp_invalid": "OTP non valido", + "otp_required": "OTP richiesto", + "recurrence_delete_failed": "Impossibile eliminare la ricorrenza", + "recurrence_update_failed": "Impossibile aggiornare la ricorrenza", + "request_error": "Errore durante la richiesta delle notifiche", + "saving_expense": "Errore durante il salvataggio della spesa", + "setting_update_failed": "Errore nell'aggiornamento dell'impostazione", + "signin_error": "Si è verificato un errore durante l'accesso: {error}", + "signup_disabled": "La registrazione di nuovi account è disabilitata in questa istanza", + "something_went_wrong": "Qualcosa è andato storto", + "subscribe_error": "Impossibile attivare le notifiche", + "unsubscribe_error": "Errore durante la disattivazione delle notifiche", + "upload_failed": "Caricamento file fallito", + "upload_file_less_than": "Il file deve essere inferiore a", + "uploading_error": "Errore durante il caricamento del file", + "valid_email": "Inserisci un'email valida" + }, + "expense_details": { + "add_expense": "Aggiungi spesa", + "add_expense_details": { + "add_new_expense": "Aggiungi nuova spesa", + "amount_placeholder": "Inserisci importo", + "description_placeholder": "Inserisci descrizione", + "pick_a_date": "Scegli una data", + "select_user_or_group": { + "add_to_split_pro": "Aggiungi a Split Pro", + "note": "Nota: l'invio di inviti è disabilitato per ora a causa dello spam", + "only_one_group_time": "Puoi operare su un solo gruppo alla volta", + "send_invite": "Invia invito all'utente", + "warning": "Attenzione: non usare \"Invia invito\" se l'email non è valida. Usa invece \"Aggiungi a Split Pro\". Il tuo account verrà bloccato se questa funzione viene utilizzata in modo improprio" + }, + "split_type_section": { + "split_equally": "diviso equamente", + "split_unequally": "diviso non equamente", + "types": { + "adjustment": { + "remaining_to_split_equally": "Rimanente da dividere equamente", + "title": "Aggiustamento" + }, + "equal": { + "per_person": "a persona", + "title": "Uguale" + }, + "exact": { + "remaining": "Rimanenti", + "title": "Esatto" + }, + "percentage": { + "remaining": "Rimanenti", + "title": "Percentuale" + }, + "share": { + "shares": "Condivisione/i", + "title": "Condivisioni", + "total_shares": "Condivisioni totali" + } + } + }, + "sponsor_us": "Supportaci", + "upload_file": { + "messages": { + "upload_success": "File caricato con successo" + } + }, + "user_input": { + "add_more_friends": "Cerca amici, gruppi o aggiungi email", + "cannot_change_group": "Impossibile cambiare gruppo durante la modifica", + "remove_group": "Premi elimina per rimuovere il gruppo", + "search_friends": "Cerca amici, gruppi o aggiungi email" + } + }, + "already_added": "Già aggiunto", + "balance_list": { + "are_settled_up": "siete pari", + "is_settled_up": "è pari", + "press_balance_info": "Premi sul saldo individuale per avviare il regolamento" + }, + "bank_transactions": "Transazioni bancarie", + "clear": "Pulisci", + "delete_expense_details": { + "text": "Questa azione non può essere annullata. La spesa verrà eliminata definitivamente.", + "title": "Sei sicuro di voler eliminare questa spesa?" + }, + "multiple_transactions": { + "add_all": "Aggiungi tutto", + "add_one_by_one": "Aggiungi uno alla volta", + "description": "Hai selezionato più transazioni. Scegli se desideri aggiungerle tutte insieme con le impostazioni di suddivisione correnti o modificare le impostazioni una per una.", + "title": "Aggiungi più transazioni" + }, + "no_transactions_yet": "Nessuna transazione ancora", + "pending": "In sospeso", + "submit_all": "Invia tutto", + "title": "Aggiungi spesa", + "title_mobile": "Aggiungi" + }, + "group_details": { + "add_members": "Aggiungi membri", + "copied": "Copiato", + "create_group": { + "group_name_placeholder": "Nome del gruppo", + "title": "Crea un gruppo" + }, + "group_info": { + "actions": "Azioni", + "archive_group": "Archivia gruppo", + "archive_group_details": { + "can_archive": "Questo gruppo verrà archiviato e nascosto dalla tua lista principale dei gruppi. Potrai comunque accedervi più tardi se necessario.", + "cant_archive": "Non è possibile archiviare un gruppo con saldi in sospeso. Tutti i saldi devono essere saldati prima.", + "title": "Sei sicuro di voler archiviare questo gruppo?" + }, + "archived": "Archiviato", + "delete_group": "Elimina gruppo", + "delete_group_details": { + "can_delete": "L'azione non sarà reversibile", + "cant_delete": "Non è possibile eliminare il gruppo finché tutti non saldano il saldo", + "title": "Sei assolutamente sicuro?" + }, + "group_created": "Creazione gruppo", + "leave_group": "Abbandona gruppo", + "leave_group_details": { + "can_leave": "L'azione non sarà reversibile", + "cant_leave": "Non puoi lasciare il gruppo finché il saldo in sospeso non sarà saldato", + "title": "Sei assolutamente sicuro?" + }, + "members": "Membri", + "recalculate_balances": "Ricalcola saldi", + "recalculate_balances_details": { + "description": "Se i saldi non corrispondono alle spese, puoi ricalcolarli. Nota che potrebbe richiedere del tempo se il numero di spese è elevato. I saldi esterni al gruppo non saranno interessati.", + "title": "Sei sicuro?" + }, + "remove_member_details": { + "can_remove": "Stai per rimuovere questo membro dal gruppo", + "cant_remove": "Non puoi rimuovere il membro finché il suo saldo non è saldato", + "title": "Sei assolutamente sicuro?" + }, + "simplify_debts": "Semplifica debiti", + "title": "Informazioni gruppo" + }, + "group_statistics": { + "first_expense": "Prima spesa", + "title": "Statistiche gruppo", + "total_expenses": "Spese totali" + }, + "messages": { + "balances_recalculated": "Saldi ricalcolati con successo", + "group_archived": "Gruppo archiviato con successo", + "group_name_updated": "Nome del gruppo aggiornato" + }, + "no_members": { + "add_members": "Aggiungi membri", + "add_members_details": { + "add_to_split_pro": "Aggiungi a Split Pro", + "note": "Nota: l'invio di inviti è disabilitato per ora a causa dello spam", + "placeholder": "Inserisci il nome o l'email", + "send_invite": "Invia invito all'utente", + "title": "Aggiungi membri", + "warning": "Attenzione: non usare \"Invia invito\" se l'email non è valida. Usa invece \"Aggiungi a Split Pro\". Il tuo account verrà bloccato se questa funzione viene utilizzata in modo improprio" + }, + "copied": "Copiato", + "invite_link": "Condividi il link d'invito", + "no_members": "Nessun membro nel gruppo ancora." + }, + "tabs": { + "balances": "Saldi", + "expenses": "Spese" + }, + "title": "Saldi in sospeso del gruppo" + }, + "invite_message": { + "in_splitpro": "in Splitpro", + "join_to": "Unisciti a", + "text": "Unisciti al gruppo e potrai aggiungere, gestire spese e tracciare i tuoi saldi" + }, + "meta": { + "application_name": "SplitPro", + "description": "Dividi le spese con i tuoi amici gratuitamente", + "title": "SplitPro: Dividi le spese con i tuoi amici gratuitamente" + }, + "navigation": { + "account": "Account", + "activity": "Attività", + "add": "Aggiungi", + "add_expense": "Aggiungi spesa", + "app_name": "SplitPro", + "balances": "Saldi", + "groups": "Gruppi", + "recurring": "Ricorrente" + }, + "recurrence": { + "cron_expression": "Espressione Cron", + "days_of_month": "Giorni del mese", + "days_of_week": "Giorni della settima", + "delete_description": "Questo interromperà la creazione di spese future. Le spese già create da questa ricorrenza non saranno eliminate.", + "delete_title": "Elimina ricorrenza", + "derived_delete_warning": "Questa spesa fa parte di una ricorrenza. Verrà eliminata solo questa spesa. Le future spese ricorrenti continueranno.", + "derived_edit_warning": "Questa spesa fa parte di una ricorrenza. Le modifiche influenzeranno solo questa spesa.", + "description": "Imposta una ricorrenza automatica per questa spesa.", + "edit_confirmation_title": "Modifica spesa ricorrente", + "edit_description": "Questo cambierà il programma delle spese future. Le spese già create non saranno modificate.", + "edit_title": "Modifica ricorrenza", + "empty": "Ancora nessuna spesa ricorrente", + "expense_for_the_amount_of": "Spesa {name} di {amount} {currency}", + "last_day": "Ultimo giorno", + "months": "Mesi", + "never": "Nessuna pianificazione configurata", + "recurring": "Ricorrente", + "schedule_type": { + "custom": "Personalizzata", + "day": "Giornaliera", + "month": "Mensile", + "never": "Mai", + "week": "Settimanale", + "year": "Annuale" + }, + "template_delete_warning": "Questa è una spesa ricorrente modello. Eliminandola si interromperanno tutte le future spese ricorrenti.", + "template_edit_warning": "Questa è una spesa ricorrente modello. Le modifiche si applicheranno a tutte le future spese ricorrenti.", + "time_of_day": "Ora del giorno", + "title": "Ricorrenza", + "view_recurring_page": "Visualizza pagina ricorrenze" + }, + "ui": { + "added_by": "Aggiunto da", + "and": "e", + "balance": "saldo", + "balances": "saldi", + "delete": "Elimina", + "deleted_by": "Eliminato da", + "edited_by": "Modificato da", + "expense": { + "for": "per", + "from": "da", + "paid_by": "Pagato da", + "received_by": "Ricevuto da", + "to": "a", + "user": { + "deleted": "ha eliminato", + "get": "riceve", + "lent": "ha prestato", + "owe": "deve", + "paid": "ha pagato", + "pay": "paga", + "received": "ha ricevuto" + }, + "you": { + "deleted": "hai eliminato", + "get": "ricevi", + "lent": "hai prestato", + "owe": "devi", + "paid": "hai pagato", + "pay": "paga", + "received": "hai ricevuto" + } + }, + "expense_details": "Dettagli spesa", + "in_group": "Nel gruppo", + "no_activity": "Nessuna attività ancora", + "not_involved": "Non coinvolto", + "not_set": "Non impostato", + "on": "il", + "or": "o", + "outstanding_balances": "Saldi in sospeso", + "select_balance": "Seleziona saldo", + "select_currency": "Seleziona valuta", + "settle_up_name": "Regola", + "settled_up": "Regolato", + "settlement": "Regolamento", + "share_text": "Dai un'occhiata a SplitPro. È un'alternativa gratuita e open source a Splitwise", + "show_all_currencies": "Mostra tutte le valute", + "today": "Oggi", + "total_balance": "Saldo totale" + } +} diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json new file mode 100644 index 0000000..5bef79d --- /dev/null +++ b/public/locales/nl/common.json @@ -0,0 +1,454 @@ +{ + "account": { + "change_language": "Taal wijzigen", + "change_language_details": { + "messages": { + "language_changed": "Taal succesvol gewijzigd" + }, + "no_language_found": "Geen taal gevonden.", + "placeholder": "Selecteer een taal", + "title": "Selecteer een taal" + }, + "debug_info": "Foutopsporingsinformatie", + "debug_info_details": { + "copy_failed": "Foutopsporingsbericht naar klembord kopiëren mislukt", + "description": "Plak hieronder de informatie bij het aanmaken van een ondersteuningsaanvraag:", + "git": "Git", + "new_version_available": "Een nieuwere versie is beschikbaar:", + "send_test_notification": "Verstuur testnotificatie", + "test_notification_failed": "Niet gelukt om testnotificatie te versturen", + "test_notification_sent": "Testnotificatie verstuurd", + "title": "Foutopsporingsinformatie", + "user_agent": "UserAgent", + "version": "Versie" + }, + "default_balance_currency": "Standaard saldo munteenheid", + "download_app": "App downloaden", + "download_app_details": { + "download_as_pwa": "Je kan SplitPro downloaden naar je startscherm als PWA.", + "title": "App downloaden", + "using_android": "Als je Android gebruikt, kijk dan hier eens naar", + "using_ios": "Als je iOS gebruikt, kijk dan hier eens naar", + "video": "video" + }, + "download_splitpro_data": "SplitPro gegevens downloaden", + "edit_name": { + "apply_avatar": "Avatar toepassen", + "avatar_label": "Profielfoto", + "avatar_preview": "Voorvertoning avatar", + "placeholder": "Naam invoegen", + "remove_avatar": "Avatar verwijderen", + "select_avatar": "Selecteer foto", + "title": "Details bewerken", + "zoom": "Inzoomen" + }, + "follow_on_x": "Volg ons op X", + "import_from_splitwise": "Importeren vanuit Splitwise", + "import_from_splitwise_details": { + "choose_file": "Kies bestand", + "export_splitwise_data_button": "Exporteer Splitwise gegevens", + "follow_to_export_splitwise_data": "Volg deze link om de Splitwise gegevens te exporteren", + "messages": { + "import_success": "Succesvol geïmporteerd" + }, + "no_file_chosen": "Geen bestand gekozen", + "note": "Info: Momenteel importeert het enkel vrienden en groepen. Het importeert nog geen transacties. We werken er aan." + }, + "logout": "Uitloggen", + "messages": { + "submit_error": "Details updaten mislukt", + "submit_success": "Details bijgewerkt" + }, + "notifications": { + "disable_notification": "Notificatie uitschakelen", + "enable_notification": "Notificatie inschakelen", + "messages": { + "notification_granted": "Je zal vanaf nu notificaties ontvangen" + } + }, + "star_on_github": "Volg ons op GitHub", + "submit_feedback": "Feedback indienen", + "submit_feedback_details": { + "placeholder": "Vul jouw feedback in", + "title": "Feedback indienen" + }, + "support_us": "Sponsor ons", + "title": "Account", + "write_review": "Schrijf een recensie" + }, + "actions": { + "add_expense": "Uitgave toevoegen", + "back": "Terug", + "cancel": "Annuleren", + "close": "Sluiten", + "confirm": "Bevestigen", + "connect": "Verbinden", + "copy": "Kopiëren", + "create": "Aanmaken", + "edit_expense": "Uitgave bewerken", + "export": "Exporteren", + "fetch": "Ophalen", + "import": "Importeren", + "invite": "Uitnodigen", + "leave": "Verlaten", + "next": "Volgende", + "reconnect": "Opnieuw verbinden", + "save": "Opslaan", + "settle_up": "Vereffenen", + "submit": "Indienen" + }, + "actors": { + "all": "Alle", + "friends": "Vrienden", + "groups": "Groepen", + "members": "Leden", + "owner": "Eigenaar", + "you": "Jij", + "you_accusativus": "Jou", + "you_dativus": "Jou" + }, + "auth": { + "continue_with": "Doorgaan met {provider}", + "email_placeholder": "Voer je e-mailadres in", + "no_providers_configured": "Geen authenticatieproviders geconfigureerd", + "no_providers_instructions": "Configureer ten minste één authenticatieprovider om in te loggen. Zie de", + "otp_sent": "We hebben een e-mail met de OTP verzonden. Controleer je inbox en klik op de link in de e-mail om in te loggen.", + "send_magic_link": "Stuur magische link", + "sending": "Verzenden...", + "setup_instructions": "Docker installatie-instructies", + "trouble_logging_in": "Problemen met inloggen? Neem contact op" + }, + "balances": { + "default_split": { + "cleared": "Standaardsplitsing gewist", + "configure": "Standaardsplitsing", + "updated": "Standaardsplitsing bijgewerkt" + }, + "user_preferences": { + "title": "Voorkeuren" + } + }, + "bank_transactions": { + "choose_bank_provider": "Kies financiële instelling", + "no_bank_providers_found": "Geen financiële instelling gevonden", + "plaid": { + "bank_connected_successfully": "Bank succesvol verbonden", + "bank_connection_cancelled": "Verbinding met bank geannuleerd", + "bank_connection_failed": "Mislukt om te verbinden met de bank" + }, + "search_bank": "Zoek bank", + "select_bank_provider": "Selecteer financiële instelling", + "to_bank": "naar bank" + }, + "currency_conversion": { + "amount_to_receive": "Bedrag te ontvangen", + "description": "Converteer het bedrag naar een andere munteenheid.", + "exchange_rate": "Wisselkoers", + "fetching_rate": "Wisselkoers ophalen...", + "rate": "Koers", + "success_toast": "Valutaconversie succesvol ingesteld", + "title": "Valutaconversie" + }, + "errors": { + "currency_conversion_error": "Fout bij het instellen van de valutaconversie", + "currency_conversion_failed": "Het omrekenen van valuta mislukt", + "currency_conversion_malformed": "De gegevens voor de valutaconversie zijn onjuist", + "email_invalid": "E-mailadres is ongeldig, probeer het inlogproces opnieuw.", + "email_required": "E-mailadres is vereist", + "feedback_min_length": "Feedback moet ten minste 10 tekens hebben", + "feedback_required": "Feedback is vereist", + "group_balances_malformed": "De gegevens van de groepssaldo's zijn onjuist. Meld dit als een probleem of probeer de berekening opnieuw uit te voeren.", + "group_name_update_failed": "Fout bij het bijwerken van de groepsnaam", + "image_compression_failed": "Afbeeldingscompressie mislukt, origineel bestand wordt geüpload", + "import_failed": "Fout bij importeren bestand", + "invalid_cron_expression": "Ongeldige cron-uitdrukking", + "invalid_currency_code": "Ongeldige valutacode {code}", + "invalid_split": "Bepaal wie deze kosten moet betalen voordat je het opslaat.", + "language_change_failed": "Fout bij taalwijziging", + "less_than": "Bestand moet minder dan {size} MB zijn", + "name_required": "Naam is vereist", + "no_providers": "Fout bij het ophalen van authenticatieproviders. Controleer de backend-logbestanden.", + "notification_not_supported": "Notificaties worden niet ondersteund", + "otp_invalid": "Ongeldige OTP", + "otp_required": "OTP is vereist", + "recurrence_delete_failed": "Het verwijderen van de terugkerende betaling is mislukt", + "recurrence_update_failed": "Het bijwerken van de terugkerende betaling is mislukt", + "request_error": "Fout bij ophalen notificatie", + "saving_expense": "Fout tijdens het opslaan van de uitgave", + "setting_update_failed": "Instelling bijwerken mislukt", + "signin_error": "Een fout deed zich voor bij het inloggen: {error}", + "signup_disabled": "Het registreren van nieuwe accounts is uitgeschakeld op deze instantie", + "something_went_wrong": "Er is iets misgegaan", + "subscribe_error": "Aanmelden voor meldingen niet mogelijk", + "unsubscribe_error": "Fout bij het afmelden van meldingen", + "upload_failed": "Bestand uploaden mislukt", + "uploading_error": "Fout bij uploaden bestand", + "valid_email": "Voer een geldig e-mailadres in" + }, + "expense_details": { + "add_expense": "Uitgave toevoegen", + "add_expense_details": { + "add_new_expense": "Nieuwe uitgave toevoegen", + "amount_placeholder": "Bedrag invullen", + "description_placeholder": "Beschrijving invullen", + "pick_a_date": "Kies een datum", + "select_user_or_group": { + "add_to_split_pro": "Toevoegen aan SplitPro", + "note": "Info: uitnodigingen versturen is voorlopig uitgeschakeld omwille van spam", + "only_one_group_time": "Je kunt maar één groep tegelijk hebben", + "send_invite": "Uitnodiging naar gebruiker versturen", + "warning": "Waarschuwing: Gebruik de functie 'Uitnodiging versturen' niet als het e-mailadres ongeldig is. Gebruik in plaats daarvan 'Toevoegen aan SplitPro'. Je account wordt geblokkeerd als deze functie wordt misbruikt" + }, + "split_type_section": { + "direction": { + "no_money_flow": "Niemand anders is iets verschuldigd", + "owes_payer": "{debtor} is {payer} verschuldigd", + "owes_you": "{debtor} is je geld verschuldigd", + "you_owe": "Je bent {payer} geld verschuldigd" + }, + "split_equally": "gelijk verdelen", + "split_unequally": "ongelijk verdelen", + "types": { + "adjustment": { + "remaining_to_split_equally": "Resterend gelijk te verdelen", + "title": "Aanpassing" + }, + "equal": { + "per_person": "per persoon", + "title": "Gelijk" + }, + "exact": { + "remaining": "Resterend", + "title": "Exact" + }, + "percentage": { + "remaining": "Resterend", + "title": "Percentage" + }, + "share": { + "shares": "Delen", + "title": "Aandeel", + "total_shares": "Totaal aantal delen" + } + } + }, + "sponsor_us": "Sponsor ons", + "upload_file": { + "messages": { + "upload_success": "Bestand succesvol opgeladen" + } + }, + "user_input": { + "add_more_friends": "Zoek vrienden, groepen of voeg een e-mailadres toe", + "cannot_change_group": "Je kunt tijdens het bewerken niet van groep wisselen", + "remove_group": "Klik op delete om de groep te verwijderen", + "search_friends": "Zoek vrienden, groepen of voeg een e-mailadres toe" + } + }, + "already_added": "Al toegevoegd", + "balance_list": { + "are_settled_up": "zijn verrekend", + "is_settled_up": "is verrekend", + "press_balance_info": "Klik op de individuele balans om de afrekening te starten" + }, + "bank_transactions": "Banktransacties", + "clear": "Wissen", + "delete_expense_details": { + "text": "Deze actie kan niet ongedaan worden gemaakt. De uitgave wordt definitief verwijderd.", + "title": "Ben je absoluut zeker?" + }, + "multiple_transactions": { + "add_all": "Alles toevoegen", + "add_one_by_one": "Één per één toevoegen", + "description": "Je hebt meerdere transacties geselecteerd. Kies of je ze allemaal tegelijk wilt toevoegen met de huidige splitsinstellingen, of dat je de instellingen één voor één wilt aanpassen.", + "title": "Meerdere transacties toevoegen" + }, + "no_transactions_yet": "Nog geen transacties", + "pending": "In behandeling", + "submit_all": "Alles indienen", + "title": "Uitgave toevoegen", + "title_mobile": "Toevoegen" + }, + "group_details": { + "add_members": "Leden toevoegen", + "copied": "Gekopieerd", + "create_group": { + "group_name_placeholder": "Groepsnaam", + "title": "Groep aanmaken" + }, + "group_info": { + "actions": "Acties", + "archive_group": "Groep archiveren", + "archive_group_details": { + "can_archive": "Deze groep wordt gearchiveerd en verborgen in je groepslijst. Je kunt er later nog steeds bij.", + "cant_archive": "Kan geen groep archiveren met openstaande saldo's. Alle saldo's moeten eerst worden vereffend.", + "title": "Ben je zeker dat je deze groep wilt archiveren?" + }, + "archived": "Gearchiveerd", + "configure_default_split": "Standaardsplitsing instellen", + "default_balance_currency": "Standaard valuta", + "default_split": "Standaardsplitsing", + "delete_group": "Groep verwijderen", + "delete_group_details": { + "can_delete": "Deze handeling kan niet ongedaan worden gemaakt", + "cant_delete": "De groep kan pas worden verwijderd als iedereen zijn saldo heeft vereffend", + "title": "Ben je absoluut zeker?" + }, + "edit_group": "Groep bewerken", + "group_created": "Groep aangemaakt", + "leave_group": "Groep verlaten", + "leave_group_details": { + "can_leave": "Deze handeling kan niet ongedaan worden gemaakt", + "cant_leave": "Je kunt de groep pas verlaten als je openstaand saldo is vereffend", + "title": "Ben je absoluut zeker?" + }, + "members": "Leden", + "recalculate_balances": "Saldo's opnieuw berekenen", + "recalculate_balances_details": { + "description": "Als de saldo's niet overeenkomen met de uitgaven, kan je ze opnieuw berekenen. Dit kan even duren bij een groot aantal uitgaven. Saldo's buiten de groep worden niet beïnvloed.", + "title": "Ben je zeker?" + }, + "remove_member_details": { + "can_remove": "Je staat op het punt dit lid uit de groep te verwijderen", + "cant_remove": "Lid kan niet verwijderd worden zolang er een openstaand saldo is", + "title": "Ben je absoluut zeker?" + }, + "simplify_debts": "Schulden vereenvoudigen", + "title": "Groepsinfo" + }, + "group_statistics": { + "first_expense": "Eerste uitgave", + "title": "Groepsstatistieken", + "total_expenses": "Totale uitgaven" + }, + "messages": { + "balances_recalculated": "Saldo's succesvol herberekend", + "default_balance_currency_cleared": "Standaard saldo munteenheid gewist", + "default_balance_currency_updated": "Standaard saldo munteenheid bijgewerkt", + "default_split_cleared": "Standaardsplitsing gewist", + "default_split_updated": "Standaardsplitsing bijgewerkt", + "group_archived": "Groep succesvol gearchiveerd", + "group_name_updated": "Groepsgegevens bijgewerkt" + }, + "no_members": { + "add_members": "Leden toevoegen", + "add_members_details": { + "add_to_split_pro": "Toevoegen aan SplitPro", + "note": "Info: uitnodigingen per e-mail zijn uitgeschakeld", + "placeholder": "Naam of e-mailadres invoeren", + "send_invite": "Uitnodiging naar gebruiker versturen", + "title": "Leden toevoegen", + "warning": "Waarschuwing: Gebruik de functie 'Uitnodiging versturen' niet als het e-mailadres ongeldig is. Gebruik in plaats daarvan 'Toevoegen aan SplitPro'. Je account wordt geblokkeerd als deze functie wordt misbruikt" + }, + "invite_link": "Uitnodigingslink", + "no_members": "Nog geen leden in de groep." + }, + "tabs": { + "balances": "Saldo's", + "expenses": "Uitgaven" + }, + "title": "Openstaande groepssaldo's" + }, + "invite_message": { + "in_splitpro": "in SplitPro", + "join_to": "Doe mee met", + "text": "Word lid van de groep en voeg uitgaven toe, beheer ze en houd je saldo bij" + }, + "meta": { + "application_name": "SplitPro", + "description": "Deel uitgaven gratis met je vrienden", + "title": "SplitPro: Deel uitgaven gratis met je vrienden" + }, + "navigation": { + "account": "Account", + "activity": "Activiteit", + "add": "Toevoegen", + "add_expense": "Uitgave toevoegen", + "balances": "Saldo's", + "groups": "Groepen", + "recurring": "Terugkerend" + }, + "recurrence": { + "cron_expression": "Cron-uitdrukking", + "days_of_month": "Dagen van de maand", + "days_of_week": "Dagen van de week", + "delete_description": "Hierdoor worden er in de toekomst geen nieuwe uitgaven meer aangemaakt. Bestaande uitgaven die door deze terugkerende actie zijn aangemaakt, worden niet verwijderd.", + "delete_title": "Herhaling verwijderen", + "derived_delete_warning": "Deze uitgave maakt deel uit van een terugkerende post. Alleen deze uitgave wordt verwijderd. Toekomstige terugkerende uitgaven blijven bestaan.", + "derived_edit_warning": "Deze uitgave maakt deel uit van een reeks terugkerende uitgaven. Wijzigingen hebben alleen gevolgen voor deze uitgave.", + "description": "Stel automatische herhaling in voor deze uitgave.", + "edit_confirmation_title": "Terugkerende uitgave bewerken", + "edit_description": "Dit zal de planning voor toekomstige uitgaven veranderen. Bestaande uitgaven blijven ongewijzigd.", + "edit_title": "Herhaling bewerken", + "empty": "Nog geen terugkerende uitgaven", + "expense_for_the_amount_of": "Uitgave {name} voor het bedrag van {amount} {currency}", + "last_day": "Laatste dag", + "months": "Maanden", + "never": "Geen planning ingesteld", + "recurring": "Terugkerend", + "schedule_type": { + "custom": "Aangepast", + "day": "Dagelijks", + "month": "Maandelijks", + "never": "Nooit", + "week": "Wekelijks", + "year": "Jaarlijks" + }, + "template_delete_warning": "Dit is een sjabloon voor terugkerende uitgaven. Dit verwijderen zal alle toekomstige terugkerende uitgaven stoppen.", + "template_edit_warning": "Dit is een sjabloon voor terugkerende uitgaven. Wijzigingen worden toegepast op alle toekomstige terugkerende uitgaven.", + "time_of_day": "Tijdstip", + "title": "Herhaling", + "view_recurring_page": "Terugkerende uitgaven bekijken" + }, + "ui": { + "added_by": "Toegevoegd door", + "and": "en", + "balance": "saldo", + "balances": "saldo's", + "delete": "Verwijderen", + "deleted_by": "Verwijderd door", + "edited_by": "Aangepast door", + "expense": { + "for": "voor", + "from": "van", + "paid_by": "Betaald door", + "received_by": "Ontvangen door", + "to": "aan", + "user": { + "deleted": "verwijderde", + "get": "krijgt", + "lent": "heeft geleend", + "owe": "is verschuldigd", + "paid": "betaalde", + "pay": "betaalt", + "received": "ontving" + }, + "you": { + "deleted": "verwijderde", + "get": "krijgt", + "lent": "hebt geleend", + "owe": "bent verschuldigd", + "paid": "betaald", + "pay": "betaalt", + "received": "ontving" + } + }, + "expense_details": "Uitgavedetails", + "in_group": "In groep", + "no_activity": "Nog geen activiteit", + "not_involved": "Niet betrokken", + "not_set": "Niet ingesteld", + "on": "op", + "or": "of", + "outstanding_balances": "Openstaande saldo's", + "select_balance": "Saldo selecteren", + "select_currency": "Selecteer munteenheid", + "settle_up_name": "Vereffenen", + "settled_up": "Vereffend", + "settlement": "Schikking", + "share_text": "Bekijk SplitPro. Het is een gratis open source alternatief voor Splitwise", + "show_all_currencies": "Alle munteenheden tonen", + "today": "Vandaag", + "total_balance": "Totaal saldo" + } +} diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json new file mode 100644 index 0000000..e059a80 --- /dev/null +++ b/public/locales/pl/common.json @@ -0,0 +1,459 @@ +{ + "account": { + "change_language": "Zmień język", + "change_language_details": { + "messages": { + "language_changed": "Język zmieniony pomyślnie" + }, + "no_language_found": "Nie znaleziono języka.", + "placeholder": "Wybierz język", + "title": "Wybierz język" + }, + "debug_info": "Informacje dotyczące debugowania", + "debug_info_details": { + "copy_failed": "Nie udało się skopiować informacji debugowania do schowka", + "description": "Podczas tworzenia zgłoszenia do pomocy technicznej wklej poniższe informacje:", + "git": "Git", + "new_version_available": "Nowa wersja jest dostępna:", + "send_test_notification": "Wyślij powiadomienie testowe", + "test_notification_failed": "Nie udało się wysłać powiadomienia testowego", + "test_notification_sent": "Wysłano powiadomienie testowe", + "title": "Informacje dotyczące debugowania", + "user_agent": "Nagłówek UserAgent", + "version": "Wersja" + }, + "default_balance_currency": "Domyślna waluta bilansu", + "download_app": "Pobierz aplikację", + "download_app_details": { + "download_as_pwa": "Możesz pobrać SplitPro jako PWA na swój ekran główny.", + "title": "Pobierz aplikację", + "using_android": "Jeśli używasz Androida, sprawdź ten", + "using_ios": "Jeśli używasz iOS, sprawdź ten", + "video": "film" + }, + "download_splitpro_data": "Pobierz dane SplitPro", + "edit_name": { + "apply_avatar": "Zastosuj awatar", + "avatar_label": "Zdjęcie profilowe", + "avatar_preview": "Podgląd awatara", + "placeholder": "Wprowadź nazwę", + "remove_avatar": "Usuń awatar", + "select_avatar": "Wybierz obraz", + "title": "Edytuj szczegóły", + "zoom": "Przybliżenie" + }, + "follow_on_x": "Śledź nas na X", + "import_from_splitwise": "Importuj ze Splitwise", + "import_from_splitwise_details": { + "choose_file": "Wybierz plik", + "export_splitwise_data_button": "Eksportuj dane splitwise", + "follow_to_export_splitwise_data": "Kliknij ten link aby wyeksportować dane z splitwise", + "messages": { + "import_success": "Import zakończony pomyślnie" + }, + "no_file_chosen": "Nie wybrano pliku", + "note": "Uwaga: Obecnie obsługuje tylko importowanie znajomych i grup. Nie importuje transakcji. Pracujemy nad tym." + }, + "logout": "Wyloguj", + "messages": { + "submit_error": "Nie udało się zmienić szczegółów", + "submit_success": "Zaktualizowano szczegóły" + }, + "notifications": { + "disable_notification": "Wyłącz powiadomienia", + "enable_notification": "Włącz powiadomienia", + "messages": { + "notification_granted": "Będziesz teraz otrzymywać powiadomienia" + } + }, + "star_on_github": "Zostaw gwiazdkę na GitHub", + "submit_feedback": "Prześlij opinię", + "submit_feedback_details": { + "placeholder": "Wprowadź swoją opinię", + "title": "Prześlij opinię" + }, + "support_us": "Wesprzyj nas", + "title": "Konto", + "write_review": "Napisz recenzję" + }, + "actions": { + "add_expense": "Dodaj wydatek", + "back": "Wstecz", + "cancel": "Anuluj", + "close": "Zamknij", + "confirm": "Potwierdź", + "connect": "Połącz", + "copy": "Kopiuj", + "create": "Utwórz", + "edit_expense": "Edytuj wydatek", + "export": "Eksportuj", + "fetch": "Pobierz", + "import": "Importuj", + "invite": "Zaproś", + "leave": "Opuść", + "next": "Następny", + "reconnect": "Połącz ponownie", + "save": "Zapisz", + "settle_up": "Rozlicz", + "submit": "Zapisz" + }, + "actors": { + "all": "Wszyscy", + "friends": "Znajomi", + "groups": "Grupy", + "members": "Członkowie", + "owner": "Właściciel", + "you": "Ty", + "you_accusativus": "Tobie", + "you_dativus": "Ciebie" + }, + "auth": { + "continue_with": "Kontynuuj z {provider}", + "email_placeholder": "Wprowadź swój email", + "no_providers_configured": "Brak skonfigurowanych dostawców uwierzytelniania", + "no_providers_instructions": "Skonfiguruj przynajmniej jednego dostawcę uwierzytelniania, aby się zalogować. Zobacz", + "otp_sent": "Wysłaliśmy email z kodem OTP. Sprawdź swoją skrzynkę odbiorczą i kliknij link w emailu, aby się zalogować.", + "send_magic_link": "Wyślij magiczny link", + "sending": "Wysyłanie...", + "setup_instructions": "instrukcje konfiguracji Docker", + "trouble_logging_in": "Problemy z logowaniem? Skontaktuj się" + }, + "balances": { + "default_split": { + "cleared": "Wyczyszczono domyślny podział", + "configure": "Domyślny podział", + "updated": "Zmieniono domyślny podział" + }, + "user_preferences": { + "title": "Preferencje" + } + }, + "bank_transactions": { + "choose_bank_provider": "Wybierz bank", + "no_bank_providers_found": "Nie znaleziono żadnych dostawców usług bankowych", + "plaid": { + "bank_connected_successfully": "Bank połączony pomyślnie", + "bank_connection_cancelled": "Połączenie z bankiem zostało przerwane", + "bank_connection_failed": "Nie udało się połączyć z bankiem" + }, + "search_bank": "Wyszukaj bank", + "select_bank_provider": "Wybierz dostawcę usług bankowych", + "to_bank": "Do banku" + }, + "currency_conversion": { + "amount_to_receive": "Kwota do otrzymania", + "description": "Przelicz kwotę na inną walutę.", + "exchange_rate": "Kurs wymiany", + "fetching_rate": "Pobieranie kursu...", + "rate": "Kurs", + "success_toast": "Konwersja waluty ustawiona pomyślnie", + "title": "Konwersja waluty" + }, + "errors": { + "amount_required": "Kwota jest wymagana", + "currency_conversion_error": "Błąd podczas ustawiania konwersji waluty", + "currency_conversion_failed": "Nie udało się zamienić walut", + "currency_conversion_malformed": "Dane zamiany walut są nieprawidłowe", + "description_required": "Opis jest wymagany", + "email_invalid": "Email jest nieprawidłowy, spróbuj ponownie proces logowania.", + "email_required": "Email jest wymagany", + "feedback_min_length": "Opinia powinna mieć co najmniej 10 znaków", + "feedback_required": "Opinia jest wymagana", + "group_balances_malformed": "Dane dotyczące sald grupowych są nieprawidłowe. Proszę zgłosić problem lub spróbować ponownie wykonać obliczenia.", + "group_name_update_failed": "Błąd podczas aktualizacji nazwy grupy", + "group_required": "Grupa jest wymagana", + "image_compression_failed": "Kompresja obrazu nie powiodła się. Wczytuję oryginalny plik", + "import_failed": "Błąd podczas importowania pliku", + "invalid_cron_expression": "Błędne wyrażenie cron", + "invalid_currency_code": "Nieprawidłowy kod waluty {code}", + "language_change_failed": "Błąd podczas zmiany języka", + "less_than": "Plik powinien być mniejszy niż {size}MB", + "name_required": "Nazwa jest wymagana", + "no_providers": "Błąd podczas pobierania dostawców uwierzytelniania. Sprawdź logi.", + "notification_not_supported": "Powiadomienia nie są obsługiwane", + "otp_invalid": "Nieprawidłowy kod OTP", + "otp_required": "Kod OTP jest wymagany", + "recurrence_delete_failed": "Nie udało się usunąć cyklicznego wydatku", + "recurrence_update_failed": "Nie udało się zaktualizować cyklicznego wydatku", + "request_error": "Błąd podczas żądania powiadomienia", + "saving_expense": "Błąd podczas zapisywania wydatku", + "setting_update_failed": "Nie udało się zaktualizować ustawienia", + "signin_error": "Wystąpił błąd podczas logowania: {error}", + "signup_disabled": "Rejestracja nowych kont jest wyłączona w tej instancji", + "something_went_wrong": "Coś poszło nie tak", + "subscribe_error": "Nie można zasubskrybować powiadomień", + "unsubscribe_error": "Błąd podczas anulowania subskrypcji powiadomień", + "upload_failed": "Nie udało się przesłać pliku", + "uploading_error": "Błąd podczas przesyłania pliku", + "valid_email": "Wprowadź prawidłowy email" + }, + "expense_details": { + "add_expense": "Dodaj wydatek", + "add_expense_details": { + "add_new_expense": "Dodaj nowy wydatek", + "amount_placeholder": "Wprowadź kwotę", + "description_placeholder": "Wprowadź opis", + "pick_a_date": "Wybierz datę", + "select_user_or_group": { + "add_to_split_pro": "Dodaj do Split Pro", + "note": "Uwaga: wysyłanie zaproszeń jest obecnie wyłączone z powodu spamu", + "only_one_group_time": "Możesz mieć tylko jedną grupę naraz", + "send_invite": "Wyślij zaproszenie do użytkownika", + "warning": "Ostrzeżenie: Nie używaj wysyłania zaproszenia, jeśli to nieprawidłowy email. Zamiast tego użyj dodaj do Split Pro. Twoje konto zostanie zablokowane, jeśli ta funkcja będzie nadużywana" + }, + "split_type_section": { + "split_equally": "podzielone równo", + "split_unequally": "podzielone nierówno", + "types": { + "adjustment": { + "remaining_to_split_equally": "Pozostało do równego podziału", + "title": "Korekta" + }, + "equal": { + "per_person": "na osobę", + "title": "Równo" + }, + "exact": { + "remaining": "Pozostało", + "title": "Dokładnie" + }, + "percentage": { + "remaining": "Pozostało", + "title": "Procent" + }, + "share": { + "shares": "Udział(y)", + "title": "Udział", + "total_shares": "Całkowite udziały" + } + } + }, + "sponsor_us": "Wesprzyj nas", + "upload_file": { + "messages": { + "upload_success": "Plik przesłany pomyślnie" + } + }, + "user_input": { + "add_more_friends": "Szukaj znajomych, grup lub dodaj email", + "cannot_change_group": "Nie można zmienić grupy podczas edycji", + "remove_group": "Naciśnij delete aby usunąć grupę", + "search_friends": "Szukaj znajomych, grup lub dodaj email" + } + }, + "already_added": "Już istnieje", + "balance_list": { + "are_settled_up": "rozliczono", + "is_settled_up": "rozliczono", + "press_balance_info": "Naciśnij na poszczególne saldo aby rozpocząć rozliczenie" + }, + "bank_transactions": "Operacje bankowe", + "clear": "Wyczyść", + "delete_expense_details": { + "text": "Ta akcja nie może być cofnięta. To trwale usunie twój wydatek.", + "title": "Czy masz absolutną pewność?" + }, + "expense_list": { + "not_involved": "Nie uczestniczysz", + "you_lent": "Pożyczono", + "you_owe": "Masz do zapłacenia" + }, + "expense_page": { + "expense_details": "Szczegóły wydatku", + "title": "Zaległe salda" + }, + "multiple_transactions": { + "add_all": "Dodaj wszystkie", + "add_one_by_one": "Dodaj pojedynczo", + "description": "Wybrałeś wiele transakcji. Zdecyduj czy chcesz dodać je wszystkie z obecnymi ustawieniami podziału czy dostosować ustawienia pojedynczo.", + "title": "Dodaj wiele transakcji" + }, + "no_transactions_yet": "Brak transakcji", + "pending": "Oczekuje", + "submit_all": "Dodaj wszystko", + "title": "Dodaj wydatek", + "title_mobile": "Dodaj" + }, + "group_details": { + "add_members": "Dodaj członków", + "copied": "Skopiowano", + "create_group": { + "group_name_placeholder": "Nazwa grupy", + "title": "Utwórz grupę" + }, + "group_info": { + "actions": "Akcje", + "archive_group": "Zarchiwizuj grupę", + "archive_group_details": { + "can_archive": "Ta grupa zostanie zarchiwizowana i usunięta z głównej listy grup. Nadal będziesz mógł uzyskać do niej dostęp później, jeśli będzie to potrzebne.", + "cant_archive": "Nie można zarchiwizować grupy z zaległymi saldami. Wszystkie salda muszą być najpierw rozliczone.", + "title": "Na pewno chcesz zarchiwizować tę grupę?" + }, + "archived": "Zarchiwizowano", + "configure_default_split": "Skonfiguruj domyślny podział", + "default_balance_currency": "Domyślna waluta salda", + "default_split": "Domyślny podział", + "delete_group": "Usuń grupę", + "delete_group_details": { + "can_delete": "Ta akcja nie może być cofnięta", + "cant_delete": "Nie można usunąć grupy, dopóki wszyscy się nie rozliczą", + "title": "Na pewno?" + }, + "edit_group": "Edytuj grupę", + "group_created": "Grupa utworzona", + "leave_group": "Opuść grupę", + "leave_group_details": { + "can_leave": "Ta akcja nie może być cofnięta", + "cant_leave": "Nie możesz opuścić grupy, dopóki twoje zaległe saldo nie zostanie rozliczone", + "title": "Na pewno?" + }, + "members": "Członkowie", + "recalculate_balances": "Przelicz salda", + "recalculate_balances_details": { + "description": "Jeśli salda nie odpowiadają wydatkom, możesz je przeliczyć. Uwaga, że może to zająć trochę czasu, jeśli liczba wydatków jest duża. Salda poza grupą nie będą dotknięte.", + "title": "Na pewno?" + }, + "remove_member_details": { + "can_remove": "Zamierzasz usunąć tę osobę z grupy", + "cant_remove": "Nie można usunąć tej osoby, dopóki nie zostanie rozliczona", + "title": "Na pewno?" + }, + "simplify_debts": "Uprość długi", + "title": "Informacje o grupie" + }, + "group_statistics": { + "first_expense": "Pierwszy wydatek", + "title": "Statystyki grupy", + "total_expenses": "Całkowite wydatki" + }, + "messages": { + "balances_recalculated": "Salda przeliczone pomyślnie", + "default_balance_currency_cleared": "Wyczyszczono domyślną walutę salda", + "default_balance_currency_updated": "Zmieniono domyślną walutę salda", + "default_split_cleared": "Wyczyszczono domyślny podział", + "default_split_updated": "Zmieniono domyślny podział", + "group_archived": "Grupa została pomyślnie zarchiwizowana", + "group_name_updated": "Zaktualizowano szczegóły grupy" + }, + "no_members": { + "add_members": "Dodaj członków", + "add_members_details": { + "add_to_split_pro": "Dodaj do Split Pro", + "note": "Uwaga: wysyłanie zaproszeń jest obecnie wyłączone z powodu spamu", + "placeholder": "Wprowadź imię lub email", + "send_invite": "Wyślij zaproszenie do użytkownika", + "title": "Dodaj członków", + "warning": "Ostrzeżenie: Nie używaj wysyłania zaproszenia, jeśli to nieprawidłowy email. Zamiast tego użyj dodaj do Split Pro. Twoje konto zostanie zablokowane, jeśli ta funkcja będzie nadużywana" + }, + "invite_link": "Link do zaproszenia", + "no_members": "Brak członków w grupie." + }, + "tabs": { + "balances": "Salda", + "expenses": "Wydatki" + }, + "title": "Zaległe salda grupy" + }, + "invite_message": { + "in_splitpro": "w Splitpro", + "join_to": "Dołącz do", + "text": "Dołącz do grupy, a będziesz mógł dodawać i zarządzać wydatkami oraz śledzić swoje salda" + }, + "meta": { + "application_name": "SplitPro", + "description": "Dziel wydatki ze znajomymi za darmo", + "title": "SplitPro: Dziel wydatki ze znajomymi za darmo" + }, + "navigation": { + "account": "Konto", + "activity": "Aktywność", + "add": "Dodaj", + "add_expense": "Dodaj Wydatek", + "balances": "Salda", + "groups": "Grupy", + "recurring": "Cykliczność" + }, + "recurrence": { + "cron_expression": "Wyrażenie Cron", + "days_of_month": "Dni miesiąca", + "days_of_week": "Dni tygodnia", + "delete_description": "Spowoduje zatrzymanie cyklicznego tworzenia wydatków. Istniejące wydatki utworzone z wykorzystaniem cykliczności nie zostaną usunięte.", + "delete_title": "Usuń cykliczność", + "derived_delete_warning": "Ten wydatek jest częścią wydatku cyklicznego. Tylko obecne wystąpienie zostanie usunięty. Przyszłe wystąpienia wydatku cykliczne będą dalej tworzone.", + "derived_edit_warning": "Ten wydatek jest częścią wydatku cyklicznego. Zmiany zostaną zastosowany wyłącznie do obecnego wydatku.", + "description": "Ustaw cykliczne dodawanie nowych wystąpień tego wydatku.", + "edit_confirmation_title": "Edytuj cykliczne wydatki", + "edit_description": "Spowoduje zmianę harmonogramu przyszłych wydatków. Istniejące wydatki nie zostaną zmienione.", + "edit_title": "Edytuj cykliczność", + "empty": "Brak wydatków cyklicznych", + "expense_for_the_amount_of": "Wydatek {name} w wysokości {amount} {currency}", + "last_day": "Ostatni dzień", + "months": "Miesiące", + "never": "Brak harmonogramu", + "recurring": "Cykliczne", + "schedule_type": { + "custom": "Niestandardowy", + "day": "Dzienny", + "month": "Miesięczny", + "never": "Nigdy", + "week": "Tygodniowy", + "year": "Roczny" + }, + "template_delete_warning": "To jest szablon wydatku cyklicznego. Usunięcie spowoduje zaprzestanie tworzenia wydatków cyklicznych.", + "template_edit_warning": "To jest szablon cyklicznych wydatków. Zmiany zostaną zastosowany do wszystkich przyszłych wydatków cyklicznych.", + "time_of_day": "Godzina", + "title": "Wydatek cykliczny", + "view_recurring_page": "Wyświetl stronę: Cykliczność" + }, + "ui": { + "added_by": "Dodane przez", + "and": "i", + "balance": "saldo", + "balances": "salda", + "delete": "Usuń", + "deleted_by": "Usunięte przez", + "edited_by": "Edytowane przez", + "expense": { + "for": "za", + "from": "od", + "paid_by": "Zapłacone przez", + "received_by": "Otrzymane przez", + "to": "do", + "user": { + "deleted": "usuwa", + "get": "dostaje", + "lent": "odzyskuje", + "owe": "ma do oddania", + "paid": "płaci", + "pay": "płaci", + "received": "dostaje" + }, + "you": { + "deleted": "usuwasz", + "get": "dostajesz", + "lent": "odzyskujesz", + "owe": "masz do oddania", + "paid": "płacisz", + "pay": "płacisz", + "received": "dostajesz" + } + }, + "expense_details": "Szczegóły wydatku", + "in_group": "W grupie", + "no_activity": "Brak aktywności", + "not_involved": "Nie uczestniczy", + "not_set": "Nie ustawiono", + "on": "dnia", + "or": "lub", + "outstanding_balances": "Zaległe salda", + "select_balance": "Wybierz saldo", + "select_currency": "Wybierz walutę", + "settle_up_name": "Rozlicz", + "settled_up": "Rozliczone", + "settlement": "Rozliczenie", + "share_text": "Sprawdź SplitPro. To darmowa alternatywa open source dla Splitwise", + "show_all_currencies": "Pokaż wszystkie waluty", + "today": "Dzisiaj", + "total_balance": "Saldo końcowe" + } +} diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json new file mode 100644 index 0000000..34ae8bd --- /dev/null +++ b/public/locales/pt-BR/common.json @@ -0,0 +1,447 @@ +{ + "account": { + "change_language": "Mudar idioma", + "change_language_details": { + "messages": { + "language_changed": "Idioma alterado" + }, + "no_language_found": "Nenhum idioma encontrado.", + "placeholder": "Selecione um idioma", + "title": "Selecionar idioma" + }, + "debug_info": "Info. de depuração", + "debug_info_details": { + "copy_failed": "Falha ao copiar info. de depuração", + "description": "Cole a informação abaixo ao criar uma solicitação de suporte:", + "git": "Git", + "new_version_available": "Uma nova versão está disponível:", + "send_test_notification": "Enviar notificação de teste", + "test_notification_failed": "Não foi possível enviar a notificação de teste", + "test_notification_sent": "Notificação de teste enviada", + "title": "Info. de Depuração", + "user_agent": "UserAgent", + "version": "Versão" + }, + "default_balance_currency": "Moeda de saldo padrão", + "download_app": "Instalar app", + "download_app_details": { + "download_as_pwa": "Você pode instalar o SplitPro como um PWA na sua tela inicial.", + "title": "Instalar app", + "using_android": "Se você estiver usando Android, veja este", + "using_ios": "Se você estiver usando iOS, veja este", + "video": "vídeo" + }, + "download_splitpro_data": "Baixar dados do SplitPro", + "edit_name": { + "apply_avatar": "Aplicar avatar", + "avatar_label": "Foto de perfil", + "avatar_preview": "Prévia do avatar", + "placeholder": "Insira o nome", + "remove_avatar": "Remover avatar", + "select_avatar": "Selecione a imagem", + "title": "Editar detalhes", + "zoom": "Zoom" + }, + "follow_on_x": "Siga-nos no X", + "import_from_splitwise": "Importar do Splitwise", + "import_from_splitwise_details": { + "choose_file": "Escolher arquivo", + "export_splitwise_data_button": "Exportar dados do Splitwise", + "follow_to_export_splitwise_data": "Siga este link para exportar os dados do Splitwise", + "messages": { + "import_success": "Importação realizada" + }, + "no_file_chosen": "Nenhum arquivo selecionado", + "note": "Aviso: Atualmente só é possível importar amigos e grupos. Transações não serão importadas. Estamos trabalhando nisso." + }, + "logout": "Fazer logout", + "messages": { + "submit_error": "Não foi possível atualizar os detalhes", + "submit_success": "Detalhe atualizado" + }, + "notifications": { + "disable_notification": "Desativar notificações", + "enable_notification": "Ativar notificações", + "messages": { + "notification_granted": "Você receberá notificações agora" + } + }, + "star_on_github": "Nos favorite no GitHub", + "submit_feedback": "Enviar feedback", + "submit_feedback_details": { + "placeholder": "Insira seu feedback", + "title": "Enviar feedback" + }, + "support_us": "Nos patrocine", + "title": "Conta", + "write_review": "Escreva uma avaliação" + }, + "actions": { + "add_expense": "Adicionar despesa", + "back": "Voltar", + "cancel": "Cancelar", + "close": "Fechar", + "confirm": "Confirmar", + "connect": "Conectar", + "copy": "Copiar", + "create": "Criar", + "edit_expense": "Editar despesa", + "export": "Exportar", + "fetch": "Buscar", + "import": "Importar", + "invite": "Convidar", + "leave": "Sair", + "next": "Próxima", + "reconnect": "Reconectar", + "save": "Salvar", + "settle_up": "Quitar despesas", + "submit": "Enviar" + }, + "actors": { + "all": "Todos", + "friends": "Amigos", + "groups": "Grupos", + "members": "Membros", + "owner": "Proprietário", + "you": "Você", + "you_accusativus": "Você", + "you_dativus": "Você" + }, + "auth": { + "continue_with": "Continuar com {provider}", + "email_placeholder": "Insira seu e-mail", + "no_providers_configured": "Nenhum provedor de autenticação configurado", + "no_providers_instructions": "Por favor, configure pelo menos um provedor de autenticação para fazer login. Consulte as", + "otp_sent": "Enviamos um e-mail para você com o código OTP. Por favor, confira sua caixa de entrada e clique no link contido no e-mail para entrar.", + "send_magic_link": "Enviar link mágico", + "sending": "Enviando...", + "setup_instructions": "instruções de configuração do Docker", + "trouble_logging_in": "Com dificuldades para fazer login? Entre em contato" + }, + "balances": { + "default_split": { + "cleared": "Divisão padrão desfeita", + "configure": "Divisão padrão", + "updated": "Divisão padrão atualizada" + }, + "user_preferences": { + "title": "Preferências" + } + }, + "bank_transactions": { + "choose_bank_provider": "Escolha o provedor bancário", + "no_bank_providers_found": "Nenhum provedor bancário encontrado", + "plaid": { + "bank_connected_successfully": "Banco conectado com êxito", + "bank_connection_cancelled": "Conexão bancária cancelada", + "bank_connection_failed": "Falha ao conectar-se ao banco" + }, + "search_bank": "Procurar banco", + "select_bank_provider": "Selecione o provedor bancário", + "to_bank": "para o banco" + }, + "currency_conversion": { + "amount_to_receive": "Quantia a receber", + "description": "Converta a quantia para uma moeda diferente.", + "exchange_rate": "Taxa de câmbio", + "fetching_rate": "Consultando cotação...", + "rate": "Cotação", + "success_toast": "Conversão monetária definida", + "title": "Conversão de moedas" + }, + "errors": { + "currency_conversion_error": "Erro ao definir conversão monetária", + "currency_conversion_failed": "Falha ao converter moedas", + "currency_conversion_malformed": "Os dados de conversão de moeda estão em formato inválido", + "email_invalid": "E-mail inválido, tente novamente.", + "email_required": "O e-mail é obrigatório", + "feedback_min_length": "O feedback deve conter pelo menos 10 caracteres", + "feedback_required": "O campo feedback é obrigatório", + "group_balances_malformed": "Dados sobre saldos do grupo estão corrompidos, por favor relate o problema ou tente recalcular.", + "group_name_update_failed": "Erro ao atualizar o nome do grupo", + "image_compression_failed": "A compressão da imagem falhou. Tentando enviar o arquivo original", + "import_failed": "Erro ao importar arquivo", + "invalid_cron_expression": "Expressão cron inválida", + "invalid_currency_code": "Moeda inválida com código {code}", + "language_change_failed": "Erro ao alterar idioma", + "less_than": "O arquivo deve ter menos de {size}MB", + "name_required": "O nome é obrigatório", + "no_providers": "Erro ao buscar provedores de autenticação. Verifique os logs do backend.", + "notification_not_supported": "Sem suporte a notificações", + "otp_invalid": "Código OTP inválido", + "otp_required": "Código OTP é obrigatório", + "recurrence_delete_failed": "Falha ao excluir recorrência", + "recurrence_update_failed": "Falha ao atualizar recorrência", + "request_error": "Erro ao solicitar notificação", + "saving_expense": "Erro ao salvar despesa", + "setting_update_failed": "Falha ao atualizar configuração", + "signin_error": "Erro ao fazer login: {error}", + "signup_disabled": "Esta instância não permite criação de novas contas", + "something_went_wrong": "Algo deu errado", + "subscribe_error": "Não foi possível inscrever-se nas notificações", + "unsubscribe_error": "Erro ao desinscrever-se das notificações", + "upload_failed": "Falha ao enviar arquivo", + "uploading_error": "Erro ao enviar arquivo", + "valid_email": "Insira um e-mail válido" + }, + "expense_details": { + "add_expense": "Adicionar despesa", + "add_expense_details": { + "add_new_expense": "Adicionar nova despesa", + "amount_placeholder": "Insira a quantia", + "description_placeholder": "Insira a descrição", + "pick_a_date": "Selecione uma data", + "select_user_or_group": { + "add_to_split_pro": "Adicionar ao Split Pro", + "note": "Aviso: o envio de convites está desabilitado para evitar spam", + "only_one_group_time": "Só é possível ter um grupo por vez", + "send_invite": "Enviar convite para usuário", + "warning": "Atenção: Não envie um convite se o e-mail for inválido. Use a opção de adicionar ao Split Pro em vez disso. O uso indevido dos convites resultará no bloqueio da sua conta" + }, + "split_type_section": { + "split_equally": "dividido igualmente", + "split_unequally": "dividido desigualmente", + "types": { + "adjustment": { + "remaining_to_split_equally": "Restante para dividir igualmente", + "title": "Por ajuste" + }, + "equal": { + "per_person": "por pessoa", + "title": "Igualmente" + }, + "exact": { + "remaining": "Falta(m)", + "title": "Por valor exato" + }, + "percentage": { + "remaining": "Falta(m)", + "title": "Porcentagem" + }, + "share": { + "shares": "Parte(s)", + "title": "Por partes", + "total_shares": "Total de partes" + } + } + }, + "sponsor_us": "Nos patrocine", + "upload_file": { + "messages": { + "upload_success": "Arquivo enviado" + } + }, + "user_input": { + "add_more_friends": "Procure amigos, grupos ou insira um e-mail", + "cannot_change_group": "Não é possível mudar o grupo durante a edição", + "remove_group": "Pressione \"apagar\" para remover grupo", + "search_friends": "Procure amigos, grupos ou insira um e-mail" + } + }, + "already_added": "Já adicionado", + "balance_list": { + "are_settled_up": "está(ão) quite(s)", + "is_settled_up": "está quite", + "press_balance_info": "Pressione no saldo individual para quitar os valores" + }, + "bank_transactions": "Transações bancárias", + "clear": "Limpar", + "delete_expense_details": { + "text": "Esta ação não pode ser desfeita. Sua despesa será apagada permanentemente.", + "title": "Tem certeza absoluta?" + }, + "multiple_transactions": { + "add_all": "Adicionar todas", + "add_one_by_one": "Adicionar uma a uma", + "description": "Você selecionou várias transações. Escolha se deseja adicioná-las todas juntas com as configurações de divisão atuais ou ajustar as configurações uma a uma.", + "title": "Adicionar várias transações" + }, + "no_transactions_yet": "Nenhuma transação ainda", + "pending": "Pendente", + "submit_all": "Submeter tudo", + "title": "Adicionar despesa", + "title_mobile": "Adicionar" + }, + "group_details": { + "add_members": "Adicionar membros", + "copied": "Copiado", + "create_group": { + "group_name_placeholder": "Nome do grupo", + "title": "Criar um grupo" + }, + "group_info": { + "actions": "Ações", + "archive_group": "Arquivar grupo", + "archive_group_details": { + "can_archive": "Este grupo será arquivado e oculto da lista principal de grupos. Você ainda pode acessá-lo depois se necessário.", + "cant_archive": "Não é possível arquivar grupos com saldos pendentes. Todos os saldos devem ser quitados primeiro.", + "title": "Tem certeza de que deseja arquivar este grupo?" + }, + "archived": "Arquivado", + "configure_default_split": "Configurar divisão padrão", + "default_balance_currency": "Moeda de saldo padrão", + "default_split": "Divisão padrão", + "delete_group": "Apagar grupo", + "delete_group_details": { + "can_delete": "Esta ação não pode ser revertida", + "cant_delete": "Não é possível remover um grupo até que todos quitem o saldo", + "title": "Tem certeza absoluta?" + }, + "edit_group": "Editar grupo", + "group_created": "Grupo criado", + "leave_group": "Sair do grupo", + "leave_group_details": { + "can_leave": "Esta ação não pode ser revertida", + "cant_leave": "Não é possível sair do grupo até que seu saldo pendente seja quitado", + "title": "Tem certeza absoluta?" + }, + "members": "Membros", + "recalculate_balances": "Recalcular saldos", + "recalculate_balances_details": { + "description": "Se os saldos não corresponderem às despesas, você pode recalculá-los. Note que isso pode levar um tempo caso haja uma lista grande de despesas. Saldos fora do grupo não serão afetados.", + "title": "Tem certeza?" + }, + "remove_member_details": { + "can_remove": "Você está prestes a remover este membro do grupo", + "cant_remove": "Não é possível remover um membro até que seu saldo pendente seja quitado", + "title": "Tem certeza absoluta?" + }, + "simplify_debts": "Simplificar dívidas", + "title": "Informação do grupo" + }, + "group_statistics": { + "first_expense": "Primeira despesa", + "title": "Estatísticas do grupo", + "total_expenses": "Despesas totais" + }, + "messages": { + "balances_recalculated": "Saldos recalculados com sucesso", + "default_balance_currency_cleared": "Moeda de saldo padrão zerada", + "default_balance_currency_updated": "Moeda de saldo padrão atualizada", + "default_split_cleared": "Divisão padrão desfeita", + "default_split_updated": "Divisão padrão atualizada", + "group_archived": "Grupo arquivado", + "group_name_updated": "Detalhes do grupo atualizados" + }, + "no_members": { + "add_members": "Adicionar membros", + "add_members_details": { + "add_to_split_pro": "Adicionar ao Split Pro", + "note": "Aviso: o envio de convites por e-mail está desativado", + "placeholder": "Insira nome ou e-mail", + "send_invite": "Enviar convite para usuário", + "title": "Adicionar membros", + "warning": "Atenção: Não envie um convite para um e-mail inválido. Em vez disso, use \"adicionar ao Split Pro\". O uso indevido de convites resultará no bloqueio da sua conta" + }, + "invite_link": "Link de convite", + "no_members": "Ainda não há membros no grupo." + }, + "tabs": { + "balances": "Saldos", + "expenses": "Despesas" + }, + "title": "Saldos pendentes do grupo" + }, + "invite_message": { + "in_splitpro": "no Splitpro", + "join_to": "Participar de", + "text": "Participe do grupo para adicionar e gerenciar despesas, e acompanhar seus saldos" + }, + "meta": { + "application_name": "SplitPro", + "description": "Divida despesas com seus amigos de graça", + "title": "SplitPro: Divida despesas com seus amigos de graça" + }, + "navigation": { + "account": "Conta", + "activity": "Atividade", + "add": "Adicionar", + "add_expense": "Adicionar despesa", + "balances": "Saldos", + "groups": "Grupos", + "recurring": "Recorrente" + }, + "recurrence": { + "cron_expression": "Expressão Cron", + "days_of_month": "Dias do Mês", + "days_of_week": "Dias da Semana", + "delete_description": "Isso interromperá a criação de despesas futuras. As despesas já criadas por essa recorrência não serão excluídas.", + "delete_title": "Deletar Recorrência", + "derived_delete_warning": "Esta despesa faz parte de uma recorrência. Apenas esta despesa será excluída. As despesas recorrentes futuras permanecem.", + "derived_edit_warning": "Esta despesa faz parte de uma recorrência. As alterações afetarão apenas esta despesa.", + "description": "Configure recorrência automática para esta despesa.", + "edit_confirmation_title": "Editar Despesa Recorrente", + "edit_description": "Isso vai mudar a programação das despesas futuras. As despesas existentes não serão modificadas.", + "edit_title": "Editar Recorrência", + "empty": "Nenhuma despesa recorrente ainda", + "expense_for_the_amount_of": "Despesa {name} pelo valor de {amount} {currency}", + "last_day": "Último dia", + "months": "Meses", + "never": "Nenhum pagamento recorrente configurado", + "recurring": "Recorrente", + "schedule_type": { + "custom": "Personalizado", + "day": "Diário", + "month": "Mensal", + "never": "Nunca", + "week": "Semanal", + "year": "Anual" + }, + "template_delete_warning": "Este é um modelo de despesa recorrente. Excluí-lo interromperá todas as despesas recorrentes futuras.", + "template_edit_warning": "Este é um modelo de despesa recorrente. As alterações serão aplicadas a todas as despesas recorrentes futuras.", + "time_of_day": "Hora do dia", + "title": "Recorrência", + "view_recurring_page": "Ver Página de Recorrências" + }, + "ui": { + "added_by": "Adicionado por", + "and": "e", + "balance": "saldo", + "balances": "saldos", + "delete": "Remover", + "deleted_by": "Removido por", + "edited_by": "Editado por", + "expense": { + "for": "para", + "from": "de", + "paid_by": "Pago por", + "received_by": "Recebido por", + "to": "para", + "user": { + "deleted": "removeu", + "get": "recebe", + "lent": "emprestou", + "owe": "deve", + "paid": "pagou", + "pay": "paga", + "received": "recebeu" + }, + "you": { + "deleted": "removeu", + "get": "recebe", + "lent": "emprestou", + "owe": "deve", + "paid": "pagou", + "pay": "paga", + "received": "recebeu" + } + }, + "expense_details": "Detalhes da despesa", + "in_group": "Em grupo", + "no_activity": "Nenhuma atividade ainda", + "not_involved": "Não está envolvido(a)", + "not_set": "Não definido", + "on": "em", + "or": "ou", + "outstanding_balances": "Saldos pendentes", + "select_balance": "Selecionar saldo", + "select_currency": "Selecionar moeda", + "settle_up_name": "Quitar", + "settled_up": "Quitado", + "settlement": "Quitação", + "share_text": "Confira o SplitPro. É uma alternativa grátis e de código aberto ao Splitwise", + "show_all_currencies": "Mostrar todas as moedas", + "today": "Hoje", + "total_balance": "Saldo total" + } +} diff --git a/public/locales/pt-PT/common.json b/public/locales/pt-PT/common.json new file mode 100644 index 0000000..4546a08 --- /dev/null +++ b/public/locales/pt-PT/common.json @@ -0,0 +1,459 @@ +{ + "account": { + "change_language": "Alterar idioma", + "change_language_details": { + "messages": { + "language_changed": "Idioma alterado com sucesso" + }, + "no_language_found": "Nenhum idioma encontrado.", + "placeholder": "Seleciona um idioma", + "title": "Seleciona um idioma" + }, + "debug_info": "Info de Depuração", + "debug_info_details": { + "copy_failed": "Falha ao copiar informação de depuração para a área de transferência", + "description": "Inclui a informação abaixo ao criar um pedido de suporte:", + "git": "Git", + "new_version_available": "Nova versão disponível:", + "send_test_notification": "Enviar notificação de teste", + "test_notification_failed": "Não foi possível enviar a notificação de teste", + "test_notification_sent": "Notificação de teste enviada", + "title": "Informação de Depuração", + "user_agent": "User.Agent", + "version": "Versão" + }, + "default_balance_currency": "Moeda de saldo padrão", + "download_app": "Descarregar app", + "download_app_details": { + "download_as_pwa": "Poderás descarregar o SplitPro como PWA.", + "title": "Descarregar app", + "using_android": "Se estás a usar Android, vê isto", + "using_ios": "Se estás a usar iOS, vê isto", + "video": "vídeo" + }, + "download_splitpro_data": "Descarregar dados do SplitPro", + "edit_name": { + "apply_avatar": "Aplicar avatar", + "avatar_label": "Foto de perfil", + "avatar_preview": "Prévia do avatar", + "placeholder": "Inserir nome", + "remove_avatar": "Remover avatar", + "select_avatar": "Seleciona a imagem", + "title": "Editar detalhes", + "zoom": "Zoom" + }, + "follow_on_x": "Segue-nos no X", + "import_from_splitwise": "Importar do Splitwise", + "import_from_splitwise_details": { + "choose_file": "Selecionar ficheiro", + "export_splitwise_data_button": "Exportar dados do Splitwise", + "follow_to_export_splitwise_data": "Acede a este link para exportar os dados do Splitwise", + "messages": { + "import_success": "Importação bem sucedida" + }, + "no_file_chosen": "Nenhum ficheiro selecionado", + "note": "Nota: Ainda só suportamos importar amigos e grupos. A transações não serão importadas. Estamos a trabalhar nisso." + }, + "logout": "Terminar Sessão", + "messages": { + "submit_error": "Não foi possível atualizar os detalhes", + "submit_success": "Detalhes atualizados" + }, + "notifications": { + "disable_notification": "Desativar notificações", + "enable_notification": "Ativar notificações", + "messages": { + "notification_granted": "Passarás a receber notificações" + } + }, + "star_on_github": "Marca-nos com estrela no GitHub", + "submit_feedback": "Submeter feedback", + "submit_feedback_details": { + "placeholder": "Insere o teu feedback", + "title": "Submeter feedback" + }, + "support_us": "Patrocina-nos", + "title": "Conta", + "write_review": "Escreve uma review" + }, + "actions": { + "add_expense": "Adicionar despesa", + "back": "Voltar", + "cancel": "Cancelar", + "close": "Fechar", + "confirm": "Confirmar", + "connect": "Conectar", + "copy": "Copiar", + "create": "Criar", + "edit_expense": "Editar despesa", + "export": "Exportar", + "fetch": "Transferir", + "import": "Importar", + "invite": "Convidar", + "leave": "Sair", + "next": "Próxima", + "reconnect": "Reconectar", + "save": "Guardar", + "settle_up": "Acertar contas", + "submit": "Submeter" + }, + "actors": { + "all": "Todos", + "friends": "Amigos", + "groups": "Grupos", + "members": "Membros", + "owner": "Proprietário", + "you": "Tu", + "you_accusativus": "Tu", + "you_dativus": "Tu" + }, + "auth": { + "continue_with": "Continuar com {provider}", + "email_placeholder": "Inserir email", + "no_providers_configured": "Nenhum fornecedor de autenticação configurado", + "no_providers_instructions": "Por favor, configura pelo menos um fornecedor de autenticação para iniciar sessão. Consulta as", + "otp_sent": "Enviámos uma mensagem de email com o OTP. Por favor, verifica a tua caixa de entrada e clica no link no seu interior para te autenticares.", + "send_magic_link": "Enviar link mágico", + "sending": "A enviar...", + "setup_instructions": "instruções de configuração do Docker", + "trouble_logging_in": "Problemas com a autenticação? Contacta-nos" + }, + "balances": { + "default_split": { + "cleared": "Divisão padrão desfeita", + "configure": "Divisão padrão", + "updated": "Divisão padrão atualizada" + }, + "user_preferences": { + "title": "Preferências" + } + }, + "bank_transactions": { + "choose_bank_provider": "Escolha o fornecedor de dados do seu banco", + "no_bank_providers_found": "Nenhum fornecedor de dados de bancos encontrado", + "plaid": { + "bank_connected_successfully": "Banco ligado com sucesso", + "bank_connection_cancelled": "Ligação ao banco cancelada", + "bank_connection_failed": "Falha ao ligar ao banco" + }, + "search_bank": "Escolha o banco", + "select_bank_provider": "Escolha o fornecedor de dados do seu banco", + "to_bank": "para o banco" + }, + "currency_conversion": { + "amount_to_receive": "Valor a receber", + "description": "Converte o valor para uma moeda diferente.", + "exchange_rate": "Taxa de câmbio", + "fetching_rate": "A buscar taxa...", + "rate": "Taxa", + "success_toast": "Conversão de moeda definida com sucesso", + "title": "Conversão de moeda" + }, + "errors": { + "add_member_failed": "Não foi possível adicionar membro ao grupo", + "amount_required": "", + "currency_conversion_error": "Erro ao definir conversão de moeda", + "currency_conversion_failed": "Falha ao converter moedas", + "currency_conversion_malformed": "Dados de taxas de câmbio inválidos", + "email_invalid": "Endereço de Email inválido, por favor tenta novamente.", + "email_required": "Email é obrigatório", + "feedback_min_length": "Feedback deve conter pelo menos 10 caracteres", + "feedback_required": "Feedback é obrigatório", + "group_balances_malformed": "Dados de balanços do grupo inválidos, por favor reporte o problema ou tente recalcular.", + "group_name_update_failed": "Erro ao atualizar o nome do grupo", + "image_compression_failed": "A compressão da imagem falhou. Tentar a enviar o ficheiro original", + "import_failed": "Error ao importar ficheiro", + "invalid_cron_expression": "Expressão \"cron\" inválida", + "invalid_currency_code": "Código {code} de moeda inválido", + "invalid_split": "Define quem deve esta despesa antes de guardar.", + "language_change_failed": "Erro ao alterar idioma", + "less_than": "O ficheiro deve ter menos que {size}MB", + "name_required": "O nome é obrigatório", + "no_providers": "Ocorreu um erro ao transferir os fornecedores de autenticação. Por favor consulta os logs do backend.", + "notification_not_supported": "Notificação não suportada", + "otp_invalid": "OTP inválido", + "otp_required": "OTP é obrigatório", + "recurrence_delete_failed": "Falha ao apagar recorrência", + "recurrence_update_failed": "Falha ao atualizar recorrência", + "request_error": "Erro requisitando notificação", + "saving_expense": "Erro ao salvar despesa", + "setting_update_failed": "Falha ao atualizar a configuração", + "signin_error": "Ocorreu um erro durante a autenticação: {error}", + "signup_disabled": "Criação de novas contas encontra-se desativo para esta instância", + "something_went_wrong": "Algo deu errado", + "subscribe_error": "Não foi possivel subscrever notificações", + "unsubscribe_error": "Erro no cancelamento da subscrição da notificação", + "upload_failed": "Falha ao carregar o ficheiro", + "upload_file_less_than": "O ficheiro deve ter menos de", + "uploading_error": "Erro ao carregar o ficheiro", + "valid_email": "Insira um email válido" + }, + "expense_details": { + "add_expense": "Adicionar despesa", + "add_expense_details": { + "add_new_expense": "Adicionar nova despesa", + "amount_placeholder": "Insira o valor", + "description_placeholder": "Insira a descrição", + "pick_a_date": "Selecionar uma data", + "select_user_or_group": { + "add_to_split_pro": "Adicionar ao Split Pro", + "note": "Nota: opção de envio de convite está desativa para já devido ao spam", + "only_one_group_time": "Só podes ter um grupo de cada vez", + "send_invite": "Enviar convite para o utilizador", + "warning": "Atenção: Não envie um convite se o e-mail for inválido. Use a opção de adicionar ao Split Pro em vez disso. O uso indevido dos convites resultará no bloqueio da sua conta" + }, + "split_type_section": { + "direction": { + "no_money_flow": "Mais ninguém deve nada", + "owes_payer": "{debtor} deve a {payer}", + "owes_you": "{debtor} deve-te", + "you_owe": "Tu deves a {payer}" + }, + "split_equally": "dividir igualmente", + "split_unequally": "dividir desigualmente", + "types": { + "adjustment": { + "remaining_to_split_equally": "Restante para dividir igualmente", + "title": "Ajustes" + }, + "equal": { + "per_person": "por pessoa", + "title": "Igual" + }, + "exact": { + "remaining": "Restante", + "title": "Exato" + }, + "percentage": { + "remaining": "Restante", + "title": "Percentagem" + }, + "share": { + "shares": "quota(s)", + "title": "Quota", + "total_shares": "Total de quotas" + } + } + }, + "sponsor_us": "Patrocine-nos", + "upload_file": { + "messages": { + "upload_success": "Arquivo enviado com sucesso" + } + }, + "user_input": { + "add_more_friends": "Pesquisar amigos, grupos ou adicionar email", + "cannot_change_group": "Não é possível mudar de grupo enquanto edita", + "remove_group": "Pressione delete para remover o grupo", + "search_friends": "Pesquisar amigos, grupos ou adicionar email" + } + }, + "already_added": "Já adicionada", + "balance_list": { + "are_settled_up": "estão acertados", + "is_settled_up": "está acertado", + "press_balance_info": "Pressione o saldo individual para iniciar o acerto" + }, + "bank_transactions": "Transações do banco", + "clear": "Limpar", + "delete_expense_details": { + "text": "Esta ação não pode ser desfeita. Isto irá eliminar permanentemente a tua despesa.", + "title": "Tens mesmo a certeza?" + }, + "multiple_transactions": { + "add_all": "Adicionar todas", + "add_one_by_one": "Adicionar uma a uma", + "description": "Selecionou várias transações. Escolha se deseja adicioná-las todas juntas com as configurações de divisão atuais ou ajustar as configurações uma a uma.", + "title": "Adicionar várias transações" + }, + "no_transactions_yet": "Sem transações por enquanto", + "pending": "Pendente", + "submit_all": "Submeter todas", + "title": "Adicionar despesa", + "title_mobile": "Adicionar" + }, + "group_details": { + "add_members": "Adicionar membros", + "copied": "Copiado", + "create_group": { + "group_name_placeholder": "Nome do grupo", + "title": "Criar um grupo" + }, + "group_info": { + "actions": "Ações", + "archive_group": "Arquivar grupo", + "archive_group_details": { + "can_archive": "Este grupo será arquivado e ocultado da tua lista principal de grupos. Podes ainda aceder a ele mais tarde, se necessário.", + "cant_archive": "Não é possível arquivar um grupo com saldos em aberto. Todos os saldos devem ser liquidadas primeiro.", + "title": "Tens a certeza que queres arquivar este grupo?" + }, + "archived": "Arquivado", + "configure_default_split": "Configurar divisão padrão", + "default_balance_currency": "Moeda de saldo padrão", + "default_split": "Divisão padrão", + "delete_group": "Eliminar grupo", + "delete_group_details": { + "can_delete": "Esta ação não pode ser desfeita", + "cant_delete": "Não é possível eliminar o grupo até que todos acerte o saldo", + "title": "Tens a certeza?" + }, + "edit_group": "Editar grupo", + "group_created": "Grupo criado", + "leave_group": "Sair do grupo", + "leave_group_details": { + "can_leave": "Esta ação não pode ser desfeita", + "cant_leave": "Não é possível sair do grupo até que o seu saldo em aberto seja liquidado", + "title": "Tens mesmo a certeza?" + }, + "members": "Membros", + "recalculate_balances": "Recalcular saldos", + "recalculate_balances_details": { + "description": "Se os saldos não corresponderem às despesas, podes recalculá-los. Nota que pode demorar algum tempo se o número de despesas for grande. Os saldos fora do grupo não serão afetados.", + "title": "Tens a certeza?" + }, + "remove_member_details": { + "can_remove": "Estás prestes a remover este membro do grupo", + "cant_remove": "Não é possível remover o membro até que o seu saldo em aberto seja liquidado", + "title": "Tens mesmo a certeza?" + }, + "simplify_debts": "Simplificar dívidas", + "title": "Informações do grupo" + }, + "group_statistics": { + "first_expense": "Primeira despesa", + "title": "Estatísticas do grupo", + "total_expenses": "Total de despesas" + }, + "messages": { + "balances_recalculated": "Saldos recalculados com sucesso", + "default_balance_currency_cleared": "Moeda de saldo padrão zerada", + "default_balance_currency_updated": "Moeda de saldo padrão atualizada", + "default_split_cleared": "Divisão padrão desfeita", + "default_split_updated": "Divisão padrão atualizada", + "group_archived": "Grupo arquivado com sucesso", + "group_name_updated": "Pormenores do grupo atualizados" + }, + "no_members": { + "add_members": "Adicionar membros", + "add_members_details": { + "add_to_split_pro": "Adicionar ao Split Pro", + "note": "Nota: opção de envio de convite está desativa para já devido ao spam", + "placeholder": "Insira o nome ou email", + "send_invite": "Enviar convite para o utilizador", + "title": "Adicionar membros", + "warning": "Atenção: Não envie um convite para um e-mail inválido. Em vez disso, use adicionar ao Split Pro. O uso indevido de convites resultará no bloqueio da sua conta" + }, + "copied": "Copiado", + "invite_link": "Partilhar link de convite", + "no_members": "Não existem membros neste grupo." + }, + "tabs": { + "balances": "Saldos", + "expenses": "Despesas" + }, + "title": "Saldos em aberto do grupo" + }, + "invite_message": { + "in_splitpro": "no Splitpro", + "join_to": "Junte-se a", + "text": "Junte-se ao grupo e poderá adicionar, gerir despesas e acompanhar os seus saldos" + }, + "meta": { + "application_name": "SplitPro", + "description": "SplitPro: Divide as tuas despesas com os teus amigos gratuitamente", + "title": "SplitPro: Divide as tuas despesas com os teus amigos gratuitamente" + }, + "navigation": { + "account": "Conta", + "activity": "Atividade", + "add": "Adicionar", + "add_expense": "Adicionar Despesa", + "app_name": "SplitPro", + "balances": "Balancetes", + "groups": "Grupos", + "recurring": "Recorrente" + }, + "recurrence": { + "cron_expression": "Expressão \"Cron\"", + "days_of_month": "Dias do Mês", + "days_of_week": "Dias da Semana", + "delete_description": "Isto interromperá a criação de despesas futuras. As despesas já criadas por esta recorrência não serão apagadas.", + "delete_title": "Apagar Recorrência", + "derived_delete_warning": "Esta despesa faz parte de uma recorrência. Apenas esta despesa será apagada. As despesas recorrentes futuras permanecem.", + "derived_edit_warning": "Esta despesa faz parte de uma recorrência. As alterações afetarão apenas esta despesa.", + "description": "Configurar recorrência automática para esta despesa.", + "edit_confirmation_title": "Editar Despesa Recorrente", + "edit_description": "Isto vai mudar a programação das despesas futuras. As despesas existentes não serão modificadas.", + "edit_title": "Editar Recorrência", + "empty": "Nenhuma despesa recorrente ainda", + "expense_for_the_amount_of": "Despesa {name} pelo valor de {amount} {currency}", + "last_day": "Último dia", + "months": "Meses", + "never": "Nenhum pagamento recorrente configurado", + "recurring": "Recorrente", + "schedule_type": { + "custom": "Personalizado", + "day": "Diário", + "month": "Mensal", + "never": "Nunca", + "week": "Semanal", + "year": "Anual" + }, + "template_delete_warning": "Este é um modelo de despesa recorrente. Apagá-lo interromperá todas as despesas recorrentes futuras.", + "template_edit_warning": "Este é um modelo de despesa recorrente. As alterações serão aplicadas a todas as despesas recorrentes futuras.", + "time_of_day": "Hora do dia", + "title": "Recorrência", + "view_recurring_page": "Ver Página de Recorrências" + }, + "ui": { + "added_by": "Adicionado por", + "and": "e", + "balance": "saldo", + "balances": "saldos", + "delete": "Eliminar", + "deleted_by": "Eliminado por", + "edited_by": "Editado por", + "expense": { + "for": "por", + "from": "de", + "paid_by": "Pago por", + "received_by": "Recebido por", + "to": "para", + "user": { + "deleted": "apagou", + "get": "recebe", + "lent": "emprestou", + "owe": "deve", + "paid": "pagou", + "pay": "paga", + "received": "recebeu" + }, + "you": { + "deleted": "apagaste", + "get": "recebes", + "lent": "emprestaste", + "owe": "deves", + "paid": "pagaste", + "pay": "pagar", + "received": "recebeste" + } + }, + "expense_details": "Detalhes da despesa", + "in_group": "Em grupo", + "no_activity": "Ainda sem atividade", + "not_involved": "Não envolvido", + "not_set": "Não definido", + "on": "em", + "or": "ou", + "outstanding_balances": "Saldos em aberto", + "select_balance": "Selecionar saldo", + "select_currency": "Selecionar moeda", + "settle_up_name": "Acertar contas", + "settled_up": "Acertou contas", + "settlement": "Acerto de contas", + "share_text": "Testa o SplitPro. É uma alternativa gratuita ao Splitwise", + "show_all_currencies": "Mostrar todas as moedas", + "today": "Hoje", + "total_balance": "Saldo total" + } +} diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json new file mode 100644 index 0000000..cda94d4 --- /dev/null +++ b/public/locales/sv/common.json @@ -0,0 +1,455 @@ +{ + "account": { + "change_language": "Ändra språk", + "change_language_details": { + "messages": { + "language_changed": "Språk ändrat" + }, + "no_language_found": "Inget språk hittades.", + "placeholder": "Välj ett språk", + "title": "Välj ett språk" + }, + "debug_info": "Debug info", + "debug_info_details": { + "copy_failed": "Misslyckades med att kopiera felsökningsinformation till urklipp", + "description": "Klistra in informationen nedan när du skapar en supportförfrågan:", + "git": "Git", + "new_version_available": "En ny version finns tillgänglig:", + "send_test_notification": "Skicka test notifikation", + "test_notification_failed": "Kunde inte skicka test notifikation", + "test_notification_sent": "Test notifikation skickat", + "title": "Debug Information", + "user_agent": "Användaragent", + "version": "Version" + }, + "default_balance_currency": "Standardsaldovaluta", + "download_app": "Ladda ner app", + "download_app_details": { + "download_as_pwa": "Du kan ladda ner SplitPro som en PWA till din hemskärm.", + "title": "Ladda ner app", + "using_android": "Om du använder Android, kolla in denna", + "using_ios": "Om du använder iOS, kolla in denna", + "video": "video" + }, + "download_splitpro_data": "Ladda ner SplitPro data", + "edit_name": { + "apply_avatar": "Använd avatar", + "avatar_label": "Profil bild", + "avatar_preview": "Avatar förhandsvisning", + "placeholder": "Ange namn", + "remove_avatar": "Ta bort avatar", + "select_avatar": "Välj bild", + "title": "Redigera detaljer", + "zoom": "Zooma" + }, + "follow_on_x": "Följ oss på X", + "import_from_splitwise": "Importera från Splitwise", + "import_from_splitwise_details": { + "choose_file": "Välj fil", + "export_splitwise_data_button": "Exportera splitwise data", + "follow_to_export_splitwise_data": "Följ denna länk för att exportera splitwise data", + "messages": { + "import_success": "Import lyckades" + }, + "no_file_chosen": "Ingen fil vald", + "note": "Notera: Vi stödjer för närvarande endast import av vänner och grupper. Transaktioner kommer inte importeras. Vi arbetar på det." + }, + "logout": "Logga ut", + "messages": { + "submit_error": "Kunde inte uppdatera detaljer", + "submit_success": "Detaljer uppdaterad" + }, + "notifications": { + "disable_notification": "Inaktivera notifikationer", + "enable_notification": "Aktivera notifikationer", + "messages": { + "notification_granted": "Du kommer att få notifikationer nu" + } + }, + "star_on_github": "Betygsätt oss på GitHub", + "submit_feedback": "Skicka feedback", + "submit_feedback_details": { + "placeholder": "Skriv din feedback", + "title": "Skicka feedback" + }, + "support_us": "Sponsra oss", + "title": "Konto", + "write_review": "Skriv en recension" + }, + "actions": { + "add_expense": "Lägg till utgift", + "back": "Tillbaka", + "cancel": "Avbryt", + "close": "Stäng", + "confirm": "Bekräfta", + "connect": "Anslut", + "copy": "Kopiera", + "create": "Skapa", + "edit_expense": "Redigera utgift", + "export": "Exportera", + "fetch": "Hämta", + "import": "Importera", + "invite": "Bjud in", + "leave": "Lämna", + "next": "Nästa", + "reconnect": "Återanslut", + "save": "Spara", + "settle_up": "Gör kvitt", + "submit": "Skicka" + }, + "actors": { + "all": "Alla", + "friends": "Vänner", + "groups": "Grupper", + "members": "Medlemmar", + "owner": "Ägare", + "you": "Du", + "you_accusativus": "Dig", + "you_dativus": "Dig" + }, + "auth": { + "continue_with": "Fortsätt med {provider}", + "email_placeholder": "Ange din email", + "no_providers_configured": "Inga autentiseringsleverantörer konfigurerade", + "no_providers_instructions": "Vänligen konfigurera minst en autentiseringsleverantör för att logga in. Se", + "otp_sent": "Vi har skickat ett mail med OTP. Kontrollera din inkorg och klicka på länken i mailet för att logga in.", + "send_magic_link": "Skicka magisk länk", + "sending": "Skickar...", + "setup_instructions": "Docker-installationsinstruktioner", + "trouble_logging_in": "Problem med att logga in? Kontakta" + }, + "balances": { + "default_split": { + "cleared": "Standard delning rensad", + "configure": "Standard delning", + "updated": "Standard delning uppdaterad" + }, + "user_preferences": { + "title": "Egenskaper" + } + }, + "bank_transactions": { + "choose_bank_provider": "Välj bank", + "no_bank_providers_found": "Ingen bank hittades", + "plaid": { + "bank_connected_successfully": "Bank ansluten", + "bank_connection_cancelled": "Anslutning till banken blev avbruten", + "bank_connection_failed": "Kunde inte ansluta till banken" + }, + "search_bank": "Sök bank", + "select_bank_provider": "Välj bank", + "to_bank": "bank" + }, + "currency_conversion": { + "amount_to_receive": "Belopp att ta emot", + "description": "Konvertera beloppet till en annan valuta.", + "exchange_rate": "Växelkurs", + "fetching_rate": "Hämtar kurs...", + "rate": "Kurs", + "success_toast": "Valutaomvandling inställd", + "title": "Valutaomvandling" + }, + "errors": { + "add_member_failed": "Misslyckades med att lägga till medlem till grupp", + "currency_conversion_error": "Fel vid valutaomvandling", + "currency_conversion_failed": "Misslyckades med att konvertera valutor", + "currency_conversion_malformed": "Valutakonverteringsdata är felaktig", + "email_invalid": "Email är ogiltlig, försök igen.", + "email_required": "Email krävs", + "feedback_min_length": "Feedback måste vara minst 10 tecken", + "feedback_required": "Feedback krävs", + "group_balances_malformed": "Gruppens saldon är felaktiga. Vänligen rapportera ett problem eller försök räkna om.", + "group_name_update_failed": "Fel vid uppdatering av gruppnamn", + "image_compression_failed": "Bildkomprimering misslyckades, försöker ladda upp originalfilen", + "import_failed": "Fel vid import", + "invalid_cron_expression": "Ogiltigt cron‑uttryck", + "invalid_currency_code": "Ogiltig valutakod {code}", + "invalid_split": "Justera vem som står för denna utgift innan du sparar.", + "language_change_failed": "Fel vid ändring av språk", + "less_than": "Filen ska vara mindre än {size}MB", + "name_required": "Namn krävs", + "no_providers": "Fel vid hämtning av autentiseringsleverantörer. Kontrollera serverloggarna.", + "notification_not_supported": "Notifikationer stöds inte", + "otp_invalid": "Ogiltlig OTP", + "otp_required": "OTP krävs", + "recurrence_delete_failed": "Misslyckades med att ta bort återkommande händelse", + "recurrence_update_failed": "Misslyckades med att uppdatera återkommande händelse", + "request_error": "Fel vid begäran om notifikationer", + "saving_expense": "Fel vid sparande av utgift", + "setting_update_failed": "Misslyckades med att uppdatera inställning", + "signin_error": "Ett fel uppstod vid inloggning: {error}", + "signup_disabled": "Registrering av nya konton är inaktiverat", + "something_went_wrong": "Något gick fel", + "subscribe_error": "Kan inte prenumerera på notifikationer", + "unsubscribe_error": "Fel vid avslutning av prenumeration", + "upload_failed": "Uppladdning misslyckades", + "uploading_error": "Fel vid uppladdning av fil", + "valid_email": "Ange giltig e-post" + }, + "expense_details": { + "add_expense": "Lägg till utgift", + "add_expense_details": { + "add_new_expense": "Lägg till ny utgift", + "amount_placeholder": "Ange belopp", + "description_placeholder": "Ange beskrivning", + "pick_a_date": "Välj datum", + "select_user_or_group": { + "add_to_split_pro": "Lägg till i SplitPro", + "note": "Notera: Skicka inbjudan är för tillfället inaktiverat på grund av spam", + "only_one_group_time": "Du kan bara välja en grupp åt gången", + "send_invite": "Skicka inbjudan till användare", + "warning": "Varning: Skicka inte en inbjudan om det är ogiltig e-postadress. Använd istället lägg till i SplitPro. Ditt konto kommer att blockeras om denna funktion används felaktigt" + }, + "split_type_section": { + "direction": { + "no_money_flow": "Ingen annan är skyldig något", + "owes_payer": "{debtor} är skyldig {payer}", + "owes_you": "{debtor} är skyldig dig", + "you_owe": "Du är skyldig {payer}" + }, + "split_equally": "dela lika", + "split_unequally": "dela ojämnt", + "types": { + "adjustment": { + "remaining_to_split_equally": "Kvar att dela lika", + "title": "Justering" + }, + "equal": { + "per_person": "per person", + "title": "Jämnt" + }, + "exact": { + "remaining": "Kvar", + "title": "Exakt" + }, + "percentage": { + "remaining": "Kvar", + "title": "Procent" + }, + "share": { + "shares": "Del(ar)", + "title": "Dela", + "total_shares": "Totala delningar" + } + } + }, + "sponsor_us": "Sponsra oss", + "upload_file": { + "messages": { + "upload_success": "Fil uppladdad" + } + }, + "user_input": { + "add_more_friends": "Sök vänner, grupper eller lägg till via email", + "cannot_change_group": "Kan inte ändra grupp medan du redigerar", + "remove_group": "Tryck på radera för att ta bort grupp", + "search_friends": "Sök vänner, grupper eller lägg till via email" + } + }, + "already_added": "Redan tillagd", + "balance_list": { + "are_settled_up": "är kvitt", + "is_settled_up": "är kvitt", + "press_balance_info": "Tryck på enskild saldo för att göra kvitt" + }, + "bank_transactions": "Transaktioner", + "clear": "Rensa", + "delete_expense_details": { + "text": "Denna åtgärd går inte att ångra. Denna utgift kommer att raderas permanent.", + "title": "Är du helt säker?" + }, + "multiple_transactions": { + "add_all": "Lägg till alla", + "add_one_by_one": "Lägg till en och en", + "description": "Du har valt flera transaktioner. Välj om du vill lägga till alla direkt med de nuvarande inställningar eller justera en och en.", + "title": "Lägg till flera transaktioner" + }, + "no_transactions_yet": "Inga transaktioner ännu", + "pending": "Reserverad", + "submit_all": "Skicka alla", + "title": "Lägg till utgift", + "title_mobile": "Lägg till" + }, + "group_details": { + "add_members": "Lägg till medlemmar", + "copied": "Kopierad", + "create_group": { + "group_name_placeholder": "Gruppnamn", + "title": "Skapa en grupp" + }, + "group_info": { + "actions": "Åtgärder", + "archive_group": "Arkivera grupp", + "archive_group_details": { + "can_archive": "Denna grupp kommer att arkiveras och döljas från din huvudlista över grupper. Du kan fortfarande komma åt den senare om det behövs.", + "cant_archive": "Kan inte arkivera grupp med utestående saldon. Alla saldon måste kvittas först.", + "title": "Är du säker på att du vill arkivera denna grupp?" + }, + "archived": "Arkiverad", + "configure_default_split": "Konfigurera standard delning", + "default_balance_currency": "Standardsaldovaluta", + "default_split": "Standard delning", + "delete_group": "Radera grupp", + "delete_group_details": { + "can_delete": "Denna åtgärd kan inte ångras", + "cant_delete": "Kan inte radera gruppen förrän alla har kvittat sina saldon", + "title": "Är du helt säker?" + }, + "edit_group": "Redigera grupp", + "group_created": "Grupp skapad", + "leave_group": "Lämna grupp", + "leave_group_details": { + "can_leave": "Denna åtgärd kan inte ångras", + "cant_leave": "Kan inte lämna gruppen förrän ditt saldo är kvittat", + "title": "Är du helt säker?" + }, + "members": "Medlemmar", + "recalculate_balances": "Räkna om saldon", + "recalculate_balances_details": { + "description": "Om saldon inte matchar utgifter, kan du räkna om dem. Notera att det kan ta tid om antalet utgifter är stort. Saldon utanför gruppen påverkas inte.", + "title": "Är du säker?" + }, + "remove_member_details": { + "can_remove": "Du är på väg att ta bort denna medlem från gruppen", + "cant_remove": "Kan inte ta bort medlem förrän deras utestående saldo är kvittat", + "title": "Är du helt säker?" + }, + "simplify_debts": "Förenkla skulder", + "title": "Gruppinfo" + }, + "group_statistics": { + "first_expense": "Första utgiften", + "title": "Gruppstatistik", + "total_expenses": "Totala utgifter" + }, + "messages": { + "balances_recalculated": "Saldon omräknade", + "default_balance_currency_cleared": "Standardsaldovaluta rensad", + "default_balance_currency_updated": "Standardsaldovaluta uppdaterad", + "default_split_cleared": "Standard delning rensad", + "default_split_updated": "Standard delning uppdaterad", + "group_archived": "Grupp arkiverad framgångsrikt", + "group_name_updated": "Uppdaterad gruppinformation" + }, + "no_members": { + "add_members": "Lägg till medlemmar", + "add_members_details": { + "add_to_split_pro": "Lägg till i Split Pro", + "note": "Notera: Skicka inbjudan är inaktiverat för tillfället på grund av skräppost", + "placeholder": "Ange namn eller email", + "send_invite": "Skicka inbjudan till användare", + "title": "Lägg till medlemmar", + "warning": "Varning: Skicka inte en inbjudan om det är ogiltlig email. Använd istället lägg till i Split Pro. Ditt konto kommer att blockeras om denna funktion används felaktigt" + }, + "invite_link": "Inbjudningslänk", + "no_members": "Inga medlemmar i gruppen ännu." + }, + "tabs": { + "balances": "Saldon", + "expenses": "Utgifter" + }, + "title": "Saldon" + }, + "invite_message": { + "in_splitpro": "i Splitpro", + "join_to": "Gå med", + "text": "Gå med i gruppen så kan du lägga till, hantera utgifter och följa dina saldon" + }, + "meta": { + "application_name": "SplitPro", + "description": "Dela utgifter med dina vänner gratis", + "title": "SplitPro: Dela utgifter med dina vänner gratis" + }, + "navigation": { + "account": "Konto", + "activity": "Aktivitet", + "add": "Lägg till", + "add_expense": "Lägg till utgift", + "balances": "Saldon", + "groups": "Grupper", + "recurring": "Återkommande" + }, + "recurrence": { + "cron_expression": "Cron‑uttryck", + "days_of_month": "Dagar i månaden", + "days_of_week": "Veckodagar", + "delete_description": "Detta kommer att stoppa skapandet av framtida utgifter. Befintliga utgifter som skapats av denna återkommande händelse kommer inte att tas bort.", + "delete_title": "Ta bort återkommande händelse", + "derived_delete_warning": "Denna utgift är en del av en återkommande händelse. Endast denna utgift kommer att tas bort. Framtida återkommande utgifter kommer att fortsätta.", + "derived_edit_warning": "Denna utgift är en del av en återkommande händelse. Ändringar kommer endast att påverka denna utgift.", + "description": "Ställ in automatisk återkommande händelse för denna utgift.", + "edit_confirmation_title": "Redigera återkommande utgift", + "edit_description": "Detta kommer att ändra schemat för framtida utgifter. Befintliga utgifter kommer inte att ändras.", + "edit_title": "Redigera återkommande händelse", + "empty": "Inga återkommande utgifter", + "expense_for_the_amount_of": "Utgift {name} på beloppet {amount} {currency}", + "last_day": "Sista dagen", + "months": "Månader", + "never": "Ingen schemaläggning är inställd", + "recurring": "Återkommande", + "schedule_type": { + "custom": "Anpassad", + "day": "Daglig", + "month": "Månatlig", + "never": "Aldrig", + "week": "Veckovis", + "year": "Årlig" + }, + "template_delete_warning": "Detta är en mall för återkommande utgifter. Att ta bort den kommer att stoppa alla framtida återkommande utgifter.", + "template_edit_warning": "Detta är en mall för återkommande utgifter. Ändringar kommer att gälla för alla framtida återkommande utgifter.", + "time_of_day": "Tid på dagen", + "title": "Upprepning", + "view_recurring_page": "Visa sidan för återkommande utgifter" + }, + "ui": { + "added_by": "Tillagd av", + "and": "och", + "balance": "saldo", + "balances": "saldon", + "delete": "Radera", + "deleted_by": "Raderad av", + "edited_by": "Redigerad av", + "expense": { + "for": "för", + "from": "från", + "paid_by": "Betald av", + "received_by": "Mottagen av", + "to": "till", + "user": { + "deleted": "raderade", + "get": "får", + "lent": "lånade ut", + "owe": "är skyldig", + "paid": "betalade", + "pay": "betalar", + "received": "fick" + }, + "you": { + "deleted": "raderade", + "get": "får", + "lent": "lånade ut", + "owe": "är skyldig", + "paid": "betalade", + "pay": "betala", + "received": "fick" + } + }, + "expense_details": "Utgiftsdetaljer", + "in_group": "I grupp", + "no_activity": "Inga aktiviteter än", + "not_involved": "Inte involverad", + "not_set": "Inte inställt", + "on": "på", + "or": "eller", + "outstanding_balances": "Saldon", + "select_balance": "Välj saldo", + "select_currency": "Välj valuta", + "settle_up_name": "Gör kvitt", + "settled_up": "Kvitt", + "settlement": "Kvittning", + "share_text": "Kolla in SplitPro. Det är ett gratis open source-alternativ till Splitwise", + "show_all_currencies": "Visa alla valutor", + "today": "Idag", + "total_balance": "Totalt saldo" + } +} diff --git a/src/components/Account/LanguagePicker.tsx b/src/components/Account/LanguagePicker.tsx new file mode 100644 index 0000000..e47aa73 --- /dev/null +++ b/src/components/Account/LanguagePicker.tsx @@ -0,0 +1,76 @@ +import React, { useState } from 'react'; +import { Check, ChevronRight, Languages } from 'lucide-react'; +import { useTranslation } from 'react-i18next'; +import { toast } from 'sonner'; +import { AppDrawer } from '../ui/drawer'; +import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from '../ui/command'; +import { cn } from '~/lib/utils'; +import { SUPPORTED_LANGUAGES, changeLanguage } from '~/utils/i18n'; + +export const LanguagePicker: React.FC = () => { + const { t, i18n } = useTranslation(); + const [open, setOpen] = useState(false); + + const currentLanguage = SUPPORTED_LANGUAGES.find((l) => l.code === i18n.language); + + async function onSelect(code: string) { + setOpen(false); + try { + await changeLanguage(code); + } catch (error) { + console.error(error); + toast.error(t('errors.language_change_failed')); + } + } + + return ( + +
+ + {t('account.change_language')} +
+
+ {currentLanguage?.name} + +
+ + } + onTriggerClick={() => setOpen(true)} + open={open} + onOpenChange={(openVal) => { + if (openVal !== open) setOpen(openVal); + }} + leftAction={t('actions.close')} + title={t('account.change_language_details.title')} + className="h-[70vh]" + shouldCloseOnAction + > + + + {t('account.change_language_details.no_language_found')} + + {SUPPORTED_LANGUAGES.map((language) => ( + void onSelect(language.code)} + > + + {language.name} + + ))} + + +
+ ); +}; diff --git a/src/components/Account/SubmitFeedback.tsx b/src/components/Account/SubmitFeedback.tsx index 9891a8b..3dd81b5 100644 --- a/src/components/Account/SubmitFeedback.tsx +++ b/src/components/Account/SubmitFeedback.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useMemo, useState } from 'react'; import { AppDrawer } from '../ui/drawer'; import { ChevronRight, MessageSquare } from 'lucide-react'; import { api } from '~/utils/api'; @@ -8,28 +8,37 @@ import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { Form, FormControl, FormField, FormItem, FormMessage } from '../ui/form'; import { toast } from 'sonner'; +import { type TFunction } from 'i18next'; +import { useTranslation } from 'react-i18next'; -const feedbackSchema = z.object({ - feedback: z - .string({ required_error: 'Feedback is required' }) - .min(10, { message: 'Feedback should be at least 10 characters' }), -}); +const getFeedbackSchema = (t: TFunction) => + z.object({ + feedback: z + .string({ required_error: t('errors.feedback_required') }) + .min(10, { message: t('errors.feedback_min_length') }), + }); + +type FeedbackValues = z.infer>; export const SubmitFeedback: React.FC = () => { + const { t } = useTranslation(); + const feedbackSchema = useMemo(() => getFeedbackSchema(t), [t]); const submitFeedbackMutation = api.user.submitFeedback.useMutation(); const [feedbackOpen, setFeedbackOpen] = useState(false); - const feedbackForm = useForm>({ + const feedbackForm = useForm({ resolver: zodResolver(feedbackSchema), }); - async function onGroupSubmit(values: z.infer) { + async function onGroupSubmit(values: FeedbackValues) { try { await submitFeedbackMutation.mutateAsync({ feedback: values.feedback }); feedbackForm.reset(); - toast.success('Feedback submitted', { duration: 1500 }); + toast.success(t('account.submit_feedback_details.messages.submit_success'), { + duration: 1500, + }); } catch (e) { - toast.error('Failed to submit feedback'); + toast.error(t('account.submit_feedback_details.messages.submit_error')); } setFeedbackOpen(false); } @@ -40,7 +49,7 @@ export const SubmitFeedback: React.FC = () => {
- Submit feedback + {t('account.submit_feedback')}
@@ -48,11 +57,11 @@ export const SubmitFeedback: React.FC = () => { open={feedbackOpen} onOpenChange={setFeedbackOpen} onClose={() => setFeedbackOpen(false)} - leftAction="Close" - title="Submit a feedback" + leftAction={t('actions.close')} + title={t('account.submit_feedback_details.title')} className="h-[70vh]" shouldCloseOnAction={false} - actionTitle="Submit" + actionTitle={t('actions.submit')} actionOnClick={async () => { await feedbackForm.handleSubmit(onGroupSubmit)(); }} @@ -72,7 +81,7 @@ export const SubmitFeedback: React.FC = () => { diff --git a/src/components/Account/SubscribeNotification.tsx b/src/components/Account/SubscribeNotification.tsx index 9a97bfc..60e4655 100644 --- a/src/components/Account/SubscribeNotification.tsx +++ b/src/components/Account/SubscribeNotification.tsx @@ -5,6 +5,7 @@ import { env } from '~/env'; import { Bell, BellOff, ChevronRight } from 'lucide-react'; import { api } from '~/utils/api'; import { useAppStore } from '~/store/appStore'; +import { useTranslation } from 'react-i18next'; const base64ToUint8Array = (base64: string) => { const padding = '='.repeat((4 - (base64.length % 4)) % 4); @@ -20,6 +21,7 @@ const base64ToUint8Array = (base64: string) => { }; export const SubscribeNotification: React.FC = () => { + const { t } = useTranslation(); const updatePushSubscription = api.user.updatePushNotification.useMutation(); const [isSubscribed, setIsSubscribed] = useState(false); const webPushPublicKey = useAppStore((s) => s.webPushPublicKey); @@ -46,11 +48,11 @@ export const SubscribeNotification: React.FC = () => { try { const result = await Notification.requestPermission(); if (result === 'granted') { - toast.success('You will receive notifications now'); + toast.success(t('account.notifications.messages.notification_granted')); navigator.serviceWorker.ready .then(async (reg) => { if (!webPushPublicKey) { - toast.error('Notification is not supported'); + toast.error(t('errors.notification_not_supported')); return; } @@ -63,11 +65,11 @@ export const SubscribeNotification: React.FC = () => { updatePushSubscription.mutate({ subscription: JSON.stringify(sub) }); }) .catch((e) => { - toast.error('Cannot subscribe to notification'); + toast.error(t('errors.subscribe_error')); }); } } catch (e) { - toast.error('Error requesting notification'); + toast.error(t('errors.request_error')); } } @@ -80,7 +82,7 @@ export const SubscribeNotification: React.FC = () => { setIsSubscribed(false); } } catch (e) { - toast.error('Error unsubscribing notification'); + toast.error(t('errors.unsubscribe_error')); } } @@ -99,12 +101,12 @@ export const SubscribeNotification: React.FC = () => { {!isSubscribed ? ( <> - Enable Notification + {t('account.notifications.enable_notification')} ) : ( <> - Disable notification + {t('account.notifications.disable_notification')} )} diff --git a/src/components/Account/UpdateDetails.tsx b/src/components/Account/UpdateDetails.tsx index 4929a90..19ebbdb 100644 --- a/src/components/Account/UpdateDetails.tsx +++ b/src/components/Account/UpdateDetails.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useMemo, useState } from 'react'; import { AppDrawer } from '../ui/drawer'; import { ChevronRight, MessageSquare, Pencil } from 'lucide-react'; import { api } from '~/utils/api'; @@ -9,16 +9,25 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { Form, FormControl, FormField, FormItem, FormMessage } from '../ui/form'; import { Input } from '../ui/input'; import { toast } from 'sonner'; +import { type TFunction } from 'i18next'; +import { useTranslation } from 'react-i18next'; -const detailsSchema = z.object({ - name: z.string({ required_error: 'Name is required' }).min(1, { message: 'Name is required' }), -}); +const getDetailsSchema = (t: TFunction) => + z.object({ + name: z + .string({ required_error: t('errors.name_required') }) + .min(1, { message: t('errors.name_required') }), + }); + +type DetailsValues = z.infer>; export const UpdateDetails: React.FC<{ defaultName: string }> = ({ defaultName }) => { + const { t } = useTranslation(); + const detailsSchema = useMemo(() => getDetailsSchema(t), [t]); const updateDetailsMutation = api.user.updateUserDetail.useMutation(); const [updateDetailsOpen, setUpdateDetailsOpen] = useState(false); - const detailForm = useForm>({ + const detailForm = useForm({ resolver: zodResolver(detailsSchema), defaultValues: { name: defaultName, @@ -27,13 +36,13 @@ export const UpdateDetails: React.FC<{ defaultName: string }> = ({ defaultName } const utils = api.useUtils(); - async function onGroupSubmit(values: z.infer) { + async function onGroupSubmit(values: DetailsValues) { try { await updateDetailsMutation.mutateAsync({ name: values.name }); - toast.success('Updated details', { duration: 1500 }); + toast.success(t('account.messages.submit_success'), { duration: 1500 }); utils.user.me.refetch().catch(console.error); } catch (error) { - toast.error('Error in updating details'); + toast.error(t('account.messages.submit_error')); console.error(error); } @@ -47,10 +56,10 @@ export const UpdateDetails: React.FC<{ defaultName: string }> = ({ defaultName } open={updateDetailsOpen} onClose={() => setUpdateDetailsOpen(false)} onOpenChange={(open) => setUpdateDetailsOpen(open)} - leftAction="Close" - title="Edit details" + leftAction={t('actions.close')} + title={t('account.edit_name.title')} className="h-[80vh]" - actionTitle="Save" + actionTitle={t('actions.save')} actionOnClick={async () => { await detailForm.handleSubmit(onGroupSubmit)(); }} @@ -67,7 +76,11 @@ export const UpdateDetails: React.FC<{ defaultName: string }> = ({ defaultName } render={({ field }) => ( - + diff --git a/src/components/InstallApp.tsx b/src/components/InstallApp.tsx index ba1a907..9c16dc1 100644 --- a/src/components/InstallApp.tsx +++ b/src/components/InstallApp.tsx @@ -2,8 +2,10 @@ import React from 'react'; import { Button } from './ui/button'; import { Download } from 'lucide-react'; import { AppDrawer } from './ui/drawer'; +import { useTranslation } from 'react-i18next'; const InstallApp: React.FC = () => { + const { t } = useTranslation(); const [isStandalone, setIsStandalone] = React.useState(false); function isAppStandalone() { @@ -35,42 +37,42 @@ const InstallApp: React.FC = () => { trigger={ } - leftAction="Close" - title="Download App" + leftAction={t('actions.close')} + title={t('account.download_app_details.title')} className="h-[70vh]" shouldCloseOnAction >
-

You can download SplitPro as a PWA to your home screen

+

{t('account.download_app_details.download_as_pwa')}

- If you are using iOS, checkout this{' '} + {t('account.download_app_details.using_ios')}{' '} - video + {t('account.download_app_details.video')}

- If you are using Android, checkout this{' '} + {t('account.download_app_details.using_android')}{' '} - Video + {t('account.download_app_details.video')}

-

or

+

{t('ui.or')}

); }; diff --git a/src/components/Layout/MainLayout.tsx b/src/components/Layout/MainLayout.tsx index 74e9c80..fb439f6 100644 --- a/src/components/Layout/MainLayout.tsx +++ b/src/components/Layout/MainLayout.tsx @@ -11,6 +11,7 @@ import { } from '@heroicons/react/24/solid'; import Link from 'next/link'; import { useRouter } from 'next/router'; +import { useTranslation } from 'react-i18next'; interface MainLayoutProps { title?: React.ReactNode; @@ -22,6 +23,7 @@ interface MainLayoutProps { const MainLayout: React.FC = ({ children, actions, hideAppBar, title }) => { const router = useRouter(); + const { t } = useTranslation(); const currentPath = router.pathname; return ( @@ -38,31 +40,31 @@ const MainLayout: React.FC = ({ children, actions, hideAppBar, SplitPro = ({ children, actions, hideAppBar,