// Use it explicitly var messages = require("json!po!./locale/en_US/LC_MESSAGES/messages.po"); // Or add a loader into your webpack.config.js loaders: [ {test: /\.po$/, loader: 'json!po'} ] // And then require it like this var messages = require("./locale/en_US/LC_MESSAGES/messages.po");
See po2json for a list of possible options. Use the format
option to change the output format, e.g. json!po?format=jed
or json!po?format=jed1.x
for the latest Jed format.
import Jed from 'jed' // The Locale consists of a language and territory. const language = langParts[0] const territory = langParts[1].toUpperCase() // Set complete const locale = multipart ? language + '_' + territory : language let i18n = null export default { async init() { const langRaw = window.navigator.userLanguage || window.navigator.language const langParts = langRaw.replace('-', '_').split('_') const language = langParts[0] const country = langParts.length > 1 ? '_' + langParts[1].toUpperCase() : '' const locale = `${language}${country}` let localeData try { localeData = await getLocaleData(locale) } catch { localeData = await getLocaleData(LOCALE_DEFAULT) } i18n = new Jed(localeData) }, gettext(message) { return i18n.gettext(message) }, ngettext(msg1, msg2, n) { return i18n.ngettext(msg1, msg2, n) }, } // A runtime exception will be throw every time that the requested locale file cannot be found. // Webpack uses a regular expression to build all locales as separate bundles. async function getLocaleData(locale) { return import(`${LOCALE_ROOT}/${locale}/LC_MESSAGES/messages.po`) }Javascript with language fallback example:
Language fallback map stored at ${LOCALE_ROOT}/config
:
--- default: en_US map: en: en_US ru: ru_RU uk: ru_RU de: de_DE ...
locale
module:
import Jed from 'jed' let i18n let localeConfig export default { async init() { const localeConfig = await import(`${LOCALE_ROOT}/config`) const localeDefault = localeConfig['default'] const map = localeConfig['map'] const langRaw = window.navigator.userLanguage || window.navigator.language const langParts = langRaw.replace('-', '_').split('_') const language = langParts[0] const country = langParts.length > 1 ? '_' + langParts[1].toUpperCase() : '' const locale = `${language}${country}` let localeData try { localeData = await getLocaleData(locale) } catch { const localeNext = map.hasOwnProperty(language) ? map[language] : localeDefault localeData = await getLocaleData(localeNext) } i18n = new Jed(localeData) }, gettext(message) { return i18n.gettext(message) }, ngettext(msg1, msg2, n) { return i18n.ngettext(msg1, msg2, n) }, } // A runtime exception will be throw every time that the requested locale file cannot be found. // Webpack uses a regular expression to build all locales as separate bundles. async function getLocaleData(locale) { return import(`${LOCALE_ROOT}/${locale}/LC_MESSAGES/messages.po`) }
Then in your common shared code:
const localePromise = locale.init() const documentPromise = new Promise(function(resolve, reject) { document.addEventListener('DOMContentLoaded', resolve, false) }) init([localePromise, documentPromise])
Finally in your entry code:
import init from 'init' init().then(function() { console.log('The locale module is now ready.') })
MIT (http://www.opensource.org/licenses/mit-license.php)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4