You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import i18next from 'i18next';
  2. import I18nextXHRBackend from 'i18next-xhr-backend';
  3. import LANGUAGES_RESOURCES from '../../../../lang/languages.json';
  4. import MAIN_RESOURCES from '../../../../lang/main.json';
  5. import languageDetector from './languageDetector';
  6. declare var interfaceConfig: Object;
  7. /**
  8. * The available/supported languages.
  9. *
  10. * XXX The element at index zero is the default language.
  11. *
  12. * @public
  13. * @type {Array<string>}
  14. */
  15. export const LANGUAGES = Object.keys(LANGUAGES_RESOURCES);
  16. /**
  17. * The default language.
  18. *
  19. * XXX The element at index zero of {@link LANGUAGES} is the default language.
  20. *
  21. * @public
  22. * @type {string} The default language.
  23. */
  24. export const DEFAULT_LANGUAGE = LANGUAGES[0];
  25. /**
  26. * The options to initialize i18next with.
  27. *
  28. * @type {Object}
  29. */
  30. const options = {
  31. app:
  32. (typeof interfaceConfig !== 'undefined' && interfaceConfig.APP_NAME)
  33. || 'Jitsi Meet',
  34. compatibilityAPI: 'v1',
  35. compatibilityJSON: 'v1',
  36. fallbackLng: DEFAULT_LANGUAGE,
  37. fallbackOnEmpty: true,
  38. fallbackOnNull: true,
  39. // XXX i18next modifies the array lngWhitelist so make sure to clone
  40. // LANGUAGES.
  41. lngWhitelist: LANGUAGES.slice(),
  42. load: 'unspecific',
  43. ns: {
  44. defaultNs: 'main',
  45. namespaces: [ 'main', 'languages' ]
  46. },
  47. resGetPath: 'lang/__ns__-__lng__.json',
  48. useDataAttrOptions: true
  49. };
  50. i18next
  51. .use(I18nextXHRBackend)
  52. .use(languageDetector)
  53. .use({
  54. name: 'resolveAppName',
  55. process: (res, key) => i18next.t(key, { app: options.app }),
  56. type: 'postProcessor'
  57. })
  58. .init(options);
  59. // Add default language which is preloaded from the source code.
  60. i18next.addResourceBundle(
  61. DEFAULT_LANGUAGE,
  62. 'main',
  63. MAIN_RESOURCES,
  64. /* deep */ true,
  65. /* overwrite */ true);
  66. i18next.addResourceBundle(
  67. DEFAULT_LANGUAGE,
  68. 'languages',
  69. LANGUAGES_RESOURCES,
  70. /* deep */ true,
  71. /* overwrite */ true);
  72. export default i18next;