/ / i18n-node-2, Express and a Handlebars helper - node.js, express, handlebars.js

i18n-node-2, Express i handlebars helper - node.js, express, handlebars.js

Próbuję utworzyć pomocnika kierownicy i18n-node-2 dzięki czemu mogę używać zlokalizowanych ciągów bezpośrednio z widoku, ale używając pomocnika Express do zarejestrowania i18n w pierwszej kolejności, nie mogę wtedy uzyskać instancji i18n, której mogę użyć wewnątrz pomocnika.

Odpowiedni kod:

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

Rejestracja i18n w Express:

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

Tworząc mojego pomocnika:

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

Zasadniczo wewnątrz pomocnika potrzebuję instancji i18n utworzonej przez i18n.expressBind(), który dzwoni i18n.init(). Czy poza modyfikacją kodu źródłowego w celu zwrócenia tego wystąpienia, istnieje inny sposób na jego uzyskanie?

Odpowiedzi:

0 dla odpowiedzi № 1

Odpowiadając na moje pytanie. i18n-node-2 umieszcza funkcje wyszukiwania __ i __n w kolekcji miejscowej, do której możesz dotrzeć z kontekstu, który daje Kierownica podczas uruchamiania pomocnika:

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

.. która działa na ucztę.


0 dla odpowiedzi nr 2

Aby zbudować odpowiedź @SteveHobbs ", jeśli masz pomocnika, który spodziewa się dowolnej liczby parametrów, a nawet skrótu opcji, możesz wykonać następujące czynności:

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);
});