i18n-node-2,Express和Handlebars帮助器

时间:2015-07-31 13:10:59

标签: node.js express handlebars.js

我试图为i18n-node-2创建一个Handlebars帮助器,以便我可以直接从视图中使用本地化字符串,但是首先使用Express帮助程序注册i18n,我可以'然后得到一个我可以在帮助器中使用的i18n实例。

相关代码:

var i18n = require('i18n-2');

使用Express注册i18n:

i18n.expressBind(app, {
  locales: ['en', 'de'],
  cookieName: 'locale',
  extension: ".json"
});

创建我的助手:

hbs.registerHelper('__', function() {
  // What I would *like* to do, but the 'i18n' instance here is the wrong one
  return i18n.__.apply(i18n, arguments);
});

基本上,在帮助程序内部,我需要i18n.expressBind()创建的i18n实例,该实例调用i18n.init()。如果没有修改源代码以返回此实例,还有其他方法可以获得它吗?

2 个答案:

答案 0 :(得分:0)

回答我自己的问题。 i18n-node-2将查找函数____n放在locals集合中,您可以从Handlebars在运行帮助程序时为您提供的上下文中获取:

hbs.registerHelper('__', function(key, context) {  
  return context.data.root.__(key);
});

..这是一种享受。

答案 1 :(得分:0)

建立@ SteveHobbs'回答,如果你有一个帮助者期望任意数量的参数甚至是一个选项哈希,你可以做到以下几点:

hbs.registerHelper('foo', function() {
  var args = Array.prototype.slice.call(arguments),
      last = args.pop(),
      options = last.hash,
      context = last.data.root;

  // Show what's available:
  console.log('From foo helper:');
  console.log('args:', args);
  console.log('options:', options);
  console.log('context:', context);
});