70 lines
1.5 KiB
JavaScript
70 lines
1.5 KiB
JavaScript
/* @flow */
|
|
|
|
import $ from 'jquery';
|
|
import jqueryI18next from 'jquery-i18next';
|
|
|
|
import { i18next } from '../../react/features/base/i18n';
|
|
|
|
|
|
type DocumentElement = {
|
|
lang: string
|
|
}
|
|
|
|
/**
|
|
* Notifies that the {@link i18next} instance has finished its initialization.
|
|
*
|
|
* @returns {void}
|
|
* @private
|
|
*/
|
|
function _onI18nInitialized() {
|
|
|
|
const documentElement: DocumentElement
|
|
= document.documentElement || {};
|
|
|
|
$('[data-i18n]').localize();
|
|
documentElement.lang = i18next.language;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class Translation {
|
|
/**
|
|
*
|
|
*/
|
|
constructor() {
|
|
jqueryI18next.init(i18next, $, { useOptionsAttr: true });
|
|
|
|
if (i18next.isInitialized) {
|
|
_onI18nInitialized();
|
|
} else {
|
|
i18next.on('initialized', _onI18nInitialized);
|
|
}
|
|
|
|
i18next.on('languageChanged', _onI18nInitialized);
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
generateTranslationHTML(key: string, options: Object) {
|
|
const optAttr
|
|
= options ? ` data-i18n-options='${JSON.stringify(options)}'` : '';
|
|
|
|
// XXX i18next expects undefined if options are missing.
|
|
const text = i18next.t(key, options ? options : undefined);
|
|
|
|
return `<span data-i18n="${key}"${optAttr}>${text}</span>`;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
translateElement(selector: Object, options: Object) {
|
|
// XXX i18next expects undefined if options are missing.
|
|
selector.localize(options ? options : undefined);
|
|
}
|
|
}
|
|
|
|
export default new Translation();
|