根据我的了解,i18next-http-middleware移除了removeLngFromUrl选项。从v3.0.0版本开始,它已经被移除了。现在,您需要手动处理从URL中删除语言标识符的逻辑。
以下是一个示例代码,演示如何手动处理从URL中删除语言标识符:
const i18next = require('i18next');
const i18nextMiddleware = require('i18next-http-middleware');
const express = require('express');
// 初始化 i18next
i18next.init({
lng: 'en',
resources: {
en: {
translation: {
hello: 'Hello World'
}
},
fr: {
translation: {
hello: 'Bonjour le monde'
}
}
}
});
// 创建 Express 应用程序
const app = express();
// 添加 i18next 中间件
app.use(i18nextMiddleware.handle(i18next));
// 处理语言标识符的逻辑
app.use((req, res, next) => {
const pathSegments = req.path.split('/').filter(segment => segment !== '');
const language = pathSegments[0];
// 删除语言标识符
if (i18next.languages.includes(language)) {
req.url = req.url.replace(`/${language}`, '');
req.i18n.changeLanguage(language);
}
next();
});
// 路由处理程序
app.get('/', (req, res) => {
res.send(req.t('hello'));
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在上面的示例中,我们手动处理了从URL中删除语言标识符的逻辑。我们通过检查URL路径中的第一个段落来获取语言标识符,并使用replace
方法删除该段落。然后,我们使用i18next.changeLanguage
方法将语言更改为请求的语言。
请注意,此示例仅适用于简单的语言标识符在URL路径的开头的情况。如果您的应用程序有更复杂的路由结构,您可能需要根据您的需求进行修改。