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.
171 lines
5.3 KiB
171 lines
5.3 KiB
// original file available at https://github.com/ivmartel/dwv/blob/e6ea132ba2bac98546a1b27476e7ebe27bfeb02d/src/utils/i18n.js |
|
|
|
// namespaces |
|
var dwv = dwv || {}; |
|
// external |
|
var i18next = i18next || {}; |
|
var i18nextXHRBackend = i18nextXHRBackend || {}; |
|
var i18nextBrowserLanguageDetector = i18nextBrowserLanguageDetector || {}; |
|
|
|
// This is mainly a wrapper around the i18next object. |
|
// see its API: http://i18next.com/docs/api/ |
|
|
|
// global locales path |
|
dwv.i18nLocalesPath = null; |
|
|
|
/** |
|
* Initialise i18n. |
|
* @param {String} language The language to translate to. Defaults to 'auto' and |
|
* gets the language from the browser. |
|
* @param {String} localesPath Path to the locales directory. |
|
* @external i18next |
|
* @external i18nextXHRBackend |
|
* @external i18nextBrowserLanguageDetector |
|
*/ |
|
dwv.i18nInitialise = function (language, localesPath) |
|
{ |
|
var lng = (typeof language === "undefined") ? "auto" : language; |
|
var lpath = (typeof localesPath === "undefined") ? "./../public/assets/dwv" : localesPath; |
|
// store as global |
|
dwv.i18nLocalesPath = lpath; |
|
// i18n options: default 'en' language and |
|
// only load language, not specialised (for ex en-GB) |
|
var options = { |
|
fallbackLng: "en", |
|
load: "languageOnly", |
|
backend: { loadPath: lpath + "/locales/{{lng}}/{{ns}}.json" } |
|
}; |
|
// use the XHR backend to get translation files |
|
var i18n = i18next.use(i18nextXHRBackend); |
|
// use browser language or the specified one |
|
if (lng === "auto") { |
|
i18n.use(i18nextBrowserLanguageDetector); |
|
} |
|
else { |
|
options.lng = lng; |
|
} |
|
// init i18n: will be ready when the 'loaded' event is fired |
|
i18n.init(options); |
|
}; |
|
|
|
/** |
|
* Initialise i18n with recources as input. |
|
* @param {String} language The language to translate to. Defaults to 'auto' and |
|
* gets the language from the browser. |
|
* @param {Object} resources Languages provided as object. |
|
* @external i18next |
|
* @external i18nextBrowserLanguageDetector |
|
*/ |
|
dwv.i18nInitialiseWithResources = function (language, resources) |
|
{ |
|
var lng = (typeof language === "undefined") ? "auto" : language; |
|
// i18n options: default 'en' language and |
|
// only load language, not specialised (for ex en-GB) |
|
var options = { |
|
fallbackLng: "en", |
|
load: "languageOnly", |
|
resources: resources |
|
}; |
|
// use browser language or the specified one |
|
// init i18n: will be ready when the 'loaded' event is fired |
|
if (lng === "auto") { |
|
var i18n = i18next.use(i18nextBrowserLanguageDetector); |
|
i18n.init(options); |
|
} |
|
else { |
|
options.lng = lng; |
|
i18next.init(options); |
|
} |
|
}; |
|
|
|
/** |
|
* Handle i18n 'initialized' event. |
|
* @param {Object} callback The callback function to call when i18n is initialised. |
|
* It can take one argument that will be replaced with the i18n options. |
|
* @external i18next |
|
*/ |
|
dwv.i18nOnInitialised = function (callback) { |
|
i18next.on('initialized', callback); |
|
}; |
|
|
|
/** |
|
* Stop handling i18n load event. |
|
* @external i18next |
|
*/ |
|
dwv.i18nOffInitialised = function () { |
|
i18next.off('initialized'); |
|
}; |
|
|
|
/** |
|
* Handle i18n failed load event. |
|
* @param {Object} callback The callback function to call when i18n is loaded. |
|
* It can take three arguments: lng, ns and msg. |
|
* @external i18next |
|
*/ |
|
dwv.i18nOnFailedLoad = function (callback) { |
|
i18next.on('failedLoading', callback); |
|
}; |
|
|
|
/** |
|
* Stop handling i18n failed load event. |
|
* @external i18next |
|
*/ |
|
dwv.i18nOffFailedLoad = function () { |
|
i18next.off('failedLoading'); |
|
}; |
|
|
|
/** |
|
* Get the translated text. |
|
* @param {String} key The key to the text entry. |
|
* @param {Object} options The translation options such as plural, context... |
|
* @external i18next |
|
*/ |
|
dwv.i18n = function (key, options) { |
|
return i18next.t(key, options); |
|
}; |
|
|
|
/** |
|
* Check the existence of a translation. |
|
* @param {String} key The key to the text entry. |
|
* @param {Object} options The translation options such as plural, context... |
|
* @external i18next |
|
*/ |
|
dwv.i18nExists = function (key, options) { |
|
return i18next.exists(key, options); |
|
}; |
|
|
|
/** |
|
* Translate all data-i18n tags in the current html page. If an html tag defines the |
|
* data-i18n attribute, its value will be used as key to find its corresponding text |
|
* and will replace the content of the html tag. |
|
*/ |
|
dwv.i18nPage = function () { |
|
// get all elements |
|
var elements = document.getElementsByTagName("*"); |
|
// if the element defines data-i18n, replace its content with the tranlation |
|
for (var i = 0; i < elements.length; ++i) { |
|
if (typeof elements[i].dataset.i18n !== "undefined") { |
|
elements[i].innerHTML = dwv.i18n(elements[i].dataset.i18n); |
|
} |
|
} |
|
}; |
|
|
|
/** |
|
* Get the current locale resource path. |
|
* Warning: to be used once i18next is initialised. |
|
* @return {String} The path to the locale resource. |
|
*/ |
|
dwv.i18nGetLocalePath = function (filename) { |
|
var lng = i18next.language.substr(0, 2); |
|
return dwv.i18nLocalesPath + "/locales/" + lng + "/" + filename; |
|
}; |
|
|
|
/** |
|
* Get the current locale resource path. |
|
* Warning: to be used once i18next is initialised. |
|
* @return {String} The path to the locale resource. |
|
*/ |
|
dwv.i18nGetFallbackLocalePath = function (filename) { |
|
var lng = i18next.languages[i18next.languages.length-1].substr(0, 2); |
|
return dwv.i18nLocalesPath + "/locales/" + lng + "/" + filename; |
|
};
|
|
|