From 52dd6213e983dc601557f0680ca48836b0ab0acb Mon Sep 17 00:00:00 2001 From: "truph01 (via MelvinBot)" Date: Thu, 13 Aug 2026 17:57:12 +0000 Subject: [PATCH 1/6] Gate role-restricted inline links; render plain text when viewer lacks access Co-authored-by: truph01 --- src/languages/de.ts | 8 ++++---- src/languages/el.ts | 8 ++++---- src/languages/en.ts | 8 ++++---- src/languages/es.ts | 8 ++++---- src/languages/fr.ts | 8 ++++---- src/languages/it.ts | 8 ++++---- src/languages/ja.ts | 8 ++++---- src/languages/nl.ts | 8 ++++---- src/languages/pl.ts | 8 ++++---- src/languages/pt-BR.ts | 8 ++++---- src/languages/zh-hans.ts | 8 ++++---- ...ynamicWorkspaceCompanyCardAccountSelectCardPage.tsx | 7 +++++-- .../DynamicExpensifyCardLimitTypePage.tsx | 9 +++++++-- .../DynamicWorkspaceSettlementAccountPage.tsx | 10 ++++++++-- .../workspace/expensifyCard/issueNew/LimitTypeStep.tsx | 10 ++++++++-- 15 files changed, 72 insertions(+), 52 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 9dc76a1e4123..85875eeb6ac7 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -5976,8 +5976,8 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU addNewBankAccount: 'Neues Bankkonto hinzufügen', settlementAccount: 'Verrechnungskonto', settlementAccountDescription: 'Wählen Sie ein Konto aus, um den Saldo Ihrer Expensify Karte zu begleichen.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => - `Stelle sicher, dass dieses Konto mit deinem Abstimmungskonto (${accountNumber}) übereinstimmt, damit die kontinuierliche Abstimmung ordnungsgemäß funktioniert.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `Stelle sicher, dass dieses Konto mit deinem ${reconciliationAccountSettingsLink ? `Abstimmungskonto` : 'Abstimmungskonto'} (${accountNumber}) übereinstimmt, damit die kontinuierliche Abstimmung ordnungsgemäß funktioniert.`, settlementFrequency: 'Auszahlungsfrequenz', settlementFrequencyDescription: 'Wählen Sie, wie oft Sie den Saldo Ihrer Expensify Karte begleichen.', settlementFrequencyInfo: @@ -6715,8 +6715,8 @@ Der Control-Tarif beginnt bei 9 $ pro aktivem Mitglied und Monat.`, chooseLimitType: 'Wähle einen Limittyp', smartLimit: 'Intelligentes Limit', smartLimitDescription: 'Bis zu einem bestimmten Betrag ausgeben, bevor eine Genehmigung erforderlich ist', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `Bis zu einem bestimmten Betrag ausgeben, bevor eine Genehmigung erforderlich ist. Aktiviere Genehmigungen, um diese Option auszuwählen.`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `Bis zu einem bestimmten Betrag ausgeben, bevor eine Genehmigung erforderlich ist. ${workspaceWorkflowsLink ? `Aktiviere Genehmigungen` : 'Aktiviere Genehmigungen'}, um diese Option auszuwählen.`, monthly: 'Monatlich', monthlyDescription: 'Bis zu einem bestimmten Betrag pro Monat ausgeben', fixedAmount: 'Fester Betrag', diff --git a/src/languages/el.ts b/src/languages/el.ts index 6a92a3741f69..2b5789aa4c74 100644 --- a/src/languages/el.ts +++ b/src/languages/el.ts @@ -6100,8 +6100,8 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ addNewBankAccount: 'Προσθήκη νέου τραπεζικού λογαριασμού', settlementAccount: 'Λογαριασμός διακανονισμού', settlementAccountDescription: 'Επιλέξτε έναν λογαριασμό για να πληρώσετε το υπόλοιπο της Κάρτας Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => - `Βεβαιωθείτε ότι αυτός ο λογαριασμός ταιριάζει με τον λογαριασμό συμφωνίας σας (${accountNumber}) ώστε η συνεχής συμφωνία να λειτουργεί σωστά.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `Βεβαιωθείτε ότι αυτός ο λογαριασμός ταιριάζει με τον ${reconciliationAccountSettingsLink ? `λογαριασμό συμφωνίας` : 'λογαριασμό συμφωνίας'} σας (${accountNumber}) ώστε η συνεχής συμφωνία να λειτουργεί σωστά.`, settlementFrequency: 'Συχνότητα εκκαθάρισης', settlementFrequencyDescription: 'Επιλέξτε πόσο συχνά θα εξοφλείτε το υπόλοιπο της Κάρτας Expensify.', settlementFrequencyInfo: @@ -6868,8 +6868,8 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ chooseLimitType: 'Επιλέξτε τύπο ορίου', smartLimit: 'Έξυπνο όριο', smartLimitDescription: 'Ξοδέψτε έως ένα συγκεκριμένο ποσό πριν απαιτείται έγκριση', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `Ξοδέψτε έως ένα συγκεκριμένο ποσό πριν απαιτείται έγκριση. Ενεργοποιήστε τις εγκρίσεις για να επιλέξετε αυτήν την επιλογή.`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `Ξοδέψτε έως ένα συγκεκριμένο ποσό πριν απαιτείται έγκριση. ${workspaceWorkflowsLink ? `Ενεργοποιήστε τις εγκρίσεις` : 'Ενεργοποιήστε τις εγκρίσεις'} για να επιλέξετε αυτήν την επιλογή.`, monthly: 'Μηνιαίως', monthlyDescription: 'Το όριο ανανεώνεται μηνιαία', fixedAmount: 'Σταθερό ποσό', diff --git a/src/languages/en.ts b/src/languages/en.ts index 2f236444964a..023031f81137 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6065,8 +6065,8 @@ const translations = { addNewBankAccount: 'Add a new bank account', settlementAccount: 'Settlement account', settlementAccountDescription: 'Choose an account to pay your Expensify Card balance.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => - `Make sure this account matches your Reconciliation account (${accountNumber}) so Continuous Reconciliation works properly.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `Make sure this account matches your ${reconciliationAccountSettingsLink ? `Reconciliation account` : 'Reconciliation account'} (${accountNumber}) so Continuous Reconciliation works properly.`, settlementFrequency: 'Settlement frequency', settlementFrequencyDescription: 'Choose how often you’ll pay your Expensify Card balance.', settlementFrequencyInfo: 'If you’d like to switch to monthly settlement, you’ll need to connect your bank account via Plaid and have a positive 90-day balance history.', @@ -6819,8 +6819,8 @@ const translations = { chooseLimitType: 'Choose a limit type', smartLimit: 'Smart Limit', smartLimitDescription: 'Spend up to a certain amount before requiring approval', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `Spend up to a certain amount before requiring approval. Enable approvals to select this option.`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `Spend up to a certain amount before requiring approval. ${workspaceWorkflowsLink ? `Enable approvals` : 'Enable approvals'} to select this option.`, monthly: 'Monthly', monthlyDescription: 'Limit renews monthly', fixedAmount: 'Fixed amount', diff --git a/src/languages/es.ts b/src/languages/es.ts index dccbd68d1f27..fe05fe088493 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -5852,8 +5852,8 @@ ${amount} para ${merchant} - ${date}`, addNewBankAccount: 'Añadir nueva cuenta bancaria', settlementAccount: 'Cuenta de liquidación', settlementAccountDescription: 'Elige una cuenta para pagar el saldo de tu Tarjeta Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink, accountNumber) => - `Asegúrate de que esta cuenta coincide con tu Cuenta de conciliación (${accountNumber}) para que Reconciliación Continua funcione correctamente.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `Asegúrate de que esta cuenta coincide con tu ${reconciliationAccountSettingsLink ? `Cuenta de conciliación` : 'Cuenta de conciliación'} (${accountNumber}) para que Reconciliación Continua funcione correctamente.`, settlementFrequency: 'Frecuencia de liquidación', settlementFrequencyDescription: 'Elige con qué frecuencia pagarás el saldo de tu Tarjeta Expensify', settlementFrequencyInfo: @@ -6886,8 +6886,8 @@ El plan Controlar empieza en 9 $ por miembro activo al mes.`, chooseLimitType: 'Elegir un tipo de límite', smartLimit: 'Límite inteligente', smartLimitDescription: 'Gasta hasta un determinado importe antes de requerir aprobación', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `Gasta hasta un determinado importe antes de requerir aprobación. Habilita las aprobaciones para seleccionar esta opción.`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `Gasta hasta un determinado importe antes de requerir aprobación. ${workspaceWorkflowsLink ? `Habilita las aprobaciones` : 'Habilita las aprobaciones'} para seleccionar esta opción.`, monthly: 'Mensual', monthlyDescription: 'Gasta hasta un determinado importe al mes', fixedAmount: 'Importe fijo', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 09a9ff5a7be5..3a220fef3f47 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -5989,8 +5989,8 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST. addNewBankAccount: 'Ajouter un nouveau compte bancaire', settlementAccount: 'Compte de règlement', settlementAccountDescription: 'Choisissez un compte pour payer le solde de votre Carte Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => - `Assurez-vous que ce compte correspond à votre Compte de rapprochement (${accountNumber}) afin que le rapprochement continu fonctionne correctement.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `Assurez-vous que ce compte correspond à votre ${reconciliationAccountSettingsLink ? `Compte de rapprochement` : 'Compte de rapprochement'} (${accountNumber}) afin que le rapprochement continu fonctionne correctement.`, settlementFrequency: 'Fréquence de règlement', settlementFrequencyDescription: 'Choisissez la fréquence à laquelle vous réglerez le solde de votre Carte Expensify.', settlementFrequencyInfo: @@ -6740,8 +6740,8 @@ Le forfait Control commence à 9 $ par Membre actif et par mois.`, chooseLimitType: 'Choisissez un type de limite', smartLimit: 'Limite intelligente', smartLimitDescription: 'Dépenser jusqu’à un certain montant avant de nécessiter une approbation', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `Dépenser jusqu’à un certain montant avant de nécessiter une approbation. Activez les approbations pour sélectionner cette option.`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `Dépenser jusqu’à un certain montant avant de nécessiter une approbation. ${workspaceWorkflowsLink ? `Activez les approbations` : 'Activez les approbations'} pour sélectionner cette option.`, monthly: 'Mensuel', monthlyDescription: 'Dépenser jusqu’à un certain montant par mois', fixedAmount: 'Montant fixe', diff --git a/src/languages/it.ts b/src/languages/it.ts index c4b872f2159e..2cf3bc55fb26 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -5942,8 +5942,8 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST. addNewBankAccount: 'Aggiungi un nuovo conto bancario', settlementAccount: 'Conto di regolamento', settlementAccountDescription: 'Scegli un conto da cui pagare il saldo della tua Carta Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => - `Assicurati che questo conto corrisponda al tuo Conto di riconciliazione (${accountNumber}) affinché la Riconciliazione continua funzioni correttamente.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `Assicurati che questo conto corrisponda al tuo ${reconciliationAccountSettingsLink ? `Conto di riconciliazione` : 'Conto di riconciliazione'} (${accountNumber}) affinché la Riconciliazione continua funzioni correttamente.`, settlementFrequency: 'Frequenza di regolamento', settlementFrequencyDescription: 'Scegli con quale frequenza pagherai il saldo della tua Carta Expensify.', settlementFrequencyInfo: @@ -6688,8 +6688,8 @@ Il piano Control parte da 9 $ al mese per ogni membro attivo.`, chooseLimitType: 'Scegli un tipo di limite', smartLimit: 'Limite intelligente', smartLimitDescription: 'Spendi fino a un certo importo prima di richiedere l’approvazione', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `Spendi fino a un certo importo prima di richiedere l’approvazione. Abilita le approvazioni per selezionare questa opzione.`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `Spendi fino a un certo importo prima di richiedere l’approvazione. ${workspaceWorkflowsLink ? `Abilita le approvazioni` : 'Abilita le approvazioni'} per selezionare questa opzione.`, monthly: 'Mensile', monthlyDescription: 'Spendi fino a un certo importo al mese', fixedAmount: 'Importo fisso', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index adaccf059f0b..5d68aaf5e44a 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -5880,8 +5880,8 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO addNewBankAccount: '新しい銀行口座を追加', settlementAccount: '決済口座', settlementAccountDescription: 'Expensify カードの残高を支払う口座を選択してください。', - settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => - `継続照合が正しく機能するように、この口座が照合用口座(${accountNumber})と一致していることを確認してください。`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `継続照合が正しく機能するように、この口座が${reconciliationAccountSettingsLink ? `照合用口座` : '照合用口座'}(${accountNumber})と一致していることを確認してください。`, settlementFrequency: '清算頻度', settlementFrequencyDescription: 'Expensify カードの残高を支払う頻度を選択してください。', settlementFrequencyInfo: '月次清算に切り替えるには、Plaid を通じて銀行口座を連携し、直近90日間の残高履歴がプラスである必要があります。', @@ -6606,8 +6606,8 @@ Control プランは、アクティブメンバー1人あたり月額 $9 から chooseLimitType: '上限の種類を選択', smartLimit: 'スマート制限', smartLimitDescription: '承認が必要になる前に、一定額まで支出できる', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `承認が必要になる前に、一定額まで支出できます。このオプションを選択するには承認を有効化してください。`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `承認が必要になる前に、一定額まで支出できます。このオプションを選択するには${workspaceWorkflowsLink ? `承認を有効化` : '承認を有効化'}してください。`, monthly: '毎月', monthlyDescription: '毎月、一定額まで利用する', fixedAmount: '固定額', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 40398c2fe6c8..22b395bd5a70 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -5937,8 +5937,8 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_ addNewBankAccount: 'Nieuwe bankrekening toevoegen', settlementAccount: 'Verrekeningsrekening', settlementAccountDescription: 'Kies een rekening om je saldo van de Expensify Kaart te betalen.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => - `Zorg ervoor dat deze rekening overeenkomt met je afstemmingsrekening (${accountNumber}), zodat Continue Afstemming correct werkt.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `Zorg ervoor dat deze rekening overeenkomt met je ${reconciliationAccountSettingsLink ? `afstemmingsrekening` : 'afstemmingsrekening'} (${accountNumber}), zodat Continue Afstemming correct werkt.`, settlementFrequency: 'Uitbetalingsfrequentie', settlementFrequencyDescription: 'Kies hoe vaak je het saldo van je Expensify Kaart betaalt.', settlementFrequencyInfo: 'Als je wilt overschakelen naar maandelijkse afrekening, moet je je bankrekening koppelen via Plaid en een positieve saldohistorie van 90 dagen hebben.', @@ -6674,8 +6674,8 @@ Het Control-abonnement begint bij $9 per actieve deelnemer per maand.`, chooseLimitType: 'Kies een limiettype', smartLimit: 'Slimme limiet', smartLimitDescription: 'Tot een bepaald bedrag uitgeven voordat goedkeuring vereist is', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `Tot een bepaald bedrag uitgeven voordat goedkeuring vereist is. Schakel goedkeuringen in om deze optie te selecteren.`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `Tot een bepaald bedrag uitgeven voordat goedkeuring vereist is. ${workspaceWorkflowsLink ? `Schakel goedkeuringen in` : 'Schakel goedkeuringen in'} om deze optie te selecteren.`, monthly: 'Maandelijks', monthlyDescription: 'Geef per maand tot een bepaald bedrag uit', fixedAmount: 'Vast bedrag', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 38a4dae9bad2..119a0b4e6654 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -5915,8 +5915,8 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy addNewBankAccount: 'Dodaj nowe konto bankowe', settlementAccount: 'Konto rozliczeniowe', settlementAccountDescription: 'Wybierz konto, z którego spłacisz saldo swojej Karty Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => - `Upewnij się, że to konto jest takie samo jak konto do uzgadniania (${accountNumber}), aby Ciągłe uzgadnianie działało poprawnie.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `Upewnij się, że to konto jest takie samo jak ${reconciliationAccountSettingsLink ? `konto do uzgadniania` : 'konto do uzgadniania'} (${accountNumber}), aby Ciągłe uzgadnianie działało poprawnie.`, settlementFrequency: 'Częstotliwość rozliczeń', settlementFrequencyDescription: 'Wybierz, jak często będziesz spłacać saldo swojej Karty Expensify.', settlementFrequencyInfo: 'Jeśli chcesz przejść na miesięczne rozliczenie, musisz podłączyć swoje konto bankowe przez Plaid i mieć dodatnią historię salda z ostatnich 90 dni.', @@ -6653,8 +6653,8 @@ Plan Control zaczyna się od 9 USD za aktywnego członka miesięcznie.`, chooseLimitType: 'Wybierz typ limitu', smartLimit: 'Inteligentny limit', smartLimitDescription: 'Wydawaj do określonej kwoty przed wymaganiem zatwierdzenia', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `Wydawaj do określonej kwoty przed wymaganiem zatwierdzenia. Włącz zatwierdzanie, aby wybrać tę opcję.`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `Wydawaj do określonej kwoty przed wymaganiem zatwierdzenia. ${workspaceWorkflowsLink ? `Włącz zatwierdzanie` : 'Włącz zatwierdzanie'}, aby wybrać tę opcję.`, monthly: 'Miesięcznie', monthlyDescription: 'Wydawaj do określonej kwoty miesięcznie', fixedAmount: 'Stała kwota', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index dcad147ca7d9..2874707c77d6 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -5933,8 +5933,8 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS addNewBankAccount: 'Adicionar uma nova conta bancária', settlementAccount: 'Conta de liquidação', settlementAccountDescription: 'Escolha uma conta para pagar o saldo do seu Cartão Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => - `Certifique-se de que esta conta corresponda à sua conta de Conciliação (${accountNumber}) para que a Conciliação Contínua funcione corretamente.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `Certifique-se de que esta conta corresponda à sua ${reconciliationAccountSettingsLink ? `conta de Conciliação` : 'conta de Conciliação'} (${accountNumber}) para que a Conciliação Contínua funcione corretamente.`, settlementFrequency: 'Frequência de liquidação', settlementFrequencyDescription: 'Escolha com que frequência você vai pagar o saldo do seu Cartão Expensify.', settlementFrequencyInfo: 'Se quiser mudar para liquidação mensal, você precisará conectar sua conta bancária via Plaid e ter um histórico de saldo positivo de 90 dias.', @@ -6674,8 +6674,8 @@ O plano Control começa em US$ 9 por membro ativo por mês.`, chooseLimitType: 'Escolha um tipo de limite', smartLimit: 'Limite Inteligente', smartLimitDescription: 'Gaste até um determinado valor antes de exigir aprovação', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `Gaste até um determinado valor antes de exigir aprovação. Ative as aprovações para selecionar esta opção.`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `Gaste até um determinado valor antes de exigir aprovação. ${workspaceWorkflowsLink ? `Ative as aprovações` : 'Ative as aprovações'} para selecionar esta opção.`, monthly: 'Mensal', monthlyDescription: 'Gastar até um determinado valor por mês', fixedAmount: 'Valor fixo', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index d53d3e5603d2..742a6e84c0b2 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -5749,8 +5749,8 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM addNewBankAccount: '添加新银行账户', settlementAccount: '结算账户', settlementAccountDescription: '选择一个账户来支付你的 Expensify 卡欠款余额。', - settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => - `请确保此账户与您的对账账户(${accountNumber})一致,以确保持续对账功能正常运行。`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => + `请确保此账户与您的${reconciliationAccountSettingsLink ? `对账账户` : '对账账户'}(${accountNumber})一致,以确保持续对账功能正常运行。`, settlementFrequency: '结算频率', settlementFrequencyDescription: '选择支付 Expensify 卡余额的频率。', settlementFrequencyInfo: '如果你想切换为按月结算,你需要通过 Plaid 连接你的银行账户,并且拥有过去 90 天为正数的余额记录。', @@ -6446,8 +6446,8 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM chooseLimitType: '选择限额类型', smartLimit: '智能限额', smartLimitDescription: '在需要审批前可支出至指定金额上限', - smartLimitDisabledDescription: (workspaceWorkflowsLink: string) => - `在需要审批前可支出至指定金额上限。启用审批后即可选择此选项。`, + smartLimitDisabledDescription: (workspaceWorkflowsLink?: string) => + `在需要审批前可支出至指定金额上限。${workspaceWorkflowsLink ? `启用审批` : '启用审批'}后即可选择此选项。`, monthly: '每月', monthlyDescription: '每月消费上限为特定金额', fixedAmount: '固定金额', diff --git a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx index b9c48df992c8..3b485b8ddbdf 100644 --- a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx +++ b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx @@ -16,7 +16,7 @@ import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID'; import {setCompanyCardExportAccount} from '@libs/actions/CompanyCards'; import {getCompanyCardFeed, getDomainOrWorkspaceAccountID, isExpensifyCard as isExpensifyCardUtil} from '@libs/CardUtils'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; -import {getConnectedIntegration} from '@libs/PolicyUtils'; +import {getConnectedIntegration, isPolicyAdmin} from '@libs/PolicyUtils'; import tokenizedSearch from '@libs/tokenizedSearch'; import Navigation from '@navigation/Navigation'; @@ -56,6 +56,9 @@ function DynamicWorkspaceCompanyCardAccountSelectCardPage({route}: DynamicWorksp // See https://github.com/Expensify/App/issues/72352 for more details. const activeRoute = Navigation.getActiveRoute(); const exportMenuItem = getExportMenuItem(connectedIntegration, policyID, translate, styles, policy, card, activeRoute); + // The accounting export-configuration page is admin-only, so only link to it for policy admins; card admins + // without access would otherwise be dropped onto the Not Found page. When they lack access, render plain (non-linked) text. + const exportPageLink = isPolicyAdmin(policy) ? exportMenuItem?.exportPageLink : undefined; const currentConnectionName = getCurrentAccountingIntegrationName(policy, translate); const shouldShowTextInput = (exportMenuItem?.data?.length ?? 0) >= CONST.STANDARD_LIST_ITEM_LIMIT; const defaultCard = translate('workspace.moreFeatures.companyCards.defaultCard'); @@ -112,7 +115,7 @@ function DynamicWorkspaceCompanyCardAccountSelectCardPage({route}: DynamicWorksp html={translate( 'workspace.moreFeatures.companyCards.integrationExportTitle', exportMenuItem.description, - exportMenuItem.exportPageLink ? `${environmentURL}/${exportMenuItem.exportPageLink}` : undefined, + exportPageLink ? `${environmentURL}/${exportPageLink}` : undefined, )} /> diff --git a/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx b/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx index ec7d8e39d970..7636336d3347 100644 --- a/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx @@ -30,7 +30,7 @@ import {openPolicyEditCardLimitTypePage} from '@libs/actions/Policy/Policy'; import {filterInactiveCardsForWorkspace, getDefaultExpensifyCardLimitType} from '@libs/CardUtils'; import DateUtils from '@libs/DateUtils'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; -import {getApprovalWorkflow} from '@libs/PolicyUtils'; +import {canMemberRead, getApprovalWorkflow} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {SettingsNavigatorParamList} from '@navigation/types'; @@ -45,6 +45,7 @@ import type SCREENS from '@src/SCREENS'; import INPUT_IDS from '@src/types/form/EditExpensifyCardLimitTypeForm'; import type {CardLimitType} from '@src/types/onyx/Card'; +import {emailSelector} from '@selectors/Session'; import {useFocusEffect} from '@react-navigation/native'; import {format, toZonedTime} from 'date-fns-tz'; import React, {useEffect, useRef, useState} from 'react'; @@ -64,6 +65,7 @@ function DynamicExpensifyCardLimitTypePage({route}: WorkspaceEditCardLimitTypePa const policy = usePolicy(policyID); const defaultFundID = useDefaultFundID(policyID); const [cardsList] = useOnyx(`${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${defaultFundID}_${CONST.EXPENSIFY_CARD.BANK}`, {selector: filterInactiveCardsForWorkspace}); + const [currentUserLogin] = useOnyx(ONYXKEYS.SESSION, {selector: emailSelector}); const card = cardsList?.[cardID]; // Keep the latest card snapshot so a confirmation that resolves after the card refreshes (e.g. while the @@ -170,7 +172,10 @@ function DynamicExpensifyCardLimitTypePage({route}: WorkspaceEditCardLimitTypePa } } - const workspaceWorkflowsPageURL = `${environmentURL}/${ROUTES.WORKSPACE_WORKFLOWS.getRoute(policyID)}`; + // Only link to the Workflows page when the current user can actually read it; card admins without Workflows + // access would otherwise be dropped onto the Not Found page. When they lack access, render plain (non-linked) text. + const canReadWorkflows = canMemberRead(policy, currentUserLogin ?? '', CONST.POLICY.POLICY_FEATURE.WORKFLOWS); + const workspaceWorkflowsPageURL = canReadWorkflows ? `${environmentURL}/${ROUTES.WORKSPACE_WORKFLOWS.getRoute(policyID)}` : undefined; const data = []; diff --git a/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx b/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx index 5bca13f57d82..8f36a42320d8 100644 --- a/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx @@ -19,7 +19,7 @@ import {getLastFourDigits} from '@libs/BankAccountUtils'; import {getCardProgramKey, getCardSettings, getEligibleBankAccountsForCard, getEligibleBankAccountsForUkEuCard} from '@libs/CardUtils'; import Log from '@libs/Log'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; -import {getDomainNameForPolicy} from '@libs/PolicyUtils'; +import {getDomainNameForPolicy, isPolicyAdmin} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {SettingsNavigatorParamList} from '@navigation/types'; @@ -134,6 +134,12 @@ function DynamicWorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccou const connectionName = reconciliationConnection ?? ''; const connectionParam = getRouteParamForConnection(connectionName as ConnectionName); + // The Card reconciliation page is admin-only, so only link to it for policy admins; card admins without + // access would otherwise be dropped onto the Not Found page. When they lack access, render plain (non-linked) text. + const reconciliationAccountSettingsLink = isPolicyAdmin(policy) + ? `${environmentURL}/${ROUTES.WORKSPACE_ACCOUNTING_CARD_RECONCILIATION.getRoute(policyID, connectionParam)}/${DYNAMIC_ROUTES.WORKSPACE_ACCOUNTING_RECONCILIATION_ACCOUNT_SETTINGS.path}` + : undefined; + return ( <> {translate('workspace.expensifyCard.settlementAccountDescription')} @@ -142,7 +148,7 @@ function DynamicWorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccou diff --git a/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx b/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx index 0f3d438fe678..1fd118042919 100644 --- a/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx +++ b/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx @@ -18,7 +18,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import {setIssueNewCardStepAndData} from '@libs/actions/Card'; import {getDefaultExpensifyCardLimitType} from '@libs/CardUtils'; import {convertToBackendAmount, convertToFrontendAmountAsString} from '@libs/CurrencyUtils'; -import {getApprovalWorkflow, isPolicyFeatureEnabled} from '@libs/PolicyUtils'; +import {canMemberRead, getApprovalWorkflow, isPolicyFeatureEnabled} from '@libs/PolicyUtils'; import {getFieldRequiredErrors} from '@libs/ValidationUtils'; import CONST from '@src/CONST'; @@ -29,6 +29,7 @@ import type * as OnyxTypes from '@src/types/onyx'; import type {CardLimitType} from '@src/types/onyx/Card'; import KeyboardUtils from '@src/utils/keyboard'; +import {emailSelector} from '@selectors/Session'; import type {OnyxEntry} from 'react-native-onyx'; import React, {useCallback, useMemo, useRef, useState} from 'react'; @@ -56,6 +57,11 @@ function LimitTypeStep({policy, stepNames, startStepIndex}: LimitTypeStepProps) const formRef = useRef(null); const [issueNewCard] = useOnyx(`${ONYXKEYS.COLLECTION.RAM_ONLY_ISSUE_NEW_EXPENSIFY_CARD}${policyID}`); const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID}`); + const [currentUserLogin] = useOnyx(ONYXKEYS.SESSION, {selector: emailSelector}); + + // Only link to the Workflows page when the current user can actually read it; card admins without Workflows + // access would otherwise be dropped onto the Not Found page. When they lack access, render plain (non-linked) text. + const canReadWorkflows = canMemberRead(policy, currentUserLogin ?? '', CONST.POLICY.POLICY_FEATURE.WORKFLOWS); const areApprovalsConfigured = getApprovalWorkflow(policy) !== CONST.POLICY.APPROVAL_MODE.OPTIONAL; const defaultType = getDefaultExpensifyCardLimitType(policy); @@ -102,7 +108,7 @@ function LimitTypeStep({policy, stepNames, startStepIndex}: LimitTypeStepProps) setIssueNewCardStepAndData({step: CONST.EXPENSIFY_CARD.STEP.CARD_TYPE, policyID}); }, [isEditing, policyID]); - const workspaceWorkflowsPageURL = `${environmentURL}/${ROUTES.WORKSPACE_WORKFLOWS.getRoute(policyID)}`; + const workspaceWorkflowsPageURL = canReadWorkflows ? `${environmentURL}/${ROUTES.WORKSPACE_WORKFLOWS.getRoute(policyID)}` : undefined; const data = useMemo(() => { const options = []; From 09955aa040f81262e292501ba3a152fcc35da518 Mon Sep 17 00:00:00 2001 From: "truph01 (via MelvinBot)" Date: Thu, 13 Aug 2026 18:21:44 +0000 Subject: [PATCH 2/6] Fix Oxfmt: sort imports in card limit-type pages Co-authored-by: truph01 --- .../expensifyCard/DynamicExpensifyCardLimitTypePage.tsx | 2 +- src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx b/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx index 7636336d3347..f0248149c0a1 100644 --- a/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx @@ -45,8 +45,8 @@ import type SCREENS from '@src/SCREENS'; import INPUT_IDS from '@src/types/form/EditExpensifyCardLimitTypeForm'; import type {CardLimitType} from '@src/types/onyx/Card'; -import {emailSelector} from '@selectors/Session'; import {useFocusEffect} from '@react-navigation/native'; +import {emailSelector} from '@selectors/Session'; import {format, toZonedTime} from 'date-fns-tz'; import React, {useEffect, useRef, useState} from 'react'; import {View} from 'react-native'; diff --git a/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx b/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx index 1fd118042919..051bcb7b117a 100644 --- a/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx +++ b/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx @@ -29,9 +29,9 @@ import type * as OnyxTypes from '@src/types/onyx'; import type {CardLimitType} from '@src/types/onyx/Card'; import KeyboardUtils from '@src/utils/keyboard'; -import {emailSelector} from '@selectors/Session'; import type {OnyxEntry} from 'react-native-onyx'; +import {emailSelector} from '@selectors/Session'; import React, {useCallback, useMemo, useRef, useState} from 'react'; import {View} from 'react-native'; From b08aa0dedccd803a535299ff4a50da4f6a45242b Mon Sep 17 00:00:00 2001 From: "truph01 (via MelvinBot)" Date: Fri, 14 Aug 2026 03:50:56 +0000 Subject: [PATCH 3/6] Address CONSISTENCY-16: split semicolon-joined comments into two sentences Co-authored-by: truph01 --- .../DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx | 2 +- .../expensifyCard/DynamicExpensifyCardLimitTypePage.tsx | 2 +- .../expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx | 2 +- src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx index 3b485b8ddbdf..d2483c493228 100644 --- a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx +++ b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx @@ -56,7 +56,7 @@ function DynamicWorkspaceCompanyCardAccountSelectCardPage({route}: DynamicWorksp // See https://github.com/Expensify/App/issues/72352 for more details. const activeRoute = Navigation.getActiveRoute(); const exportMenuItem = getExportMenuItem(connectedIntegration, policyID, translate, styles, policy, card, activeRoute); - // The accounting export-configuration page is admin-only, so only link to it for policy admins; card admins + // The accounting export-configuration page is admin-only, so only link to it for policy admins. Card admins // without access would otherwise be dropped onto the Not Found page. When they lack access, render plain (non-linked) text. const exportPageLink = isPolicyAdmin(policy) ? exportMenuItem?.exportPageLink : undefined; const currentConnectionName = getCurrentAccountingIntegrationName(policy, translate); diff --git a/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx b/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx index f0248149c0a1..59bedddd9148 100644 --- a/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicExpensifyCardLimitTypePage.tsx @@ -172,7 +172,7 @@ function DynamicExpensifyCardLimitTypePage({route}: WorkspaceEditCardLimitTypePa } } - // Only link to the Workflows page when the current user can actually read it; card admins without Workflows + // Only link to the Workflows page when the current user can actually read it. Card admins without Workflows // access would otherwise be dropped onto the Not Found page. When they lack access, render plain (non-linked) text. const canReadWorkflows = canMemberRead(policy, currentUserLogin ?? '', CONST.POLICY.POLICY_FEATURE.WORKFLOWS); const workspaceWorkflowsPageURL = canReadWorkflows ? `${environmentURL}/${ROUTES.WORKSPACE_WORKFLOWS.getRoute(policyID)}` : undefined; diff --git a/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx b/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx index 8f36a42320d8..a23179ca526a 100644 --- a/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx @@ -134,7 +134,7 @@ function DynamicWorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccou const connectionName = reconciliationConnection ?? ''; const connectionParam = getRouteParamForConnection(connectionName as ConnectionName); - // The Card reconciliation page is admin-only, so only link to it for policy admins; card admins without + // The Card reconciliation page is admin-only, so only link to it for policy admins. Card admins without // access would otherwise be dropped onto the Not Found page. When they lack access, render plain (non-linked) text. const reconciliationAccountSettingsLink = isPolicyAdmin(policy) ? `${environmentURL}/${ROUTES.WORKSPACE_ACCOUNTING_CARD_RECONCILIATION.getRoute(policyID, connectionParam)}/${DYNAMIC_ROUTES.WORKSPACE_ACCOUNTING_RECONCILIATION_ACCOUNT_SETTINGS.path}` diff --git a/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx b/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx index 051bcb7b117a..7eb3d7481ff0 100644 --- a/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx +++ b/src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx @@ -59,7 +59,7 @@ function LimitTypeStep({policy, stepNames, startStepIndex}: LimitTypeStepProps) const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID}`); const [currentUserLogin] = useOnyx(ONYXKEYS.SESSION, {selector: emailSelector}); - // Only link to the Workflows page when the current user can actually read it; card admins without Workflows + // Only link to the Workflows page when the current user can actually read it. Card admins without Workflows // access would otherwise be dropped onto the Not Found page. When they lack access, render plain (non-linked) text. const canReadWorkflows = canMemberRead(policy, currentUserLogin ?? '', CONST.POLICY.POLICY_FEATURE.WORKFLOWS); From ada7d83a0560b2164c9f310e03058cde4c4a46aa Mon Sep 17 00:00:00 2001 From: "truph01 (via MelvinBot)" Date: Fri, 14 Aug 2026 04:27:34 +0000 Subject: [PATCH 4/6] Scope PR to Enable approvals only: revert Reconciliation account and export-option link changes Co-authored-by: truph01 --- src/languages/de.ts | 4 ++-- src/languages/el.ts | 4 ++-- src/languages/en.ts | 4 ++-- src/languages/es.ts | 4 ++-- src/languages/fr.ts | 4 ++-- src/languages/it.ts | 4 ++-- src/languages/ja.ts | 4 ++-- src/languages/nl.ts | 4 ++-- src/languages/pl.ts | 4 ++-- src/languages/pt-BR.ts | 4 ++-- src/languages/zh-hans.ts | 4 ++-- ...ynamicWorkspaceCompanyCardAccountSelectCardPage.tsx | 7 ++----- .../DynamicWorkspaceSettlementAccountPage.tsx | 10 ++-------- 13 files changed, 26 insertions(+), 35 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 85875eeb6ac7..6adc0a6bfba8 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -5976,8 +5976,8 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU addNewBankAccount: 'Neues Bankkonto hinzufügen', settlementAccount: 'Verrechnungskonto', settlementAccountDescription: 'Wählen Sie ein Konto aus, um den Saldo Ihrer Expensify Karte zu begleichen.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `Stelle sicher, dass dieses Konto mit deinem ${reconciliationAccountSettingsLink ? `Abstimmungskonto` : 'Abstimmungskonto'} (${accountNumber}) übereinstimmt, damit die kontinuierliche Abstimmung ordnungsgemäß funktioniert.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => + `Stelle sicher, dass dieses Konto mit deinem Abstimmungskonto (${accountNumber}) übereinstimmt, damit die kontinuierliche Abstimmung ordnungsgemäß funktioniert.`, settlementFrequency: 'Auszahlungsfrequenz', settlementFrequencyDescription: 'Wählen Sie, wie oft Sie den Saldo Ihrer Expensify Karte begleichen.', settlementFrequencyInfo: diff --git a/src/languages/el.ts b/src/languages/el.ts index 2b5789aa4c74..e8d90437c81a 100644 --- a/src/languages/el.ts +++ b/src/languages/el.ts @@ -6100,8 +6100,8 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ addNewBankAccount: 'Προσθήκη νέου τραπεζικού λογαριασμού', settlementAccount: 'Λογαριασμός διακανονισμού', settlementAccountDescription: 'Επιλέξτε έναν λογαριασμό για να πληρώσετε το υπόλοιπο της Κάρτας Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `Βεβαιωθείτε ότι αυτός ο λογαριασμός ταιριάζει με τον ${reconciliationAccountSettingsLink ? `λογαριασμό συμφωνίας` : 'λογαριασμό συμφωνίας'} σας (${accountNumber}) ώστε η συνεχής συμφωνία να λειτουργεί σωστά.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => + `Βεβαιωθείτε ότι αυτός ο λογαριασμός ταιριάζει με τον λογαριασμό συμφωνίας σας (${accountNumber}) ώστε η συνεχής συμφωνία να λειτουργεί σωστά.`, settlementFrequency: 'Συχνότητα εκκαθάρισης', settlementFrequencyDescription: 'Επιλέξτε πόσο συχνά θα εξοφλείτε το υπόλοιπο της Κάρτας Expensify.', settlementFrequencyInfo: diff --git a/src/languages/en.ts b/src/languages/en.ts index 023031f81137..8944cea54865 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6065,8 +6065,8 @@ const translations = { addNewBankAccount: 'Add a new bank account', settlementAccount: 'Settlement account', settlementAccountDescription: 'Choose an account to pay your Expensify Card balance.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `Make sure this account matches your ${reconciliationAccountSettingsLink ? `Reconciliation account` : 'Reconciliation account'} (${accountNumber}) so Continuous Reconciliation works properly.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => + `Make sure this account matches your Reconciliation account (${accountNumber}) so Continuous Reconciliation works properly.`, settlementFrequency: 'Settlement frequency', settlementFrequencyDescription: 'Choose how often you’ll pay your Expensify Card balance.', settlementFrequencyInfo: 'If you’d like to switch to monthly settlement, you’ll need to connect your bank account via Plaid and have a positive 90-day balance history.', diff --git a/src/languages/es.ts b/src/languages/es.ts index fe05fe088493..299ff26f73cb 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -5852,8 +5852,8 @@ ${amount} para ${merchant} - ${date}`, addNewBankAccount: 'Añadir nueva cuenta bancaria', settlementAccount: 'Cuenta de liquidación', settlementAccountDescription: 'Elige una cuenta para pagar el saldo de tu Tarjeta Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `Asegúrate de que esta cuenta coincide con tu ${reconciliationAccountSettingsLink ? `Cuenta de conciliación` : 'Cuenta de conciliación'} (${accountNumber}) para que Reconciliación Continua funcione correctamente.`, + settlementAccountInfo: (reconciliationAccountSettingsLink, accountNumber) => + `Asegúrate de que esta cuenta coincide con tu Cuenta de conciliación (${accountNumber}) para que Reconciliación Continua funcione correctamente.`, settlementFrequency: 'Frecuencia de liquidación', settlementFrequencyDescription: 'Elige con qué frecuencia pagarás el saldo de tu Tarjeta Expensify', settlementFrequencyInfo: diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 3a220fef3f47..b03181c63b6d 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -5989,8 +5989,8 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST. addNewBankAccount: 'Ajouter un nouveau compte bancaire', settlementAccount: 'Compte de règlement', settlementAccountDescription: 'Choisissez un compte pour payer le solde de votre Carte Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `Assurez-vous que ce compte correspond à votre ${reconciliationAccountSettingsLink ? `Compte de rapprochement` : 'Compte de rapprochement'} (${accountNumber}) afin que le rapprochement continu fonctionne correctement.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => + `Assurez-vous que ce compte correspond à votre Compte de rapprochement (${accountNumber}) afin que le rapprochement continu fonctionne correctement.`, settlementFrequency: 'Fréquence de règlement', settlementFrequencyDescription: 'Choisissez la fréquence à laquelle vous réglerez le solde de votre Carte Expensify.', settlementFrequencyInfo: diff --git a/src/languages/it.ts b/src/languages/it.ts index 2cf3bc55fb26..c0719536c15c 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -5942,8 +5942,8 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST. addNewBankAccount: 'Aggiungi un nuovo conto bancario', settlementAccount: 'Conto di regolamento', settlementAccountDescription: 'Scegli un conto da cui pagare il saldo della tua Carta Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `Assicurati che questo conto corrisponda al tuo ${reconciliationAccountSettingsLink ? `Conto di riconciliazione` : 'Conto di riconciliazione'} (${accountNumber}) affinché la Riconciliazione continua funzioni correttamente.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => + `Assicurati che questo conto corrisponda al tuo Conto di riconciliazione (${accountNumber}) affinché la Riconciliazione continua funzioni correttamente.`, settlementFrequency: 'Frequenza di regolamento', settlementFrequencyDescription: 'Scegli con quale frequenza pagherai il saldo della tua Carta Expensify.', settlementFrequencyInfo: diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 5d68aaf5e44a..6b651bedc4bb 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -5880,8 +5880,8 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO addNewBankAccount: '新しい銀行口座を追加', settlementAccount: '決済口座', settlementAccountDescription: 'Expensify カードの残高を支払う口座を選択してください。', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `継続照合が正しく機能するように、この口座が${reconciliationAccountSettingsLink ? `照合用口座` : '照合用口座'}(${accountNumber})と一致していることを確認してください。`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => + `継続照合が正しく機能するように、この口座が照合用口座(${accountNumber})と一致していることを確認してください。`, settlementFrequency: '清算頻度', settlementFrequencyDescription: 'Expensify カードの残高を支払う頻度を選択してください。', settlementFrequencyInfo: '月次清算に切り替えるには、Plaid を通じて銀行口座を連携し、直近90日間の残高履歴がプラスである必要があります。', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 22b395bd5a70..524e31847465 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -5937,8 +5937,8 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_ addNewBankAccount: 'Nieuwe bankrekening toevoegen', settlementAccount: 'Verrekeningsrekening', settlementAccountDescription: 'Kies een rekening om je saldo van de Expensify Kaart te betalen.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `Zorg ervoor dat deze rekening overeenkomt met je ${reconciliationAccountSettingsLink ? `afstemmingsrekening` : 'afstemmingsrekening'} (${accountNumber}), zodat Continue Afstemming correct werkt.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => + `Zorg ervoor dat deze rekening overeenkomt met je afstemmingsrekening (${accountNumber}), zodat Continue Afstemming correct werkt.`, settlementFrequency: 'Uitbetalingsfrequentie', settlementFrequencyDescription: 'Kies hoe vaak je het saldo van je Expensify Kaart betaalt.', settlementFrequencyInfo: 'Als je wilt overschakelen naar maandelijkse afrekening, moet je je bankrekening koppelen via Plaid en een positieve saldohistorie van 90 dagen hebben.', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 119a0b4e6654..9d433dbc4602 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -5915,8 +5915,8 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy addNewBankAccount: 'Dodaj nowe konto bankowe', settlementAccount: 'Konto rozliczeniowe', settlementAccountDescription: 'Wybierz konto, z którego spłacisz saldo swojej Karty Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `Upewnij się, że to konto jest takie samo jak ${reconciliationAccountSettingsLink ? `konto do uzgadniania` : 'konto do uzgadniania'} (${accountNumber}), aby Ciągłe uzgadnianie działało poprawnie.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => + `Upewnij się, że to konto jest takie samo jak konto do uzgadniania (${accountNumber}), aby Ciągłe uzgadnianie działało poprawnie.`, settlementFrequency: 'Częstotliwość rozliczeń', settlementFrequencyDescription: 'Wybierz, jak często będziesz spłacać saldo swojej Karty Expensify.', settlementFrequencyInfo: 'Jeśli chcesz przejść na miesięczne rozliczenie, musisz podłączyć swoje konto bankowe przez Plaid i mieć dodatnią historię salda z ostatnich 90 dni.', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 2874707c77d6..ad1f7ff6575e 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -5933,8 +5933,8 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS addNewBankAccount: 'Adicionar uma nova conta bancária', settlementAccount: 'Conta de liquidação', settlementAccountDescription: 'Escolha uma conta para pagar o saldo do seu Cartão Expensify.', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `Certifique-se de que esta conta corresponda à sua ${reconciliationAccountSettingsLink ? `conta de Conciliação` : 'conta de Conciliação'} (${accountNumber}) para que a Conciliação Contínua funcione corretamente.`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => + `Certifique-se de que esta conta corresponda à sua conta de Conciliação (${accountNumber}) para que a Conciliação Contínua funcione corretamente.`, settlementFrequency: 'Frequência de liquidação', settlementFrequencyDescription: 'Escolha com que frequência você vai pagar o saldo do seu Cartão Expensify.', settlementFrequencyInfo: 'Se quiser mudar para liquidação mensal, você precisará conectar sua conta bancária via Plaid e ter um histórico de saldo positivo de 90 dias.', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 742a6e84c0b2..7620f9b91617 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -5749,8 +5749,8 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM addNewBankAccount: '添加新银行账户', settlementAccount: '结算账户', settlementAccountDescription: '选择一个账户来支付你的 Expensify 卡欠款余额。', - settlementAccountInfo: (reconciliationAccountSettingsLink: string | undefined, accountNumber: string) => - `请确保此账户与您的${reconciliationAccountSettingsLink ? `对账账户` : '对账账户'}(${accountNumber})一致,以确保持续对账功能正常运行。`, + settlementAccountInfo: (reconciliationAccountSettingsLink: string, accountNumber: string) => + `请确保此账户与您的对账账户(${accountNumber})一致,以确保持续对账功能正常运行。`, settlementFrequency: '结算频率', settlementFrequencyDescription: '选择支付 Expensify 卡余额的频率。', settlementFrequencyInfo: '如果你想切换为按月结算,你需要通过 Plaid 连接你的银行账户,并且拥有过去 90 天为正数的余额记录。', diff --git a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx index d2483c493228..b9c48df992c8 100644 --- a/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx +++ b/src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardAccountSelectCardPage.tsx @@ -16,7 +16,7 @@ import useWorkspaceAccountID from '@hooks/useWorkspaceAccountID'; import {setCompanyCardExportAccount} from '@libs/actions/CompanyCards'; import {getCompanyCardFeed, getDomainOrWorkspaceAccountID, isExpensifyCard as isExpensifyCardUtil} from '@libs/CardUtils'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; -import {getConnectedIntegration, isPolicyAdmin} from '@libs/PolicyUtils'; +import {getConnectedIntegration} from '@libs/PolicyUtils'; import tokenizedSearch from '@libs/tokenizedSearch'; import Navigation from '@navigation/Navigation'; @@ -56,9 +56,6 @@ function DynamicWorkspaceCompanyCardAccountSelectCardPage({route}: DynamicWorksp // See https://github.com/Expensify/App/issues/72352 for more details. const activeRoute = Navigation.getActiveRoute(); const exportMenuItem = getExportMenuItem(connectedIntegration, policyID, translate, styles, policy, card, activeRoute); - // The accounting export-configuration page is admin-only, so only link to it for policy admins. Card admins - // without access would otherwise be dropped onto the Not Found page. When they lack access, render plain (non-linked) text. - const exportPageLink = isPolicyAdmin(policy) ? exportMenuItem?.exportPageLink : undefined; const currentConnectionName = getCurrentAccountingIntegrationName(policy, translate); const shouldShowTextInput = (exportMenuItem?.data?.length ?? 0) >= CONST.STANDARD_LIST_ITEM_LIMIT; const defaultCard = translate('workspace.moreFeatures.companyCards.defaultCard'); @@ -115,7 +112,7 @@ function DynamicWorkspaceCompanyCardAccountSelectCardPage({route}: DynamicWorksp html={translate( 'workspace.moreFeatures.companyCards.integrationExportTitle', exportMenuItem.description, - exportPageLink ? `${environmentURL}/${exportPageLink}` : undefined, + exportMenuItem.exportPageLink ? `${environmentURL}/${exportMenuItem.exportPageLink}` : undefined, )} /> diff --git a/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx b/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx index a23179ca526a..5bca13f57d82 100644 --- a/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx +++ b/src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx @@ -19,7 +19,7 @@ import {getLastFourDigits} from '@libs/BankAccountUtils'; import {getCardProgramKey, getCardSettings, getEligibleBankAccountsForCard, getEligibleBankAccountsForUkEuCard} from '@libs/CardUtils'; import Log from '@libs/Log'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; -import {getDomainNameForPolicy, isPolicyAdmin} from '@libs/PolicyUtils'; +import {getDomainNameForPolicy} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {SettingsNavigatorParamList} from '@navigation/types'; @@ -134,12 +134,6 @@ function DynamicWorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccou const connectionName = reconciliationConnection ?? ''; const connectionParam = getRouteParamForConnection(connectionName as ConnectionName); - // The Card reconciliation page is admin-only, so only link to it for policy admins. Card admins without - // access would otherwise be dropped onto the Not Found page. When they lack access, render plain (non-linked) text. - const reconciliationAccountSettingsLink = isPolicyAdmin(policy) - ? `${environmentURL}/${ROUTES.WORKSPACE_ACCOUNTING_CARD_RECONCILIATION.getRoute(policyID, connectionParam)}/${DYNAMIC_ROUTES.WORKSPACE_ACCOUNTING_RECONCILIATION_ACCOUNT_SETTINGS.path}` - : undefined; - return ( <> {translate('workspace.expensifyCard.settlementAccountDescription')} @@ -148,7 +142,7 @@ function DynamicWorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccou From 2b2776ebd91cdb66d7765e83756dff3b10025f18 Mon Sep 17 00:00:00 2001 From: "truph01 (via MelvinBot)" Date: Fri, 14 Aug 2026 05:07:08 +0000 Subject: [PATCH 5/6] Render export-option text as plain text for card admins without export-config access Co-authored-by: truph01 --- src/languages/de.ts | 2 +- src/languages/el.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 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 6adc0a6bfba8..a97ffdab5d61 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -6224,7 +6224,7 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU unassignedCards: 'Nicht zugewiesen', integrationExport: (integration: string, type?: string) => (integration && type ? `${integration} ${type.toLowerCase()}-Export` : `${integration}-Export`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Wähle das ${integration}-Konto, in das Transaktionen exportiert werden sollen.${exportPageLink ? ` Wähle eine andere Exportoption, um die verfügbaren Konten zu ändern.` : ''}`, + `Wähle das ${integration}-Konto, in das Transaktionen exportiert werden sollen. Wähle eine andere ${exportPageLink ? `Exportoption` : 'Exportoption'}, um die verfügbaren Konten zu ändern.`, lastUpdated: 'Zuletzt aktualisiert', transactionStartDate: 'Transaktionsstartdatum', updateCard: 'Karte aktualisieren', diff --git a/src/languages/el.ts b/src/languages/el.ts index e8d90437c81a..a179d130ba47 100644 --- a/src/languages/el.ts +++ b/src/languages/el.ts @@ -6360,7 +6360,7 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ unassignedCards: 'Μη εκχωρημένο', integrationExport: (integration: string, type?: string) => (integration && type ? `εξαγωγή ${integration} ${type.toLowerCase()}` : `εξαγωγή ${integration}`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Επιλέξτε τον λογαριασμό ${integration} στον οποίο θα εξαχθούν οι συναλλαγές.${exportPageLink ? `Επιλέξτε μια διαφορετική επιλογή εξαγωγής για να αλλάξετε τους διαθέσιμους λογαριασμούς.` : ''}`, + `Επιλέξτε τον λογαριασμό ${integration} στον οποίο θα εξαχθούν οι συναλλαγές. Επιλέξτε μια διαφορετική ${exportPageLink ? `επιλογή εξαγωγής` : 'επιλογή εξαγωγής'} για να αλλάξετε τους διαθέσιμους λογαριασμούς.`, lastUpdated: 'Τελευταία ενημέρωση', transactionStartDate: 'Ημερομηνία έναρξης συναλλαγής', updateCard: 'Ενημέρωση κάρτας', diff --git a/src/languages/en.ts b/src/languages/en.ts index 8944cea54865..5301cf8b9f22 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6313,7 +6313,7 @@ const translations = { unassignedCards: 'Unassigned', integrationExport: (integration: string, type?: string) => (integration && type ? `${integration} ${type.toLowerCase()} export` : `${integration} export`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Choose the ${integration} account where transactions should be exported.${exportPageLink ? ` Select a different export option to change the available accounts.` : ''}`, + `Choose the ${integration} account where transactions should be exported. Select a different ${exportPageLink ? `export option` : 'export option'} to change the available accounts.`, lastUpdated: 'Last updated', transactionStartDate: 'Transaction start date', updateCard: 'Update card', diff --git a/src/languages/es.ts b/src/languages/es.ts index 299ff26f73cb..cfb1b8b99e28 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -6102,7 +6102,7 @@ ${amount} para ${merchant} - ${date}`, unassignedCards: 'No asignadas', integrationExport: (integration, type) => (integration && type ? `Exportación a ${integration} ${type.toLowerCase()}` : `Exportación a ${integration}`), integrationExportTitle: (integration, exportPageLink) => - `Seleccione la cuenta ${integration} donde se deben exportar las transacciones.${exportPageLink ? ` Seleccione una cuenta diferente opción de exportación para cambiar las cuentas disponibles.` : ''}`, + `Seleccione la cuenta ${integration} donde se deben exportar las transacciones. Seleccione una cuenta diferente ${exportPageLink ? `opción de exportación` : 'opción de exportación'} para cambiar las cuentas disponibles.`, lastUpdated: 'Última actualización', transactionStartDate: 'Fecha de inicio de transacciones', updateCard: 'Actualizar tarjeta', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index b03181c63b6d..62e262a60967 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -6247,7 +6247,7 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST. unassignedCards: 'Non assigné', integrationExport: (integration: string, type?: string) => (integration && type ? `exportation ${integration} ${type.toLowerCase()}` : `Export ${integration}`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Choisissez le compte ${integration} vers lequel les transactions doivent être exportées.${exportPageLink ? ` Sélectionnez une autre option d’exportation pour modifier les comptes disponibles.` : ''}`, + `Choisissez le compte ${integration} vers lequel les transactions doivent être exportées. Sélectionnez une autre ${exportPageLink ? `option d’exportation` : 'option d’exportation'} pour modifier les comptes disponibles.`, lastUpdated: 'Dernière mise à jour', transactionStartDate: 'Date de début de la transaction', updateCard: 'Mettre à jour la carte', diff --git a/src/languages/it.ts b/src/languages/it.ts index c0719536c15c..9d2d31a81f62 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -6199,7 +6199,7 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST. unassignedCards: 'Non assegnato', integrationExport: (integration: string, type?: string) => (integration && type ? `esportazione ${integration} ${type.toLowerCase()}` : `Esportazione ${integration}`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Scegli il conto ${integration} in cui esportare le transazioni.${exportPageLink ? ` Seleziona un’altra opzione di esportazione per modificare i conti disponibili.` : ''}`, + `Scegli il conto ${integration} in cui esportare le transazioni. Seleziona un’altra ${exportPageLink ? `opzione di esportazione` : 'opzione di esportazione'} per modificare i conti disponibili.`, lastUpdated: 'Ultimo aggiornamento', transactionStartDate: 'Data di inizio transazione', updateCard: 'Aggiorna carta', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 6b651bedc4bb..2c955e3ecd07 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -6119,7 +6119,7 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO unassignedCards: '未割り当て', integrationExport: (integration: string, type?: string) => (integration && type ? `${integration} ${type.toLowerCase()} エクスポート` : `${integration} エクスポート`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `取引をエクスポートする${integration}アカウントを選択してください。${exportPageLink ? `利用可能なアカウントを変更するには、別のエクスポートオプションを選択してください。` : ''}`, + `取引をエクスポートする${integration}アカウントを選択してください。利用可能なアカウントを変更するには、別の${exportPageLink ? `エクスポートオプション` : 'エクスポートオプション'}を選択してください。`, lastUpdated: '最終更新日時', transactionStartDate: '取引開始日', updateCard: 'カードを更新', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 524e31847465..09c8d7ca3368 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -6187,7 +6187,7 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_ unassignedCards: 'Niet toegewezen', integrationExport: (integration: string, type?: string) => (integration && type ? `${integration} ${type.toLowerCase()}-export` : `${integration}-export`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Kies de ${integration}-rekening waarnaar transacties moeten worden geëxporteerd.${exportPageLink ? ` Selecteer een andere exportoptie om de beschikbare rekeningen te wijzigen.` : ''}`, + `Kies de ${integration}-rekening waarnaar transacties moeten worden geëxporteerd. Selecteer een andere ${exportPageLink ? `exportoptie` : 'exportoptie'} om de beschikbare rekeningen te wijzigen.`, lastUpdated: 'Laatst bijgewerkt', transactionStartDate: 'Begindatum transactie', updateCard: 'Kaart bijwerken', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 9d433dbc4602..e7a4a29d80cf 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -6165,7 +6165,7 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy unassignedCards: 'Nieprzypisane', integrationExport: (integration: string, type?: string) => (integration && type ? `eksport ${integration} ${type.toLowerCase()}` : `Eksport z ${integration}`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Wybierz konto ${integration}, do którego mają być eksportowane transakcje.${exportPageLink ? ` Wybierz inną opcję eksportu, aby zmienić dostępne konta.` : ''}`, + `Wybierz konto ${integration}, do którego mają być eksportowane transakcje. Wybierz inną ${exportPageLink ? `opcję eksportu` : 'opcję eksportu'}, aby zmienić dostępne konta.`, lastUpdated: 'Ostatnia aktualizacja', transactionStartDate: 'Data początkowa transakcji', updateCard: 'Zaktualizuj kartę', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index ad1f7ff6575e..70b620a68b53 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -6187,7 +6187,7 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS unassignedCards: 'Não atribuído', integrationExport: (integration: string, type?: string) => (integration && type ? `exportação ${integration} ${type.toLowerCase()}` : `Exportação do ${integration}`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Escolha a conta do ${integration} para a qual as transações devem ser exportadas.${exportPageLink ? ` Selecione uma opção de exportação diferente para alterar as contas disponíveis.` : ''}`, + `Escolha a conta do ${integration} para a qual as transações devem ser exportadas. Selecione uma ${exportPageLink ? `opção de exportação` : 'opção de exportação'} diferente para alterar as contas disponíveis.`, lastUpdated: 'Última atualização', transactionStartDate: 'Data de início da transação', updateCard: 'Atualizar cartão', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 7620f9b91617..3884dd7da746 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -5975,7 +5975,7 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM unassignedCards: '未分配', integrationExport: (integration: string, type?: string) => (integration && type ? `${integration} ${type.toLowerCase()} 导出` : `${integration} 导出`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `选择要导出交易的 ${integration} 账户。${exportPageLink ? `选择其他导出选项以更改可用账户。` : ''}`, + `选择要导出交易的 ${integration} 账户。选择其他${exportPageLink ? `导出选项` : '导出选项'}以更改可用账户。`, lastUpdated: '最近更新', transactionStartDate: '交易开始日期', updateCard: '更新卡片', From 56baa5626d7fa9f37ac6925339c736d274875b40 Mon Sep 17 00:00:00 2001 From: "truph01 (via MelvinBot)" Date: Fri, 14 Aug 2026 07:42:43 +0000 Subject: [PATCH 6/6] Revert "Render export-option text as plain text for card admins without export-config access" This reverts commit 2b2776ebd91cdb66d7765e83756dff3b10025f18. --- src/languages/de.ts | 2 +- src/languages/el.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 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index a97ffdab5d61..6adc0a6bfba8 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -6224,7 +6224,7 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU unassignedCards: 'Nicht zugewiesen', integrationExport: (integration: string, type?: string) => (integration && type ? `${integration} ${type.toLowerCase()}-Export` : `${integration}-Export`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Wähle das ${integration}-Konto, in das Transaktionen exportiert werden sollen. Wähle eine andere ${exportPageLink ? `Exportoption` : 'Exportoption'}, um die verfügbaren Konten zu ändern.`, + `Wähle das ${integration}-Konto, in das Transaktionen exportiert werden sollen.${exportPageLink ? ` Wähle eine andere Exportoption, um die verfügbaren Konten zu ändern.` : ''}`, lastUpdated: 'Zuletzt aktualisiert', transactionStartDate: 'Transaktionsstartdatum', updateCard: 'Karte aktualisieren', diff --git a/src/languages/el.ts b/src/languages/el.ts index a179d130ba47..e8d90437c81a 100644 --- a/src/languages/el.ts +++ b/src/languages/el.ts @@ -6360,7 +6360,7 @@ _Για πιο αναλυτικές οδηγίες, [επισκεφθείτε τ unassignedCards: 'Μη εκχωρημένο', integrationExport: (integration: string, type?: string) => (integration && type ? `εξαγωγή ${integration} ${type.toLowerCase()}` : `εξαγωγή ${integration}`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Επιλέξτε τον λογαριασμό ${integration} στον οποίο θα εξαχθούν οι συναλλαγές. Επιλέξτε μια διαφορετική ${exportPageLink ? `επιλογή εξαγωγής` : 'επιλογή εξαγωγής'} για να αλλάξετε τους διαθέσιμους λογαριασμούς.`, + `Επιλέξτε τον λογαριασμό ${integration} στον οποίο θα εξαχθούν οι συναλλαγές.${exportPageLink ? `Επιλέξτε μια διαφορετική επιλογή εξαγωγής για να αλλάξετε τους διαθέσιμους λογαριασμούς.` : ''}`, lastUpdated: 'Τελευταία ενημέρωση', transactionStartDate: 'Ημερομηνία έναρξης συναλλαγής', updateCard: 'Ενημέρωση κάρτας', diff --git a/src/languages/en.ts b/src/languages/en.ts index 5301cf8b9f22..8944cea54865 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6313,7 +6313,7 @@ const translations = { unassignedCards: 'Unassigned', integrationExport: (integration: string, type?: string) => (integration && type ? `${integration} ${type.toLowerCase()} export` : `${integration} export`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Choose the ${integration} account where transactions should be exported. Select a different ${exportPageLink ? `export option` : 'export option'} to change the available accounts.`, + `Choose the ${integration} account where transactions should be exported.${exportPageLink ? ` Select a different export option to change the available accounts.` : ''}`, lastUpdated: 'Last updated', transactionStartDate: 'Transaction start date', updateCard: 'Update card', diff --git a/src/languages/es.ts b/src/languages/es.ts index cfb1b8b99e28..299ff26f73cb 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -6102,7 +6102,7 @@ ${amount} para ${merchant} - ${date}`, unassignedCards: 'No asignadas', integrationExport: (integration, type) => (integration && type ? `Exportación a ${integration} ${type.toLowerCase()}` : `Exportación a ${integration}`), integrationExportTitle: (integration, exportPageLink) => - `Seleccione la cuenta ${integration} donde se deben exportar las transacciones. Seleccione una cuenta diferente ${exportPageLink ? `opción de exportación` : 'opción de exportación'} para cambiar las cuentas disponibles.`, + `Seleccione la cuenta ${integration} donde se deben exportar las transacciones.${exportPageLink ? ` Seleccione una cuenta diferente opción de exportación para cambiar las cuentas disponibles.` : ''}`, lastUpdated: 'Última actualización', transactionStartDate: 'Fecha de inicio de transacciones', updateCard: 'Actualizar tarjeta', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 62e262a60967..b03181c63b6d 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -6247,7 +6247,7 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST. unassignedCards: 'Non assigné', integrationExport: (integration: string, type?: string) => (integration && type ? `exportation ${integration} ${type.toLowerCase()}` : `Export ${integration}`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Choisissez le compte ${integration} vers lequel les transactions doivent être exportées. Sélectionnez une autre ${exportPageLink ? `option d’exportation` : 'option d’exportation'} pour modifier les comptes disponibles.`, + `Choisissez le compte ${integration} vers lequel les transactions doivent être exportées.${exportPageLink ? ` Sélectionnez une autre option d’exportation pour modifier les comptes disponibles.` : ''}`, lastUpdated: 'Dernière mise à jour', transactionStartDate: 'Date de début de la transaction', updateCard: 'Mettre à jour la carte', diff --git a/src/languages/it.ts b/src/languages/it.ts index 9d2d31a81f62..c0719536c15c 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -6199,7 +6199,7 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST. unassignedCards: 'Non assegnato', integrationExport: (integration: string, type?: string) => (integration && type ? `esportazione ${integration} ${type.toLowerCase()}` : `Esportazione ${integration}`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Scegli il conto ${integration} in cui esportare le transazioni. Seleziona un’altra ${exportPageLink ? `opzione di esportazione` : 'opzione di esportazione'} per modificare i conti disponibili.`, + `Scegli il conto ${integration} in cui esportare le transazioni.${exportPageLink ? ` Seleziona un’altra opzione di esportazione per modificare i conti disponibili.` : ''}`, lastUpdated: 'Ultimo aggiornamento', transactionStartDate: 'Data di inizio transazione', updateCard: 'Aggiorna carta', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 2c955e3ecd07..6b651bedc4bb 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -6119,7 +6119,7 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO unassignedCards: '未割り当て', integrationExport: (integration: string, type?: string) => (integration && type ? `${integration} ${type.toLowerCase()} エクスポート` : `${integration} エクスポート`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `取引をエクスポートする${integration}アカウントを選択してください。利用可能なアカウントを変更するには、別の${exportPageLink ? `エクスポートオプション` : 'エクスポートオプション'}を選択してください。`, + `取引をエクスポートする${integration}アカウントを選択してください。${exportPageLink ? `利用可能なアカウントを変更するには、別のエクスポートオプションを選択してください。` : ''}`, lastUpdated: '最終更新日時', transactionStartDate: '取引開始日', updateCard: 'カードを更新', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 09c8d7ca3368..524e31847465 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -6187,7 +6187,7 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_ unassignedCards: 'Niet toegewezen', integrationExport: (integration: string, type?: string) => (integration && type ? `${integration} ${type.toLowerCase()}-export` : `${integration}-export`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Kies de ${integration}-rekening waarnaar transacties moeten worden geëxporteerd. Selecteer een andere ${exportPageLink ? `exportoptie` : 'exportoptie'} om de beschikbare rekeningen te wijzigen.`, + `Kies de ${integration}-rekening waarnaar transacties moeten worden geëxporteerd.${exportPageLink ? ` Selecteer een andere exportoptie om de beschikbare rekeningen te wijzigen.` : ''}`, lastUpdated: 'Laatst bijgewerkt', transactionStartDate: 'Begindatum transactie', updateCard: 'Kaart bijwerken', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index e7a4a29d80cf..9d433dbc4602 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -6165,7 +6165,7 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy unassignedCards: 'Nieprzypisane', integrationExport: (integration: string, type?: string) => (integration && type ? `eksport ${integration} ${type.toLowerCase()}` : `Eksport z ${integration}`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Wybierz konto ${integration}, do którego mają być eksportowane transakcje. Wybierz inną ${exportPageLink ? `opcję eksportu` : 'opcję eksportu'}, aby zmienić dostępne konta.`, + `Wybierz konto ${integration}, do którego mają być eksportowane transakcje.${exportPageLink ? ` Wybierz inną opcję eksportu, aby zmienić dostępne konta.` : ''}`, lastUpdated: 'Ostatnia aktualizacja', transactionStartDate: 'Data początkowa transakcji', updateCard: 'Zaktualizuj kartę', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 70b620a68b53..ad1f7ff6575e 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -6187,7 +6187,7 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS unassignedCards: 'Não atribuído', integrationExport: (integration: string, type?: string) => (integration && type ? `exportação ${integration} ${type.toLowerCase()}` : `Exportação do ${integration}`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `Escolha a conta do ${integration} para a qual as transações devem ser exportadas. Selecione uma ${exportPageLink ? `opção de exportação` : 'opção de exportação'} diferente para alterar as contas disponíveis.`, + `Escolha a conta do ${integration} para a qual as transações devem ser exportadas.${exportPageLink ? ` Selecione uma opção de exportação diferente para alterar as contas disponíveis.` : ''}`, lastUpdated: 'Última atualização', transactionStartDate: 'Data de início da transação', updateCard: 'Atualizar cartão', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 3884dd7da746..7620f9b91617 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -5975,7 +5975,7 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM unassignedCards: '未分配', integrationExport: (integration: string, type?: string) => (integration && type ? `${integration} ${type.toLowerCase()} 导出` : `${integration} 导出`), integrationExportTitle: (integration: string, exportPageLink?: string) => - `选择要导出交易的 ${integration} 账户。选择其他${exportPageLink ? `导出选项` : '导出选项'}以更改可用账户。`, + `选择要导出交易的 ${integration} 账户。${exportPageLink ? `选择其他导出选项以更改可用账户。` : ''}`, lastUpdated: '最近更新', transactionStartDate: '交易开始日期', updateCard: '更新卡片',