egg-i18n 国际化问题求助
- Dominant language
- TypeScript
- Stars
- 19k
- Forks
- 1.8k
- PR merge metrics
- No merged PRs in 30d
Description
- 最近开始使用vue,遇到问题了,求助。
- 我是通过cookie来控制国际化,当用户通过en.xxx.com访问时,我在中间件中将cookie设置成en;当用户通过www.xxx.com访问时,我在中间件中将cookie设置成zh。每个请求都会执行中间件
- 问题:当我访问www.xxx.com后,再访问en.xxx.com,浏览器加载出来的还是中文版
- 问题追踪:当我访问www.xxx.com后,request的cookie的language值是zh,然后再访问en.xxx.com,服务器收到的请求中的language值还是zh,这时通过中间件来修改cookie值,然后执行后面的页面渲染逻辑,但渲染出来的还是中文页面
- 我的疑惑:是不是因为egg的国际化处理逻辑在中间件之前就执行了?
language_handler.js(中间件)
```
module.exports = () => {
return async function (ctx, next) {
let host = ctx.ctx.request.header['host'], language = 'zh';
if(host.startsWith('en')){
language = 'en';
}
ctx.cookies.set('language', language ,{
domain: '.xxx.com',
httpOnly: false
});
await next();
};
};
```
config.default.js
```
config.middleware = [ 'languageHandler']
config.i18n = {
defaultLocale: 'zh',
queryField: 'language',
cookieField: 'language',
cookieDomain: '.xxx.com',
cookieMaxAge: '1y'
}
```
plugin.js
```
config.i18n = {
enable: true,
package: 'egg-i18n'
}
```
Contributor guide
Assessment
This issue has not been assessed yet.