【发布时间】:2015-04-04 12:05:27
【问题描述】:
我使用此代码在线获取我的 json 文件并将其转换为网站文本(翻译文件)。
browser = {
i18n: {
getMessage: function(e, t) {
var n;
if (typeof browser.i18n.strings === "undefined") {
var r = [navigator.language.replace("-", "_")];
if (navigator.language.length > 2) {
r.push(navigator.language.substring(0, 2))
}
if (navigator.language !== "en") {
r.push("en")
}
browser.i18n.strings = {};
var i = function(e) {
var t = new XMLHttpRequest;
t.open("GET", "https://www.website.com/locales/" + e + "/translation.json", true);
t.onreadystatechange = function() {
if (this.readyState === 4 && this.responseText) {
var e = JSON.parse(this.responseText);
var t;
for (t in e) {
if (!browser.i18n.strings[t]) {
var n = e[t].message;
var r = e[t].placeholders;
if (r) {
var i;
for (i in r) {
var s = new RegExp("\\$" + i + "\\$");
n = n.replace(s, r[i].content)
}
}
browser.i18n.strings[t] = n
}
}
}
};
try {
t.send()
} catch (n) {}
};
for (n = 0; n < r.length; n++) {
i(r[n])
}
}
if (typeof t === "string") {
t = [t]
} else if (!t) {
t = []
}
var s = browser.i18n.strings[e].replace(/\$\$/g, "@@@@");
for (n = 0; n < t.length; n++) {
var o = new RegExp("(?!\\$\\$)\\$" + (n + 1), "g");
s = s.replace(o, t[n])
}
return s.replace(/\@\@\@\@/g, "$$")
}
}
};
var items = document.querySelectorAll("[data-i18n]");
for (i = 0; i < items.length; i++) {
var translation = browser.i18n.getMessage(items[i].getAttribute("data-i18n"));
try {
if (items[i].value === "i18n") {
items[i].value = translation
} else {
items[i].innerHTML = translation
}
} catch (e) {}
}
在此之前在 Google Chrome 和 Opera 中运行良好。现在它不起作用。 它总是向我显示这个错误:
无法读取未定义的“替换”属性
知道如何解决这个问题吗?
更新: 这里是(翻译)json文件:
{
"uparrow":{
"message":"Up"
},
"downarrow":{
"message":"Down"
},
"nextbutton":{
"message":"Next"
},
"slide1welcome":{
"message":"Welcome User"
}
}
阅读此 HTML 代码 ...TEXT HERE... 谢谢,
【问题讨论】:
-
在替换之前添加一个调试器语句,并在每个阶段检查
n的值。在某些时候它变得不确定。防止它阻止错误发生。 -
这是代码的缩小版吗?你有机会发布原件吗?
-
这是完整的 Javascript 代码,在我的 HTML 页面中,我得到了示例 下一个按钮
-
您在哪一行收到此错误?
-
在此代码部分 "var s = browser.i18n.strings[e].replace(/\$\$/g, "@@@@");"
标签: javascript xml json html xmlhttprequest