gpt4 book ai didi

node.js - 本地化 Nodejs (i18n)

转载 作者:行者123 更新时间:2023-12-02 21:45:43 24 4
gpt4 key购买 nike

我的代码:

var i18n = require("i18n");

i18n.configure({
locales: ['en', 'ru'],
defaultLocale: 'en',
directory: __dirname + '/locales',
cookiename: 'locale'
});

app.configure(function () {
app.use(i18n.init);
})

app.get('/:locale', function (req, res) {
res.cookie('locale', req.params.locale);
i18n.setLocale(req.params.locale);
res.redirect('/');
});

问题有两个:

  1. 在模板中无法通过输出

    __("名称键")

  2. 当不是直接通过值传输时,不要更改文本。有所有语言文件

    res.render('index', {name: res.__('name') });

  3. 但不要切换语言​​

/* ----- */

生成的代码:

var i18n = require("i18n");

i18n.configure({
locales: ['en', 'ru'],
defaultLocale: 'ru',
directory: __dirname + '/locales'//,
cookiename: 'locale'
});


app.use(function (req, res, next) {
res.locals.__ = res.__ = function() {
return i18n.__.apply(req, arguments);
};
next();
});

app.get('/i18n/:locale', function (req, res) {
res.cookie('locale', req.params.locale);
i18n.setLocale(req.params.locale);
if (req.headers.referer) res.redirect(req.headers.referer);
else res.redirect("/");
});

这有效

最佳答案

在您的模板中,假设您使用的是 JADE,则必须使用 #{},例如 #{__("Your key")}

我不明白你的第二个问题,介意重新表述一下吗?

无论如何,如果你想从 Controller 使用 i18n,你必须这样做: res.render('index', {name: res.i18n.__('name') });


切换语言时,您必须:
1-在任何地方保存用户首选项(例如 session 或 cookie)

app.get("/i18n/:locale", setLocale);

function setLocale(req, res, next){
req.session.locale = req.params.locale;

if(req.headers.referer) res.redirect(req.headers.referer);
else res.redirect("/");
}

2- 在每次请求时重新应用此更改(只需使用中间件):

var app = require("express")();

app.use(function(req, res, next){
if(req.session.locale) //check if user has changed i18n settings
req.i18n.setLocale(req.session.locale);
})

app.get("/", function(req, res, next){
res.render('index', {name: res.i18n.__('name') });
});

app.listen(8000);

关于node.js - 本地化 Nodejs (i18n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19539332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com