路由集成
启用语言路径前缀
设置 localePathRedirect: true 后,插件会接管 URL 中的语言识别和跳转,具体做以下四件事:
- 识别 URL 里的语言前缀:访问
/zh/detail时,插件从路径中提取zh作为当前语言 - 无前缀路径自动重定向:访问
/detail时,先通过 detector 检测语言,检测不到则用fallbackLanguage,然后重定向到/en/detail或/zh/detail - 切换语言时同步更新 URL:当前在
/en/detail,调用changeLanguage('zh')后 URL 自动变为/zh/detail,而不只是改 i18next 内部的语言状态 - 避免路径被重复检测:插件会自动从 i18next detector 的
order中移除path,因为路径语言识别已由插件自己处理,不需要 i18next 再检测一遍
效果:
某些路径(如 API 路由、静态资源)不需要语言前缀,可以通过 ignoreRedirectRoutes 跳过重定向,详见语言检测 → ignoreRedirectRoutes。
路由配置
启用 localePathRedirect 后,需要在路由中添加 [lang] 动态参数来接收语言前缀。
约定式路由
在 routes/ 目录下创建 [lang] 目录:
生成的路由结构:
如果需要在布局或页面中读取当前语言参数:
自定义路由
Info
自定义路由仅在不使用 Modern.js 约定路由系统时才需要。大多数项目推荐使用约定式路由。
如果使用自定义路由文件(modern.routes.ts),需要手动添加 :lang 参数:
I18nLink 组件
I18nLink 是语言感知的链接组件,会自动在目标路径前添加当前语言前缀,无需手动拼接。
当前语言为 en 时:
注意事项:
I18nLink 继承自 @modern-js/runtime/router 的 Link 组件,支持 replace、state、className 等所有标准 Link props,完整 Props 类型见 API 参考。