nls 文件夹通常用于存储您的翻译字符串,并且通常是使用它的小部件旁边的子目录。
IE。如果您的小部件存储在名为app的文件夹中的myWidget.js中,则myWidget.js的翻译字符串将存储在目录app/nls中的同名文件 ( myWidget.js ) 中。
这只是约定,但可能值得遵循,因为它使您的目录结构合乎逻辑。
这是myWidget.js小部件的示例:
define([
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dojo/i18n!./nls/myWidget"
], function(
declare, _widget, _templated, strings, domAttr
){
"use strict";
var construct = declare([_widget, _templated], {
"i18n": strings,
"templateString": "<div>${i18n.hello}</div>"
});
return construct;
});
这是一个非常简单的小部件,它在屏幕上创建一个<div>(参见templateString属性)。<div>应该包含从翻译文件加载并分配给hello属性的文本。
小部件将需要在与myWidget.js相同的目录中创建nls目录。在nls目录中,您创建另一个名为myWidget.js的 javascript 文件(即与父级相同的名称)。该文件是您的根翻译文件,如下所示:
define({
root: ({
"hello": "Hello"
})
});
在这里,您已将字符串“Hello”分配给属性hello。这不是很有用,因为没有提供翻译。如果你想要一个挪威语翻译,那么你可以像这样修改它:
define({
root: ({
"hello": "Hello"
}) ,
"no": true
});
在这里,您是说除了根翻译字符串之外,您还有挪威语翻译。然后,您需要创建您的挪威语翻译文件并将其放在nls的名为no的子目录中。因此,您创建另一个名为myWidget.js的文件并将其放在 nls/no 中:
define({
"hello": "Hei"
});
翻译文件的格式与根文件略有不同。使用默认字符串,除非当前浏览器语言中给定字符串的翻译可用(即,您不需要翻译每个字符串,只需翻译您想要翻译的字符串)。
在小部件之外加载翻译字符串:
上面的示例显示了如何按照常规约定为小部件加载翻译文本。您可以在任何小部件或任何 require 语句中加载所需的任何字符串集。dojo/i18n 类能够加载您指定的任何字符串集。
eg:
require([
"dojo/i18n!<PATH TO TRANSLATION ROOT FILE YOU WANT TO LOAD>"
], function(string) {
// translation-string are stored in the 'strings' variable for the
// current browser language
});