首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >i18n-node-2、Express和Handlebar帮助器

i18n-node-2、Express和Handlebar帮助器
EN

Stack Overflow用户
提问于 2015-07-31 21:10:59
回答 2查看 660关注 0票数 0

我正在尝试为i18n-node-2创建一个Handlebar帮助器,这样我就可以直接从视图中使用本地化的字符串,但是首先使用Express帮助器来注册i18n,然后我就无法获得一个可以在帮助器中使用的i18n实例。

相关代码:

代码语言:javascript
复制
var i18n = require('i18n-2');

向速成版注册i18n:

代码语言:javascript
复制
i18n.expressBind(app, {
  locales: ['en', 'de'],
  cookieName: 'locale',
  extension: ".json"
});

创建我的助手:

代码语言:javascript
复制
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()。除了修改源代码以返回此实例之外,还有其他方法可以获取它吗?

EN

回答 2

Stack Overflow用户

发布于 2015-07-31 21:31:45

回答我自己的问题。i18n-node-2将查找函数____n放在本地变量集合中,您可以在运行帮助器时从Handlebar提供的上下文中访问该集合:

代码语言:javascript
复制
hbs.registerHelper('__', function(key, context) {  
  return context.data.root.__(key);
});

。。这是一种享受。

票数 0
EN

Stack Overflow用户

发布于 2016-02-20 03:01:15

要基于@SteveHobbs的答案构建,如果您有一个helper需要任意数量的参数,甚至是一个选项散列,您可以执行以下操作:

代码语言:javascript
复制
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);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31747021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档