From f9763afc032ee1415ebb9731b4d7c34a8bee0b60 Mon Sep 17 00:00:00 2001 From: dominictb Date: Wed, 4 Mar 2026 23:17:49 +0700 Subject: [PATCH 1/8] fix: change message when user joins workspace via link --- src/languages/en.ts | 2 +- src/libs/ReportActionsUtils.ts | 2 +- src/types/onyx/OriginalMessage.ts | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 3071cc93a34e2..a792281a7169d 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -7432,7 +7432,7 @@ const translations = { `The ${feedName} connection is broken. To restore card imports, log into your bank.`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `the Plaid connection to your business bank account is broken. Please reconnect your bank account ${maskedAccountNumber} so you can continue to use your Expensify Cards.`, - addEmployee: (email: string, role: string) => `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => didJoinPolicy? 'joined via workspace joining link' : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `updated the role of ${email} to ${newRole} (previously ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 2e95d6b9e7ad0..c82bde1087ba1 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -2679,7 +2679,7 @@ function getPolicyChangeLogAddEmployeeMessage(translate: LocalizedTranslate, rep const email = originalMessage?.email ?? ''; const role = translate('workspace.common.roleName', originalMessage?.role ?? '').toLowerCase(); const formattedEmail = formatPhoneNumber(email); - return translate('report.actions.type.addEmployee', formattedEmail, role); + return translate('report.actions.type.addEmployee', formattedEmail, role, originalMessage?.didJoinPolicy); } function isPolicyChangeLogChangeRoleMessage(reportAction: OnyxInputOrEntry): reportAction is ReportAction { diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index 4b74456f8d9be..539171f23f928 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -719,6 +719,9 @@ type OriginalMessagePolicyChangeLog = { /** The accountID of the previous reimburser */ accountID: number; }; + + /** Whether the user joined the workspace via joining link */ + didJoinPolicy?: boolean; }; /** Model of `join policy` report action */ From e3d970fea9073636cb72b8096f995f22501f97a2 Mon Sep 17 00:00:00 2001 From: dominictb Date: Wed, 4 Mar 2026 23:30:39 +0700 Subject: [PATCH 2/8] generate translations --- src/languages/de.ts | 4 ++-- src/languages/fr.ts | 3 ++- src/languages/it.ts | 3 ++- src/languages/ja.ts | 3 ++- src/languages/nl.ts | 3 ++- src/languages/pl.ts | 4 ++-- src/languages/pt-BR.ts | 4 ++-- src/languages/zh-hans.ts | 3 ++- 8 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 87aeda4b9cf04..eed7596a57fab 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -7465,7 +7465,8 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und `Die Verbindung für ${feedName} ist unterbrochen. Um Kartenimporte wiederherzustellen, melden Sie sich bei Ihrer Bank an.`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `Die Plaid-Verbindung zu Ihrem Geschäftskonto ist unterbrochen. Bitte verbinden Sie Ihr Bankkonto ${maskedAccountNumber} erneut, damit Sie Ihre Expensify Karten weiterhin verwenden können.`, - addEmployee: (email: string, role: string) => `${email} als ${role === 'member' ? 'a' : 'an'} ${role} hinzugefügt`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => + didJoinPolicy ? 'über einen Link zum Beitritt zum Workspace beigetreten' : `${email} als ${role === 'member' ? 'ein' : 'an'} ${role} hinzugefügt`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `hat die Rolle von ${email} in ${newRole} geändert (zuvor ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { @@ -8594,7 +8595,6 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`, addMember: 'Dieses Mitglied kann nicht hinzugefügt werden. Bitte versuche es erneut.', vacationDelegate: 'Dieser Benutzer kann nicht als Urlaubsvertretung festgelegt werden. Bitte versuche es erneut.', }, - reportSuspiciousActivityPrompt: (email: string) => `Bist du sicher? Dadurch wird das Konto von ${email} gesperrt.

Unser Team wird das Konto anschließend überprüfen und unbefugten Zugriff entfernen. Um den Zugriff wiederherzustellen, muss die Person mit Concierge zusammenarbeiten.`, reportSuspiciousActivityConfirmationPrompt: 'Wir überprüfen das Konto, um sicherzustellen, dass es sicher entsperrt werden kann, und melden uns bei Fragen über Concierge.', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 8b272af443ae6..daa68cbf3805f 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -7488,7 +7488,8 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip `La connexion ${feedName} est interrompue. Pour rétablir l’importation des cartes, connectez-vous à votre banque.`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la connexion Plaid à votre compte bancaire professionnel est rompue. Veuillez reconnecter votre compte bancaire ${maskedAccountNumber} afin de pouvoir continuer à utiliser vos Cartes Expensify.`, - addEmployee: (email: string, role: string) => `a ajouté ${email} en tant que ${role === 'member' ? 'un' : 'un'} ${role}`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => + didJoinPolicy ? 'a rejoint via le lien d’adhésion à l’espace de travail' : `a ajouté ${email} en tant que ${role === 'member' ? 'a' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `a mis à jour le rôle de ${email} en ${newRole} (précédemment ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/it.ts b/src/languages/it.ts index 47062d49a649b..d328e32ab3883 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -7453,7 +7453,8 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo `La connessione ${feedName} è interrotta. Per ripristinare le importazioni della carta, accedi alla tua banca.`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la connessione Plaid al conto bancario della tua azienda non funziona. Per favore, ricollega il conto bancario ${maskedAccountNumber} così puoi continuare a usare le tue Carte Expensify.`, - addEmployee: (email: string, role: string) => `aggiunto ${email} come ${role === 'member' ? 'a' : 'un'} ${role}`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => + didJoinPolicy ? 'si è unito tramite link di accesso allo spazio di lavoro' : `aggiunto ${email} come ${role === 'member' ? 'a' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `ha aggiornato il ruolo di ${email} a ${newRole} (in precedenza ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/ja.ts b/src/languages/ja.ts index dc4dc18eb2c7f..991e4c0568667 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -7367,7 +7367,8 @@ ${reportName} `${feedName} との接続が切断されています。カードの取引明細の取込を再開するには、銀行にログインしてください。`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `Plaid によるビジネス銀行口座との接続が切断されています。Expensify カードを引き続きご利用いただくために、銀行口座 ${maskedAccountNumber} を再接続してください。`, - addEmployee: (email: string, role: string) => `${email} を ${role === 'member' ? 'a' : 'ある'} ${role} として追加しました`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => + didJoinPolicy ? 'ワークスペース参加リンクから参加しました' : `${email} を ${role === 'member' ? 'a' : '1つの'} ${role} として追加しました`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `${email} のロールを ${currentRole} から ${newRole} に更新しました`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 343e5b846cd47..9d1038c5702e0 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -7431,7 +7431,8 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar `De verbinding met ${feedName} is verbroken. Log in bij je bank om kaartimports te herstellen.`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `de Plaid-verbinding met je zakelijke bankrekening is verbroken. Verbind je bankrekening ${maskedAccountNumber} opnieuw zodat je je Expensify Kaarten kunt blijven gebruiken.`, - addEmployee: (email: string, role: string) => `${email} toegevoegd als ${role === 'member' ? 'een' : 'een'} ${role}`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => + didJoinPolicy ? 'is via uitnodigingslink voor werkruimte toegevoegd' : `${email} toegevoegd als ${role === 'member' ? 'een' : 'een'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `heeft de rol van ${email} bijgewerkt naar ${newRole} (voorheen ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index e780d643ea9f2..96f8da3b45791 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -7419,7 +7419,8 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i `Połączenie ${feedName} jest przerwane. Aby przywrócić importy kart, zaloguj się do swojego banku.`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `połączenie Plaid z twoim firmowym kontem bankowym jest przerwane. Proszę, połącz ponownie swoje konto bankowe ${maskedAccountNumber}, aby móc dalej używać Kart Expensify.`, - addEmployee: (email: string, role: string) => `dodano ${email} jako ${role === 'member' ? 'a' : 'włączony'} ${role}`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => + didJoinPolicy ? 'dołączył(-a) przez link dołączenia do przestrzeni roboczej' : `dodano ${email} jako ${role === 'member' ? 'a' : 'jako'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `zaktualizowano rolę użytkownika ${email} na ${newRole} (wcześniej ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { @@ -8544,7 +8545,6 @@ Oto *paragon testowy*, żeby pokazać Ci, jak to działa:`, vacationDelegate: 'Nie można ustawić tego użytkownika jako zastępującego na czas nieobecności. Spróbuj ponownie.', }, cannotSetVacationDelegateForMember: (email: string) => `Nie możesz ustawić zastępstwa urlopowego dla ${email}, ponieważ jest on/ona obecnie zastępcą dla następujących członków:`, - reportSuspiciousActivityPrompt: (email: string) => `Czy na pewno? To zablokuje konto użytkownika ${email}.

Nasz zespół następnie przejrzy konto i usunie wszelki nieautoryzowany dostęp. Aby odzyskać dostęp, będą musieli współpracować z Concierge.`, reportSuspiciousActivityConfirmationPrompt: 'Przejrzymy konto, aby potwierdzić, że bezpiecznie je odblokować, i skontaktujemy się przez Concierge w razie pytań.', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index f66ac076c26f3..2d6dc2d0a31c4 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -7423,7 +7423,8 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e `A conexão de ${feedName} está interrompida. Para restaurar as importações do cartão, faça login no seu banco.`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `a conexão Plaid com a sua conta bancária empresarial foi interrompida. Por favor, reconecte sua conta bancária ${maskedAccountNumber} para continuar usando seus Cartões Expensify.`, - addEmployee: (email: string, role: string) => `adicionou ${email} como ${role === 'member' ? 'a' : 'um'} ${role}`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => + didJoinPolicy ? 'entrou via link de ingresso no workspace' : `adicionou ${email} como ${role === 'member' ? 'uma' : 'um'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `atualizou a função de ${email} para ${newRole} (anteriormente ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { @@ -8549,7 +8550,6 @@ Aqui está um *comprovante de teste* para mostrar como funciona:`, vacationDelegate: 'Não foi possível definir este usuário como delegado de férias. Tente novamente.', }, cannotSetVacationDelegateForMember: (email: string) => `Você não pode definir um procurador de férias para ${email} porque esta pessoa já é procuradora dos seguintes membros:`, - reportSuspiciousActivityPrompt: (email: string) => `Tem certeza? Isso irá bloquear a conta de ${email}.

Nossa equipe irá então analisar a conta e remover qualquer acesso não autorizado. Para recuperar o acesso, será necessário que trabalhem com a Concierge.`, reportSuspiciousActivityConfirmationPrompt: 'Vamos revisar a conta para verificar se é seguro desbloqueá-la e entraremos em contato via Concierge caso haja dúvidas.', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 994ad21c357e4..ac0bbec453b0f 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -7255,7 +7255,8 @@ ${reportName} `${feedName} 连接已中断。要恢复银行卡导入,请登录您的银行账户。`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `您与企业银行账户的 Plaid 连接已中断。请重新连接您的银行账户 ${maskedAccountNumber},以便继续使用 Expensify 卡。`, - addEmployee: (email: string, role: string) => `已将 ${email} 添加为 ${role === 'member' ? 'a' : '一个'} 的 ${role}`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => + didJoinPolicy ? '通过工作区加入链接加入' : `已将 ${email} 添加为 ${role === 'member' ? 'a' : '一个'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `已将 ${email} 的角色更新为 ${newRole}(先前为 ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { From 36b280e6a3dce55b153d2c7e5780e8dcdaf35010 Mon Sep 17 00:00:00 2001 From: dominictb Date: Wed, 4 Mar 2026 23:36:51 +0700 Subject: [PATCH 3/8] run prettier --- src/languages/en.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index a792281a7169d..a67da4599d7ed 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -7432,7 +7432,8 @@ const translations = { `The ${feedName} connection is broken. To restore card imports, log into your bank.`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `the Plaid connection to your business bank account is broken. Please reconnect your bank account ${maskedAccountNumber} so you can continue to use your Expensify Cards.`, - addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => didJoinPolicy? 'joined via workspace joining link' : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => + didJoinPolicy ? 'joined via workspace joining link' : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `updated the role of ${email} to ${newRole} (previously ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { From 4da315f8fcef7a9e1a317c85dffc53550a396d7e Mon Sep 17 00:00:00 2001 From: dominictb Date: Thu, 5 Mar 2026 23:37:53 +0700 Subject: [PATCH 4/8] update comment message to show invitee email --- src/languages/de.ts | 2 +- src/languages/en.ts | 2 +- src/languages/fr.ts | 2 +- src/languages/it.ts | 2 +- src/languages/ja.ts | 2 +- src/languages/nl.ts | 2 +- src/languages/pl.ts | 2 +- src/languages/pt-BR.ts | 2 +- src/languages/zh-hans.ts | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 58381d455358f..c78ca87949334 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -7476,7 +7476,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `Die Plaid-Verbindung zu Ihrem Geschäftskonto ist unterbrochen. Bitte verbinden Sie Ihr Bankkonto ${maskedAccountNumber} erneut, damit Sie Ihre Expensify Karten weiterhin verwenden können.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? 'über einen Link zum Beitritt zum Workspace beigetreten' : `${email} als ${role === 'member' ? 'ein' : 'an'} ${role} hinzugefügt`, + didJoinPolicy ? `${email} ist über den Einladungslink des Arbeitsbereichs beigetreten` : `${email} als ${role === 'member' ? 'ein' : 'an'} ${role} hinzugefügt`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `hat die Rolle von ${email} in ${newRole} geändert (zuvor ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/en.ts b/src/languages/en.ts index 086fd5ad94816..8f6edb636ba9b 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -7441,7 +7441,7 @@ const translations = { plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `the Plaid connection to your business bank account is broken. Please reconnect your bank account ${maskedAccountNumber} so you can continue to use your Expensify Cards.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? 'joined via workspace joining link' : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, + didJoinPolicy ? `${email} joined via workspace joining link` : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `updated the role of ${email} to ${newRole} (previously ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 10cdfdde38a4b..20ca5f4cb6bc8 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -7498,7 +7498,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la connexion Plaid à votre compte bancaire professionnel est rompue. Veuillez reconnecter votre compte bancaire ${maskedAccountNumber} afin de pouvoir continuer à utiliser vos Cartes Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? 'a rejoint via le lien d’adhésion à l’espace de travail' : `a ajouté ${email} en tant que ${role === 'member' ? 'a' : 'un'} ${role}`, + didJoinPolicy ? `${email} a rejoint via un lien de jonction d’espace de travail` : `a ajouté ${email} en tant que ${role === 'member' ? 'un' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `a mis à jour le rôle de ${email} en ${newRole} (précédemment ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/it.ts b/src/languages/it.ts index 1a88b82b688ee..1765ca8b8d0b9 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -7463,7 +7463,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la connessione Plaid al conto bancario della tua azienda non funziona. Per favore, ricollega il conto bancario ${maskedAccountNumber} così puoi continuare a usare le tue Carte Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? 'si è unito tramite link di accesso allo spazio di lavoro' : `aggiunto ${email} come ${role === 'member' ? 'a' : 'un'} ${role}`, + didJoinPolicy ? `${email} si è unito tramite link di invito al workspace` : `ha aggiunto ${email} come ${role === 'member' ? 'a' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `ha aggiornato il ruolo di ${email} a ${newRole} (in precedenza ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/ja.ts b/src/languages/ja.ts index a58a43deabc21..df1c1fb964185 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -7377,7 +7377,7 @@ ${reportName} plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `Plaid によるビジネス銀行口座との接続が切断されています。Expensify カードを引き続きご利用いただくために、銀行口座 ${maskedAccountNumber} を再接続してください。`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? 'ワークスペース参加リンクから参加しました' : `${email} を ${role === 'member' ? 'a' : '1つの'} ${role} として追加しました`, + didJoinPolicy ? `${email} さんがワークスペースの参加リンクから参加しました` : `${email} を ${role === 'member' ? 'a' : '1つの'} ${role} として追加しました`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `${email} のロールを ${currentRole} から ${newRole} に更新しました`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/nl.ts b/src/languages/nl.ts index bcb469dedf1a9..8de7ccb163dba 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -7441,7 +7441,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `de Plaid-verbinding met je zakelijke bankrekening is verbroken. Verbind je bankrekening ${maskedAccountNumber} opnieuw zodat je je Expensify Kaarten kunt blijven gebruiken.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? 'is via uitnodigingslink voor werkruimte toegevoegd' : `${email} toegevoegd als ${role === 'member' ? 'een' : 'een'} ${role}`, + didJoinPolicy ? `${email} is via de werkruimte-koppelingslink lid geworden` : `${email} toegevoegd als ${role === 'member' ? 'een' : 'een'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `heeft de rol van ${email} bijgewerkt naar ${newRole} (voorheen ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index e6bb435e2bfd0..714dae2b42f5b 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -7429,7 +7429,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `połączenie Plaid z twoim firmowym kontem bankowym jest przerwane. Proszę, połącz ponownie swoje konto bankowe ${maskedAccountNumber}, aby móc dalej używać Kart Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? 'dołączył(-a) przez link dołączenia do przestrzeni roboczej' : `dodano ${email} jako ${role === 'member' ? 'a' : 'jako'} ${role}`, + didJoinPolicy ? `${email} dołączył przez link dołączenia do przestrzeni roboczej` : `dodano ${email} jako ${role === 'member' ? 'a' : 'jeden'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `zaktualizowano rolę użytkownika ${email} na ${newRole} (wcześniej ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index aaec03080b510..123449c2b12f5 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -7433,7 +7433,7 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `a conexão Plaid com a sua conta bancária empresarial foi interrompida. Por favor, reconecte sua conta bancária ${maskedAccountNumber} para continuar usando seus Cartões Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? 'entrou via link de ingresso no workspace' : `adicionou ${email} como ${role === 'member' ? 'uma' : 'um'} ${role}`, + didJoinPolicy ? `${email} entrou por meio do link de ingresso ao workspace` : `adicionou ${email} como ${role === 'member' ? 'a' : 'um'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `atualizou a função de ${email} para ${newRole} (anteriormente ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 4ed435b0aa302..4dcd2c0213a31 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -7263,7 +7263,7 @@ ${reportName} plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `您与企业银行账户的 Plaid 连接已中断。请重新连接您的银行账户 ${maskedAccountNumber},以便继续使用 Expensify 卡。`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? '通过工作区加入链接加入' : `已将 ${email} 添加为 ${role === 'member' ? 'a' : '一个'} ${role}`, + didJoinPolicy ? `${email} 通过工作区加入链接加入` : `已将 ${email} 添加为 ${role === 'member' ? 'a' : '一个'} 的 ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `已将 ${email} 的角色更新为 ${newRole}(先前为 ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { From c97b4b348c32582d86c6e0cd93e7de8867936bbe Mon Sep 17 00:00:00 2001 From: dominictb Date: Fri, 13 Mar 2026 01:22:20 +0700 Subject: [PATCH 5/8] Add Spanish translation --- src/languages/es.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index 8f2cc5d174ff4..1d67bcff4fc12 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -7364,7 +7364,8 @@ ${amount} para ${merchant} - ${date}`, `La conexión ${feedName} está rota. Para restaurar las importaciones de tarjetas, inicia sesión en tu banco.`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la conexión Plaid con tu cuenta bancaria de empresa está rota. Por favor, reconecta tu cuenta bancaria ${maskedAccountNumber} para poder seguir usando tus Tarjetas Expensify.`, - addEmployee: (email, role) => `agregó a ${email} como ${role}`, + addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => + didJoinPolicy ? `${email} se unió mediante el enlace de incorporación al espacio de trabajo` : `se añadió ${email} como ${role === 'member' ? 'a' : 'a un'} ${role}`, updateRole: ({email, currentRole, newRole}) => `actualizó el rol ${email} a ${newRole} (previamente ${currentRole})`, updatedCustomField1: (email, newValue, previousValue) => { if (!newValue) { From 30246435db18c4c108e05590db7f3dc835bbacb5 Mon Sep 17 00:00:00 2001 From: dominictb Date: Fri, 13 Mar 2026 23:24:41 +0700 Subject: [PATCH 6/8] update translations --- src/languages/de.ts | 2 +- src/languages/en.ts | 2 +- src/languages/es.ts | 104 +++++++++------------------------------ src/languages/fr.ts | 2 +- src/languages/it.ts | 2 +- src/languages/ja.ts | 2 +- src/languages/nl.ts | 2 +- src/languages/pl.ts | 2 +- src/languages/pt-BR.ts | 2 +- src/languages/zh-hans.ts | 2 +- 10 files changed, 31 insertions(+), 91 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 17ae2a5811a5f..0f6037860ddd0 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -7540,7 +7540,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `Die Plaid-Verbindung zu Ihrem Geschäftskonto ist unterbrochen. Bitte verbinden Sie Ihr Bankkonto ${maskedAccountNumber} erneut, damit Sie Ihre Expensify Karten weiterhin verwenden können.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} ist über den Einladungslink des Arbeitsbereichs beigetreten` : `${email} als ${role === 'member' ? 'ein' : 'an'} ${role} hinzugefügt`, + didJoinPolicy ? `${email} ist über den Arbeitsbereichs-Einladungslink beigetreten` : `${email} als ${role === 'member' ? 'a' : 'an'} ${role} hinzugefügt`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `hat die Rolle von ${email} in ${newRole} geändert (zuvor ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/en.ts b/src/languages/en.ts index 6d2058bdbf671..e710687564d44 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -7509,7 +7509,7 @@ const translations = { plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `the Plaid connection to your business bank account is broken. Please reconnect your bank account ${maskedAccountNumber} so you can continue to use your Expensify Cards.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} joined via workspace joining link` : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, + didJoinPolicy ? `${email} joined via the workspace invite link` : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `updated the role of ${email} to ${newRole} (previously ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/es.ts b/src/languages/es.ts index 1d67bcff4fc12..8772aac2a0bf8 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1,3 +1,14 @@ +/** + * _____ __ __ + * / ___/__ ___ ___ _______ _/ /____ ___/ / + * / (_ / -_) _ \/ -_) __/ _ \`/ __/ -_) _ / + * \___/\__/_//_/\__/_/ \_,_/\__/\__/\_,_/ + * + * This file was automatically generated. Please consider these alternatives before manually editing it: + * + * - Improve the prompts in prompts/translation, or + * - Improve context annotations in src/languages/en.ts + */ import {CONST as COMMON_CONST} from 'expensify-common'; import dedent from '@libs/StringUtils/dedent'; import CONST from '@src/CONST'; @@ -14,7 +25,6 @@ import type { } from './params'; import type {TranslationDeepObject} from './types'; -/* eslint-disable max-len */ const translations: TranslationDeepObject = { common: { count: 'Contar', @@ -982,16 +992,13 @@ const translations: TranslationDeepObject = { if (!added && !updated) { return 'No se han añadido ni actualizado miembros.'; } - if (added && updated) { const getPluralSuffix = (count: number) => (count > 1 ? 's' : ''); return `${added} miembro${getPluralSuffix(added)} añadido${getPluralSuffix(added)}, ${updated} miembro${getPluralSuffix(updated)} actualizado${getPluralSuffix(updated)}.`; } - if (updated) { return updated > 1 ? `${updated} miembros han sido actualizados.` : '1 miembro ha sido actualizado.'; } - return added > 1 ? `Se han agregado ${added} miembros` : 'Se ha agregado 1 miembro.'; }, importTagsSuccessfulDescription: ({tags}) => (tags > 1 ? `Se han agregado ${tags} etiquetas.` : 'Se ha agregado 1 etiqueta.'), @@ -1447,7 +1454,6 @@ const translations: TranslationDeepObject = { markedAsResolved: 'marcó el motivo del rechazo como resuelto', }, }, - moveExpenses: 'Mover a informe', moveExpensesError: 'No puedes mover gastos per diem a informes de otros espacios de trabajo, porque las tarifas de dietas pueden diferir entre espacios de trabajo.', changeApprover: { @@ -1559,7 +1565,6 @@ const translations: TranslationDeepObject = { nextStep: { message: { [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}) => { - // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que añadas gastos.`; @@ -1570,7 +1575,6 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}) => { - // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que envíes los gastos.`; @@ -1580,10 +1584,8 @@ const translations: TranslationDeepObject = { return `Esperando a que un administrador envíe los gastos.`; } }, - // eslint-disable-next-line @typescript-eslint/no-unused-vars [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_) => `¡No se requiere ninguna acción adicional!`, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}) => { - // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que añadas una cuenta bancaria.`; @@ -1598,8 +1600,6 @@ const translations: TranslationDeepObject = { if (eta) { formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` el ${eta} de cada mes` : ` ${eta}`; } - - // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que tus gastos se envíen automáticamente${formattedETA}.`; @@ -1610,7 +1610,6 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}) => { - // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que soluciones ellos problemas.`; @@ -1621,7 +1620,6 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}) => { - // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que apruebes los gastos.`; @@ -1632,7 +1630,6 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}) => { - // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que exportes este informe.`; @@ -1643,7 +1640,6 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}) => { - // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que pagues los gastos.`; @@ -1654,7 +1650,6 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: ({actor, actorType}) => { - // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que termines de configurar una cuenta bancaria de empresa.`; @@ -1669,10 +1664,8 @@ const translations: TranslationDeepObject = { if (eta) { formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` para el ${eta}` : ` ${eta}`; } - return `Esperando a que se complete el pago${formattedETA}.`; }, - // eslint-disable-next-line @typescript-eslint/no-unused-vars [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_) => `¡Ups! Parece que estás enviando el informe a ti mismo. Aprobar tus propios informes está prohibido por tu espacio de trabajo. Por favor, envía este informe a otra persona o contacta a tu administrador para cambiar la persona a la que lo envías.`, }, @@ -1686,7 +1679,6 @@ const translations: TranslationDeepObject = { [CONST.NEXT_STEP.ETA_KEY.END_OF_TRIP]: 'al final de tu viaje', }, }, - profilePage: { profile: 'Perfil', preferredPronouns: 'Pronombres preferidos', @@ -2270,7 +2262,6 @@ ${amount} para ${merchant} - ${date}`, two: 'º', few: 'º', other: 'º', - /* eslint-disable @typescript-eslint/naming-convention */ '1': 'Primero', '2': 'Segundo', '3': 'Tercero', @@ -2281,7 +2272,6 @@ ${amount} para ${merchant} - ${date}`, '8': 'Octavo', '9': 'Noveno', '10': 'Décimo', - /* eslint-enable @typescript-eslint/naming-convention */ }, }, approverInMultipleWorkflows: 'Este miembro ya pertenece a otro flujo de aprobación. Cualquier actualización aquí se reflejará allí también.', @@ -2744,7 +2734,6 @@ ${amount} para ${merchant} - ${date}`, addAccountingIntegrationTask: { title: ({integrationName, workspaceAccountingLink}) => `Conéctate${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' a'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'tu' : ''} ${integrationName}](${workspaceAccountingLink})`, - description: ({integrationName, workspaceAccountingLink}) => dedent(` Conéctate ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'tu' : 'a'} ${integrationName} para la clasificación y sincronización automática de gastos, lo que facilita el cierre de fin de mes. @@ -2755,13 +2744,13 @@ ${amount} para ${merchant} - ${date}`, 4. Busca ${integrationName}. 5. Haz clic en *Conectar*. - ${ - integrationName && CONST.connectionsVideoPaths[integrationName] - ? `[Ir a contabilidad](${workspaceAccountingLink}). +${ + integrationName && CONST.connectionsVideoPaths[integrationName] + ? `[Ir a contabilidad](${workspaceAccountingLink}). ![Conéctate a ${integrationName}](${CONST.CLOUDFRONT_URL}/${CONST.connectionsVideoPaths[integrationName]})` - : `[Ir a contabilidad](${workspaceAccountingLink}).` - }`), + : `[Ir a contabilidad](${workspaceAccountingLink}).` +}`), }, connectCorporateCardTask: { title: ({corporateCardLink}) => `Conecta [tu tarjeta corporativa](${corporateCardLink})`, @@ -2990,20 +2979,16 @@ ${amount} para ${merchant} - ${date}`, if (!timeData) { return 'Por favor, espera un momento antes de intentarlo de nuevo.'; } - const timeParts = []; if (timeData.days) { timeParts.push(`${timeData.days} ${timeData.days === 1 ? 'día' : 'días'}`); } - if (timeData.hours) { timeParts.push(`${timeData.hours} ${timeData.hours === 1 ? 'hora' : 'horas'}`); } - if (timeData.minutes) { timeParts.push(`${timeData.minutes} ${timeData.minutes === 1 ? 'minuto' : 'minutos'}`); } - let timeText = ''; if (timeParts.length === 1) { timeText = timeParts.at(0) ?? ''; @@ -3012,7 +2997,6 @@ ${amount} para ${merchant} - ${date}`, } else if (timeParts.length === 3) { timeText = `${timeParts.at(0)}, ${timeParts.at(1)}, y ${timeParts.at(2)}`; } - return `¡Un momento! Debes esperar ${timeText} antes de intentar validar tu número nuevamente.`; }, }, @@ -3070,19 +3054,15 @@ ${amount} para ${merchant} - ${date}`, }, untilTomorrow: 'Hasta mañana', untilTime: (time) => { - // Check for HH:MM AM/PM format and starts with '01:' if (CONST.REGEX.TIME_STARTS_01.test(time)) { return `Hasta la ${time}`; } - // Check for any HH:MM AM/PM format not starting with '01:' if (CONST.REGEX.TIME_FORMAT.test(time)) { return `Hasta las ${time}`; } - // Check for date-time format like "06-29 11:30 AM" if (CONST.REGEX.DATE_TIME_FORMAT.test(time)) { return `Hasta el día ${time}`; } - // Default case return `Hasta ${time}`; }, date: 'Fecha', @@ -3099,11 +3079,9 @@ ${amount} para ${merchant} - ${date}`, }, stepCounter: ({step, total, text}) => { let result = `Paso ${step}`; - if (total) { result = `${result} de ${total}`; } - if (text) { result = `${result}: ${text}`; } @@ -4092,19 +4070,16 @@ ${amount} para ${merchant} - ${date}`, [CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL]: 'Factura del proveedor', [CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY]: 'Asiento contable', [CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.CHECK]: 'Cheque', - [`${CONST.QUICKBOOKS_DESKTOP_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CHECK}Description`]: 'Crearemos un cheque desglosado para cada informe de Expensify y lo enviaremos desde la cuenta bancaria a continuación.', [`${CONST.QUICKBOOKS_DESKTOP_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}Description`]: "Automáticamente relacionaremos el nombre del comerciante de la transacción con tarjeta de crédito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos un proveedor asociado 'Credit Card Misc.'.", [`${CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Description`]: 'Crearemos una factura de proveedor desglosada para cada informe de Expensify con la fecha del último gasto, y la añadiremos a la cuenta a continuación. Si este periodo está cerrado, lo contabilizaremos el 1º del siguiente periodo abierto.', - [`${CONST.QUICKBOOKS_DESKTOP_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}AccountDescription`]: 'Elige dónde exportar las transacciones con tarjeta de crédito.', [`${CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}AccountDescription`]: 'Selecciona el proveedor que se aplicará a todas las transacciones con tarjeta de crédito.', [`${CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.CHECK}AccountDescription`]: 'Elige desde dónde enviar los cheques.', - [`${CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Error`]: 'Las facturas de proveedores no están disponibles cuando las ubicaciones están habilitadas. Por favor, selecciona otra opción de exportación.', [`${CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.CHECK}Error`]: @@ -4197,8 +4172,8 @@ ${amount} para ${merchant} - ${date}`, }, }, }, - receivable: 'Cuentas por cobrar', // This is an account name that will come directly from QBO, so I don't know why we need a translation for it. It should take whatever the name of the account is in QBO. Leaving this note for CS. - archive: 'Archivo de cuentas por cobrar', // This is an account name that will come directly from QBO, so I don't know why we need a translation for it. It should take whatever the name of the account is in QBO. Leaving this note for CS. + receivable: 'Cuentas por cobrar', + archive: 'Archivo de cuentas por cobrar', exportInvoicesDescription: 'Usa esta cuenta al exportar facturas a QuickBooks Online.', exportCompanyCardsDescription: 'Establece cómo se exportan las compras con tarjeta de empresa a QuickBooks Online.', account: 'Cuenta', @@ -4221,7 +4196,6 @@ ${amount} para ${merchant} - ${date}`, outOfPocketTaxEnabledDescription: 'QuickBooks Online no permite impuestos en las exportaciones de entradas a los asientos contables. Como tienes los impuestos activados en tu espacio de trabajo, esta opción de exportación no está disponible.', outOfPocketTaxEnabledError: 'La anotacion en el diario no está disponible cuando los impuestos están activados. Por favor, selecciona otra opción de exportación diferente.', - advancedConfig: { autoSyncDescription: 'Expensify se sincronizará automáticamente con QuickBooks Online todos los días.', inviteEmployees: 'Invitar empleados', @@ -4241,18 +4215,15 @@ ${amount} para ${merchant} - ${date}`, [CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL]: 'Factura del proveedor', [CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY]: 'Asiento contable', [CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.CHECK]: 'Cheque', - [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD}Description`]: "Automáticamente relacionaremos el nombre del comerciante de la transacción con tarjeta de débito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos un proveedor asociado 'Debit Card Misc.'.", [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}Description`]: "Automáticamente relacionaremos el nombre del comerciante de la transacción con tarjeta de crédito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos un proveedor asociado 'Credit Card Misc.'.", [`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Description`]: 'Crearemos una factura de proveedor desglosada para cada informe de Expensify con la fecha del último gasto, y la añadiremos a la cuenta a continuación. Si este periodo está cerrado, lo contabilizaremos en el día 1 del siguiente periodo abierto.', - [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD}AccountDescription`]: 'Elige dónde exportar las transacciones con tarjeta de débito.', [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}AccountDescription`]: 'Elige dónde exportar las transacciones con tarjeta de crédito.', [`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}AccountDescription`]: 'Selecciona el proveedor que se aplicará a todas las transacciones con tarjeta de crédito.', - [`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Error`]: 'Las facturas de proveedores no están disponibles cuando las ubicaciones están habilitadas. Por favor, selecciona otra opción de exportación diferente.', [`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.CHECK}Error`]: @@ -4378,7 +4349,6 @@ ${amount} para ${merchant} - ${date}`, }, }, }, - sageIntacct: { preferredExporter: 'Exportador preferido', taxSolution: 'Solución fiscal', @@ -5691,9 +5661,7 @@ ${amount} para ${merchant} - ${date}`, return `¿Estás seguro de que quieres desconectar ${integrationName}?`; }, connectPrompt: ({connectionName}) => - `¿Estás seguro de que quieres conectar a ${ - CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[connectionName] ?? 'esta integración contable' - }? Esto eliminará cualquier conexión contable existente.`, + `¿Estás seguro de que quieres conectar a ${CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[connectionName] ?? 'esta integración contable'}? Esto eliminará cualquier conexión contable existente.`, enterCredentials: 'Ingresa tus credenciales', claimOffer: { badgeText: '¡Oferta disponible!', @@ -5839,7 +5807,6 @@ ${amount} para ${merchant} - ${date}`, case 'intacctImportTitle': return 'Importando datos desde Sage Intacct'; default: { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions return `Translation missing for stage: ${stage}`; } } @@ -5925,7 +5892,6 @@ ${amount} para ${merchant} - ${date}`, deactivateConfirmation: 'Al desactivar esta tarjeta, se rechazarán todas las transacciones futuras y no se podrá deshacer.', }, }, - export: { notReadyHeading: 'No está listo para exportar', notReadyDescription: @@ -6086,7 +6052,6 @@ ${amount} para ${merchant} - ${date}`, errorTitle: '¡Ups! No tan rapido...', errorDescription: `Hubo un problema al transferir la propiedad de este espacio de trabajo. Inténtalo de nuevo, o contacta con Concierge por ayuda.`, }, - exportAgainModal: { title: '¡Cuidado!', description: ({reportName, connectionName}) => @@ -6494,7 +6459,6 @@ ${amount} para ${merchant} - ${date}`, restrictedDescription: 'Sólo las personas en tu espacio de trabajo pueden encontrar esta sala', privateDescription: 'Sólo las personas que están invitadas a esta sala pueden encontrarla', publicDescription: 'Cualquier persona puede unirse a esta sala', - // eslint-disable-next-line @typescript-eslint/naming-convention public_announceDescription: 'Cualquier persona puede unirse a esta sala', createRoom: 'Crea una sala de chat', roomAlreadyExistsError: 'Ya existe una sala con este nombre', @@ -6511,10 +6475,9 @@ ${amount} para ${merchant} - ${date}`, selectAWorkspace: 'Seleccionar un espacio de trabajo', growlMessageOnRenameError: 'No se ha podido cambiar el nombre del espacio de trabajo. Por favor, comprueba tu conexión e inténtalo de nuevo.', visibilityOptions: { - restricted: 'Espacio de trabajo', // the translation for "restricted" visibility is actually workspace. This is so we can display restricted visibility rooms as "workspace" without having to change what's stored. + restricted: 'Espacio de trabajo', private: 'Privada', public: 'Público', - // eslint-disable-next-line @typescript-eslint/naming-convention public_announce: 'Anuncio Público', }, }, @@ -6549,7 +6512,6 @@ ${amount} para ${merchant} - ${date}`, deleteApprovalRule: (approverEmail, approverName, field, name) => `eliminó a ${approverName} (${approverEmail}) como aprobador para la ${field} "${name}"`, updateApprovalRule: ({field, name, newApproverEmail, newApproverName, oldApproverEmail, oldApproverName}) => { const formatApprover = (displayName?: string, email?: string) => (displayName ? `${displayName} (${email})` : email); - return `cambió el aprobador para la ${field} "${name}" a ${formatApprover(newApproverName, newApproverEmail)} (previamente ${formatApprover(oldApproverName, oldApproverEmail)})`; }, addCategory: (categoryName) => `añadió la categoría "${categoryName}""`, @@ -6559,7 +6521,6 @@ ${amount} para ${merchant} - ${date}`, if (!newValue) { return `eliminó la sugerencia de descripción "${oldValue}" de la categoría "${categoryName}"`; } - return !oldValue ? `añadió la sugerencia de descripción "${newValue}" a la categoría "${categoryName}"` : `cambió la sugerencia de descripción de la categoría "${categoryName}" a “${newValue}” (anteriormente “${oldValue}”)`; @@ -6668,9 +6629,7 @@ ${amount} para ${merchant} - ${date}`, if (toggledOptionsCount && toggledOptionsCount > 1) { return `${allEnabled ? 'habilitó' : 'deshabilitó'} todas las opciones para el campo de informe "${fieldName}"`; } - return `${allEnabled ? 'habilitó' : 'deshabilitó'} la opción "${optionName}" para el campo de informe "${fieldName}", haciendo que todas las opciones queden ${ - allEnabled ? 'habilitadas' : 'deshabilitadas' - }`; + return `${allEnabled ? 'habilitó' : 'deshabilitó'} la opción "${optionName}" para el campo de informe "${fieldName}", haciendo que todas las opciones queden ${allEnabled ? 'habilitadas' : 'deshabilitadas'}`; }, deleteReportField: ({fieldType, fieldName}: {fieldType: string; fieldName?: string}) => `eliminó el campo de informe ${fieldType} "${fieldName}"`, preventSelfApproval: ({oldValue, newValue}) => @@ -6678,11 +6637,9 @@ ${amount} para ${merchant} - ${date}`, setReceiptRequiredAmount: (newValue) => `estableció el importe requerido del recibo en "${newValue}"`, changedReceiptRequiredAmount: (oldValue, newValue) => `cambió el importe requerido del recibo a "${newValue}" (antes "${oldValue}")`, removedReceiptRequiredAmount: (oldValue) => `eliminó el importe requerido del recibo (antes "${oldValue}")`, - setMaxExpenseAmount: (newValue) => `estableció el importe máximo del gasto en "${newValue}"`, changedMaxExpenseAmount: (oldValue, newValue) => `cambió el importe máximo del gasto a "${newValue}" (antes "${oldValue}")`, removedMaxExpenseAmount: (oldValue) => `eliminó el importe máximo del gasto (antes "${oldValue}")`, - setMaxExpenseAge: (newValue) => `estableció la antigüedad máxima del gasto en "${newValue}" días`, changedMaxExpenseAge: (oldValue, newValue) => `cambió la antigüedad máxima del gasto a "${newValue}" días (antes "${oldValue}")`, removedMaxExpenseAge: (oldValue) => `eliminó la antigüedad máxima del gasto (anteriormente "${oldValue}" días)`, @@ -6750,27 +6707,21 @@ ${amount} para ${merchant} - ${date}`, const individualChanged = !!(newIndividual && oldIndividual !== newIndividual); const thresholdChanged = typeof newNotificationThreshold === 'number' && oldNotificationThreshold !== newNotificationThreshold; const changesList: string[] = []; - if (frequencyChanged) { changesList.push(`cambió la frecuencia del presupuesto a "${newFrequency}" (antes "${oldFrequency}")`); } - if (sharedChanged) { changesList.push(`cambió el presupuesto compartido total del espacio de trabajo a "${newShared}" (antes "${oldShared}")`); } - if (individualChanged) { changesList.push(`cambió el presupuesto individual a "${newIndividual}" (antes "${oldIndividual}")`); } - if (thresholdChanged) { changesList.push(`cambió el umbral de notificación a "${newNotificationThreshold}%" (antes "${oldNotificationThreshold}%")`); } - if (!frequencyChanged && !sharedChanged && !individualChanged && !thresholdChanged) { return `actualizó el presupuesto para ${entityType} "${entityName}"`; } - if (changesList.length === 1) { let entityLabel = entityType; if (entityType === 'category') { @@ -6789,7 +6740,6 @@ ${amount} para ${merchant} - ${date}`, } return `cambió el umbral de notificación para ${entityLabel} "${entityName}" a "${newNotificationThreshold}%" (antes "${oldNotificationThreshold}%")`; } - let entityLabel = entityType; if (entityType === 'category') { entityLabel = 'la categoría'; @@ -7321,7 +7271,6 @@ ${amount} para ${merchant} - ${date}`, exportedToCSV: `exportado a CSV`, exportedToIntegration: { automatic: (label) => { - // The label will always be in English, so we need to translate it const labelTranslations: Record = { [CONST.REPORT.EXPORT_OPTION_LABELS.EXPENSE_LEVEL_EXPORT]: translations.export.expenseLevelExport, [CONST.REPORT.EXPORT_OPTION_LABELS.REPORT_LEVEL_EXPORT]: translations.export.reportLevelExport, @@ -7365,13 +7314,12 @@ ${amount} para ${merchant} - ${date}`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la conexión Plaid con tu cuenta bancaria de empresa está rota. Por favor, reconecta tu cuenta bancaria ${maskedAccountNumber} para poder seguir usando tus Tarjetas Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} se unió mediante el enlace de incorporación al espacio de trabajo` : `se añadió ${email} como ${role === 'member' ? 'a' : 'a un'} ${role}`, + didJoinPolicy ? `${email} se unió mediante el enlace de invitación del espacio de trabajo` : `se agregó ${email} como ${role === 'member' ? 'a' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}) => `actualizó el rol ${email} a ${newRole} (previamente ${currentRole})`, updatedCustomField1: (email, newValue, previousValue) => { if (!newValue) { return `eliminó el campo personalizado 1 de ${email} (previamente "${previousValue}")`; } - return !previousValue ? `añadió "${newValue}" al campo personalizado 1 de ${email}` : `cambió el campo personalizado 1 de ${email} a "${newValue}" (previamente "${previousValue}")`; @@ -7380,7 +7328,6 @@ ${amount} para ${merchant} - ${date}`, if (!newValue) { return `eliminó el campo personalizado 2 de ${email} (previamente "${previousValue}")`; } - return !previousValue ? `añadió "${newValue}" al campo personalizado 2 de ${email}` : `cambió el campo personalizado 2 de ${email} a "${newValue}" (previamente "${previousValue}")`; @@ -8122,15 +8069,12 @@ ${amount} para ${merchant} - ${date}`, if (formattedLimit && category) { return `Recibo obligatorio para importes sobre ${formattedLimit} el límite de la categoría`; } - if (formattedLimit) { return `Recibo obligatorio para importes sobre ${formattedLimit}`; } - if (category) { return 'Recibo obligatorio para importes sobre el límite de la categoría'; } - return 'Recibo obligatorio'; }, itemizedReceiptRequired: ({formattedLimit}) => `Recibo detallado requerido${formattedLimit ? ` para importes sobre ${formattedLimit}` : ''}`, @@ -8670,8 +8614,6 @@ ${amount} para ${merchant} - ${date}`, }, }, productTrainingTooltip: { - // TODO: CONCIERGE_LHN_GBR tooltip will be replaced by a tooltip in the #admins room - // https://github.com/Expensify/App/issues/57045#issuecomment-2701455668 conciergeLHNGBR: '¡Comienza aquí!', saveSearchTooltip: 'Renombra tus búsquedas guardadas aquí', accountSwitcher: 'Accede a tus cuentas copiloto aquí', @@ -8893,7 +8835,6 @@ ${amount} para ${merchant} - ${date}`, }, cannotSetVacationDelegateForMember: (email: string) => `No puedes establecer un delegado de vacaciones para ${email} porque actualmente es el delegado de los siguientes miembros:`, - reportSuspiciousActivityPrompt: (email: string) => `¿Estás seguro? Esto bloqueará la cuenta de ${email}.

Nuestro equipo revisará la cuenta y eliminará cualquier acceso no autorizado. Para recuperar el acceso, deberá comunicarse con Concierge.`, reportSuspiciousActivityConfirmationPrompt: @@ -8993,5 +8934,4 @@ ${amount} para ${merchant} - ${date}`, }, }, }; - export default translations; diff --git a/src/languages/fr.ts b/src/languages/fr.ts index e23b49eb48c60..75a94dffcf9bd 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -7562,7 +7562,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la connexion Plaid à votre compte bancaire professionnel est rompue. Veuillez reconnecter votre compte bancaire ${maskedAccountNumber} afin de pouvoir continuer à utiliser vos Cartes Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} a rejoint via un lien de jonction d’espace de travail` : `a ajouté ${email} en tant que ${role === 'member' ? 'un' : 'un'} ${role}`, + didJoinPolicy ? `${email} a rejoint via le lien d’invitation à l’espace de travail` : `a ajouté ${email} en tant que ${role === 'member' ? 'a' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `a mis à jour le rôle de ${email} en ${newRole} (précédemment ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/it.ts b/src/languages/it.ts index eede901a8ff46..8d23b5c87dcf6 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -7526,7 +7526,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la connessione Plaid al conto bancario della tua azienda non funziona. Per favore, ricollega il conto bancario ${maskedAccountNumber} così puoi continuare a usare le tue Carte Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} si è unito tramite link di invito al workspace` : `ha aggiunto ${email} come ${role === 'member' ? 'a' : 'un'} ${role}`, + didJoinPolicy ? `${email} si è unito tramite il link di invito dello spazio di lavoro` : `aggiunto ${email} come ${role === 'member' ? 'a' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `ha aggiornato il ruolo di ${email} a ${newRole} (in precedenza ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 2609d1f4698ec..d57e65847bebf 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -7440,7 +7440,7 @@ ${reportName} plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `Plaid によるビジネス銀行口座との接続が切断されています。Expensify カードを引き続きご利用いただくために、銀行口座 ${maskedAccountNumber} を再接続してください。`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} さんがワークスペースの参加リンクから参加しました` : `${email} を ${role === 'member' ? 'a' : '1つの'} ${role} として追加しました`, + didJoinPolicy ? `${email} さんがワークスペースの招待リンクから参加しました` : `${email} を ${role === 'member' ? 'a' : '1つの'} ${role} として追加しました`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `${email} のロールを ${currentRole} から ${newRole} に更新しました`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 02b16eae53162..ec9d7607cdc57 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -7505,7 +7505,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `de Plaid-verbinding met je zakelijke bankrekening is verbroken. Verbind je bankrekening ${maskedAccountNumber} opnieuw zodat je je Expensify Kaarten kunt blijven gebruiken.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} is via de werkruimte-koppelingslink lid geworden` : `${email} toegevoegd als ${role === 'member' ? 'een' : 'een'} ${role}`, + didJoinPolicy ? `${email} is via de workspace-uitnodigingslink lid geworden` : `heeft ${email} toegevoegd als ${role === 'member' ? 'een' : 'een'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `heeft de rol van ${email} bijgewerkt naar ${newRole} (voorheen ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index d3160033fcdc7..06d3e1f785c43 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -7493,7 +7493,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `połączenie Plaid z twoim firmowym kontem bankowym jest przerwane. Proszę, połącz ponownie swoje konto bankowe ${maskedAccountNumber}, aby móc dalej używać Kart Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} dołączył przez link dołączenia do przestrzeni roboczej` : `dodano ${email} jako ${role === 'member' ? 'a' : 'jeden'} ${role}`, + didJoinPolicy ? `${email} dołączył(-a) przez link zaproszenia do przestrzeni roboczej` : `dodano ${email} jako ${role === 'member' ? 'a' : 'an'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `zaktualizowano rolę użytkownika ${email} na ${newRole} (wcześniej ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 00d3367ee7990..e8c49e34b30da 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -7497,7 +7497,7 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `a conexão Plaid com a sua conta bancária empresarial foi interrompida. Por favor, reconecte sua conta bancária ${maskedAccountNumber} para continuar usando seus Cartões Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} entrou por meio do link de ingresso ao workspace` : `adicionou ${email} como ${role === 'member' ? 'a' : 'um'} ${role}`, + didJoinPolicy ? `${email} entrou pelo link de convite do workspace` : `adicionou ${email} como ${role === 'member' ? 'a' : 'um'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `atualizou a função de ${email} para ${newRole} (anteriormente ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index fdfd79ac2daf2..c746ada626da9 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -7322,7 +7322,7 @@ ${reportName} plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `您与企业银行账户的 Plaid 连接已中断。请重新连接您的银行账户 ${maskedAccountNumber},以便继续使用 Expensify 卡。`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} 通过工作区加入链接加入` : `已将 ${email} 添加为 ${role === 'member' ? 'a' : '一个'} 的 ${role}`, + didJoinPolicy ? `${email} 通过工作区邀请链接加入` : `已将 ${email} 添加为 ${role === 'member' ? 'a' : '一个'} 的 ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `已将 ${email} 的角色更新为 ${newRole}(先前为 ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { From 4b092c10cf8a2b4b6d93b074ba11e4f12af901b5 Mon Sep 17 00:00:00 2001 From: dominictb Date: Fri, 13 Mar 2026 23:34:36 +0700 Subject: [PATCH 7/8] Revert "update translations" This reverts commit 30246435db18c4c108e05590db7f3dc835bbacb5. --- src/languages/de.ts | 2 +- src/languages/en.ts | 2 +- src/languages/es.ts | 104 ++++++++++++++++++++++++++++++--------- src/languages/fr.ts | 2 +- src/languages/it.ts | 2 +- src/languages/ja.ts | 2 +- src/languages/nl.ts | 2 +- src/languages/pl.ts | 2 +- src/languages/pt-BR.ts | 2 +- src/languages/zh-hans.ts | 2 +- 10 files changed, 91 insertions(+), 31 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 0f6037860ddd0..17ae2a5811a5f 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -7540,7 +7540,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `Die Plaid-Verbindung zu Ihrem Geschäftskonto ist unterbrochen. Bitte verbinden Sie Ihr Bankkonto ${maskedAccountNumber} erneut, damit Sie Ihre Expensify Karten weiterhin verwenden können.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} ist über den Arbeitsbereichs-Einladungslink beigetreten` : `${email} als ${role === 'member' ? 'a' : 'an'} ${role} hinzugefügt`, + didJoinPolicy ? `${email} ist über den Einladungslink des Arbeitsbereichs beigetreten` : `${email} als ${role === 'member' ? 'ein' : 'an'} ${role} hinzugefügt`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `hat die Rolle von ${email} in ${newRole} geändert (zuvor ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/en.ts b/src/languages/en.ts index e710687564d44..6d2058bdbf671 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -7509,7 +7509,7 @@ const translations = { plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `the Plaid connection to your business bank account is broken. Please reconnect your bank account ${maskedAccountNumber} so you can continue to use your Expensify Cards.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} joined via the workspace invite link` : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, + didJoinPolicy ? `${email} joined via workspace joining link` : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `updated the role of ${email} to ${newRole} (previously ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/es.ts b/src/languages/es.ts index 8772aac2a0bf8..1d67bcff4fc12 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1,14 +1,3 @@ -/** - * _____ __ __ - * / ___/__ ___ ___ _______ _/ /____ ___/ / - * / (_ / -_) _ \/ -_) __/ _ \`/ __/ -_) _ / - * \___/\__/_//_/\__/_/ \_,_/\__/\__/\_,_/ - * - * This file was automatically generated. Please consider these alternatives before manually editing it: - * - * - Improve the prompts in prompts/translation, or - * - Improve context annotations in src/languages/en.ts - */ import {CONST as COMMON_CONST} from 'expensify-common'; import dedent from '@libs/StringUtils/dedent'; import CONST from '@src/CONST'; @@ -25,6 +14,7 @@ import type { } from './params'; import type {TranslationDeepObject} from './types'; +/* eslint-disable max-len */ const translations: TranslationDeepObject = { common: { count: 'Contar', @@ -992,13 +982,16 @@ const translations: TranslationDeepObject = { if (!added && !updated) { return 'No se han añadido ni actualizado miembros.'; } + if (added && updated) { const getPluralSuffix = (count: number) => (count > 1 ? 's' : ''); return `${added} miembro${getPluralSuffix(added)} añadido${getPluralSuffix(added)}, ${updated} miembro${getPluralSuffix(updated)} actualizado${getPluralSuffix(updated)}.`; } + if (updated) { return updated > 1 ? `${updated} miembros han sido actualizados.` : '1 miembro ha sido actualizado.'; } + return added > 1 ? `Se han agregado ${added} miembros` : 'Se ha agregado 1 miembro.'; }, importTagsSuccessfulDescription: ({tags}) => (tags > 1 ? `Se han agregado ${tags} etiquetas.` : 'Se ha agregado 1 etiqueta.'), @@ -1454,6 +1447,7 @@ const translations: TranslationDeepObject = { markedAsResolved: 'marcó el motivo del rechazo como resuelto', }, }, + moveExpenses: 'Mover a informe', moveExpensesError: 'No puedes mover gastos per diem a informes de otros espacios de trabajo, porque las tarifas de dietas pueden diferir entre espacios de trabajo.', changeApprover: { @@ -1565,6 +1559,7 @@ const translations: TranslationDeepObject = { nextStep: { message: { [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}) => { + // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que añadas gastos.`; @@ -1575,6 +1570,7 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}) => { + // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que envíes los gastos.`; @@ -1584,8 +1580,10 @@ const translations: TranslationDeepObject = { return `Esperando a que un administrador envíe los gastos.`; } }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_) => `¡No se requiere ninguna acción adicional!`, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}) => { + // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que añadas una cuenta bancaria.`; @@ -1600,6 +1598,8 @@ const translations: TranslationDeepObject = { if (eta) { formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` el ${eta} de cada mes` : ` ${eta}`; } + + // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que tus gastos se envíen automáticamente${formattedETA}.`; @@ -1610,6 +1610,7 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}) => { + // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que soluciones ellos problemas.`; @@ -1620,6 +1621,7 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}) => { + // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que apruebes los gastos.`; @@ -1630,6 +1632,7 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}) => { + // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que exportes este informe.`; @@ -1640,6 +1643,7 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}) => { + // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que pagues los gastos.`; @@ -1650,6 +1654,7 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: ({actor, actorType}) => { + // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: return `Esperando a que termines de configurar una cuenta bancaria de empresa.`; @@ -1664,8 +1669,10 @@ const translations: TranslationDeepObject = { if (eta) { formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` para el ${eta}` : ` ${eta}`; } + return `Esperando a que se complete el pago${formattedETA}.`; }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_) => `¡Ups! Parece que estás enviando el informe a ti mismo. Aprobar tus propios informes está prohibido por tu espacio de trabajo. Por favor, envía este informe a otra persona o contacta a tu administrador para cambiar la persona a la que lo envías.`, }, @@ -1679,6 +1686,7 @@ const translations: TranslationDeepObject = { [CONST.NEXT_STEP.ETA_KEY.END_OF_TRIP]: 'al final de tu viaje', }, }, + profilePage: { profile: 'Perfil', preferredPronouns: 'Pronombres preferidos', @@ -2262,6 +2270,7 @@ ${amount} para ${merchant} - ${date}`, two: 'º', few: 'º', other: 'º', + /* eslint-disable @typescript-eslint/naming-convention */ '1': 'Primero', '2': 'Segundo', '3': 'Tercero', @@ -2272,6 +2281,7 @@ ${amount} para ${merchant} - ${date}`, '8': 'Octavo', '9': 'Noveno', '10': 'Décimo', + /* eslint-enable @typescript-eslint/naming-convention */ }, }, approverInMultipleWorkflows: 'Este miembro ya pertenece a otro flujo de aprobación. Cualquier actualización aquí se reflejará allí también.', @@ -2734,6 +2744,7 @@ ${amount} para ${merchant} - ${date}`, addAccountingIntegrationTask: { title: ({integrationName, workspaceAccountingLink}) => `Conéctate${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' a'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'tu' : ''} ${integrationName}](${workspaceAccountingLink})`, + description: ({integrationName, workspaceAccountingLink}) => dedent(` Conéctate ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'tu' : 'a'} ${integrationName} para la clasificación y sincronización automática de gastos, lo que facilita el cierre de fin de mes. @@ -2744,13 +2755,13 @@ ${amount} para ${merchant} - ${date}`, 4. Busca ${integrationName}. 5. Haz clic en *Conectar*. -${ - integrationName && CONST.connectionsVideoPaths[integrationName] - ? `[Ir a contabilidad](${workspaceAccountingLink}). + ${ + integrationName && CONST.connectionsVideoPaths[integrationName] + ? `[Ir a contabilidad](${workspaceAccountingLink}). ![Conéctate a ${integrationName}](${CONST.CLOUDFRONT_URL}/${CONST.connectionsVideoPaths[integrationName]})` - : `[Ir a contabilidad](${workspaceAccountingLink}).` -}`), + : `[Ir a contabilidad](${workspaceAccountingLink}).` + }`), }, connectCorporateCardTask: { title: ({corporateCardLink}) => `Conecta [tu tarjeta corporativa](${corporateCardLink})`, @@ -2979,16 +2990,20 @@ ${ if (!timeData) { return 'Por favor, espera un momento antes de intentarlo de nuevo.'; } + const timeParts = []; if (timeData.days) { timeParts.push(`${timeData.days} ${timeData.days === 1 ? 'día' : 'días'}`); } + if (timeData.hours) { timeParts.push(`${timeData.hours} ${timeData.hours === 1 ? 'hora' : 'horas'}`); } + if (timeData.minutes) { timeParts.push(`${timeData.minutes} ${timeData.minutes === 1 ? 'minuto' : 'minutos'}`); } + let timeText = ''; if (timeParts.length === 1) { timeText = timeParts.at(0) ?? ''; @@ -2997,6 +3012,7 @@ ${ } else if (timeParts.length === 3) { timeText = `${timeParts.at(0)}, ${timeParts.at(1)}, y ${timeParts.at(2)}`; } + return `¡Un momento! Debes esperar ${timeText} antes de intentar validar tu número nuevamente.`; }, }, @@ -3054,15 +3070,19 @@ ${ }, untilTomorrow: 'Hasta mañana', untilTime: (time) => { + // Check for HH:MM AM/PM format and starts with '01:' if (CONST.REGEX.TIME_STARTS_01.test(time)) { return `Hasta la ${time}`; } + // Check for any HH:MM AM/PM format not starting with '01:' if (CONST.REGEX.TIME_FORMAT.test(time)) { return `Hasta las ${time}`; } + // Check for date-time format like "06-29 11:30 AM" if (CONST.REGEX.DATE_TIME_FORMAT.test(time)) { return `Hasta el día ${time}`; } + // Default case return `Hasta ${time}`; }, date: 'Fecha', @@ -3079,9 +3099,11 @@ ${ }, stepCounter: ({step, total, text}) => { let result = `Paso ${step}`; + if (total) { result = `${result} de ${total}`; } + if (text) { result = `${result}: ${text}`; } @@ -4070,16 +4092,19 @@ ${ [CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL]: 'Factura del proveedor', [CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY]: 'Asiento contable', [CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.CHECK]: 'Cheque', + [`${CONST.QUICKBOOKS_DESKTOP_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CHECK}Description`]: 'Crearemos un cheque desglosado para cada informe de Expensify y lo enviaremos desde la cuenta bancaria a continuación.', [`${CONST.QUICKBOOKS_DESKTOP_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}Description`]: "Automáticamente relacionaremos el nombre del comerciante de la transacción con tarjeta de crédito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos un proveedor asociado 'Credit Card Misc.'.", [`${CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Description`]: 'Crearemos una factura de proveedor desglosada para cada informe de Expensify con la fecha del último gasto, y la añadiremos a la cuenta a continuación. Si este periodo está cerrado, lo contabilizaremos el 1º del siguiente periodo abierto.', + [`${CONST.QUICKBOOKS_DESKTOP_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}AccountDescription`]: 'Elige dónde exportar las transacciones con tarjeta de crédito.', [`${CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}AccountDescription`]: 'Selecciona el proveedor que se aplicará a todas las transacciones con tarjeta de crédito.', [`${CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.CHECK}AccountDescription`]: 'Elige desde dónde enviar los cheques.', + [`${CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Error`]: 'Las facturas de proveedores no están disponibles cuando las ubicaciones están habilitadas. Por favor, selecciona otra opción de exportación.', [`${CONST.QUICKBOOKS_DESKTOP_REIMBURSABLE_ACCOUNT_TYPE.CHECK}Error`]: @@ -4172,8 +4197,8 @@ ${ }, }, }, - receivable: 'Cuentas por cobrar', - archive: 'Archivo de cuentas por cobrar', + receivable: 'Cuentas por cobrar', // This is an account name that will come directly from QBO, so I don't know why we need a translation for it. It should take whatever the name of the account is in QBO. Leaving this note for CS. + archive: 'Archivo de cuentas por cobrar', // This is an account name that will come directly from QBO, so I don't know why we need a translation for it. It should take whatever the name of the account is in QBO. Leaving this note for CS. exportInvoicesDescription: 'Usa esta cuenta al exportar facturas a QuickBooks Online.', exportCompanyCardsDescription: 'Establece cómo se exportan las compras con tarjeta de empresa a QuickBooks Online.', account: 'Cuenta', @@ -4196,6 +4221,7 @@ ${ outOfPocketTaxEnabledDescription: 'QuickBooks Online no permite impuestos en las exportaciones de entradas a los asientos contables. Como tienes los impuestos activados en tu espacio de trabajo, esta opción de exportación no está disponible.', outOfPocketTaxEnabledError: 'La anotacion en el diario no está disponible cuando los impuestos están activados. Por favor, selecciona otra opción de exportación diferente.', + advancedConfig: { autoSyncDescription: 'Expensify se sincronizará automáticamente con QuickBooks Online todos los días.', inviteEmployees: 'Invitar empleados', @@ -4215,15 +4241,18 @@ ${ [CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL]: 'Factura del proveedor', [CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY]: 'Asiento contable', [CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.CHECK]: 'Cheque', + [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD}Description`]: "Automáticamente relacionaremos el nombre del comerciante de la transacción con tarjeta de débito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos un proveedor asociado 'Debit Card Misc.'.", [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}Description`]: "Automáticamente relacionaremos el nombre del comerciante de la transacción con tarjeta de crédito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos un proveedor asociado 'Credit Card Misc.'.", [`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Description`]: 'Crearemos una factura de proveedor desglosada para cada informe de Expensify con la fecha del último gasto, y la añadiremos a la cuenta a continuación. Si este periodo está cerrado, lo contabilizaremos en el día 1 del siguiente periodo abierto.', + [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD}AccountDescription`]: 'Elige dónde exportar las transacciones con tarjeta de débito.', [`${CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD}AccountDescription`]: 'Elige dónde exportar las transacciones con tarjeta de crédito.', [`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}AccountDescription`]: 'Selecciona el proveedor que se aplicará a todas las transacciones con tarjeta de crédito.', + [`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL}Error`]: 'Las facturas de proveedores no están disponibles cuando las ubicaciones están habilitadas. Por favor, selecciona otra opción de exportación diferente.', [`${CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.CHECK}Error`]: @@ -4349,6 +4378,7 @@ ${ }, }, }, + sageIntacct: { preferredExporter: 'Exportador preferido', taxSolution: 'Solución fiscal', @@ -5661,7 +5691,9 @@ ${ return `¿Estás seguro de que quieres desconectar ${integrationName}?`; }, connectPrompt: ({connectionName}) => - `¿Estás seguro de que quieres conectar a ${CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[connectionName] ?? 'esta integración contable'}? Esto eliminará cualquier conexión contable existente.`, + `¿Estás seguro de que quieres conectar a ${ + CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[connectionName] ?? 'esta integración contable' + }? Esto eliminará cualquier conexión contable existente.`, enterCredentials: 'Ingresa tus credenciales', claimOffer: { badgeText: '¡Oferta disponible!', @@ -5807,6 +5839,7 @@ ${ case 'intacctImportTitle': return 'Importando datos desde Sage Intacct'; default: { + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions return `Translation missing for stage: ${stage}`; } } @@ -5892,6 +5925,7 @@ ${ deactivateConfirmation: 'Al desactivar esta tarjeta, se rechazarán todas las transacciones futuras y no se podrá deshacer.', }, }, + export: { notReadyHeading: 'No está listo para exportar', notReadyDescription: @@ -6052,6 +6086,7 @@ ${ errorTitle: '¡Ups! No tan rapido...', errorDescription: `Hubo un problema al transferir la propiedad de este espacio de trabajo. Inténtalo de nuevo, o contacta con Concierge por ayuda.`, }, + exportAgainModal: { title: '¡Cuidado!', description: ({reportName, connectionName}) => @@ -6459,6 +6494,7 @@ ${ restrictedDescription: 'Sólo las personas en tu espacio de trabajo pueden encontrar esta sala', privateDescription: 'Sólo las personas que están invitadas a esta sala pueden encontrarla', publicDescription: 'Cualquier persona puede unirse a esta sala', + // eslint-disable-next-line @typescript-eslint/naming-convention public_announceDescription: 'Cualquier persona puede unirse a esta sala', createRoom: 'Crea una sala de chat', roomAlreadyExistsError: 'Ya existe una sala con este nombre', @@ -6475,9 +6511,10 @@ ${ selectAWorkspace: 'Seleccionar un espacio de trabajo', growlMessageOnRenameError: 'No se ha podido cambiar el nombre del espacio de trabajo. Por favor, comprueba tu conexión e inténtalo de nuevo.', visibilityOptions: { - restricted: 'Espacio de trabajo', + restricted: 'Espacio de trabajo', // the translation for "restricted" visibility is actually workspace. This is so we can display restricted visibility rooms as "workspace" without having to change what's stored. private: 'Privada', public: 'Público', + // eslint-disable-next-line @typescript-eslint/naming-convention public_announce: 'Anuncio Público', }, }, @@ -6512,6 +6549,7 @@ ${ deleteApprovalRule: (approverEmail, approverName, field, name) => `eliminó a ${approverName} (${approverEmail}) como aprobador para la ${field} "${name}"`, updateApprovalRule: ({field, name, newApproverEmail, newApproverName, oldApproverEmail, oldApproverName}) => { const formatApprover = (displayName?: string, email?: string) => (displayName ? `${displayName} (${email})` : email); + return `cambió el aprobador para la ${field} "${name}" a ${formatApprover(newApproverName, newApproverEmail)} (previamente ${formatApprover(oldApproverName, oldApproverEmail)})`; }, addCategory: (categoryName) => `añadió la categoría "${categoryName}""`, @@ -6521,6 +6559,7 @@ ${ if (!newValue) { return `eliminó la sugerencia de descripción "${oldValue}" de la categoría "${categoryName}"`; } + return !oldValue ? `añadió la sugerencia de descripción "${newValue}" a la categoría "${categoryName}"` : `cambió la sugerencia de descripción de la categoría "${categoryName}" a “${newValue}” (anteriormente “${oldValue}”)`; @@ -6629,7 +6668,9 @@ ${ if (toggledOptionsCount && toggledOptionsCount > 1) { return `${allEnabled ? 'habilitó' : 'deshabilitó'} todas las opciones para el campo de informe "${fieldName}"`; } - return `${allEnabled ? 'habilitó' : 'deshabilitó'} la opción "${optionName}" para el campo de informe "${fieldName}", haciendo que todas las opciones queden ${allEnabled ? 'habilitadas' : 'deshabilitadas'}`; + return `${allEnabled ? 'habilitó' : 'deshabilitó'} la opción "${optionName}" para el campo de informe "${fieldName}", haciendo que todas las opciones queden ${ + allEnabled ? 'habilitadas' : 'deshabilitadas' + }`; }, deleteReportField: ({fieldType, fieldName}: {fieldType: string; fieldName?: string}) => `eliminó el campo de informe ${fieldType} "${fieldName}"`, preventSelfApproval: ({oldValue, newValue}) => @@ -6637,9 +6678,11 @@ ${ setReceiptRequiredAmount: (newValue) => `estableció el importe requerido del recibo en "${newValue}"`, changedReceiptRequiredAmount: (oldValue, newValue) => `cambió el importe requerido del recibo a "${newValue}" (antes "${oldValue}")`, removedReceiptRequiredAmount: (oldValue) => `eliminó el importe requerido del recibo (antes "${oldValue}")`, + setMaxExpenseAmount: (newValue) => `estableció el importe máximo del gasto en "${newValue}"`, changedMaxExpenseAmount: (oldValue, newValue) => `cambió el importe máximo del gasto a "${newValue}" (antes "${oldValue}")`, removedMaxExpenseAmount: (oldValue) => `eliminó el importe máximo del gasto (antes "${oldValue}")`, + setMaxExpenseAge: (newValue) => `estableció la antigüedad máxima del gasto en "${newValue}" días`, changedMaxExpenseAge: (oldValue, newValue) => `cambió la antigüedad máxima del gasto a "${newValue}" días (antes "${oldValue}")`, removedMaxExpenseAge: (oldValue) => `eliminó la antigüedad máxima del gasto (anteriormente "${oldValue}" días)`, @@ -6707,21 +6750,27 @@ ${ const individualChanged = !!(newIndividual && oldIndividual !== newIndividual); const thresholdChanged = typeof newNotificationThreshold === 'number' && oldNotificationThreshold !== newNotificationThreshold; const changesList: string[] = []; + if (frequencyChanged) { changesList.push(`cambió la frecuencia del presupuesto a "${newFrequency}" (antes "${oldFrequency}")`); } + if (sharedChanged) { changesList.push(`cambió el presupuesto compartido total del espacio de trabajo a "${newShared}" (antes "${oldShared}")`); } + if (individualChanged) { changesList.push(`cambió el presupuesto individual a "${newIndividual}" (antes "${oldIndividual}")`); } + if (thresholdChanged) { changesList.push(`cambió el umbral de notificación a "${newNotificationThreshold}%" (antes "${oldNotificationThreshold}%")`); } + if (!frequencyChanged && !sharedChanged && !individualChanged && !thresholdChanged) { return `actualizó el presupuesto para ${entityType} "${entityName}"`; } + if (changesList.length === 1) { let entityLabel = entityType; if (entityType === 'category') { @@ -6740,6 +6789,7 @@ ${ } return `cambió el umbral de notificación para ${entityLabel} "${entityName}" a "${newNotificationThreshold}%" (antes "${oldNotificationThreshold}%")`; } + let entityLabel = entityType; if (entityType === 'category') { entityLabel = 'la categoría'; @@ -7271,6 +7321,7 @@ ${ exportedToCSV: `exportado a CSV`, exportedToIntegration: { automatic: (label) => { + // The label will always be in English, so we need to translate it const labelTranslations: Record = { [CONST.REPORT.EXPORT_OPTION_LABELS.EXPENSE_LEVEL_EXPORT]: translations.export.expenseLevelExport, [CONST.REPORT.EXPORT_OPTION_LABELS.REPORT_LEVEL_EXPORT]: translations.export.reportLevelExport, @@ -7314,12 +7365,13 @@ ${ plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la conexión Plaid con tu cuenta bancaria de empresa está rota. Por favor, reconecta tu cuenta bancaria ${maskedAccountNumber} para poder seguir usando tus Tarjetas Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} se unió mediante el enlace de invitación del espacio de trabajo` : `se agregó ${email} como ${role === 'member' ? 'a' : 'un'} ${role}`, + didJoinPolicy ? `${email} se unió mediante el enlace de incorporación al espacio de trabajo` : `se añadió ${email} como ${role === 'member' ? 'a' : 'a un'} ${role}`, updateRole: ({email, currentRole, newRole}) => `actualizó el rol ${email} a ${newRole} (previamente ${currentRole})`, updatedCustomField1: (email, newValue, previousValue) => { if (!newValue) { return `eliminó el campo personalizado 1 de ${email} (previamente "${previousValue}")`; } + return !previousValue ? `añadió "${newValue}" al campo personalizado 1 de ${email}` : `cambió el campo personalizado 1 de ${email} a "${newValue}" (previamente "${previousValue}")`; @@ -7328,6 +7380,7 @@ ${ if (!newValue) { return `eliminó el campo personalizado 2 de ${email} (previamente "${previousValue}")`; } + return !previousValue ? `añadió "${newValue}" al campo personalizado 2 de ${email}` : `cambió el campo personalizado 2 de ${email} a "${newValue}" (previamente "${previousValue}")`; @@ -8069,12 +8122,15 @@ ${ if (formattedLimit && category) { return `Recibo obligatorio para importes sobre ${formattedLimit} el límite de la categoría`; } + if (formattedLimit) { return `Recibo obligatorio para importes sobre ${formattedLimit}`; } + if (category) { return 'Recibo obligatorio para importes sobre el límite de la categoría'; } + return 'Recibo obligatorio'; }, itemizedReceiptRequired: ({formattedLimit}) => `Recibo detallado requerido${formattedLimit ? ` para importes sobre ${formattedLimit}` : ''}`, @@ -8614,6 +8670,8 @@ ${ }, }, productTrainingTooltip: { + // TODO: CONCIERGE_LHN_GBR tooltip will be replaced by a tooltip in the #admins room + // https://github.com/Expensify/App/issues/57045#issuecomment-2701455668 conciergeLHNGBR: '¡Comienza aquí!', saveSearchTooltip: 'Renombra tus búsquedas guardadas aquí', accountSwitcher: 'Accede a tus cuentas copiloto aquí', @@ -8835,6 +8893,7 @@ ${ }, cannotSetVacationDelegateForMember: (email: string) => `No puedes establecer un delegado de vacaciones para ${email} porque actualmente es el delegado de los siguientes miembros:`, + reportSuspiciousActivityPrompt: (email: string) => `¿Estás seguro? Esto bloqueará la cuenta de ${email}.

Nuestro equipo revisará la cuenta y eliminará cualquier acceso no autorizado. Para recuperar el acceso, deberá comunicarse con Concierge.`, reportSuspiciousActivityConfirmationPrompt: @@ -8934,4 +8993,5 @@ ${ }, }, }; + export default translations; diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 75a94dffcf9bd..e23b49eb48c60 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -7562,7 +7562,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la connexion Plaid à votre compte bancaire professionnel est rompue. Veuillez reconnecter votre compte bancaire ${maskedAccountNumber} afin de pouvoir continuer à utiliser vos Cartes Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} a rejoint via le lien d’invitation à l’espace de travail` : `a ajouté ${email} en tant que ${role === 'member' ? 'a' : 'un'} ${role}`, + didJoinPolicy ? `${email} a rejoint via un lien de jonction d’espace de travail` : `a ajouté ${email} en tant que ${role === 'member' ? 'un' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `a mis à jour le rôle de ${email} en ${newRole} (précédemment ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/it.ts b/src/languages/it.ts index 8d23b5c87dcf6..eede901a8ff46 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -7526,7 +7526,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la connessione Plaid al conto bancario della tua azienda non funziona. Per favore, ricollega il conto bancario ${maskedAccountNumber} così puoi continuare a usare le tue Carte Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} si è unito tramite il link di invito dello spazio di lavoro` : `aggiunto ${email} come ${role === 'member' ? 'a' : 'un'} ${role}`, + didJoinPolicy ? `${email} si è unito tramite link di invito al workspace` : `ha aggiunto ${email} come ${role === 'member' ? 'a' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `ha aggiornato il ruolo di ${email} a ${newRole} (in precedenza ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/ja.ts b/src/languages/ja.ts index d57e65847bebf..2609d1f4698ec 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -7440,7 +7440,7 @@ ${reportName} plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `Plaid によるビジネス銀行口座との接続が切断されています。Expensify カードを引き続きご利用いただくために、銀行口座 ${maskedAccountNumber} を再接続してください。`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} さんがワークスペースの招待リンクから参加しました` : `${email} を ${role === 'member' ? 'a' : '1つの'} ${role} として追加しました`, + didJoinPolicy ? `${email} さんがワークスペースの参加リンクから参加しました` : `${email} を ${role === 'member' ? 'a' : '1つの'} ${role} として追加しました`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `${email} のロールを ${currentRole} から ${newRole} に更新しました`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/nl.ts b/src/languages/nl.ts index ec9d7607cdc57..02b16eae53162 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -7505,7 +7505,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `de Plaid-verbinding met je zakelijke bankrekening is verbroken. Verbind je bankrekening ${maskedAccountNumber} opnieuw zodat je je Expensify Kaarten kunt blijven gebruiken.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} is via de workspace-uitnodigingslink lid geworden` : `heeft ${email} toegevoegd als ${role === 'member' ? 'een' : 'een'} ${role}`, + didJoinPolicy ? `${email} is via de werkruimte-koppelingslink lid geworden` : `${email} toegevoegd als ${role === 'member' ? 'een' : 'een'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `heeft de rol van ${email} bijgewerkt naar ${newRole} (voorheen ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 06d3e1f785c43..d3160033fcdc7 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -7493,7 +7493,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `połączenie Plaid z twoim firmowym kontem bankowym jest przerwane. Proszę, połącz ponownie swoje konto bankowe ${maskedAccountNumber}, aby móc dalej używać Kart Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} dołączył(-a) przez link zaproszenia do przestrzeni roboczej` : `dodano ${email} jako ${role === 'member' ? 'a' : 'an'} ${role}`, + didJoinPolicy ? `${email} dołączył przez link dołączenia do przestrzeni roboczej` : `dodano ${email} jako ${role === 'member' ? 'a' : 'jeden'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `zaktualizowano rolę użytkownika ${email} na ${newRole} (wcześniej ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index e8c49e34b30da..00d3367ee7990 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -7497,7 +7497,7 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `a conexão Plaid com a sua conta bancária empresarial foi interrompida. Por favor, reconecte sua conta bancária ${maskedAccountNumber} para continuar usando seus Cartões Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} entrou pelo link de convite do workspace` : `adicionou ${email} como ${role === 'member' ? 'a' : 'um'} ${role}`, + didJoinPolicy ? `${email} entrou por meio do link de ingresso ao workspace` : `adicionou ${email} como ${role === 'member' ? 'a' : 'um'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `atualizou a função de ${email} para ${newRole} (anteriormente ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index c746ada626da9..fdfd79ac2daf2 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -7322,7 +7322,7 @@ ${reportName} plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `您与企业银行账户的 Plaid 连接已中断。请重新连接您的银行账户 ${maskedAccountNumber},以便继续使用 Expensify 卡。`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} 通过工作区邀请链接加入` : `已将 ${email} 添加为 ${role === 'member' ? 'a' : '一个'} 的 ${role}`, + didJoinPolicy ? `${email} 通过工作区加入链接加入` : `已将 ${email} 添加为 ${role === 'member' ? 'a' : '一个'} 的 ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `已将 ${email} 的角色更新为 ${newRole}(先前为 ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { From a986d1448526e0dcf4c9416a567dd5bd8093c599 Mon Sep 17 00:00:00 2001 From: dominictb Date: Fri, 13 Mar 2026 23:37:46 +0700 Subject: [PATCH 8/8] update translations --- src/languages/de.ts | 2 +- src/languages/en.ts | 2 +- src/languages/es.ts | 2 +- src/languages/fr.ts | 2 +- src/languages/it.ts | 2 +- src/languages/ja.ts | 2 +- src/languages/nl.ts | 2 +- src/languages/pl.ts | 2 +- src/languages/pt-BR.ts | 2 +- src/languages/zh-hans.ts | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 17ae2a5811a5f..0f6037860ddd0 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -7540,7 +7540,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `Die Plaid-Verbindung zu Ihrem Geschäftskonto ist unterbrochen. Bitte verbinden Sie Ihr Bankkonto ${maskedAccountNumber} erneut, damit Sie Ihre Expensify Karten weiterhin verwenden können.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} ist über den Einladungslink des Arbeitsbereichs beigetreten` : `${email} als ${role === 'member' ? 'ein' : 'an'} ${role} hinzugefügt`, + didJoinPolicy ? `${email} ist über den Arbeitsbereichs-Einladungslink beigetreten` : `${email} als ${role === 'member' ? 'a' : 'an'} ${role} hinzugefügt`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `hat die Rolle von ${email} in ${newRole} geändert (zuvor ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/en.ts b/src/languages/en.ts index 6d2058bdbf671..e710687564d44 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -7509,7 +7509,7 @@ const translations = { plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `the Plaid connection to your business bank account is broken. Please reconnect your bank account ${maskedAccountNumber} so you can continue to use your Expensify Cards.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} joined via workspace joining link` : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, + didJoinPolicy ? `${email} joined via the workspace invite link` : `added ${email} as ${role === 'member' ? 'a' : 'an'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `updated the role of ${email} to ${newRole} (previously ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/es.ts b/src/languages/es.ts index 1d67bcff4fc12..058facb1fc672 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -7365,7 +7365,7 @@ ${amount} para ${merchant} - ${date}`, plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la conexión Plaid con tu cuenta bancaria de empresa está rota. Por favor, reconecta tu cuenta bancaria ${maskedAccountNumber} para poder seguir usando tus Tarjetas Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} se unió mediante el enlace de incorporación al espacio de trabajo` : `se añadió ${email} como ${role === 'member' ? 'a' : 'a un'} ${role}`, + didJoinPolicy ? `${email} se unió mediante el enlace de invitación del espacio de trabajo` : `se añadió ${email} como ${role === 'member' ? 'a' : 'a un'} ${role}`, updateRole: ({email, currentRole, newRole}) => `actualizó el rol ${email} a ${newRole} (previamente ${currentRole})`, updatedCustomField1: (email, newValue, previousValue) => { if (!newValue) { diff --git a/src/languages/fr.ts b/src/languages/fr.ts index e23b49eb48c60..e038b6216e351 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -7562,7 +7562,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la connexion Plaid à votre compte bancaire professionnel est rompue. Veuillez reconnecter votre compte bancaire ${maskedAccountNumber} afin de pouvoir continuer à utiliser vos Cartes Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} a rejoint via un lien de jonction d’espace de travail` : `a ajouté ${email} en tant que ${role === 'member' ? 'un' : 'un'} ${role}`, + didJoinPolicy ? `${email} a rejoint via le lien d’invitation de l’espace de travail` : `a ajouté ${email} en tant que ${role === 'member' ? 'a' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `a mis à jour le rôle de ${email} en ${newRole} (précédemment ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/it.ts b/src/languages/it.ts index eede901a8ff46..a77b9981cea95 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -7526,7 +7526,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `la connessione Plaid al conto bancario della tua azienda non funziona. Per favore, ricollega il conto bancario ${maskedAccountNumber} così puoi continuare a usare le tue Carte Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} si è unito tramite link di invito al workspace` : `ha aggiunto ${email} come ${role === 'member' ? 'a' : 'un'} ${role}`, + didJoinPolicy ? `${email} si è unito tramite il link di invito allo spazio di lavoro` : `ha aggiunto ${email} come ${role === 'member' ? 'a' : 'un'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `ha aggiornato il ruolo di ${email} a ${newRole} (in precedenza ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 2609d1f4698ec..a525936ec6259 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -7440,7 +7440,7 @@ ${reportName} plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `Plaid によるビジネス銀行口座との接続が切断されています。Expensify カードを引き続きご利用いただくために、銀行口座 ${maskedAccountNumber} を再接続してください。`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} さんがワークスペースの参加リンクから参加しました` : `${email} を ${role === 'member' ? 'a' : '1つの'} ${role} として追加しました`, + didJoinPolicy ? `${email} さんがワークスペースの招待リンクから参加しました` : `${role === 'member' ? 'a' : '1つの'} ${role} として ${email} を追加しました`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `${email} のロールを ${currentRole} から ${newRole} に更新しました`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 02b16eae53162..b8c41e258fad5 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -7505,7 +7505,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `de Plaid-verbinding met je zakelijke bankrekening is verbroken. Verbind je bankrekening ${maskedAccountNumber} opnieuw zodat je je Expensify Kaarten kunt blijven gebruiken.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} is via de werkruimte-koppelingslink lid geworden` : `${email} toegevoegd als ${role === 'member' ? 'een' : 'een'} ${role}`, + didJoinPolicy ? `${email} is via de werkruimte-uitnodigingslink lid geworden` : `heeft ${email} toegevoegd als ${role === 'member' ? 'een' : 'een'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `heeft de rol van ${email} bijgewerkt naar ${newRole} (voorheen ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index d3160033fcdc7..cf10d0afc1b14 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -7493,7 +7493,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `połączenie Plaid z twoim firmowym kontem bankowym jest przerwane. Proszę, połącz ponownie swoje konto bankowe ${maskedAccountNumber}, aby móc dalej używać Kart Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} dołączył przez link dołączenia do przestrzeni roboczej` : `dodano ${email} jako ${role === 'member' ? 'a' : 'jeden'} ${role}`, + didJoinPolicy ? `${email} dołączył(a) przez link z zaproszeniem do przestrzeni roboczej` : `dodano ${email} jako ${role === 'member' ? 'a' : 'jeden'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `zaktualizowano rolę użytkownika ${email} na ${newRole} (wcześniej ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 00d3367ee7990..e8c49e34b30da 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -7497,7 +7497,7 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `a conexão Plaid com a sua conta bancária empresarial foi interrompida. Por favor, reconecte sua conta bancária ${maskedAccountNumber} para continuar usando seus Cartões Expensify.`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} entrou por meio do link de ingresso ao workspace` : `adicionou ${email} como ${role === 'member' ? 'a' : 'um'} ${role}`, + didJoinPolicy ? `${email} entrou pelo link de convite do workspace` : `adicionou ${email} como ${role === 'member' ? 'a' : 'um'} ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `atualizou a função de ${email} para ${newRole} (anteriormente ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) { diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index fdfd79ac2daf2..926eb14e75007 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -7322,7 +7322,7 @@ ${reportName} plaidBalanceFailure: ({maskedAccountNumber, walletRoute}: {maskedAccountNumber: string; walletRoute: string}) => `您与企业银行账户的 Plaid 连接已中断。请重新连接您的银行账户 ${maskedAccountNumber},以便继续使用 Expensify 卡。`, addEmployee: (email: string, role: string, didJoinPolicy?: boolean) => - didJoinPolicy ? `${email} 通过工作区加入链接加入` : `已将 ${email} 添加为 ${role === 'member' ? 'a' : '一个'} 的 ${role}`, + didJoinPolicy ? `${email} 通过工作区邀请链接加入` : `已将 ${email} 添加为 ${role === 'member' ? '一个' : '一个'} 的 ${role}`, updateRole: ({email, currentRole, newRole}: UpdateRoleParams) => `已将 ${email} 的角色更新为 ${newRole}(先前为 ${currentRole})`, updatedCustomField1: (email: string, newValue: string, previousValue: string) => { if (!newValue) {