我想知道有什么不同,哪个是设置多语言javascript应用程序的最佳方法。我希望在一个文件中使用所有字符串,以便以后轻松更改字符串或添加更多语言。
日Thnx!
答案 0 :(得分:23)
你可以简单地制作一个大对象树:
var languages = {
english:{
Save:"Save"
},
german:{
Save:"Speichern"
}
};
在你的应用中:
var l = languages.german;
alert(l.Save); //Alerts "Speicher"
这个系统的好处是你可以让子对象将一些值组合在一起。
答案 1 :(得分:4)
无论你做什么,最重要的是将你的代码与文本分开。
如果代码和文本混合在一起,则无法进行维护,您很快就会放弃它。
翻译文本必须易于扫描,以便翻译人员可以翻译文本。然后,您应该可以方便地插入翻译。
我们使用包含字符串映射的JS文件。我们有一个简单的Python脚本,可以从中提取可翻译的字符串。相同的脚本还构建输出JS文件,其中包含与已翻译字符串相同的标签。
结果是:
答案 2 :(得分:1)
我喜欢使用“语言字典数组”,您可以使用JSON或简单数组。
这很容易实现:
var lang = 0 //0 = english, 1=french
var phrases=[]
phrases['cancel'] = "cancel,annuler".split(",")
alert(phrases['cancel'][lang])
答案 3 :(得分:1)
这是我根据此问题中接受的答案处理语言翻译的功能:
/**
Core script to handle language translations
**/
var Language = function() {
var activeLanguage = 'en';
var languagePack = {
'en': {
'hello-world': 'Hello World',
'show-variants': 'Show Variants',
'hide-variants': 'Hide Variants'
},
'fr': {
'hello-world': 'Bonjour World',
'show-variants': 'représentent des variantes',
'hide-variants': 'masquer variantes'
}
}
var translate = function(key, language)
{
if (typeof languagePack[language] == 'undefined')
{
return;
}else {
return languagePack[language][key];
}
};
return {
init: function(language)
{
activeLanguage = language;
},
getString: function(key, defaultText)
{
var text = translate(key, activeLanguage);
if (typeof(text) === 'undefined' || text.length == 0 || text == null)
{
text = defaultText;
}
return text;
}
}
}();
然后在公共页面代码中初始化它,其中${language.language}
是jsp代码,用于从服务器端配置设置语言。
<script type="text/javascript">
jQuery(document).ready(function() {
Language.init('${language.language}');
});
</script>
然后,无论何时需要使用消息
Language.getString('hello-world', 'Hi World');