Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.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中简化基于条件的操作代码中获取“else”?_Javascript_Html - Fatal编程技术网

如何在JavaScript中简化基于条件的操作代码中获取“else”?

如何在JavaScript中简化基于条件的操作代码中获取“else”?,javascript,html,Javascript,Html,原始和丑陋的代码: const lang=navigator.language | | navigator.userLanguage; 如果lang.indexOfde==0 { window.location.href=https://gusbemacbe.github.io/suru-plus-folders/de/'; } ... 如果lang.indexOfes==0,则为else { window.location.href=https://gusbemacbe.github.io/s

原始和丑陋的代码:

const lang=navigator.language | | navigator.userLanguage; 如果lang.indexOfde==0 { window.location.href=https://gusbemacbe.github.io/suru-plus-folders/de/'; } ... 如果lang.indexOfes==0,则为else { window.location.href=https://gusbemacbe.github.io/suru-plus-folders/es/'; } 其他的 { window.location.href=https://gusbemacbe.github.io/suru-plus-folders/en/'; } 我简化为一个优雅的基于条件的操作:

const lang=navigator.language | | navigator.userLanguage; 常量url=https://gusbemacbe.github.io/suru-plus-folders/' 函数检测语言 { 让语言= { 'de':=>window.location.href=url+'de', 'es':=>window.location.href=url+'es', 'fr':=>window.location.href=url+'fr', 'it':=>window.location.href=url+'it', 'nl':=>window.location.href=url+'nl', 'pt-BR':=>window.location.href=url+'pt-BR', 'pt-pt':=>window.location.href=url+'pt-pt' } 返回语俚语; } 侦查郎; 问题是其他的,那就是如果没有其他语言我没有翻译网站,就需要触发到英语。我检查过我是否能用俚语回答?”en':=>window.location.href=url+'en',但我不确定它是否正确。我还考虑添加en':=>window.location.href=url+'en'以允许使用语言,但它必须是一个else。

不要重复你自己的想法。 这在编程中有一个名字:它是干式原理。让我们在这里少重复一点。单击“运行代码段”自行测试函数

函数检测朗朗{ //让我们将该字符串小写以规范化,这样我们就可以将其与其他字符串进行比较 lang=lang.toLowerCase const firstHalf=lang.split'-'[0] //新支持的语言?只需在此处添加即可。 const-supportedLanguages=['en','de','es','fr','it','nl','pt-br','pt-pt'] //如果supportedLanguages包含您的语言,请选择它 const finalLang=supportedLanguages.includelang?lang //否则,只检查上半场 :supportedLanguages.includefirsthalf?firstHalf //否则,请退回到英语 :‘恩’ //设置URL取消注释,这是针对代码段的 //window.location.href=url+finalLang //返回最后一个lang 返还财务 } console.logen=>,detectLangen console.logfr=>,detectLangfr console.logde-DE=>,detectLangde console.logpt-PT=>,detectLangpt console.logsw=>,detectLangsw仅在列表中显示de、fr等是不够的,因为navigator.language可以并且在大多数情况下会返回完整的区域设置代码,如de de、fr、fr等。因此,您必须检查完整代码,然后检查语言id

您可以拥有支持的语言/区域设置列表,并编写如下小函数:

const supportedLanguages = new Set([
    'en',
    'de',
    'es',
    'fr',
    'it',
    'nl',
    'pt-br',
    'pt-pt',
]);

function getLanguage() {
    let lang = (navigator.language || navigator.userLanguage).toLowerCase();

    // full locale matches?
    if (supportedLanguages.has(lang))
        return lang;
    
    // language matches?
    lang = lang.split('-')[0];
    if (supportedLanguages.has(lang))
        return lang;

    // no match, return the default
    return 'en';
}
剩下的很简单:

const url = '...'
window.location.href = url + getLanguage()

尽量不要重复代码,请查看此示例

 let lng = {'de':'de',
    'es':'es',
    'fr':'fr',
    'it':'it',
    'nl':'nl',
    'pt-BR':'pt-br'}

function lang(prop){
 let lang = lng.hasOwnProperty(prop) ? lng[prop] : lng['default'];
  console.log(lang)
  window.location.href = url + lang
}
 
lang('es');

很确定应该是语言[lang]?否则,即使不考虑elseAh,您的代码也无法工作。是的,语言[lang]已经是另一种语言了吗?这是否回答了您的问题。类似于返回语言[lang]| |语言[en],假设您将en添加到对象中。您是指const lang=navigator.language | | | | navigator.userLanguage | | en':=>window.location.href=url+'en'?lang代码似乎与url相同。在数组中分解?url+['de','es','fr','it','nl','pt BR','pt pt']。包括语言吗?朗:嗯,有个小问题。我在浏览器中将德语设置为默认语言。浏览器检测到de,并触发为/en/而不是/de/。看看@georg的评论,你说得对!给你,修好了。很好地利用了这套设备。