我可以动态翻译一个来自JSON文件的字符串吗?

时间:2019-07-04 15:07:54

标签: jquery json translation

我使用了jquery-lang-js插件来动态翻译网页的某些元素,并且可以正常工作。更具体地说,我可能会翻译HTML文件中包含的每个元素。

我编写了一个回调函数以在需要时显示JSON文件的结果:

               for (let i = 0; i < lowCostHotels.LOW_COST.length; i++) {
                var entry = lowCostHotels.LOW_COST[i];                    
                if (entry.city == inputCity) {    
                    $("#tbody2").append("<tr><td>" + entry.name() </td></tr>");
                }
            }
        }       
    });
};

显示的结果示例为:

  

第22腿-西萨(Passo della Cisa)-蓬特雷莫利(Pontremoli)

对应于第一个<td>

我想替代

  

“腿”

  

“ Etape”

这就是说,我要转换JSON文件中包含的字符串的单个部分:

{
  "legs": [
    {
      "name": "Leg 22 - Passo della Cisa - Pontremoli",
      "state": "Italy",
      "region": "Tuscany",
      "city": "Groppoli (Mulazzo)"
    },
    {
      "name": "Leg 22 - Passo della Cisa - Pontremoli",
      "state": "Italy",
      "region": "Tuscany",
      "city": "Groppodalosio"
    }
     ]
}

我想对50个<tr>中的每一个都这样做。

有什么技巧可以轻松做到这一点,还是应该编写其他JSON文件?

1 个答案:

答案 0 :(得分:0)

首先,首先要使用forEach而不是for。始终使用由js对象(例如数组和字符串)本地提供的帮助程序功能。它们速度更快,读取时间更短,写入时间更少。另外,如果您使用的是ES6,还可以查看箭头功能。

   for (let i = 0; i < lowCostHotels.LOW_COST.length; i++) {
      var entry = lowCostHotels.LOW_COST[i];                    
      if (entry.city == inputCity) {    
          $("#tbody2").append("<tr><td>" + entry.name() </td></tr>");
      }
    }

成为:

lowCostHotels.LOW_COST.forEach(function(entry) {
  if (entry.city == inputCity) {    
    $("#tbody2").append("<tr><td>" + entry.name() </td></tr>");
  }
});

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

然后,如果您只想用Etape替换Leg:

lowCostHotels.LOW_COST.forEach(function(entry) {
  if (entry.city == inputCity) {    
    $("#tbody2").append("<tr><td>" + entry.name().replace("Leg", "Etape") </td></tr>");
  }
});

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

但是您几乎可以在此处手动翻译/更改JSON。如果您使用的翻译方法无法正确翻译所有内容,建议您使用另一种翻译方法。另一方面,如果您只需要快速修复一些遗漏的单词,则只需用replace()即可解决问题。