jiti-meet/modules/translation/translation.js

70 lines
1.5 KiB
JavaScript
Raw Normal View History

/* @flow */
2017-03-01 02:55:12 +00:00
import $ from 'jquery';
import jqueryI18next from 'jquery-i18next';
import { i18next } from '../../react/features/base/i18n';
2017-03-01 02:55:12 +00:00
type DocumentElement = {
lang: string
}
2017-03-01 02:55:12 +00:00
/**
* Notifies that the {@link i18next} instance has finished its initialization.
*
* @returns {void}
* @private
*/
function _onI18nInitialized() {
const documentElement: DocumentElement
= document.documentElement || {};
2017-03-01 02:55:12 +00:00
$('[data-i18n]').localize();
documentElement.lang = i18next.language;
}
/**
*
*/
2016-10-31 22:16:30 +00:00
class Translation {
/**
*
*/
constructor() {
2017-03-07 22:46:37 +00:00
jqueryI18next.init(i18next, $, { useOptionsAttr: true });
if (i18next.isInitialized) {
2017-03-01 02:55:12 +00:00
_onI18nInitialized();
} else {
2017-03-01 02:55:12 +00:00
i18next.on('initialized', _onI18nInitialized);
}
i18next.on('languageChanged', _onI18nInitialized);
2016-10-31 22:16:30 +00:00
}
/**
*
*/
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>`;
}
/**
*
*/
2017-03-01 02:55:12 +00:00
translateElement(selector: Object, options: Object) {
// XXX i18next expects undefined if options are missing.
selector.localize(options ? options : undefined);
}
2016-10-31 22:16:30 +00:00
}
export default new Translation();