javascript - 如何使用javascript访问对象数组

标签 javascript json internationalization

console.log (dict) 会给你

{"click here:":{"message":"点击这里"},"apply":{"message":"应用"},"翻译测试!":{"message":"js翻译示例!"},"tabLanding":"欢迎","tabSetup":{"message":"安装"}}

我希望 tabSetup 在 html 中看起来像安装 这是 html 代码:

<li class="tab_setup"><a href="#" i18n="tabSetup"></a></li>

我看到的是它没有正确显示,只是显示为 [object Object] 应该显示为安装

这是我的 java 脚本。谢谢

 var dict = {};
    var systemLang = navigator.language.toLowerCase().slice(0,2);
    $(function () {
      registerWords();
      switch(getCookieVal("lang")) {
        case "en" :
          setLanguage("en");
          break
        case "zh" :
          setLanguage("zh");
          break
        default:
          setLanguage(systemLang);
      }
      console.log (dict);

      console.log(JSON.stringify(dict));


    // 切换语言事件
      $("#enBtn").bind("click", function () {
        setLanguage("en");
      });

      $("#zhBtn").bind("click", function () {
        setLanguage("zh");
      });

      // $("#applyBtn").bind("click", function () {
      //   alert(__tr("a translation test!"));
      // });
    });

    function setLanguage(lang) {
      setCookie("lang=" + lang + "; path=/;");
      translate(lang);
    }

    function getCookieVal(name) {
      var items = document.cookie.split(";");
      for (var i in items) {
        var cookie = $.trim(items[i]);
        var eqIdx = cookie.indexOf("=");
        var key = cookie.substring(0, eqIdx);
        if (name == $.trim(key)) {
          return $.trim(cookie.substring(eqIdx + 1));
        }
      }
      return null;
    }

    function setCookie(cookie) {
      var Days = 30; //此 cookie 将被保存 30 天
      var exp = new Date(); //new Date("December 31, 9998");
      exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
      document.cookie = cookie+ ";expires=" + exp.toGMTString();
    }

    function translate(lang) {
      if(sessionStorage.getItem(lang + "Data") != null){
        dict = JSON.parse(sessionStorage.getItem(lang + "Data"));
      }else{
        loadDict();
      }

      $("[i18n]").each(function () {
        switch (this.tagName.toLowerCase()) {
          case "input":
            $(this).val(__tr($(this).attr("i18n")));
            break;
          default:
            $(this).text(__tr($(this).attr("i18n")));
        }
      });
    }

    function __tr(src) {
      return (dict[src] || src);
    }

    function loadDict() {
      var lang = (getCookieVal("lang") || "en");
      $.ajax({
        async: false,
        type: "GET",
        url: "/lang/"+lang + ".json",
        success: function (msg) {
          dict = msg;
          sessionStorage.setItem(lang + 'Data', JSON.stringify(dict));
        }
      });

    }
    // 遍历所有lang属性的标签赋值
    function registerWords() {

        $('[i18n]:not(.i18n-replaced').each(function() {
            var element = $(this);

            element.html(translate(element.attr('i18n')));
            element.addClass('i18n-replaced');

      });
    }

如果 json 文件像“tabSetup”:“设置”,它就可以工作。 .如果像“tabSetup”这样的 json 文件不起作用:{“消息”:“设置”

最佳答案

函数__tr有错误,这样修复

function __tr(src) {
    return (dict[src].message || src);
}

关于javascript - 如何使用javascript访问对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51271740/

相关文章:

Java 属性 : how to escape # (hash)

javascript - 在 Google Maps V3 上选择多边形

javascript - 如何让 Magnific 弹出窗口与 animate.css 一起使用?

javascript - 从数组动态创建Json文件

arrays - 从 NodeJS 中的复杂 JSON 字符串获取值

ruby-on-rails - 纯逻辑 i18n?

javascript - 单击后 Fancybox 删除蓝色轮廓

javascript - dojo - 声明函数

json - JOLT 转换 - 删除 JSON 数组中的空节点

templates - playframework : i18n + scala