这是我的查询代码
function translateTo(lang) {
if (TRAINER_MULTILANG > 0) {
$.getScript("js/lang/trainer.lang."+lang+".js")
.done(function(script,textStatus) {
pushLang(I18N);
TRAINER_CURRENT_LANG = lang;
})
.fail(function( jqxhr, settings, exception ) {
console.log("[i18n] Failed to load langfile. Loading default () instead...");
$.getScript("js/lang/trainer.lang."+TRAINER_DEFAULT_LANG+".js")
.done(function(script,textStatus) {
pushLang(I18N);
TRAINER_CURRENT_LANG = TRAINER_DEFAULT_LANG;
});
});
} else {
$.getScript("js/lang/trainer.lang."+TRAINER_DEFAULT_LANG+".js")
.done(function(script,textStatus) {
pushLang(I18N);
});
}
}
function pushLang(data) {
$('[data-i18n="true"]').each(function (e) {
$(this).html(data[$(this).html()]);
});
}
我的HTML看起来像:
<span data-i18n="true">LANT_LANG_CONSTANT1</span>
<span data-i18n="true">LANT_LANG_CONSTANT2</span>
和js / lang / trainer.lang ...文件看起来像:
var I18N = {
LANT_LANG_CONSTANT1: 'etc'
}
问题是我的函数translateTo只运行一次,就在用js文件包含这个函数之后。只有当我重新更新内容时,文本才会发生变化。有可能做点什么吗?
答案 0 :(得分:2)
问题是你的lang常量html字符串被替换为翻译后的文本。 如果将常量保存在数据属性中,则可以解决该问题。所以:
<span data-i18n="true" data-constant="LANT_LANG_CONSTANT1"></span>
<span data-i18n="true" data-constant="LANT_LANG_CONSTANT2"></span>
然后在你的pushLang:
function pushLang(data) {
$('[data-i18n="true"]').each(function (e) {
$(this).html(data[$(this).data('constant')]);
});
}
编辑:
如果您不想更改所有html常量,可以在第一次调用pushLang时将常量保存到数据对象中:
function pushLang(data) {
$('[data-i18n="true"]').each(function (e) {
if(!$(this).data('constant')){
$(this).data('constant', $(this).html());
}
$(this).html(data[$(this).data('constant')]);
});
}