例如,有没有办法将我的“ i18n ”帮助器嵌套在另一个帮助器的哈希变量中?
{{view "SearchView" placeholder="{{t 'search.root'}}" ref="search" url="/pages/search" className='home-search' polyfill=true}}
答案 0 :(得分:79)
更新:句柄现在支持subexpressions,您可以这样做:
{{view "SearchView" (t 'search.root')}}
答案 1 :(得分:11)
您的方案不是直接支持的,但您可以使用几种解决方法。把手助手只是javascript代码,因此您可以在帮助程序代码中执行它们:
function translateHelper() {
//...
}
function viewHelper = function(viewName, options) {
var hash = options.hash;
if(hash.placeholder) {
hash.placeholder = translateHelper(hash.placeholder);
}
};
Handlebars.registerHelper('view', viewHelper);
Handlebars.registerHelper('t', translateHelper);
然后将i18n键作为参数传递:
{{view placeholder="search.root"}}
这很好,只要你的帮助者知道哪些参数应该被本地化,哪些不是。如果那是不可能的,你可以尝试通过Handlebars运行所有帮助器参数,如果它们包含一个把手表达式:
function resolveNestedTemplates(hash) {
_.each(hash, function(val, key) {
if(_.isString(val) && val.indexOf('{{' >= 0)) {
hash[key] = Handlebars.compile(val)();
}
});
return hash;
}
function view(viewName, options) {
var hash = resolveNestedTemplates(options.hash, this);
}
并使用您描述的嵌套模板语法:
{{view placeholder="{{t 'search.root'}}" }}
我意识到这两种选择都不是完美的,但它们是我能想到的最好的选择。