带有lang.replace的Dojo i18n不起作用

时间:2012-06-14 18:55:38

标签: dojo

我有两个模板文件:一个用于表单(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
            );

1 个答案:

答案 0 :(得分:1)

我不是通过我的电脑,但是我想调用'lang.replace'不仅取代{form},而且取代你的$ {i18n。*},因为在调用'lang时只定义了'form'。替换”。

编辑:你可以使用'lang.replace'和自定义模式来避免i18n和字符串连接之间的冲突:http://livedocs.dojotoolkit.org/dojo/_base/lang#advanced-usage