diff options
Handle i18n with redux.
Diffstat (limited to 'ui/i18n-helper.js')
-rw-r--r-- | ui/i18n-helper.js | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/ui/i18n-helper.js b/ui/i18n-helper.js new file mode 100644 index 000000000..7ad8cd040 --- /dev/null +++ b/ui/i18n-helper.js @@ -0,0 +1,37 @@ +// cross-browser connection to extension i18n API +const extension = require('extensionizer') +const log = require('loglevel') + +const getMessage = (locale, key, substitutions) => { + // check locale is loaded + if (!locale) { + // throw new Error('Translator - has not loaded a locale yet.') + return '' + } + // check entry is present + const entry = locale[key] + if (!entry) { + log.error(`Translator - Unable to find value for "${key}"`) + throw new Error(`Translator - Unable to find value for "${key}"`) + } + let phrase = entry.message + // perform substitutions + if (substitutions && substitutions.length) { + phrase = phrase.replace(/\$1/g, substitutions[0]) + if (substitutions.length > 1) { + phrase = phrase.replace(/\$2/g, substitutions[1]) + } + } + return phrase +} + +async function fetchLocale (localeName) { + const response = await fetch(`/_locales/${localeName}/messages.json`) + const locale = await response.json() + return locale +} + +module.exports = { + getMessage, + fetchLocale, +} |