我有两个模板文件:一个用于表单(loginFormTemplate),另一个用于对话框(dialogTemplate)。当我把它们放在一起时,我只能在我的表单上获得i18n(比如$ {i18n.username}等),但不是我的对话框html,它是$ {undefined}。我已经在我的nls文件中明确定义了它。为什么?这是我构建对话框时的代码。
var template = lang.replace(dialogTemplate, {
form: loginFormTemplate
});
var contentWidget = new (declare(
[_Widget, _TemplatedMixin, _WidgetsInTemplateMixin],
{
templateString: template,
i18n: i18n
}
));
我可以像在dialoTemplate中的表单一样创建“变量”并传递我的i18n值,但我发现它并不优雅。我只想做一次。所以,相反它就是这样。
var template = lang.replace(dialogTemplate, {
form: loginFormTemplate,
_ok: i18n.okLabel,
_cancel: i18n.cancelLabel
});
var contentWidget = new (declare(
[_Widget, _TemplatedMixin, _WidgetsInTemplateMixin],
{
templateString: template,
i18n: i18n
}
));
这是我用phusick回答的解决方案(我的表单标有%[]):
var template = lang.replace(
dialogTemplate,
{form: loginFormTemplate},
/\%\[([^\]]+)\]/g
);
答案 0 :(得分:1)
我不是通过我的电脑,但是我想调用'lang.replace'不仅取代{form},而且取代你的$ {i18n。*},因为在调用'lang时只定义了'form'。替换”。
编辑:你可以使用'lang.replace'和自定义模式来避免i18n和字符串连接之间的冲突:http://livedocs.dojotoolkit.org/dojo/_base/lang#advanced-usage