| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import i18n from 'i18next';
- import LanguageDetector from 'i18next-browser-languagedetector';
- import { initReactI18next } from 'react-i18next';
- import locales from '@root/resource/locales';
- import LanguageDetectorWrapper from './LanguageDetectorWrapper';
- // extract metadata list from 'resource/locales/${locale}/meta.json'
- export const localeMetadatas = Object.values(locales).map(locale => locale.meta);
- export const i18nFactory = (userLocaleId) => {
- // setup LanguageDetector
- const langDetector = new LanguageDetector();
- langDetector.addDetector({
- name: 'userSettingDetector',
- lookup(options) {
- return userLocaleId;
- },
- });
- // Wrapper to convert lang after detected
- const languageDetectorWrapper = new LanguageDetectorWrapper(langDetector);
- i18n
- .use(languageDetectorWrapper)
- .use(initReactI18next) // if not using I18nextProvider
- .init({
- debug: (process.env.NODE_ENV !== 'production'),
- resources: locales,
- load: 'currentOnly',
- fallbackLng: 'en_US',
- detection: 'languageDetectorWrapper',
- interpolation: {
- escapeValue: false, // not needed for react!!
- },
- // react i18next special options (optional)
- react: {
- wait: false,
- withRef: true,
- bindI18n: 'languageChanged loaded',
- bindStore: 'added removed',
- nsMode: 'default',
- },
- });
- return i18n;
- };
|