我使用sailsjs构建我的网站,但决定不使用其默认的EJS进行模板化。
在./config/views.js中,我设置了以下内容(在npm install dustjs-linkedin& dustjs-helpers之后):
engine: 'dust',
在我的HomeController ./api/controllers/HomeController.js中,我需要执行以下操作来从./config/locales/en.json获取语言文本:
title: res.i18n('title'),
//or
siteName: res.__('siteName')
在我的主页模板./views/home/index.dust中,我可以通过以下方式访问这些字符串:
<h1>{title}</h1>
<p>{siteName}</p>
但是,随着字符串数量的增加,它将是多余的,因为我必须在控制器中设置每个变量才能在模板中使用它。
所以我的问题是:
有没有更好或更正的方法在我的模板中使用./config/locales/en.json中的文本变量而不必在我的控制器文件中定义它们?
如何访问&amp;使用我的控制器中的dustjs模块,以便..
我可以创建自定义dustjs助手吗? (如何创建dustjs助手?)
此外,似乎我无法在./config/i18n.js中配置i18n的设置(objectNotation:true not working)这是配置i18n的正确位置吗?
答案 0 :(得分:0)
这是一个很长的问题。我会回答这个部分:我可以创建自定义dustjs助手吗? (如何创建dustjs助手?)
答。是的你可以。这是(在sailsjs中): 我们可以在api / services / MultiplyBy2.js
中创建一个全局可访问的服务<强> MultiplyBy2.js 强>
module.exports = {
myFunc: function (chunk, context, bodies, params) {
var number = params.num;
number = number*2;
return chunk.write(number);
}
};
然后你可以在如下的dustjs模板中使用它:
<p>10 * 2 = {#sails.services.multiplyby2.myFunc num=10/}</p>
注意:文件名(MultiplyBy2)将为小写。但函数名称将与定义的(myFunc);
相同希望这有帮助。
答案 1 :(得分:0)
我也有这个问题。我进一步深入研究了这一点,并认为解决这个问题太麻烦了,就在我切换到Sails.js上的Handlebars时。
Sails.js中Handlebars的i18n语法为{{__'Welcome'}}。