i18n根据select的语言呈现特定的视图

我不确定i18n是否适合这个。 因为看起来这个模块只关注于改变语言属性(在视图渲染中)而不是视图本身。 我希望我解释自己足够:)

所以这个想法是当一个人改变语言时,语言目录中的渲染select了视图(具有相同的文件名)。

你可以有例如这样的目录层次结构:

-views --EN ---index.jade ---contact.jade --NL ---index.jade ---contact.jade --form-contact.jade 

为了清楚'form-contact.jade''form-contact.jade'文件将包含表单(包含在'contact.jade'文件中,所以'form-contact.jade'确实会使用i18n别名对象驻留在en.json或nl.json文件中)。

所以现在我只有以下几点:

app.js

 i18n.configure({ locales: ['en', 'nl'], directory: __dirname + '/locales', defaultLocale: 'en', extension: '.json', register: global }); app.use(i18n.init); app.use(function (req, res, next) { console.log(i18n); if (req.query.lang != undefined && i18n.locales.indexOf(req.query.lang) >= 0) { i18n.setLocale(req.query.lang); }else{ i18n.setLocale(i18n.defaultLocale); } next(); }); 

现在,我如何让res.renderselect正确的视图?

 router.get('/contact', function(req, res, next) { res.render('/contact', { title: '...', menu: '...' }); }); 

编辑:

如果你们有翻译大的静态网页(完整的HTML / CSS)的build议,请给你的意见:)

你的方式是错误的。 如果你有每种语言的观点,那么使用i18n有什么意义?

你可以得到

 ?lang= 

值并发送res.render ( '/' + req.query.lang + '/contact.html').

试试的方法是

 -locales --en.json --nl.json -view --cabinet.html --main.html 

app.js

 i18n.configure({ locales: ['en', 'nl'], directory: __dirname + '/locales', defaultLocale: 'nl', updateFiles: false, objectNotation: true }); app.use(i18n.init); app.use(function (req, res, next) { console.log(i18n); if (req.query.lang != undefined && i18n.locales.indexOf(req.query.lang) >= 0) { i18n.setLocale(req.query.lang); }else{ i18n.setLocale(i18n.defaultLocale); } next(); }); 

en.json例子

 { "cabinet": { "menu": { "title": "Menu", }, "dashboard": { "title": "Dashboard" }, "statistic": { "datePeriod": "Date period", "choose": "Choose", } }, "main": { "title": "Main", "body": { "hi": "Hi everyone!" } } 

相同的nl.json

main.html中

  I use Swig template <html> <head> <title>{{ translate.title }}</title> </head> <body> {{ translate.body.hi }}!! </body> </html> 

router.js

 router.get('/main', function(req, res, next) { res.render('/main', { title: '...', menu: '...', translate: res.__('main') }); }); router.get('/cabinet', function(req, res, next) { res.render('/cabinet', { title: '...', menu: '...', translate: res.__('cabinet') }); }); 

只要使用像上面提到的@cheks这样的单独的页面,或者更好的是,像Angular这样的前端框架,你可以去:

<div if-language="en">my english text</div> <div if-language="fr">mon texte français</div>