* #475 IAN as they changed the API, so removed IAN option in svg edit * move imagelib to untested extensions This feature is causing security warning and needs to be entirely rewritten Co-authored-by: JFH <20402845+jfhenon@users.noreply.github.com>
86 lines
2.3 KiB
JavaScript
86 lines
2.3 KiB
JavaScript
/**
|
|
* Localizing script for SVG-edit UI.
|
|
* @module locale
|
|
* @license MIT
|
|
*
|
|
* @copyright 2010 Narendra Sisodya
|
|
* @copyright 2010 Alexis Deveria
|
|
*
|
|
*/
|
|
|
|
import i18next from 'i18next'
|
|
|
|
/**
|
|
* 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'
|
|
}
|
|
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)
|
|
}
|