我正在尝试创建一个多语言的javascript对象。就像是:
function language(lang){
this.error = {
fname : function(lang){
var fname = {
vn : "Tên",
en : "First Name",
};
return fname.lang;
},
};
}
当我试图打电话给我时fname
,
var lang = new language("en");
console.log(lang.error.fname);
原来是function(lang){var fname = {vn : "Tên",en : "First Name",};return fname.lang;}
而不是First Name
。我的代码有什么问题?我怎样才能fname
正确地获得价值呢?
我是JS的新手。如果有人帮助我解决此问题,我将不胜感激。
作为快速解决方案,您需要[]
在返回值时使用语法,并lang
从fname()
函数中删除参数,因此它变为:
function language(lang){
this.error = {
fname : function(){
var fname = {
vn : "Tên",
en : "First Name",
};
return fname[lang];
},
};
}
language = new language('en');
console.log( language.error.fname() );
这行得通,但是它不是一个很好的结构。看一下获得翻译的语法,这看起来很奇怪,为什么要有fname()
函数呢?还要查看翻译的定义方式,将它们与许多JavaScript函数和逻辑混合在一起,这使其难以维护,并且任何人都不可能添加不熟悉JavaScript的翻译。
让我们看一个不同的结构:
function language(lang){
var translations = {
vn : {
error_fname : "Tên",
},
en : {
error_fname : 'First Name',
error_lname : 'Last Name'
}
};
var currentLang = 'en'; // default
function get(key){
return translations[currentLang][key];
}
// public pointers
this.get = get;
// constructor
if(typeof lang != 'undefined' && translations[lang]){
currentLang = lang;
}
}
var language = new language('en');
console.log( language.get('error_fname') );
首先看一下翻译的定义。非常清楚,en
所有英语翻译都有一个对象。所有的英语翻译都包含在en
对象中-有意义吗?翻译中没有混入JavaScript逻辑,这意味着您可以执行诸如使用JSON结构之类的操作,而JSON结构可以由不熟悉JavaScript的翻译人员读取。您甚至可以为翻译人员提供一个基本.ini
文件,并由于其简单性而将其转换为此JavaScript / JSON结构。
还有其他好处,例如翻译被封装,并且不经过该get()
方法就不能直接访问。
这是另一种实现方法,它使用.
语法来获取翻译:
function language(lang){
var translations = {
vn : {
error_fname : "Tên",
},
en : {
error_fname : 'First Name',
error_lname : 'Last Name'
}
};
var currentLang = 'en'; // default
if(typeof lang != 'undefined' && translations[lang]){
currentLang = lang;
}
return translations[currentLang];
}
var language = language('en');
console.log( language.error_fname );
没有get()
您可能会或不喜欢的功能。就个人而言,由于封装和OOP风格,我更喜欢其他方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句