/** * @module i18n * @copyright 2020, the Converse.js contributors * @license Mozilla Public License (MPLv2) * @description This is the internationalization module */ import Jed from 'jed'; import dayjs from 'dayjs'; import log from "@converse/headless/log"; import { _converse, api, i18n } from '@converse/headless/converse-core'; function detectLocale (library_check) { /* Determine which locale is supported by the user's system as well * as by the relevant library (e.g. converse.js or dayjs). * @param { Function } library_check - Returns a boolean indicating whether * the locale is supported. */ var locale, i; if (window.navigator.userLanguage) { locale = isLocaleAvailable(window.navigator.userLanguage, library_check); } if (window.navigator.languages && !locale) { for (i=0; i dayjs.locale(l))); jed_instance = new Jed(data); } let jed_instance; /** * @namespace i18n */ Object.assign(i18n, { getLocale (preferred_locale, available_locales) { return getLocale(preferred_locale, preferred => isConverseLocale(preferred, available_locales)); }, translate (str) { if (!jed_instance) { return Jed.sprintf.apply(Jed, arguments); } const t = jed_instance.translate(str); if (arguments.length > 1) { return t.fetch.apply(t, [].slice.call(arguments, 1)); } else { return t.fetch(); } }, async initialize () { if (_converse.isTestEnv()) { _converse.locale = 'en'; } else { try { _converse.locale = i18n.getLocale(api.settings.get('i18n'), api.settings.get("locales")); await fetchTranslations(_converse); } catch (e) { log.fatal(e.message); _converse.locale = 'en'; } } }, __ (...args) { return i18n.translate(...args); } }); export const __ = i18n.__;