最近在搞一个 Umi 3 项目的多语言/国际化支持,在修改路由标题时,使用 getIntl().formatMessage() 方法时会报错。
原因是:getIntl() 是运行时方法,而 umirc.ts 是构建时配置文件,无法在初始化阶段调用动态函数。需要参考一下方法,配置 Umi 3 路由的多语言:
一、配置国际化插件
启用插件与基础配置
在 .umirc.ts 中配置 locale 参数,指定默认语言、语言文件路径和分隔符:
export default {
locale: {
default: 'zh-CN', // 默认语言
baseSeparator: '-', // 语言文件分隔符(如 zh-CN.ts)
title: true, // 启用标题国际化支持[1,4](@ref)
},
};创建多语言文件
在 src/locales 目录下创建语言文件,例如:
// zh-CN.ts
export default {
'route.login': '登录',
'route.dashboard': '仪表盘',
};
// en-US.ts
export default {
'route.login': 'Login',
'route.dashboard': 'Dashboard',
};二、路由标题国际化配置
在 路由配置 中使用国际化键作为 title 的值:
// .umirc.ts 或 config/config.ts
export default {
routes: [
{
path: '/login',
component: '@/pages/Login',
title: 'route.login', // 引用多语言键
},
{
path: '/dashboard',
component: '@/pages/Dashboard',
title: 'route.dashboard',
},
],
};三、动态路由标题
若标题需要参数化(如显示用户名),可在语言文件中定义动态插值:
// zh-CN.ts
export default {
'route.user': '{name}的个人中心',
};使用时通过 intl.formatMessage 传参:
const title = intl.formatMessage({ id: 'route.user' }, { name: '张三' });四、注意事项
文件命名规范
多语言文件需符合 <lang>-<COUNTRY>.(js|ts|json) 格式(如 zh-CN.ts)。
标题优先级
路由中的 title 会覆盖全局配置的默认标题。
缓存与持久化
配置 useLocalStorage: true 后,当前语言会持久化到 localStorage 中。
特别注意
需要注意的是第一步中 locale 的 title 属性,该配置默认是 false,如果不设置为 true,标题只会显示多语言的 key 值,不会自动转换。
通过以上步骤,可实现路由标题根据语言环境动态切换,满足多语言项目的需求。具体配置可参考 Umi 官方文档中的国际化插件章节和路由配置示例。
未经允许不得转载:前端资源网 - w3h5 » Umi 3配置路由国际化,及配置不生效的解决方法
前端资源网 - w3h5