internationalization - 如何从 Swig 自定义标签/过滤器中的本地人读取变量?

标签 internationalization swig-template

我正在尝试为我的应用程序构建 i18n 模块。由于我使用的是 swig,因此我更愿意为此创建自定义标签“trans”,以便可以缓存翻译结果。

我使用 Express.js 4 作为我的应用程序的基础。

如何从自定义标签或过滤器中的请求中读取变量?我不知道如何阅读它们(尤其是在过滤器中)。我什至无法访问传递给模板的变量。例如:

swig template index.swig
-------------------------------
{% trans %}this is sparta{% endtrans %}
{% trans "fr" %}this is sparta{% endtrans %}
-------------------------------

我可以使第 2 行工作。我为“trans”传递语言环境,并在我的代码中替换用户从法语翻译中传递的文本。

但我不想将语言环境传递给每个反式标签。我想做这样的事情:
function (req, res, next) {
    res.locals.locale = req.session.user.getLocale();
}
// now view should have locale variable
// and trans should use it to pick right translation from the table
{% trans %}this is sparta{% endtrans %}

谁能提供教程或解释? swig 那部分的文档不存在。问题是每个用户都可以使用不同的语言,因此每个请求都会选择语言代码,我应该可以访问 swig 自定义标签内的代码。

最佳答案

模板自动从 app.local 中读取本地变量。和 res.local .因此,如前所述,您可以添加中间件以在响应中设置本地变量,如下所示:

app.use(function (req,res,next) { 
    res.locals.locale = req.session.user.getLocale();
    next();
});

这将暴露 locale作为你视野中的一个全局。

关于internationalization - 如何从 Swig 自定义标签/过滤器中的本地人读取变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25069780/

相关文章:

java - 在 Struts2 webapp 中更改 DateFormat 或默认语言环境

javascript - 需要在for循环中隐藏html输入

java - Charset.defaultCharset() 在 JDK1.7 和 JDK 1.6 下得到不同的结果

node.js - 在 Swig 模板中使用 include 时连接变量和文件

javascript - 无法格式化 keystone.js 中的嵌套日期字段

node.js - 如何使查询结果可从所有页面访问

node.js - 如何使用 Monk 检索 MongoDb 集合 ID

JavaFX8.我是否必须为每个 FXMLLoader 设置资源包?

html - 将 spring 消息添加到 html 属性占位符

android - 语言更改菜单用于更改不同的语言