Differentiate between Xero and Google SSO requirements for 2FA#73420
Conversation
…between Xero and company requirements.
|
@DylanDylann Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
jmusial
left a comment
There was a problem hiding this comment.
Code LGTM, but someone from Expensify needs to run the translation workflow
|
@fedirjh Should I review this PR? Or you will do that? |
@DylanDylann Will take care of it. |
|
We have same failling tests. |
Codecov Report❌ Patch coverage is
... and 6 files with indirect coverage changes 🚀 New features to boost your workflow:
|
|
@mountiny Could you summon Translation Parrot? 😅 |
|
Hey, I noticed you changed Please look at the code and make sure there are no malicious changes before running the workflow. If you have the K2 extension, you can simply click: [this button] |
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index 1cc94afe..9f90725d 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -1064,8 +1064,8 @@ const translations = {
dragReceiptsAfterEmail: 'oder wählen Sie Dateien zum Hochladen unten aus.',
desktopSubtitleSingle: `oder hierher ziehen und ablegen`,
desktopSubtitleMultiple: `oder hierher ziehen und ablegen`,
- chooseReceipt: 'Wählen Sie eine Quittung zum Hochladen aus oder leiten Sie eine Quittung weiter an',
- chooseReceipts: 'Wählen Sie Quittungen zum Hochladen aus oder leiten Sie Quittungen weiter an ',
+ chooseReceipt: 'Wählen Sie einen Beleg zum Hochladen aus oder leiten Sie einen Beleg weiter an',
+ chooseReceipts: 'Belege zum Hochladen auswählen oder Belege weiterleiten an',
alternativeMethodsTitle: 'Andere Möglichkeiten, Belege hinzuzufügen:',
alternativeMethodsDownloadApp: ({downloadUrl}: {downloadUrl: string}) => `<label-text><a href="${downloadUrl}">App herunterladen</a>, um mit Ihrem Telefon zu scannen</label-text>`,
alternativeMethodsForwardReceipts: ({email}: {email: string}) => `<label-text>Leiten Sie Belege an <a href="mailto:${email}">${email}</a> weiter</label-text>`,
@@ -1074,10 +1074,10 @@ const translations = {
alternativeMethodsTextReceipts: ({phoneNumber}: {phoneNumber: string}) => `<label-text>Senden Sie Belege per SMS an ${phoneNumber} (nur US-Nummern)</label-text>`,
takePhoto: 'Ein Foto machen',
cameraAccess: 'Der Kamerazugriff ist erforderlich, um Fotos von Belegen zu machen.',
- deniedCameraAccess: 'Kamerazugriff wurde noch nicht gewährt, bitte folgen Sie',
+ deniedCameraAccess: 'Der Kamerazugriff wurde noch nicht gewährt, bitte folge',
deniedCameraAccessInstructions: 'diese Anweisungen',
cameraErrorTitle: 'Kamerafehler',
- cameraErrorMessage: 'Beim Aufnehmen eines Fotos ist ein Fehler aufgetreten. Bitte versuche es erneut.',
+ cameraErrorMessage: 'Beim Aufnehmen eines Fotos ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.',
locationAccessTitle: 'Standortzugriff erlauben',
locationAccessMessage: 'Der Standortzugriff hilft uns, Ihre Zeitzone und Währung überall genau zu halten, wohin Sie auch gehen.',
locationErrorTitle: 'Standortzugriff erlauben',
@@ -1863,10 +1863,11 @@ const translations = {
twoFactorAuthIsRequiredForAdminsHeader: 'Zwei-Faktor-Authentifizierung erforderlich',
twoFactorAuthIsRequiredForAdminsTitle: 'Bitte aktivieren Sie die Zwei-Faktor-Authentifizierung',
twoFactorAuthIsRequiredXero:
- 'Ihre Xero-Buchhaltungsverbindung erfordert die Verwendung der Zwei-Faktor-Authentifizierung. Um Expensify weiterhin zu nutzen, aktivieren Sie diese bitte.',
+ 'Ihre Xero-Buchhaltungsverbindung erfordert die Verwendung der Zwei-Faktor-Authentifizierung. Um Expensify weiterhin nutzen zu können, aktivieren Sie sie bitte.',
twoFactorAuthCannotDisable: '2FA kann nicht deaktiviert werden.',
twoFactorAuthRequired: 'Die Zwei-Faktor-Authentifizierung (2FA) ist für Ihre Xero-Verbindung erforderlich und kann nicht deaktiviert werden.',
explainProcessToRemoveWithRecovery: 'Um die Zwei-Faktor-Authentifizierung (2FA) zu deaktivieren, geben Sie bitte einen gültigen Wiederherstellungscode ein.',
+ twoFactorAuthIsRequiredCompany: 'Ihr Unternehmen verlangt die Verwendung der Zwei-Faktor-Authentifizierung. Um Expensify weiterhin nutzen zu können, aktivieren Sie sie bitte.',
},
recoveryCodeForm: {
error: {
@@ -2485,19 +2486,23 @@ ${amount} für ${merchant} - ${date}`,
title: ({integrationName, workspaceAccountingLink}) =>
`Verbinde${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' mit'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'deiner' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
- `Verbinde ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'deine' : 'mit'} ${integrationName}, um Ausgaben automatisch zuzuordnen und den Monatsabschluss zu vereinfachen.\n` +
+ `Verbinden Sie ${
+ integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'dein' : 'bis'
+ } ${integrationName} für automatische Ausgabenkategorisierung und Synchronisierung, damit der Monatsabschluss zum Kinderspiel wird.` +
'\n' +
- '1. Klicke auf *Einstellungen*.\n' +
- '2. Gehe zu *Workspaces*.\n' +
- '3. Wähle deinen Workspace.\n' +
- '4. Klicke auf *Buchhaltung*.\n' +
- `5. Finde ${integrationName}.\n` +
- '6. Klicke auf *Verbinden*.\n' +
+ '1. Klicken Sie auf *Einstellungen*.' +
+ '2. Gehe zu *Workspaces*.' +
+ '3. Wählen Sie Ihren Arbeitsbereich aus.' +
+ '4. Klicken Sie auf *Buchhaltung*.' +
+ `5. Finden Sie ${integrationName}.` +
+ '6. Klicken Sie auf *Connect*.' +
'\n' +
`${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? `[Zu Buchhaltung](${workspaceAccountingLink}).\n\n`
- : `[Zu Buchhaltung](${workspaceAccountingLink}).`
+ ? `[Bring mich zur Buchhaltung](${workspaceAccountingLink}).
+
+`
+ : `[Bring mich zur Buchhaltung](${workspaceAccountingLink}).`
}`,
},
connectCorporateCardTask: {
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 6b232912..7786adbc 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -1060,8 +1060,8 @@ const translations = {
dragReceiptsAfterEmail: 'ou choisissez des fichiers à télécharger ci-dessous.',
desktopSubtitleSingle: `ou faites-le glisser ici`,
desktopSubtitleMultiple: `ou faites-les glisser ici`,
- chooseReceipt: 'Choisissez un reçu à télécharger ou transférez un reçu à',
- chooseReceipts: 'Choisissez des reçus à télécharger ou transférez des reçus à',
+ chooseReceipt: 'Choisissez un reçu à téléverser ou transférez un reçu à',
+ chooseReceipts: 'Choisissez des reçus à téléverser ou faites suivre des reçus à',
alternativeMethodsTitle: 'Autres façons d’ajouter des reçus :',
alternativeMethodsDownloadApp: ({downloadUrl}: {downloadUrl: string}) =>
`<label-text><a href="${downloadUrl}">Télécharger l’application</a> pour scanner depuis votre téléphone</label-text>`,
@@ -1071,10 +1071,10 @@ const translations = {
alternativeMethodsTextReceipts: ({phoneNumber}: {phoneNumber: string}) => `<label-text>Envoyez des reçus par SMS au ${phoneNumber} (numéros US uniquement)</label-text>`,
takePhoto: 'Prendre une photo',
cameraAccess: "L'accès à la caméra est requis pour prendre des photos des reçus.",
- deniedCameraAccess: "L'accès à la caméra n'a toujours pas été accordé, veuillez suivre",
+ deniedCameraAccess: "L'accès à l'appareil photo n'a toujours pas été accordé, veuillez suivre",
deniedCameraAccessInstructions: 'ces instructions',
cameraErrorTitle: 'Erreur de caméra',
- cameraErrorMessage: "Une erreur s'est produite lors de la prise de la photo. Veuillez réessayer.",
+ cameraErrorMessage: 'Une erreur s’est produite lors de la prise d’une photo. Veuillez réessayer.',
locationAccessTitle: "Autoriser l'accès à la localisation",
locationAccessMessage: "L'accès à la localisation nous aide à garder votre fuseau horaire et votre devise précis où que vous alliez.",
locationErrorTitle: "Autoriser l'accès à la localisation",
@@ -1860,10 +1860,11 @@ const translations = {
twoFactorAuthIsRequiredDescription: "Pour des raisons de sécurité, Xero nécessite une authentification à deux facteurs pour connecter l'intégration.",
twoFactorAuthIsRequiredForAdminsHeader: 'Authentification à deux facteurs requise',
twoFactorAuthIsRequiredForAdminsTitle: "Veuillez activer l'authentification à deux facteurs.",
- twoFactorAuthIsRequiredXero: "Votre connexion comptable Xero nécessite l'utilisation de l'authentification à deux facteurs. Pour continuer à utiliser Expensify, veuillez l'activer.",
+ twoFactorAuthIsRequiredXero: 'Votre connexion comptable Xero nécessite l’authentification à deux facteurs. Pour continuer à utiliser Expensify, veuillez l’activer.',
twoFactorAuthCannotDisable: 'Impossible de désactiver la 2FA',
twoFactorAuthRequired: "L'authentification à deux facteurs (2FA) est requise pour votre connexion Xero et ne peut pas être désactivée.",
explainProcessToRemoveWithRecovery: "Pour désactiver l'authentification à deux facteurs (2FA), veuillez entrer un code de récupération valide.",
+ twoFactorAuthIsRequiredCompany: 'Votre entreprise exige l’utilisation de l’authentification à deux facteurs. Pour continuer à utiliser Expensify, veuillez l’activer.',
},
recoveryCodeForm: {
error: {
@@ -2481,17 +2482,22 @@ ${amount} pour ${merchant} - ${date}`,
title: ({integrationName, workspaceAccountingLink}) =>
`Connecter${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' à'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'votre' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
- `Connectez${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '-vous à votre' : '-vous à'} ${integrationName} pour automatiser le codage et la synchronisation des dépenses. La clôture mensuelle devient un jeu d’enfant.\n` +
+ `Connectez ${
+ integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'votre' : 'à'
+ } ${integrationName} pour un codage des dépenses et une synchronisation automatiques qui rendent la clôture de fin de mois un jeu d’enfant.` +
+ '\n' +
+ '1. Cliquez sur *Paramètres*.' +
+ '2. Accédez aux *Espaces de travail*.' +
+ '3. Sélectionnez votre espace de travail.' +
+ '4. Cliquez sur *Comptabilité*.' +
+ `5. Recherchez ${integrationName}.` +
+ '6. Cliquez sur *Connecter*.' +
'\n' +
- '1. Cliquez sur *Paramètres*.\n' +
- '2. Accédez à *Espaces de travail*.\n' +
- '3. Sélectionnez votre espace.\n' +
- '4. Cliquez sur *Comptabilité*.\n' +
- `5. Trouvez ${integrationName}.\n` +
- '6. Cliquez sur *Connecter*.\n\n' +
`${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? `[Accéder à la comptabilité](${workspaceAccountingLink}).\n\n`
+ ? `[Aller à la comptabilité](${workspaceAccountingLink}).
+
+`
: `[Accéder à la comptabilité](${workspaceAccountingLink}).`
}`,
},
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 1f3e0614..6bdbb6d5 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -1057,7 +1057,7 @@ const translations = {
desktopSubtitleSingle: `oppure trascinala qui`,
desktopSubtitleMultiple: `oppure trascinale qui`,
chooseReceipt: 'Scegli una ricevuta da caricare o inoltra una ricevuta a',
- chooseReceipts: 'Scegli ricevute da caricare o inoltra ricevute a',
+ chooseReceipts: 'Scegli le ricevute da caricare o inoltra le ricevute a',
alternativeMethodsTitle: 'Altri modi per aggiungere ricevute:',
alternativeMethodsDownloadApp: ({downloadUrl}: {downloadUrl: string}) => `<label-text><a href="${downloadUrl}">Scarica l’app</a> per scansionare dal telefono</label-text>`,
alternativeMethodsForwardReceipts: ({email}: {email: string}) => `<label-text>Inoltra le ricevute a <a href="mailto:${email}">${email}</a></label-text>`,
@@ -1066,7 +1066,7 @@ const translations = {
alternativeMethodsTextReceipts: ({phoneNumber}: {phoneNumber: string}) => `<label-text>Invia ricevute via SMS a ${phoneNumber} (solo numeri USA)</label-text>`,
takePhoto: 'Scatta una foto',
cameraAccess: "L'accesso alla fotocamera è necessario per scattare foto delle ricevute.",
- deniedCameraAccess: "L'accesso alla fotocamera non è ancora stato concesso, si prega di seguire",
+ deniedCameraAccess: "L'accesso alla fotocamera non è stato ancora concesso, per favore segui",
deniedCameraAccessInstructions: 'queste istruzioni',
cameraErrorTitle: 'Errore della fotocamera',
cameraErrorMessage: 'Si è verificato un errore durante lo scatto della foto. Riprova.',
@@ -1851,10 +1851,11 @@ const translations = {
twoFactorAuthIsRequiredDescription: "Per motivi di sicurezza, Xero richiede l'autenticazione a due fattori per connettere l'integrazione.",
twoFactorAuthIsRequiredForAdminsHeader: 'Autenticazione a due fattori richiesta',
twoFactorAuthIsRequiredForAdminsTitle: "Si prega di abilitare l'autenticazione a due fattori",
- twoFactorAuthIsRequiredXero: "La tua connessione contabile Xero richiede l'uso dell'autenticazione a due fattori. Per continuare a utilizzare Expensify, ti preghiamo di abilitarla.",
+ twoFactorAuthIsRequiredXero: 'La tua connessione contabile con Xero richiede l’uso dell’autenticazione a due fattori. Per continuare a usare Expensify, abilitala.',
twoFactorAuthCannotDisable: "Impossibile disabilitare l'autenticazione a due fattori (2FA)",
twoFactorAuthRequired: "L'autenticazione a due fattori (2FA) è necessaria per la tua connessione Xero e non può essere disabilitata.",
explainProcessToRemoveWithRecovery: "Per disabilitare l'autenticazione a due fattori (2FA), inserisci un codice di recupero valido.",
+ twoFactorAuthIsRequiredCompany: 'La tua azienda richiede l’uso dell’autenticazione a due fattori. Per continuare a utilizzare Expensify, attivala.',
},
recoveryCodeForm: {
error: {
@@ -2479,19 +2480,21 @@ ${amount} per ${merchant} - ${date}`,
title: ({integrationName, workspaceAccountingLink}) =>
`Connetti${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' a'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'il tuo' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
- `Connetti${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? ' il tuo' : ' a'} ${integrationName} per una codifica automatica delle spese e sincronizzazione che semplifica la chiusura di fine mese.\n` +
+ `Collega ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'il tuo' : 'a'} ${integrationName} per la codifica automatica delle spese e la sincronizzazione, che rendono la chiusura di fine mese un gioco da ragazzi.` +
'\n' +
- '1. Clicca su *Impostazioni*.\n' +
- '2. Vai a *Spazi di lavoro*.\n' +
- '3. Seleziona il tuo spazio di lavoro.\n' +
- '4. Clicca su *Contabilità*.\n' +
- `5. Trova ${integrationName}.\n` +
- '6. Clicca su *Connetti*.\n' +
+ '1. Fai clic su *Impostazioni*.' +
+ '2. Vai a *Spazi di lavoro*.' +
+ '3. Seleziona il tuo spazio di lavoro.' +
+ '4. Fai clic su *Accounting*.' +
+ `5. Trova ${integrationName}.` +
+ '6. Fai clic su *Connect*.' +
'\n' +
`${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? `[Vai alla contabilità](${workspaceAccountingLink}).\n\n`
- : `[Vai alla contabilità](${workspaceAccountingLink}).`
+ ? `[Portami alla contabilità](${workspaceAccountingLink}).
+
+`
+ : `[Portami alla contabilità](${workspaceAccountingLink}).`
}`,
},
connectCorporateCardTask: {
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 7ddb9ca5..756c45a8 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -1058,8 +1058,8 @@ const translations = {
dragReceiptsAfterEmail: 'または、以下にアップロードするファイルを選択してください。',
desktopSubtitleSingle: `またはここにドラッグ&ドロップ`,
desktopSubtitleMultiple: `またはここにドラッグ&ドロップ`,
- chooseReceipt: 'アップロードするレシートを選択するか、レシートを転送してください',
- chooseReceipts: 'アップロードするレシートを選択するか、レシートを転送してください',
+ chooseReceipt: 'アップロードする領収書を選択するか、領収書を転送してください',
+ chooseReceipts: 'アップロードする領収書を選択するか、領収書を次の宛先に転送してください',
alternativeMethodsTitle: '領収書を追加する別の方法:',
alternativeMethodsDownloadApp: ({downloadUrl}: {downloadUrl: string}) => `<label-text><a href="${downloadUrl}">アプリをダウンロード</a>して携帯からスキャン</label-text>`,
alternativeMethodsForwardReceipts: ({email}: {email: string}) => `<label-text>領収書を <a href="mailto:${email}">${email}</a> に転送</label-text>`,
@@ -1068,10 +1068,10 @@ const translations = {
alternativeMethodsTextReceipts: ({phoneNumber}: {phoneNumber: string}) => `<label-text>領収書を ${phoneNumber} にテキスト送信(米国の番号のみ)</label-text>`,
takePhoto: '写真を撮る',
cameraAccess: '領収書の写真を撮るためにカメラへのアクセスが必要です。',
- deniedCameraAccess: 'カメラへのアクセスがまだ許可されていません。以下の手順に従ってください。',
+ deniedCameraAccess: 'カメラへのアクセスはまだ許可されていません。次の手順に従ってください。',
deniedCameraAccessInstructions: 'これらの手順',
cameraErrorTitle: 'カメラエラー',
- cameraErrorMessage: '写真を撮る際にエラーが発生しました。もう一度お試しください。',
+ cameraErrorMessage: '写真の撮影中にエラーが発生しました。もう一度お試しください。',
locationAccessTitle: '位置情報へのアクセスを許可',
locationAccessMessage: '位置情報へのアクセスは、どこに行ってもタイムゾーンと通貨を正確に保つのに役立ちます。',
locationErrorTitle: '位置情報へのアクセスを許可',
@@ -1849,10 +1849,11 @@ const translations = {
twoFactorAuthIsRequiredDescription: 'セキュリティ目的のため、Xeroは統合を接続するために二要素認証を必要とします。',
twoFactorAuthIsRequiredForAdminsHeader: '二要素認証が必要です',
twoFactorAuthIsRequiredForAdminsTitle: '2要素認証を有効にしてください',
- twoFactorAuthIsRequiredXero: 'Xeroの会計接続には二要素認証の使用が必要です。Expensifyを引き続き使用するには、有効にしてください。',
+ twoFactorAuthIsRequiredXero: 'Xero との会計連携には二要素認証が必要です。Expensify を引き続きご利用いただくには、二要素認証を有効にしてください。',
twoFactorAuthCannotDisable: '2FAを無効にできません',
twoFactorAuthRequired: 'Xeroの接続には二要素認証(2FA)が必要であり、無効にすることはできません。',
explainProcessToRemoveWithRecovery: '二要素認証 (2FA) を無効にするには、有効なリカバリーコードを入力してください。',
+ twoFactorAuthIsRequiredCompany: 'あなたの会社では二要素認証の使用が必須です。Expensifyを引き続きご利用いただくには、有効化してください。',
},
recoveryCodeForm: {
error: {
@@ -2469,19 +2470,21 @@ ${date} - ${merchant}に${amount}`,
title: ({integrationName, workspaceAccountingLink}) =>
`${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : 'と'}[${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' : ''} ${integrationName}](${workspaceAccountingLink})と接続する`,
description: ({integrationName, workspaceAccountingLink}) =>
- `${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' : ''} ${integrationName}と接続すると、経費の自動コーディングと同期が可能になり、月末の結算が容易になります。\n` +
+ `${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' : '宛先'} ${integrationName} を接続して、経費の自動分類と同期を有効にし、月末締めをぐっと楽にしましょう。` +
'\n' +
- '1. *設定*をクリックします。\n' +
- '2. *ワークスペース*に移動します。\n' +
- '3. あなたのワークスペースを選択します。\n' +
- '4. *会計*をクリックします。\n' +
- `5. ${integrationName}を探します。\n` +
- '6. *接続*をクリックします。\n' +
+ '1. *設定* をクリックします。' +
+ '2. *Workspaces* に移動します。' +
+ '3. ワークスペースを選択してください。' +
+ '4. *Accounting* をクリックします。' +
+ `5. ${integrationName} を見つけます。` +
+ '6. 「接続」をクリックします。' +
'\n' +
`${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? `[会計に移動する](${workspaceAccountingLink}).\n\n`
- : `[会計に移動する](${workspaceAccountingLink}).`
+ ? `[会計へ移動](${workspaceAccountingLink}).
+
+`
+ : `[会計に移動](${workspaceAccountingLink})`
}`,
},
connectCorporateCardTask: {
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 2fceb0c0..715ed1cc 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -1066,10 +1066,10 @@ const translations = {
alternativeMethodsTextReceipts: ({phoneNumber}: {phoneNumber: string}) => `<label-text>Sms bonnetjes naar ${phoneNumber} (alleen VS-nummers)</label-text>`,
takePhoto: 'Maak een foto',
cameraAccess: "Cameratoegang is vereist om foto's van bonnetjes te maken.",
- deniedCameraAccess: 'Camera-toegang is nog steeds niet verleend, volg alstublieft',
+ deniedCameraAccess: 'Cameratoegang is nog steeds niet verleend, volg alstublieft',
deniedCameraAccessInstructions: 'deze instructies',
cameraErrorTitle: 'Camera fout',
- cameraErrorMessage: 'Er is een fout opgetreden bij het maken van een foto. Probeer het opnieuw.',
+ cameraErrorMessage: 'Er is een fout opgetreden tijdens het maken van een foto. Probeer het opnieuw.',
locationAccessTitle: 'Locatietoegang toestaan',
locationAccessMessage: 'Locatietoegang helpt ons om uw tijdzone en valuta nauwkeurig te houden, waar u ook gaat.',
locationErrorTitle: 'Locatietoegang toestaan',
@@ -1852,10 +1852,11 @@ const translations = {
twoFactorAuthIsRequiredDescription: 'Voor beveiligingsdoeleinden vereist Xero tweefactorauthenticatie om de integratie te verbinden.',
twoFactorAuthIsRequiredForAdminsHeader: 'Twee-factor authenticatie vereist',
twoFactorAuthIsRequiredForAdminsTitle: 'Schakel alsjeblieft twee-factor authenticatie in.',
- twoFactorAuthIsRequiredXero: 'Uw Xero-boekhoudkoppeling vereist het gebruik van tweefactorauthenticatie. Om Expensify te blijven gebruiken, schakelt u dit in.',
+ twoFactorAuthIsRequiredXero: 'Je Xero-boekhoudkoppeling vereist het gebruik van tweefactorauthenticatie. Schakel tweefactorauthenticatie in om Expensify te blijven gebruiken.',
twoFactorAuthCannotDisable: 'Kan 2FA niet uitschakelen',
twoFactorAuthRequired: 'Twee-factor authenticatie (2FA) is vereist voor uw Xero-verbinding en kan niet worden uitgeschakeld.',
explainProcessToRemoveWithRecovery: 'Om tweefactorauthenticatie (2FA) uit te schakelen, voer een geldige herstelcode in.',
+ twoFactorAuthIsRequiredCompany: 'Uw bedrijf vereist het gebruik van tweefactorauthenticatie. Schakel tweefactorauthenticatie in om Expensify te blijven gebruiken.',
},
recoveryCodeForm: {
error: {
@@ -2481,19 +2482,21 @@ ${amount} voor ${merchant} - ${date}`,
title: ({integrationName, workspaceAccountingLink}) =>
`Verbind${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' met'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'uw' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
- `Verbind${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? ' uw' : ' met'} ${integrationName} voor automatische uitgavencodering en synchronisatie die de maandafsluiting een fluitje van een cent maken.\n` +
+ `Koppel ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'jouw' : 'naar'} ${integrationName} voor automatische codering en synchronisatie van uitgaven, waardoor de maandafsluiting een fluitje van een cent wordt.` +
'\n' +
- '1. Klik op *Instellingen*.\n' +
- '2. Ga naar *Werkruimtes*.\n' +
- '3. Selecteer uw werkruimte.\n' +
- '4. Klik op *Boekhouding*.\n' +
- `5. Zoek ${integrationName}.\n` +
- '6. Klik op *Verbinden*.\n' +
+ '1. Klik op *Instellingen*.' +
+ '2. Ga naar *Workspaces*.' +
+ '3. Selecteer je werkruimte.' +
+ '4. Klik op *Boekhouding*.' +
+ `5. Zoek ${integrationName}.` +
+ '6. Klik op *Verbinden*.' +
'\n' +
`${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? `[Breng me naar boekhouding](${workspaceAccountingLink}).\n\n`
- : `[Breng me naar boekhouding](${workspaceAccountingLink}).`
+ ? `[Ga naar de boekhouding](${workspaceAccountingLink}).
+
+`
+ : `[Breng me naar de boekhouding](${workspaceAccountingLink}).`
}`,
},
connectCorporateCardTask: {
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 26cd8cb7..5d4db34e 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -1056,8 +1056,8 @@ const translations = {
dragReceiptsAfterEmail: 'lub wybierz pliki do przesłania poniżej.',
desktopSubtitleSingle: `lub przeciągnij i upuść tutaj`,
desktopSubtitleMultiple: `lub przeciągnij i upuść je tutaj`,
- chooseReceipt: 'Wybierz paragon do przesłania lub prześlij paragon do',
- chooseReceipts: 'Wybierz paragony do przesłania lub prześlij paragony do',
+ chooseReceipt: 'Choose a receipt to upload or forward a receipt to',
+ chooseReceipts: 'Wybierz paragony do przesłania lub prześlij dalej paragony do',
alternativeMethodsTitle: 'Inne sposoby dodawania paragonów:',
alternativeMethodsDownloadApp: ({downloadUrl}: {downloadUrl: string}) => `<label-text><a href="${downloadUrl}">Pobierz aplikację</a>, aby skanować z telefonu</label-text>`,
alternativeMethodsForwardReceipts: ({email}: {email: string}) => `<label-text>Przekazuj paragony na <a href="mailto:${email}">${email}</a></label-text>`,
@@ -1066,7 +1066,7 @@ const translations = {
alternativeMethodsTextReceipts: ({phoneNumber}: {phoneNumber: string}) => `<label-text>Wysyłaj paragony SMS-em na ${phoneNumber} (tylko numery w USA)</label-text>`,
takePhoto: 'Zrób zdjęcie',
cameraAccess: 'Dostęp do aparatu jest wymagany, aby robić zdjęcia paragonów.',
- deniedCameraAccess: 'Dostęp do kamery nadal nie został przyznany, proszę postępować zgodnie z',
+ deniedCameraAccess: 'Dostęp do aparatu nadal nie został przyznany, proszę postępować zgodnie z instrukcjami',
deniedCameraAccessInstructions: 'te instrukcje',
cameraErrorTitle: 'Błąd aparatu',
cameraErrorMessage: 'Wystąpił błąd podczas robienia zdjęcia. Spróbuj ponownie.',
@@ -1849,10 +1849,11 @@ const translations = {
twoFactorAuthIsRequiredDescription: 'Ze względów bezpieczeństwa Xero wymaga uwierzytelniania dwuskładnikowego do połączenia integracji.',
twoFactorAuthIsRequiredForAdminsHeader: 'Wymagana dwuskładnikowa autoryzacja',
twoFactorAuthIsRequiredForAdminsTitle: 'Proszę włączyć uwierzytelnianie dwuskładnikowe',
- twoFactorAuthIsRequiredXero: 'Twoje połączenie z Xero wymaga użycia uwierzytelniania dwuskładnikowego. Aby kontynuować korzystanie z Expensify, proszę je włączyć.',
+ twoFactorAuthIsRequiredXero: 'Twoje połączenie księgowe z Xero wymaga użycia uwierzytelniania dwuskładnikowego. Aby nadal korzystać z Expensify, prosimy je włączyć.',
twoFactorAuthCannotDisable: 'Nie można wyłączyć 2FA',
twoFactorAuthRequired: 'Do połączenia z Xero wymagana jest uwierzytelnianie dwuskładnikowe (2FA) i nie można go wyłączyć.',
explainProcessToRemoveWithRecovery: 'Aby wyłączyć uwierzytelnianie dwuskładnikowe (2FA), wprowadź prawidłowy kod odzyskiwania.',
+ twoFactorAuthIsRequiredCompany: 'Twoja firma wymaga korzystania z uwierzytelniania dwuskładnikowego. Aby nadal korzystać z Expensify, włącz je.',
},
recoveryCodeForm: {
error: {
@@ -2475,18 +2476,20 @@ ${amount} dla ${merchant} - ${date}`,
title: ({integrationName, workspaceAccountingLink}) =>
`Połącz${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' z'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'swoim' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
- `Połącz${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? ' swój' : ' z'} ${integrationName}, aby automatycznie kategoryzować wydatki i synchronizować dane, co ułatwi zamknięcie miesiąca.\n` +
+ `Połącz ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'Twoje' : 'do'} z ${integrationName}, aby umożliwić automatyczne kodowanie wydatków i synchronizację, co sprawi, że zamknięcie miesiąca będzie banalnie proste.` +
'\n' +
- '1. Kliknij *Ustawienia*.\n' +
- '2. Przejdź do *Przestrzenie robocze*.\n' +
- '3. Wybierz swoją przestrzeń roboczą.\n' +
- '4. Kliknij *Księgowość*.\n' +
- `5. Znajdź ${integrationName}.\n` +
- '6. Kliknij *Połącz*.\n' +
+ '1. Kliknij *Ustawienia*.' +
+ '2. Przejdź do *Workspaces*.' +
+ '3. Wybierz swój obszar roboczy.' +
+ '4. Kliknij *Księgowość*.' +
+ `5. Znajdź ${integrationName}.` +
+ '6. Kliknij *Połącz*.' +
'\n' +
`${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? `[Przejdź do księgowości](${workspaceAccountingLink}).\n\n`
+ ? `[Przejdź do księgowości](${workspaceAccountingLink}).
+
+`
: `[Przejdź do księgowości](${workspaceAccountingLink}).`
}`,
},
@@ -4419,7 +4422,6 @@ ${amount} dla ${merchant} - ${date}`,
displayedAsTagDescription: 'Dział będzie można wybrać dla każdego indywidualnego wydatku w raporcie pracownika.',
displayedAsReportFieldDescription: 'Wybór działu będzie dotyczył wszystkich wydatków w raporcie pracownika.',
toggleImportTitle: ({mappingTitle}: ToggleImportTitleParams) => `Wybierz, jak obsługiwać Sage Intacct <strong>${mappingTitle}</strong> w Expensify.`,
-
expenseTypes: 'Typy wydatków',
expenseTypesDescription: 'Twoje typy wydatków Sage Intacct zostaną zaimportowane do Expensify jako kategorie.',
accountTypesDescription: 'Twój plan kont Sage Intacct zostanie zaimportowany do Expensify jako kategorie.',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index e6c66f47..7a784a53 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -1055,8 +1055,8 @@ const translations = {
uploadMultiple: 'Fazer upload de recibos',
desktopSubtitleSingle: `ou arraste e solte aqui`,
desktopSubtitleMultiple: `ou arraste e solte aqui`,
- chooseReceipt: 'Escolha um recibo para enviar ou encaminhe um recibo para',
- chooseReceipts: 'Escolha recibos para enviar ou encaminhe recibos para',
+ chooseReceipt: 'Escolha um recibo para enviar ou encaminhar um recibo para',
+ chooseReceipts: 'Escolha recibos para fazer upload ou encaminhar recibos para',
alternativeMethodsTitle: 'Outras formas de adicionar recibos:',
alternativeMethodsDownloadApp: ({downloadUrl}: {downloadUrl: string}) => `<label-text><a href="${downloadUrl}">Baixe o app</a> para escanear pelo celular</label-text>`,
alternativeMethodsForwardReceipts: ({email}: {email: string}) => `<label-text>Encaminhe recibos para <a href="mailto:${email}">${email}</a></label-text>`,
@@ -1065,10 +1065,10 @@ const translations = {
alternativeMethodsTextReceipts: ({phoneNumber}: {phoneNumber: string}) => `<label-text>Envie recibos por SMS para ${phoneNumber} (apenas números dos EUA)</label-text>`,
takePhoto: 'Tire uma foto',
cameraAccess: 'O acesso à câmera é necessário para tirar fotos dos recibos.',
- deniedCameraAccess: 'O acesso à câmera ainda não foi concedido, por favor siga',
- deniedCameraAccessInstructions: 'essas instruções',
+ deniedCameraAccess: 'O acesso à câmera ainda não foi concedido, por favor, siga',
+ deniedCameraAccessInstructions: 'estas instruções',
cameraErrorTitle: 'Erro de câmera',
- cameraErrorMessage: 'Ocorreu um erro ao tirar a foto. Por favor, tente novamente.',
+ cameraErrorMessage: 'Ocorreu um erro ao tirar a foto. Tente novamente.',
locationAccessTitle: 'Permitir acesso à localização',
locationAccessMessage: 'O acesso à localização nos ajuda a manter seu fuso horário e moeda precisos onde quer que você vá.',
locationErrorTitle: 'Permitir acesso à localização',
@@ -1848,10 +1848,11 @@ const translations = {
twoFactorAuthIsRequiredDescription: 'Para fins de segurança, a Xero exige autenticação de dois fatores para conectar a integração.',
twoFactorAuthIsRequiredForAdminsHeader: 'Autenticação de dois fatores necessária',
twoFactorAuthIsRequiredForAdminsTitle: 'Por favor, habilite a autenticação de dois fatores.',
- twoFactorAuthIsRequiredXero: 'Sua conexão de contabilidade com a Xero requer o uso de autenticação de dois fatores. Para continuar usando o Expensify, por favor, ative-a.',
+ twoFactorAuthIsRequiredXero: 'Sua conexão de contabilidade com o Xero requer o uso de autenticação de dois fatores. Para continuar usando o Expensify, ative-a.',
twoFactorAuthCannotDisable: 'Não é possível desativar a 2FA',
twoFactorAuthRequired: 'A autenticação de dois fatores (2FA) é necessária para sua conexão com o Xero e não pode ser desativada.',
explainProcessToRemoveWithRecovery: 'Para desativar a autenticação de dois fatores (2FA), insira um código de recuperação válido.',
+ twoFactorAuthIsRequiredCompany: 'Sua empresa exige o uso de autenticação de dois fatores. Para continuar usando o Expensify, ative-a.',
},
recoveryCodeForm: {
error: {
@@ -2472,19 +2473,21 @@ ${amount} para ${merchant} - ${date}`,
title: ({integrationName, workspaceAccountingLink}) =>
`Conecte-se${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : ' ao'} [${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'seu' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
- `Conecte-se${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? ' ao seu' : ' ao'} ${integrationName} para categorização automática de despesas e sincronização que torna o fechamento do mês muito fácil.\n` +
+ `Conecte ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'seu' : 'para'} ${integrationName} para classificação e sincronização automáticas de despesas, o que torna o fechamento do mês muito fácil.` +
'\n' +
- '1. Clique em *Configurações*.\n' +
- '2. Vá para *Espaços de trabalho*.\n' +
- '3. Selecione seu espaço de trabalho.\n' +
- '4. Clique em *Contabilidade*.\n' +
- `5. Encontre ${integrationName}.\n` +
- '6. Clique em *Conectar*.\n' +
+ '1. Clique em *Configurações*.' +
+ '2. Vá para *Espaços de Trabalho*.' +
+ '3. Selecione seu espaço de trabalho.' +
+ '4. Clique em *Contabilidade*.' +
+ `5. Encontre ${integrationName}.` +
+ '6. Clique em *Conectar*.' +
'\n' +
`${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? `[Leve-me para a contabilidade](${workspaceAccountingLink}).\n\n`
- : `[Leve-me para a contabilidade](${workspaceAccountingLink}).`
+ ? `[Ir para a contabilidade](${workspaceAccountingLink}).
+
+`
+ : `[Ir para a contabilidade](${workspaceAccountingLink}).`
}`,
},
connectCorporateCardTask: {
@@ -4418,7 +4421,6 @@ ${amount} para ${merchant} - ${date}`,
displayedAsTagDescription: 'O departamento será selecionável para cada despesa individual no relatório de um funcionário.',
displayedAsReportFieldDescription: 'A seleção de departamento será aplicada a todas as despesas no relatório de um funcionário.',
toggleImportTitle: ({mappingTitle}: ToggleImportTitleParams) => `Escolha como lidar com o Sage Intacct <strong>${mappingTitle}</strong> in Expensify.`,
-
expenseTypes: 'Tipos de despesas',
expenseTypesDescription: 'Seus tipos de despesas do Sage Intacct serão importados para o Expensify como categorias.',
accountTypesDescription: 'Seu plano de contas do Sage Intacct será importado para o Expensify como categorias.',
@@ -7342,7 +7344,6 @@ ${amount} para ${merchant} - ${date}`,
exportInProgress: 'Exportação em andamento',
conciergeWillSend: 'Concierge enviará o arquivo em breve.',
},
-
avatarPage: {
title: 'Editar foto de perfil',
upload: 'Carregar',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index cda654c0..89830bc8 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -1050,8 +1050,8 @@ const translations = {
dragReceiptsAfterEmail: '或选择文件上传。',
desktopSubtitleSingle: `或将其拖放到此处`,
desktopSubtitleMultiple: `或将它们拖放到此处`,
- chooseReceipt: '选择要上传的收据或转发收据到',
- chooseReceipts: '选择要上传的收据或转发收据到',
+ chooseReceipt: '选择一张收据进行上传或将收据转发至',
+ chooseReceipts: '选择要上传的收据,或将收据转发到',
alternativeMethodsTitle: '添加收据的其他方式:',
alternativeMethodsDownloadApp: ({downloadUrl}: {downloadUrl: string}) => `<label-text><a href="${downloadUrl}">下载应用</a>以通过手机扫描</label-text>`,
alternativeMethodsForwardReceipts: ({email}: {email: string}) => `<label-text>将收据转发到 <a href="mailto:${email}">${email}</a></label-text>`,
@@ -1060,10 +1060,10 @@ const translations = {
alternativeMethodsTextReceipts: ({phoneNumber}: {phoneNumber: string}) => `<label-text>将收据短信发送至 ${phoneNumber}(仅限美国号码)</label-text>`,
takePhoto: '拍照',
cameraAccess: '需要相机权限来拍摄收据照片。',
- deniedCameraAccess: '相机访问权限仍未授予,请按照以下步骤操作',
+ deniedCameraAccess: '仍未授予相机访问权限,请遵循',
deniedCameraAccessInstructions: '这些说明',
cameraErrorTitle: '相机错误',
- cameraErrorMessage: '拍照时发生错误。请再试一次。',
+ cameraErrorMessage: '拍照时发生错误。请重试。',
locationAccessTitle: '允许位置访问',
locationAccessMessage: '位置访问帮助我们在您旅行时保持时区和货币的准确性。',
locationErrorTitle: '允许位置访问',
@@ -1829,10 +1829,11 @@ const translations = {
twoFactorAuthIsRequiredDescription: '出于安全考虑,Xero 需要双重身份验证才能连接集成。',
twoFactorAuthIsRequiredForAdminsHeader: '需要双重身份验证',
twoFactorAuthIsRequiredForAdminsTitle: '请启用双重身份验证',
- twoFactorAuthIsRequiredXero: '您的Xero会计连接需要使用双重身份验证。要继续使用Expensify,请启用它。',
+ twoFactorAuthIsRequiredXero: '您的 Xero 会计连接需要使用双重身份验证。若要继续使用 Expensify,请启用它。',
twoFactorAuthCannotDisable: '无法禁用双重身份验证',
twoFactorAuthRequired: '您的Xero连接需要双因素认证(2FA),且无法禁用。',
explainProcessToRemoveWithRecovery: '为了禁用双因素认证 (2FA),请输入有效的恢复代码。',
+ twoFactorAuthIsRequiredCompany: '贵公司要求使用双因素认证。要继续使用 Expensify,请启用该功能。',
},
recoveryCodeForm: {
error: {
@@ -2446,19 +2447,21 @@ ${merchant}的${amount} - ${date}`,
title: ({integrationName, workspaceAccountingLink}) =>
`连接${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '' : '到'}[${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '您的' : ''} ${integrationName}](${workspaceAccountingLink})`,
description: ({integrationName, workspaceAccountingLink}) =>
- `连接${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '您的' : '到'} ${integrationName},实现自动费用编码和同步,让月末结账变得轻而易举。\n` +
+ `连接 ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? '你的' : '至'} ${integrationName},实现自动费用编码与同步,让月末结账轻而易举。` +
'\n' +
- '1. 点击 *设置*。\n' +
- '2. 前往 *工作区*。\n' +
- '3. 选择您的工作区。\n' +
- '4. 点击 *会计*。\n' +
- `5. 找到 ${integrationName}。\n` +
- '6. 点击 *连接*。\n' +
+ '点击“设置”。' +
+ '2. 转到*Workspaces*。' +
+ '3. 选择您的工作区。' +
+ '4. 点击*会计*。' +
+ `5. 查找 ${integrationName}。` +
+ '6. 点击*连接*。' +
'\n' +
`${
integrationName && CONST.connectionsVideoPaths[integrationName]
- ? `[带我到会计页面](${workspaceAccountingLink})。\n\n`
- : `[带我到会计页面](${workspaceAccountingLink})。`
+ ? `[前往会计](${workspaceAccountingLink}).
+
+`
+ : `[前往会计](${workspaceAccountingLink})`
}`,
},
connectCorporateCardTask: {
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
|
Back to you @fedirjh |
Reviewer Checklist
Screenshots/Videos |
|
LGTM |
HelpDot Documentation ReviewOverall AssessmentThis PR does not contain traditional HelpDot documentation files (*.md files). Instead, it contains internationalization/localization changes for user interface text strings across multiple language files and a React component update. The changes are focused on differentiating between Xero and Google SSO requirements for 2FA in the application UI. Content AnalysisThe PR modifies:
Key Findings
RecommendationsWhile this PR doesn't contain HelpDot documentation that requires content review, the UI text changes are well-structured and follow proper internationalization practices. The translations appear consistent and contextually appropriate across languages. Files Reviewed
Note: This PR contains UI localization changes rather than traditional HelpDot documentation content. |
| * - User is an admin of a workspace | ||
| * - Xero connection is enabled in the workspace |
There was a problem hiding this comment.
NAB: just to make the logic clear there
| * - User is an admin of a workspace | |
| * - Xero connection is enabled in the workspace | |
| * - User is an admin of a workspace AND | |
| * - Xero connection is enabled in the workspace |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/mountiny in version: 9.2.41-0 🚀
|
|
@blazejkustra @fedirjh @mountiny When User B is already logged in - 2FA modal does not appears. Could you please clarify if it is expected? Recording.6483.mp4 |
|
I think that might be OK |
|
Thanks a lot @mountiny |
|
@jponikarchuk can you please double check how the app behaves in that case? can you continue using the app as new admin just fine? when does the modal show up? After refresh? only once you sign out and sign in? |
|
@mountiny 2FA modal appears only when sign out/sign in. Before log out user can use app normally and submit expenses to the Xero Workspace Recording.6499.mp4 |
|
🚀 Deployed to production by https://github.com/puneetlath in version: 9.2.41-6 🚀
|




Explanation of Change
We want to display a different copy, depending on the reason why 2FA is required, it is either:
Fixed Issues
$ #70803
PROPOSAL: #70803 (comment)
MOBILE-EXPENSIFY: N/A
Tests
Verify that this text is displayed:
Offline tests
N/A
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
MacOS: Chrome / Safari