多语言(多语言目录架构)
Methanol 采用“多语言目录”架构:若某目录的 index.mdx 设置了 lang 属性,该目录即被识别为独立的语言入口。该方案无需引入复杂的 i18n 系统,即可实现轻量且清晰的翻译内容组织。
核心机制
- 包含
lang属性的index.mdx所在目录即为该语言的 语言根目录。 - 语言选择器将以
lang字段值作为展示标签。 - 系统根据当前路由自动匹配最近的语言根目录,并据此判定激活语言。
- HTML 的
lang属性将映射至langCode字段(包含根目录索引);若未定义,则自动回退至目录名。
目录结构示例:
pages/
index.mdx # 默认语言根目录
zh/
index.mdx # 中文语言根目录
guide.mdx
fr/
index.mdx # 法语语言根目录
guide.mdx
Frontmatter 示例:
---
title: 简体中文
lang: 简体中文
langCode: zh
isRoot: true
hidden: true
---
语言选择器集成
默认主题在检测到配置了 lang 属性的目录索引页时,将自动激活语言选择器(涵盖根路径 /)。
- 展示标签: 源自
lang字段。 - 当前激活项: 由
ctx.language自动判定。
导航根路径设定
语言根目录通常建议配合 isRoot: true 使用,以将侧边栏导航范围限定在该语言子树中。
注意:isRoot 标记的页面默认隐藏;若需在侧边栏展示,请显式设置 hidden: false。
通过此项配置,各语言版本即可拥有完全独立的导航结构。
ctx.languages 数据结构
ctx.languages 是聚合了所有已配置语言入口的数组。在生成链接时,请务必使用 routeHref(已自动适配 site.base)。
{
routePath: '/zh/',
routeHref: '/zh/',
label: '简体中文',
code: 'zh'
}
若根目录的 index.mdx 同样配置了 lang 属性,则默认语言亦会包含在该列表中。
开发提示
isRoot页面默认隐藏;若需展示,请设置hidden: false。- 推荐使用对称的路径结构(如
/guide与/zh/guide),使项目架构更为直观。 - 在语言索引页应用
isRoot: true,可在保留导航范围的同时,避免默认语言入口冗余出现在路由列表中。