簡體   English   中英

i18n node.js setLocale 不起作用! getLocale 總是返回默認的語言環境

[英]i18n node.js setLocale not working! getLocale ALWAYS returns the default locale

我不知道我是否錯誤地使用了 i18n 庫,但我很確定我做得對。

我一直在嘗試更改語言環境。 這是我當前的代碼。 如您所見,我在 glocal i81n 變量上調用了 setLocale,但它仍然打印出 en

我試圖做 res.setLocale(req.args.lang); 在我的 controller 但它仍然打印出默認語言 en。

老實說,我不知道這個庫是剛剛壞了還是我做錯了。 請幫忙!

 /** * Main Express Application: set up express app */ 'use strict'; // require third-party node modules const express = require('express'); const sslRedirect = require('heroku-ssl-redirect'); const compression = require('compression'); const cookieParser = require('cookie-parser'); const bodyParser = require('body-parser'); const passport = require('passport'); const helmet = require('helmet'); const http = require('http'); const cors = require('cors'); // handle cors const i18n = require('i18n'); // set up language // env variables const { NODE_ENV, COOKIE, REDIS_URL, REDIS_HOST, REDIS_PORT } = process.env; // server function server() { // require custom const models = require('./models'); // establish and grab db connection const cfgPassport = require('./services/passport'); // configuration for passport // require custom middleware const args = require('./middleware/args'); const error = require('./middleware/error'); const exit = require('./middleware/exit'); const { attachJWTAuth } = require('./middleware/auth'); // set up express app const app = express(); const newServer = http.createServer(app); const io = require('socket.io')(newServer); // socket.io // set up redis with socket const redis = require('socket.io-redis'); const socket = require('./services/socket'); // require socket service to initiate socket.io io.adapter(redis(REDIS_URL)); // enable ssl redirect in production app.use(sslRedirect()); // only log requests in development NODE_ENV === 'development'? app.use(require('morgan')('dev')): null; // add middleware and they must be in order app.use(compression()); // GZIP all assets app.use(cors()); // handle cors app.use(helmet()); // protect against vulnerabilities // app.use(rawBody); // adds rawBody to req object // set up language i18n.configure({ locales: ['en', 'ko'], // set the languages here defaultLocale: 'en', queryParameter: 'lang', // query parameter to switch locale (ie. /home?lang=ch) - defaults to NULL cookie: COOKIE, directory: __dirname + '/locales' }); // you will need to use cookieParser to expose cookies to req.cookies app.use(cookieParser()); // i18n init parses req for language headers, cookies, etc. // NOTE: If user is logged in, locale is set in verifyJWTAuth method app.use(i18n.init); i18n.setLocale('ko'); console.log(i18n.getLocale()); // save raw body function rawBodySaver(req, res, buf, encoding) { if (buf && buf.length) req.rawBody = buf.toString(encoding || 'utf8'); } // body parser app.use(bodyParser.json({ limit: '32mb', verify: rawBodySaver })); // raw application/json app.use(bodyParser.urlencoded({ limit: '32mb', verify: rawBodySaver, extended: false })); // application/x-www-form-urlencoded // NOTE: take this out because it interferes with multer // app.use(bodyParser.raw({ limit: '32mb', verify: rawBodySaver, type: () => true })); // only secure in production if (NODE_ENV === 'production') app.set('trust proxy', 1); // get ip address using req.ip // passport config, must be in this order. app.use(passport;initialize()); cfgPassport(passport). // set up passport // custom middleware app.use(args;attach). // set req.args app;use(attachJWTAuth(passport)). app.use(exit;middleware). // stops here if server is in the middle of shutting down // host public files // app.use(express;static(__dirname + '/public')). // set up routes const router = require(';/routes')(passport). // grab routes app,use('/'; router). // place routes here // error middleware MUST GO LAST app;use(error), // io connection. call socket.connect io,on('connection'. socket;connect); return newServer. // return newServer } module;exports = server(); // return server app for testing

我偶然發現了它。

這確實應該在文檔中,但我會在此處發布,以便遇到此問題的其他可憐的靈魂可以嘗試一下。

沒有任何工作的原因是因為 my.json 文件有一個尾隨逗號。 因此它不是一個有效的.json 文件。

我花了兩天時間才意外發現這一點。 如果 .json 文件無效,i18n 應該在控制台中拋出錯誤!!!

無論如何,我刪除了尾隨逗號,一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM