diff --git a/src/CONST.ts b/src/CONST.ts index d3841189fce2..5d75f43cedd9 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -930,6 +930,7 @@ const CONST = { RECEIPTS: 'receipts@expensify.com', STUDENT_AMBASSADOR: 'studentambassadors@expensify.com', SVFG: 'svfg@expensify.com', + EXPENSIFY_EMAIL_DOMAIN: '@expensify.com', }, ACCOUNT_ID: { @@ -2725,6 +2726,8 @@ const CONST = { SPEND: 'spend', WORKSPACES: 'workspaces', }, + + MISSING_TRANSLATION: 'MISSING TRANSLATION', } as const; export default CONST; diff --git a/src/libs/Localize/index.js b/src/libs/Localize/index.js index db371301f43f..a26c7d4ebc10 100644 --- a/src/libs/Localize/index.js +++ b/src/libs/Localize/index.js @@ -2,12 +2,27 @@ import _ from 'underscore'; import lodashGet from 'lodash/get'; import Str from 'expensify-common/lib/str'; import * as RNLocalize from 'react-native-localize'; +import Onyx from 'react-native-onyx'; import Log from '../Log'; import Config from '../../CONFIG'; import translations from '../../languages/translations'; import CONST from '../../CONST'; import LocaleListener from './LocaleListener'; import BaseLocaleListener from './LocaleListener/BaseLocaleListener'; +import ONYXKEYS from '../../ONYXKEYS'; + +// Current user mail is needed for handling missing translations +let userEmail = ''; +Onyx.connect({ + key: ONYXKEYS.SESSION, + waitForCollectionCallback: true, + callback: (val) => { + if (!val) { + return; + } + userEmail = val.email; + }, +}); // Listener when an update in Onyx happens so we use the updated locale when translating/localizing items. LocaleListener.connect(); @@ -70,11 +85,14 @@ function translate(desiredLanguage = CONST.LOCALES.DEFAULT, phraseKey, phrasePar return Str.result(translatedPhrase, phraseParameters); } - // Phrase is not found in default language, on production log an alert to server + // Phrase is not found in default language, on production and staging log an alert to server // on development throw an error - if (Config.IS_IN_PRODUCTION) { + if (Config.IS_IN_PRODUCTION || Config.IS_IN_STAGING) { const phraseString = _.isArray(phraseKey) ? phraseKey.join('.') : phraseKey; Log.alert(`${phraseString} was not found in the en locale`); + if (userEmail.includes(CONST.EMAIL.EXPENSIFY_EMAIL_DOMAIN)) { + return CONST.MISSING_TRANSLATION; + } return phraseString; } throw new Error(`${phraseKey} was not found in the default language`);