我是一名 JavaScript 新手,通过工作来学习pure计算数学函数的 JavaScript“项目”。一切都运转良好。现在,作为进一步的一步,我想让消息传递多语言。该代码应该能够在运行时加载适当的语言文件。对于动态加载问题,我在网页上阅读并找到了解决方案,例如this one.
在编写动态代码之前,我静态加载了它,测试代码运行良好。我寻求帮助的代码只是加载“脚本”元素的细微差别。
我遇到问题的代码是this.getString功能,无法访问de语言文件中的元素。在行console.log(eval(语言,标签));,我收到错误消息“未捕获的引用错误:de 未定义".
//File: Utils/Lang/js/FileUtils.js
function Language(language) {
var __construct = function(dynamicLoad) {
if (typeof language == 'undefined') {
language = "en";
}
// Load the proper language file:
loadFile("js/resources/lang.de.js");
return;
} ()
this.getString = function(tag, strDefault) {
console.log("getString(" + tag + ", " + strDefault + "): ");
console.log("getString(...): document = " + document);
console.log("getString(...): eval(" + language + ", " + tag + ") = ");
console.log(eval(language, tag));
var strReturn = eval('eval(language).' + tag);
if (typeof strReturn != 'undefined') {
return strReturn;
} else {
return (typeof strDefault != 'undefined')
? strDefault
: eval('en.' + tag);
}
}
}
不包括有效的静态测试代码,我可以在其中访问 de 元素。
我的问题:如何正确加载语言文件,以便de标签可以访问吗?
感谢您的帮助!
//File: Utils/Files/js/FileUtils.js
function loadFile(filepathname) {
var reference = document.createElement('script');
reference.setAttribute("type", "text/javascript");
reference.setAttribute("src", filepathname);
if (typeof reference != 'undefined') {
document.getElementsByTagName("head")[0].appendChild(reference);
}
console.log("loadFile(\"" + filepathname + "\"): document = " + document);
}
//File: Utils/Lang/js/resources/lang.de.js:
de = {
pleaseWait: "Bitte warten..."
};
//File: Utils/Lang/js/resources/lang.en.js
en = {
pleaseWait: "Please wait..."
};
//File: Utils/Lang/js/TestLanguage.js:
function output() {
console.log("output()");
var codes = ['de', 'en'];
for (var i = 0; i < codes.length; i++) {
var translator = new Language(codes[i]);
var message = "output(): in " + translator.getLanguage() + ": ";
message += translator.getString('pleaseWait');
console.log(message);
}
}
<!--File: Utils/Lang/TestLang.html:-->
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Test languages</title>
<script type="text/javascript" src="../Files/js/FileUtils.js"></script>
<script type="text/javascript" src="js/Language.js"></script>
<script type="text/javascript" src="js/TestLanguage.js"></script>
</head>
<body>
<button name="outputButton" onclick="output();">Click</button>
<br>Please press [F12] so that you can see the test results.
</body>
</html>
当您将脚本标记添加到文档时,它不会同步加载。您需要等待文件加载后才能使用其中的代码。
您也许可以重新设计代码以使用 script.onload 回调:
var reference = document.createElement('script');
// ...
reference.onload = function() {
alert("Script loaded and ready");
};
但对于这种情况,如果您没有很多语言字符串,您最好静态加载它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)