i18n.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import i18n from 'i18next';
  2. import LanguageDetector from 'i18next-browser-languagedetector';
  3. import { initReactI18next } from 'react-i18next';
  4. import locales from '@root/resource/locales';
  5. // extract metadata list from 'resource/locales/${locale}/meta.json'
  6. export const localeMetadatas = Object.values(locales).map(locale => locale.meta);
  7. export const i18nFactory = (userLocaleId = 'en_US') => {
  8. // setup LanguageDetector
  9. const langDetector = new LanguageDetector();
  10. langDetector.addDetector({
  11. name: 'userSettingDetector',
  12. lookup(options) {
  13. return userLocaleId;
  14. },
  15. cacheUserlanguage(lng, options) {
  16. },
  17. });
  18. i18n
  19. .use(langDetector)
  20. .use(initReactI18next) // if not using I18nextProvider
  21. .init({
  22. debug: (process.env.NODE_ENV !== 'production'),
  23. resources: locales,
  24. load: 'currentOnly',
  25. fallbackLng: 'en_US',
  26. detection: {
  27. order: ['userSettingDetector', 'querystring', 'localStorage'],
  28. },
  29. interpolation: {
  30. escapeValue: false, // not needed for react!!
  31. },
  32. // react i18next special options (optional)
  33. react: {
  34. wait: false,
  35. withRef: true,
  36. bindI18n: 'languageChanged loaded',
  37. bindStore: 'added removed',
  38. nsMode: 'default',
  39. },
  40. });
  41. return i18n;
  42. };