我正在尝试使用i18n在节点JS中创建一个多语言网站。快递和车把。
将我的代码共享到我尝试使用以下代码实现的底部。
https://gist.github.com/mashpie/5246334
app.js
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const i18n = require('i18n');
const hbs = require('hbs');
const app = express();
i18n.configure({
locales: ['en', 'ja'],
defaultLocale : ' ja ' ,
cookie: 'locale',
directory: "" + __dirname + "/locales"
});
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(express.static(path.join(__dirname, 'public/static/')));
app.set('views', "" + __dirname + "/views");
app.set('view engine', 'hbs');
app.engine('hbs', hbs.__express);
app.use(cookieParser());
app.use(i18n.init);
hbs.registerHelper('__', function () {
return i18n.__.apply(this, arguments);
});
hbs.registerHelper('__n', function () {
return i18n.__n.apply(this, arguments);
});
const aboutRouter = require('./routes/about');
app.use('/about', aboutRouter);
/* This section should always be in the end! */
app.use((req, res) => {
res.status(404).sendFile(path.resolve(__dirname, 'public', '404.html'));
});
module.exports = app;
locales / en.json
{
"text to test": "text to test on eng"
}
locales / ja.json
{
"text to test": "text to test on jap"
}
about.hbs
<a href="/" class="btn btn-orange rounded mb-4">{{{__ "text to test"}}}</a>
routes / about.js
const express = require('express');
const router = express.Router();
router.get('/', function(req, res) {
res.render('about');
});
module.exports = router;
现在,当我尝试运行代码时。没有错误。 about.hbs文件正在成功读取。但是“要测试的文本”被当作字符串使用,但是其值并未从JSON文件中解析。
现在我的疑问是:-
应如何解析JSON文件?
浏览器如何知道要调用哪个JSON?如何知道lang参数?