【问题标题】:How do you configure i18next-express-middleware?你如何配置 i18next-express-middleware?
【发布时间】:2017-10-14 14:48:13
【问题描述】:

我正在尝试将 i18next 与 Express 服务器一起使用,但无法根据文档中的示例使其正常工作。

我的应用由 index.js(我的 Express 服务器)、package.json 和一个带有两个翻译文件的 locales 目录组成:en.json 和 es.json。

index.js

'use strict';

const express = require('express');
const i18n = require('i18next');
const i18nMiddleware = require('i18next-express-middleware');
const path = require('path');

const app = express();
const port = process.env.PORT || 8080;

i18n
  .use(i18nMiddleware.LanguageDetector)
  .init({
    fallbackLng: 'en',
    lowerCaseLng: true,
    preload: ['en', 'es'],
    resGetPath: path.join(__dirname, 'locales/__lng__.json'),
    useCookie: false
  });

app.use(i18nMiddleware.handle(i18n, {
  removeLngFromUrl: false
}));

app.get('/', (req, res) => {
  res.send(req.t('home.title'));
});

app.use(express.static(path.join(__dirname, 'public')));

module.exports = app.listen(port, (err) => {
  if (err) {
    console.log(err);
    process.exit(1);
  } else {
    console.log(`Server is listening on port ${port}`);
  }
});

package.json

{
  "name": "i18n-server",
  "version": "1.0.0",
  "description": "Node Express server with i18next.",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "Shaun Scovil <sscovil@gmail.com>",
  "license": "ISC",
  "dependencies": {
    "express": "4.15.2",
    "i18next": "8.2.1",
    "i18next-express-middleware": "1.0.5"
  }
}

locales/en.json

{
  "home": {
    "title": "Hello World!"
  }
}

locales/es.json

{
  "home": {
    "title": "Hola Mundo!"
  }
}

【问题讨论】:

    标签: node.js express middleware i18next


    【解决方案1】:

    看起来像一个非常旧的配置...按照自述文件后端移动到自己的插件...您的代码应该类似于:

    var i18next = require('i18next');
    var FsBackend = require('i18next-node-fs-backend');
    var middleware = require('i18next-express-middleware');
    var express = require('express');
    var bodyParser = require('body-parser');
    var fs = require('fs');
    
    i18next
      .use(FsBackend)
      .init({
        lng: 'en',
        saveMissing: true,
        debug: true,
        backend: {
          loadPath: __dirname + '/locales/{{lng}}/{{ns}}.json',
          addPath: __dirname + '/locales/{{lng}}/{{ns}}.missing.json'
        },
        nsSeparator: '#||#',
        keySeparator: '#|#'
      });
    
    var app = express();
    app.use(bodyParser.json()); // for parsing application/json
    app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
    
    app.use(middleware.handle(i18next, {
      // ignoreRoutes: ["/foo"],
      // removeLngFromUrl: false
    }));
    

    作为示例,您可以查看 https://github.com/i18next/i18nextify/blob/master/example/server.js

    对于文件系统,请查看https://github.com/i18next/i18next-node-fs-backend 了解详情

    【讨论】:

    • 太棒了,谢谢!今天晚些时候会试试这个并接受你的回答。
    • 工作得很好,再次感谢。这是我更新的配置,有兴趣的人可以参考:gist.github.com/sscovil/656aef8301b11b370261d36a9b524521
    • i18next-express-middleware 已被弃用。请改用i18next-http-middleware
    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 2020-07-19
    • 2020-05-15
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2016-05-25
    • 2019-06-14
    相关资源
    最近更新 更多