使用 i18n 与 hbs 和 express

4

我正在尝试在hbs中正确使用i18n,但一直没有成功。

这是我的server.js代码:

var express =      require('express');
var server  =      express();
var hbs = require('hbs');
var i18n = require('i18n');
var cookieParser = require('cookie-parser');

i18n.configure({
  locales: ['en', 'fr'],
  cookie: 'locale',
  directory: __dirname + "/locales"
});

hbs.registerPartials(__dirname + '/views');
server.set('view engine', 'hbs');
server.engine('hbs', hbs.__express);

server.use(cookieParser());

server.use(i18n.init);

hbs.registerHelper('__', function () {
  return i18n.__.apply(this, arguments);
});
hbs.registerHelper('__n', function () {
  return i18n.__n.apply(this, arguments);
});

server.get('/', function(req, res) {  
  res.render('index');
});

我的HTML代码:

<ul class="nav navbar-nav navbar-right">
       <li><a href="/">{{__ 'HOME'}}</a></li>
       <li><a href="team">{{__ 'TEAM'}}</a></li>
       <li><a href="#">{{__ 'SERVICES'}}</a></li>
       <li><a href="#">{{{__ 'LEL'}}}</a></li>
</ul>

以下是我的一个Json文件:

{
    "HOME": "HOME",
    "TEAM": "TEAM",
    "SERVICES": "SERVICES",
    "LEL": "CONTACT"
}

我不知道我的做法有什么问题,如果有人能帮忙,那就太好了!谢谢!

编辑: 看起来我的辅助程序被识别出来了,但是国际化(i18n)没有翻译单词...

编辑: 好的,我改变了我的模板引擎,它工作了!

1个回答

1
我是这样做的。
const express = require('express');
const path = require('path');
const handlebars =  require('handlebars');
const app = express();
const i18n = require('i18n');
// Language
i18n.configure({
 locales: ['es', 'en'],
 directory: path.join(__dirname, 'locales'),
 defaultLocale: 'es',
 queryParameter: 'lang',
});
    
app.engine('.hbs', exphbs({
 defaultLayout: 'index',
 layoutsDir: path.join(app.get('views'), 'layouts'),
 partialsDir: path.join(app.get('views'), 'partials'),
 extname: '.hbs',
 handlebars: allowInsecurePrototypeAccess(handlebars),
 helpers: {
  i18n: function(){
   return i18n.__.apply(this,arguments);
  },
  __n: function(){
   return i18n.__n.apply(this, arguments);
  },
 }
}));
app.set('view engine', 'hbs');
app.use(i18n.init);

在任何 .hbs 文件中。
<h1>{{i18n 'Hello'}}<h1>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接