How to properly use dustjs & create helpers in sailsjs?

I'm using sailsjs to build my website but decided not to use its default EJS for templating.

In ./config/views.js, I have set the the following(after npm install dustjs-linkedin & dustjs-helpers):

engine: 'dust',

In my HomeController ./api/controllers/HomeController.js, I need to do the following to get the language text from ./config/locales/en.json:

title: res.i18n('title'),
//or
siteName: res.__('siteName')

In my home template ./views/home/index.dust, I can access those string with:

<h1>{title}</h1>
<p>{siteName}</p>

However, as the number of strings grow, it will be redundant as I have to set each of the variables in controller before I can use it in my template.

So my questions are:

  1. is there a better or correct way to use the text variables in my template from ./config/locales/en.json without having to define each of them in my controller file?

  2. how to access & use the dustjs module in my controller so that..

  3. I can create custom dustjs helpers? (how to create dustjs helpers?)

  4. also, it seems I cannot configure the settings for i18n in ./config/i18n.js (objectNotation: true not working) Is this the correct place to configure i18n?

Its a long ques. I'll answer the part: I can create custom dustjs helpers? (how to create dustjs helpers?)

Ans. Yes you can. Here's how (in sailsjs): We can create a globally accessible service in 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);
  }

};

And then you can use this in a dustjs template like so:

<p>10 * 2 = {#sails.services.multiplyby2.myFunc num=10/}</p>

Note: The file name (MultiplyBy2) will be lowercase. But the function name will be the same as defined (myFunc);

Hope this helps.

I also had this problem. I further dug into this and figured that it's too much hassle to resolve this issue, and that's when I switched to Handlebars on Sails.js.

Handlebars' i18n's syntax in Sails.js is {{__ 'Welcome' }} .