Javascript 为什么这个带有jQuery tkey属性的JS代码为不同的语言提供不同的html字符串';不行?

Javascript 为什么这个带有jQuery tkey属性的JS代码为不同的语言提供不同的html字符串';不行?,javascript,jquery,html,frontend,Javascript,Jquery,Html,Frontend,我一直在构建我的第一个html组合,作为一名专业翻译,我认为为它提供多语言支持会很有趣。我在网上(更具体地说是堆栈溢出)搜索选项,最终找到了这个解决方案: lang.js: var langs = ['en', 'pt']; var langCode = ''; var langJS = null; var translate = function (jsdata) { $("[tkey]").each (function (index) { var s

我一直在构建我的第一个html组合,作为一名专业翻译,我认为为它提供多语言支持会很有趣。我在网上(更具体地说是堆栈溢出)搜索选项,最终找到了这个解决方案:

lang.js:

var langs = ['en', 'pt'];
var langCode = '';
var langJS = null;


var translate = function (jsdata)
{   
    $("[tkey]").each (function (index)
    {
        var strTr = jsdata [$(this).attr ('tkey')];
        $(this).html (strTr);
        console.log('strTr is: '+strTr)
    });
}


langCode = navigator.language.substr (0, 2);
console.log('langCode is: '+langCode)

if (langCode in langs)
    $.getJSON('lang/'+langCode+'.json', translate);
else
    $.getJSON('lang/pt.json', translate);
html代码段:

<div class="odd" id="SkillsLanguages">
    <h1 tkey="skills-lang"></h1>
</div>
在我看来,它应该可以工作,但我只是从webdev开始,我不知道为什么它不能

输出只是空文本,没有任何字符串。CSS的东西呈现得很好,div、背景色、引导列等等,但是网页上没有文本

请注意,我不是在寻找为我的html网站提供多语言支持的替代解决方案(找到了两种不同的实现,我会在适当的时候研究它们),而是试图理解为什么这段特定代码不起作用,以及如果可能的话,应该修复什么以使它起作用

我已经尝试为这个问题提供足够的信息和上下文,但是如果您还需要什么,我很乐意提供更多的代码片段和/或信息


感谢您的帮助。

删除JSON文件中最后一个对象/数组属性后的任何尾随逗号后,
if(langs中的langCode)
使用
中的
运算符时出现问题。语言代码是
langs
数组中的值,而不是数组的命名属性。而是检查
langCode
是否在数组中:

//   ...

if ($.inArray( langCode, langs) >= 0) {
    $.getJSON('lang/'+langCode+'.json', translate);

}
else {
    $.getJSON('lang/pt.json', translate);
}

是的,我刚刚在以下网站上试用了一个修改过的版本:

问题发生在线路上:

if (langcode in langs)
我删除了这行代码,只需调用translate(pt),它就可以工作了。
查看js fiddle,您将看到console.log输出。

因此,我在html文件中使用
https://code.jquery.com/jquery-3.1.1.slim.min.js
并且它不支持
.getJSON()
方法。将其更改为
https://code.jquery.com/jquery-3.1.1.min.js
我的html解决了这个问题。感谢所有响应者,我发现了脚本中的其他错误。

控制台中有错误吗?您是否尝试过在不同点进行console.logging以查看实际情况?打印错误。删除pt.json中的尾随逗号对我很有效。允许在对象文本中的最后一个属性后添加尾随逗号是JavaScript的最新添加,在JSON中无效。不,我没有。不确定要记录什么,也不确定要在代码中的何处包含它。我想这些可能有用,例如
console.log('langCode是:'+langCode)
console.log('strTr是:'+strTr)
关于带有尾随逗号的印刷问题,这实际上是我的问题总结中的一个印刷错误。我的原始json文件有多个条目,最后一个条目没有尾随逗号。我将更新这个问题,以更恰当地反映我的json文件是如何设置的。虽然它没有解决问题,但仔细阅读控制台我发现了它。原来我在html文件上调用了一个缩小版的jQuery,并对其进行了更改以解决问题。我喜欢
$的方式。inArray
不会像您预期的那样返回bool。必须检查文档以确保你没有发疯:-@chicobaptista-此修复解决了一个真正的问题。如果没有它,我的浏览器的语言(“en”)不会被检测到,默认情况下会显示葡萄牙语翻译。我使用jQuery3.2.1进行了测试,所以不知道您还有另一个问题:-)
if (langcode in langs)