路由国际化
多语言
下面讲解国际化和非国际化的简单配置。
非国际化
菜单、面包屑、标签页的文字显示取决于路由 meta 的 title:
export const rolesRoutes: RouterConfigRaw[] = [
{
path: "/home",
name: "Home",
component: import("@/views/home/index.vue"),
meta: {
title: "首页",
},
},
];这样就可以在菜单、面包屑、标签页看到 首页 文字。
国际化
Teek 支持国际化路由的开和关。
局部开启/关闭
路由的 meta 里使用 useI18n 属性:
export const rolesRoutes: RouterConfigRaw[] = [
{
path: "/home",
name: "Home",
component: import("@/views/home/index.vue"),
meta: {
useI18n: true,
},
},
];有 3 种方式配置路由国际化:
name属性填写一个字符串,Teek 会根据该值去国际化文本匹配,如name: "Home"title属性使用{{}}包起来,如title: {{ _route.Home }}title属性使用国际化函数来动态读取国际化文本,如t("_route.Home ")
国际化文件在 src/common/languages/locales 目录下
zh-CN.ts是中文配置文件en-US.ts是英文配置文件
假设两个文件内容:
export default {
_route: {
Home: "首页",
},
};export default {
_route: {
Home: "Home",
},
};name 配置国际化
name 配置了国际化文件,则 name 值会作为 key 读取国际化文件。
假设路由配置为:
export const rolesRoutes: RouterConfigRaw[] = [
{
path: "/home",
name: "Home",
component: import("@/views/home/index.vue"),
},
];以上面的国际化文件内容为例,此时 Teek 会自动添加前缀 _route. 拼接 name 属性值,即寻找 _route.Home 的值。
_route 前缀更改
可以在 src/common/config/service/base-config 的 nameI18nPrefix 修改 _route 前缀。
title 配置国际化
如果配置 title 属性,则 Teek 会解析 {{}} 内的字符串,得到 _route.Home,然后去 src/common/languages/locales 下去寻找对应的 value:
假设路由配置为:
export const rolesRoutes: RouterConfigRaw[] = [
{
path: "/home",
name: "Home",
component: import("@/views/home/index.vue"),
meta: {
title: "{{ _route.Home }}",
},
},
];当 Teek 切换到中文时显示 首页,切换英文时显示 Home。
如果没有配置国际化文件,则默认读取 name 的最后一个 . 的值,如上面的 Home 作为文字渲染。
t 函数配置国际化
title 使用 t 函数可以动态读取国际化文件,如:
import { t } from "@/common/languages";
export const rolesRoutes: RouterConfigRaw[] = [
{
path: "/home",
name: "Home",
component: import("@/views/home/index.vue"),
meta: {
title: t("_route.Home"),
},
},
];警告
t 函数配置国际化在项目启动时立即生效,因此使用关闭国际化功能的 useI18n、routeUseI18n 配置无效。
全局开启/关闭
有时候项目是国际化项目,而路由非常多,给每个路由配置 useI18n: true 比较麻烦,所以可以在 src/common/config/service/base-config 里的 router 开启全局国际化:
export const defaultServiceConfig: ServiceConfig = {
router: {
routeUseI18n: true,
},
};如果您想配置新的国际化语言,请阅读 国际化 文章。
提示
如果需要关闭全局路由国际化,将 routeUseI18n 设置为 false 即可。