2015-07-31 1 views
0

Я пытаюсь создать помощник Handlebars для i18n-node-2, так что я могу использовать локализованные строки непосредственно из представления, но с помощью хелпера Express для регистрации i18n в первую очередь, Я не могу получить экземпляр i18n, который я могу использовать внутри помощника.i18n-node-2, Express и Handelbars helper

Соответствующий код:

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

Регистрация 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 как создано i18n.expressBind(), что называется i18n.init(). Не удалось изменить исходный код, чтобы вернуть этот экземпляр, есть ли другой способ его получить?

ответ

0

Отвечая на мой вопрос. i18n-узел-2 место функций поиска __ и __n в коллекции местных жителей, которые вы можете получить, чтобы из контекста, что Рули дают вам при запуске помощника:

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

.. который работает лакомство.

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); 
}); 
Смежные вопросы