/ / i18n-node-2, Express y un asistente de Handlebars - node.js, express, handlebars.js

i18n-node-2, Express y un asistente de Handlebars - node.js, express, handlebars.js

Estoy tratando de crear un ayudante de manillares para i18n-node-2 de modo que puedo usar cadenas localizadas directamente desde la vista, pero en primer lugar utilizando el ayudante Express para registrar i18n, no puedo obtener una instancia de i18n que pueda usar dentro del ayudante.

El código relevante:

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

Registrando i18n con Express:

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

Creando mi ayudante:

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

Básicamente, dentro del helper necesito la instancia de i18n creada por i18n.expressBind()que llama i18n.init(). Aparte de modificar el código fuente para devolver esta instancia, ¿hay otra forma de obtenerlo?

Respuestas

0 para la respuesta № 1

Respondiendo a mi propia pregunta. i18n-node-2 coloca las funciones de búsqueda __ y __n en la colección de locales, a la que puede acceder desde el contexto que Handlebars le proporciona cuando ejecuta el asistente:

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

.. que funciona una golosina.


0 para la respuesta № 2

Para aprovechar la respuesta de @SteveHobbs ", si tiene un ayudante que está esperando un número arbitrario de parámetros e incluso un hash de opciones, podría hacer lo siguiente:

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