mirror of
https://github.com/genxium/DelayNoMore
synced 2024-12-26 11:48:56 +00:00
98 lines
3.1 KiB
JavaScript
98 lines
3.1 KiB
JavaScript
|
const Polyglot = require('polyglot.min');
|
||
|
|
||
|
let polyInst = null;
|
||
|
if (!window.i18n) {
|
||
|
window.i18n = {
|
||
|
languages: {},
|
||
|
curLang:''
|
||
|
};
|
||
|
}
|
||
|
|
||
|
if (CC_EDITOR) {
|
||
|
Editor.Profile.load('profile://project/i18n.json', (err, profile) => {
|
||
|
window.i18n.curLang = profile.data['default_language'];
|
||
|
if (polyInst) {
|
||
|
let data = loadLanguageData(window.i18n.curLang) || {};
|
||
|
initPolyglot(data);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function loadLanguageData (language) {
|
||
|
return window.i18n.languages[language];
|
||
|
}
|
||
|
|
||
|
function initPolyglot (data) {
|
||
|
if (data) {
|
||
|
if (polyInst) {
|
||
|
polyInst.replace(data);
|
||
|
} else {
|
||
|
polyInst = new Polyglot({ phrases: data, allowMissing: true });
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
/**
|
||
|
* This method allow you to switch language during runtime, language argument should be the same as your data file name
|
||
|
* such as when language is 'zh', it will load your 'zh.js' data source.
|
||
|
* @method init
|
||
|
* @param language - the language specific data file name, such as 'zh' to load 'zh.js'
|
||
|
*/
|
||
|
init (language) {
|
||
|
if (language === window.i18n.curLang) {
|
||
|
return;
|
||
|
}
|
||
|
let data = loadLanguageData(language) || {};
|
||
|
window.i18n.curLang = language;
|
||
|
initPolyglot(data);
|
||
|
this.inst = polyInst;
|
||
|
},
|
||
|
/**
|
||
|
* this method takes a text key as input, and return the localized string
|
||
|
* Please read https://github.com/airbnb/polyglot.js for details
|
||
|
* @method t
|
||
|
* @return {String} localized string
|
||
|
* @example
|
||
|
*
|
||
|
* var myText = i18n.t('MY_TEXT_KEY');
|
||
|
*
|
||
|
* // if your data source is defined as
|
||
|
* // {"hello_name": "Hello, %{name}"}
|
||
|
* // you can use the following to interpolate the text
|
||
|
* var greetingText = i18n.t('hello_name', {name: 'nantas'}); // Hello, nantas
|
||
|
*/
|
||
|
t (key, opt) {
|
||
|
if (polyInst) {
|
||
|
return polyInst.t(key, opt);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
inst: polyInst,
|
||
|
|
||
|
updateSceneRenderers () { // very costly iterations
|
||
|
let rootNodes = cc.director.getScene().children;
|
||
|
// walk all nodes with localize label and update
|
||
|
let allLocalizedLabels = [];
|
||
|
for (let i = 0; i < rootNodes.length; ++i) {
|
||
|
let labels = rootNodes[i].getComponentsInChildren('LocalizedLabel');
|
||
|
Array.prototype.push.apply(allLocalizedLabels, labels);
|
||
|
}
|
||
|
for (let i = 0; i < allLocalizedLabels.length; ++i) {
|
||
|
let label = allLocalizedLabels[i];
|
||
|
if(!label.node.active)continue;
|
||
|
label.updateLabel();
|
||
|
}
|
||
|
// walk all nodes with localize sprite and update
|
||
|
let allLocalizedSprites = [];
|
||
|
for (let i = 0; i < rootNodes.length; ++i) {
|
||
|
let sprites = rootNodes[i].getComponentsInChildren('LocalizedSprite');
|
||
|
Array.prototype.push.apply(allLocalizedSprites, sprites);
|
||
|
}
|
||
|
for (let i = 0; i < allLocalizedSprites.length; ++i) {
|
||
|
let sprite = allLocalizedSprites[i];
|
||
|
if(!sprite.node.active)continue;
|
||
|
sprite.updateSprite(window.i18n.curLang);
|
||
|
}
|
||
|
}
|
||
|
};
|