UNPKG

svgedit

Version:

Powerful SVG-Editor for your browser

91 lines (82 loc) 2.62 kB
/** * Localizing script for SVG-edit UI. * @module locale * @license MIT * * @copyright 2010 Narendra Sisodya * @copyright 2010 Alexis Deveria * */ import i18next from 'i18next'; /** * Used, for example, in the ImageLibs extension, to present libraries * (with name/URL/description) in order. * @typedef {GenericArray<module:locale.LocaleStrings>} module:locale.LocaleArray */ /** * The string keys of the object are two-letter language codes. * @tutorial LocaleDocs * @typedef {PlainObject<string, string|module:locale.LocaleStrings|module:locale.LocaleArray>} module:locale.LocaleStrings */ // keyed to an array of objects with "id" and "title" or "textContent" properties /** * @typedef {PlainObject<string, string>} module:locale.LocaleSelectorValue */ let langParam; /** * The "data" property is generally set to an an array of objects with * "id" and "title" or "textContent" properties. * @typedef {PlainObject} module:locale.AddLangExtensionLocaleData * @property {module:locale.LocaleStrings[]} data See {@tutorial LocaleDocs} */ /** * @interface module:locale.LocaleEditorInit */ /** * @function module:locale.LocaleEditorInit#addLangData * @param {string} langParam * @returns {module:locale.AddLangExtensionLocaleData} */ /** * @typedef {PlainObject} module:locale.LangAndData * @property {string} langParam * @property {module:locale.LocaleStrings} langData */ /** * * @function module:locale.putLocale * @param {string} givenParam * @param {string[]} goodLangs * @fires module:svgcanvas.SvgCanvas#event:ext_addLangData * @fires module:svgcanvas.SvgCanvas#event:ext_langReady * @fires module:svgcanvas.SvgCanvas#event:ext_langChanged * @returns {Promise<module:locale.LangAndData>} Resolves to result of {@link module:locale.readLang} */ export const putLocale = async function (givenParam, goodLangs) { if (givenParam) { langParam = givenParam; } else if (navigator.userLanguage) { // Explorer langParam = navigator.userLanguage; } else if (navigator.language) { // FF, Opera, ... langParam = navigator.language; } // Set to English if language is not in list of good langs if (!goodLangs.includes(langParam) && langParam !== 'test') { langParam = 'en'; } // eslint-disable-next-line no-unsanitized/method const module = await import(`./locale/lang.${encodeURIComponent(langParam)}.js`); i18next.init({ lng: langParam, debug: false, resources: { [langParam]: { translation: module.default } } }); return { langParam, i18next }; }; export const t = function (key) { return i18next.t(key); };