2つのテンプレートファイルがあります。1つはフォーム用(loginFormTemplate)で、もう1つはダイアログ用(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
);