Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有不同语言选项的数据对象。Javascript实现_Javascript_Jquery_Arrays_Multidimensional Array - Fatal编程技术网

具有不同语言选项的数据对象。Javascript实现

具有不同语言选项的数据对象。Javascript实现,javascript,jquery,arrays,multidimensional-array,Javascript,Jquery,Arrays,Multidimensional Array,我有一个奇怪的例子,当我不得不使用javascript根据页面语言管理一些小文本时。假设您需要根据HTMLlang属性替换模板的某些部分。因此,我创建了多维数据对象,并决定采用以下方法。一切正常,但我觉得这不是最佳做法,也许我可以避免使用开关: jsbin版本: $(函数(){ var lang=$('html').attr('lang'), 文本; var obj={ "嗯":{ “标题”:“标题英语”, “url”:“en.html” }, “fr”:{ “标题”:“法语标题”, “url”

我有一个奇怪的例子,当我不得不使用javascript根据页面语言管理一些小文本时。假设您需要根据HTMLlang属性替换模板的某些部分。因此,我创建了多维数据对象,并决定采用以下方法。一切正常,但我觉得这不是最佳做法,也许我可以避免使用开关:

jsbin版本:

$(函数(){
var lang=$('html').attr('lang'),
文本;
var obj={
"嗯":{
“标题”:“标题英语”,
“url”:“en.html”
},
“fr”:{
“标题”:“法语标题”,
“url”:“fr.html”,
}               
};
开关(lang){
案例“fr”:
text=[obj.fr.title,obj.fr.url];
打破
违约:
text=[obj.en.title,obj.en.url];
}
$('body')。前缀(“”);
});
问题是:只要我有lang属性值(语言),也许我可以避免使用switch和replicate case,相反,我可以实现lang值作为变量来访问数据对象,类似这样的
[obj.lang.title,obj.lang.url]当然在我的情况下不起作用

如果您有任何意见,我将不胜感激。谢谢。

使用括号表示法

text = [obj[lang].title,obj[lang].url];
我会删除该数组,然后将title/url放入字符串中

var data = obj[lang];
$('body').prepend('<a href="' + data.url + '">' + data.text + '</a>');
var data=obj[lang];
$('body')。前缀(“”);
使用括号表示法

text = [obj[lang].title,obj[lang].url];
我会删除该数组,然后将title/url放入字符串中

var data = obj[lang];
$('body').prepend('<a href="' + data.url + '">' + data.text + '</a>');
var data=obj[lang];
$('body')。前缀(“”);

为了避免使用
开关
语句,可以设置如下默认值:

var lang = $('html').attr('lang') || 'en';
$('body').prepend('<a href="' + obj[lang].url + '">' + obj[lang].title + '</a>');
这意味着
en
是默认值,如果设置了
lang
将被覆盖。然后可以使用括号表示法访问对象,如下所示:

var lang = $('html').attr('lang') || 'en';
$('body').prepend('<a href="' + obj[lang].url + '">' + obj[lang].title + '</a>');
$('body')。前置('');

为了避免使用
开关
语句,可以设置如下默认值:

var lang = $('html').attr('lang') || 'en';
$('body').prepend('<a href="' + obj[lang].url + '">' + obj[lang].title + '</a>');
这意味着
en
是默认值,如果设置了
lang
将被覆盖。然后可以使用括号表示法访问对象,如下所示:

var lang = $('html').attr('lang') || 'en';
$('body').prepend('<a href="' + obj[lang].url + '">' + obj[lang].title + '</a>');
$('body')。前置('');

我会将本地化对象分配给另一个变量,然后从那里开始工作。这样,所有本地化代码都可以引用同一个对象,而不必处理语言逻辑,如果需要,您可以稍后切换到外部本地化文件

$(function(){

  var lang = $('html').attr('lang') || 'en',
        text;


  var obj = {
    'en' : {
      'title' : 'Title english',
      'url' : 'en.html'   
    },
    'fr' : {
      'title' : 'Title french',
      'url' : 'fr.html',   
    }               
  };


  var translations = obj[lang];


  $('body').prepend('<a href="'+translations.url+'">'+translations.text+'</a>');

});
$(函数(){
var lang=$('html').attr('lang')| |'en',
文本;
var obj={
"嗯":{
“标题”:“标题英语”,
“url”:“en.html”
},
“fr”:{
“标题”:“法语标题”,
“url”:“fr.html”,
}               
};
变量转换=对象[lang];
$('body')。前缀(“”);
});

而且,正如Rory提到的,设置默认值是一个非常好的主意。

我会将本地化对象分配给另一个变量,并从那里开始工作。这样,所有本地化代码都可以引用同一个对象,而不必处理语言逻辑,如果需要,您可以稍后切换到外部本地化文件

$(function(){

  var lang = $('html').attr('lang') || 'en',
        text;


  var obj = {
    'en' : {
      'title' : 'Title english',
      'url' : 'en.html'   
    },
    'fr' : {
      'title' : 'Title french',
      'url' : 'fr.html',   
    }               
  };


  var translations = obj[lang];


  $('body').prepend('<a href="'+translations.url+'">'+translations.text+'</a>');

});
$(函数(){
var lang=$('html').attr('lang')| |'en',
文本;
var obj={
"嗯":{
“标题”:“标题英语”,
“url”:“en.html”
},
“fr”:{
“标题”:“法语标题”,
“url”:“fr.html”,
}               
};
变量转换=对象[lang];
$('body')。前缀(“”);
});

而且,正如Rory所提到的,设置默认值是一个非常好的主意。

在这种情况下,您实际上不需要数组:

$('body').prepend('<a href="'+obj[lang].url+'">'+obj[lang].title+'</a>');
$('body')。前置('');

在这种情况下,您实际上不需要阵列:

$('body').prepend('<a href="'+obj[lang].url+'">'+obj[lang].title+'</a>');
$('body')。前置('');

要避免使用
开关
语句,您只需检查属性语言在对象中是否明显,否则请选择英语:

var lang = $('html').attr('lang');
if (! (lang in obj))
    lang = "en";

// then:
'<a href="' + obj[lang].url + '">' + obj[lang].title + '</a>'
var lang=$('html').attr('lang');
如果(!(对象中的lang))
lang=“en”;
//然后:
''
或者,也许更简单,用短一点的

var localisation = obj[ $('html').attr('lang') ] || obj.en;

'<a href="' + localisation.url + '">' + localisation.title + '</a>'
var localization=obj[$('html').attr('lang')]|obj.en;
''

要避免使用
开关
语句,您只需检查属性语言在对象中是否明显,否则请选择英语:

var lang = $('html').attr('lang');
if (! (lang in obj))
    lang = "en";

// then:
'<a href="' + obj[lang].url + '">' + obj[lang].title + '</a>'
var lang=$('html').attr('lang');
如果(!(对象中的lang))
lang=“en”;
//然后:
''
或者,也许更简单,用短一点的

var localisation = obj[ $('html').attr('lang') ] || obj.en;

'<a href="' + localisation.url + '">' + localisation.title + '</a>'
var localization=obj[$('html').attr('lang')]|obj.en;
''

谢谢你,Rory,尽管我无法让它与default en一起工作。例如,如果我将lang=“fr”更改为lang=“dfgdfg”等不存在的语言,则不会使用en文本。只是没有定义。@devjs11这很奇怪。尝试使用
var lang=$('html').prop('lang')| |'en'相反。好的,只有当lang属性被省略时,它才起作用,但如果lang标记的值在数据对象中不存在,它就不起作用。这能解决吗?谢谢。如果(obj[lang]==undefined){lang='en';}谢谢你,Rory,虽然我不能用默认的en来处理它,但是用下面的代码修复了它。例如,如果我将lang=“fr”更改为lang=“dfgdfg”等不存在的语言,则不会使用en文本。只是没有定义。@devjs11这很奇怪。尝试使用
var lang=$('html').prop('lang')| |'en'相反。好的,只有当lang属性被省略时,它才起作用,但如果lang标记的值在数据对象中不存在,它就不起作用。这能解决吗?谢谢。如果(obj[lang]==undefined){lang='en';}