Node Express i18n可维护的链接

时间:2017-10-25 11:23:24

标签: node.js express internationalization locale

考虑到我使用“express”,“i18n”,“express-session”,“cookie-parse”,adicionally可以使用“npm locale”或类似的情况下需要它。可以说我有这样的路线:

"/", "/es/" , "/de/"
"/terms", "/es/terms", "/de/terms"
"/privacy", "/es/privacy", "/de/privacy"
...

如果用户在他的cookie或标题上有“es”这样的语言,我应该如何设置可维护和自动链接...在页面上显示“es”版本页面的链接并考虑设置变量使用URL,以防我必须更新链接,我只会改变一次。

我想到的一件事是:

设置在像“es.json”这样的i18n文件中

{ 
  "url_home" : "/es/" ,
  "url_terms" : "/es/terms",
  ...
}

然后其他文件就像“de.json”

{ 
  "url_home" : "/de/" ,
  "url_terms" : "/de/terms",
  ...
}

我这是正确的方法吗?或者我应该遵循推荐的任何其他方式?

1 个答案:

答案 0 :(得分:0)

我现在会说几次测试,最好的办法是(并且我不建议使用i18n)为网址创建中间件。我创建了这样的:

使用以下命令创建url.json文件:

{
  "en": {
      "home": "/",
      "terms": "/terms"
  "es": {
      "home": "/es",
      "terms": "/es/terms"
}

然后我使用我的方法取决于cookie中的语言(这是路由条款(我使用点模板)区域设置是我的cookie,所以在这种情况:

  const urls = require('urls.json');

  ...

  app.get('/:lang/terms', function(req, res) {

    if (req.params.lang === 'es') {

      res.render('terms',{

        // get urls for locale cookie language 
        urls: urls[req.locale],

      });
    } 
  ...
   //more languages
});

然后在我的模板中简单地说:

 <li><a href="{%= it.urls.terms%}">{%=it.__n('help')%}</a></li>