我正在尝试使用dojo设置本地化但无法使其正常工作。
我有一个像这样的文件夹结构:
Folder: locale
- about.html
- Folder: nls
- about.js
- Folder fr
- about.js
这是应该本地化的文件。
<html>
<head>
<script type="text/javascript">
var dojoConfig = {
locale: 'fr'
};
</script>
<script src="//servicesbeta.esri.com/jsapi/arcgis/3.4/js/dojo/dojo/dojo.js"></script>
<script>
require([
"dojo/i18n",
"dojo/i18n!./nls/about"
],function(
i18n,
nls
){
console.log("Good Morning");
console.log(dojoConfig);
console.log(nls['hello']);
});
</script>
</head>
<body></body>
</html>
这是文件的输出:
我希望输出包含French Hello
,而不是English Hello
。
如果我更改了要求:
require([
"dojo/i18n",
"dojo/i18n!./nls/about.js"
],function(
要:
require([
"dojo/i18n",
"dojo/i18n!./nls/about"
],function(
我得到了这个输出:
不完全确定这里发生了什么。
为什么第一个例子不能找到法语本地化?正在加载并且正在设置本地。
第二个例子与我看到的大多数dojo示例更加一致。这是怎么回事?
任何帮助将不胜感激。谢谢!
为了完整,nls / about.js:
define({
root: {
hello: "English Hello"
},
"fr":true
});
和nls / fr / about.js:
define({
root: {
hello: "French Hello"
}
});
答案 0 :(得分:1)
从nls / fr / about.js中删除根对象。它只在根文件中需要,因为如果找不到特定于语言环境的文件,那些将是使用的字符串。
因此,您的语言环境特定文件应如下所示:
define({
hello: "French Hello"
});
对于第二个问题:当您引用文件“about.js”时,您使用有效的文件路径。当您引用“nls / about”时,您将引用AMD模块,因此您可以根据包的定义使用有效的模块路径。两种语法都可以,但是如果你想使用包路径,那么尝试在你的dojoConfig中添加一个包定义,如下所示:
packages: [{
name: "nls",
location: "/nls"
}]
答案 1 :(得分:0)
根据我在本地化方面的经验,我一直这样做。
所以你所做的基本上是正确的,但调用"dojo/i18n!./nls/about"
文件对我来说是一个不熟悉的赌注,所以这是另一种方法。
var my_localization_object = i18n.getLocalization(“locale”,“about”);
您需要将包添加到dojoconfig:
var dojoConfig = {
locale: 'fr',
packages: [
//location should be a full qualified location.
{ name: "locale", location: "/JS/locale" }
],
};
这样你就可以在my_localization_object
变量中获得一个对象但是法语区域设置,这样你就可以使用该对象填充你想要的任何东西。
你们about.js应该是这样的:
define({
root: ({
//Whatever object you want
}),
"en": false,
"en-gb": false,
"en-us": true,
"fr": false,
});