跳到主要内容

ARC 2.0.0-beta.25

路由、导航与语言

从页面和内容的声明推导路径,并把 locale 作为同一站点的视图而非复制站点。

Web Device 的路径首先来自站点的已声明结构,而不是散落在组件里的字符串。pages/ 贡献命名页面,content/<type>/ 贡献集合和详情对象;在多语言站点中,这些路径在 locale 视图下呈现。

基本路径模型

当前 runtime 使用下列基础规则:

声明典型可服务路径
pages/index/首页 /
pages/about/命名页 /about/
content/articles/first-post/集合与详情路径,例如 articles/first-post/
有标签的内容集合articles/tags/<tag>/ 及其分页形式
已启用 archive 的集合年/月归档路径

构建和多语言预览会把站点路径放进 locale 语境;例如一个有 enzh 的站点可呈现 /en/about//zh/about/。不要在每个内容对象里再造 en/zh/ 目录来表达同一个内容的语言版本。

声明 locale

站点级默认语言和可用语言属于 .web/site.yaml

yaml
locale: en
locales:
  - en
  - zh

如果没有显式 locales,当前 runtime 也会从 .aup/locales/*.json 的文件名推导语言列表。这个回退适合兼容已有 app;新站点应在 site.yaml 明确声明要支持的语言,以便作者、构建和审阅者共享同一份范围。

内容正文使用 content.zh.md 一类的 locale 文件,页面 layout 使用 layout.zh.aup 一类的 locale 文件,页面 SEO 使用 seo/title.zhseo/description.zh 一类的 locale 文件。它们都在原目录中覆盖默认版本;不要复制整个站点目录树。

导航与 URL 的边界

导航是读者如何发现页面的结构;路由是 runtime 能否服务一个 URL 的结构。两者经常相关,但不能互相代替:

  • 在导航中增加一个链接,不会创建页面或内容对象;先保证目标路径有真实的 page 或 content 声明。
  • 页面目录存在,也不自动代表它应在每一个导航菜单中出现;把公开信息架构作为显式的导航决定。
  • 组件内硬编码 /zh//en/ 或某个内容 slug,会让新 locale、重命名和本地预览更脆弱。优先使用当前页面的 locale 与已解析的对象 route。

注意保留名称与集合冲突

Web Device 有已声明的内置或集合路由形状。search 是内置搜索路径;集合中 tagspagefeed.xml 也有专门语义。archive、pagination 或标签页启用后,某些本来可作为 slug 的路径会被路由规则遮蔽。

因此,建立集合前应先确定类型名和常见 slug;启用 archive、feed 或分页后,应重新跑构建和链接检查。不要把“目录能创建”误认为“每个 URL 都不会冲突”。

本地验收

  1. .web/site.yaml 写默认语言与显式语言列表。
  2. 添加一份默认内容和一份 content.<locale>.md
  3. 为至少一个页面设置 locale 的 title/description,并在需要时设置 layout 变体。
  4. 运行 arc blocklet build .;检查生成的各语言页面与 sitemap。
  5. 用直接本地运行的 blocklet 打开每个语言页面、一个详情页和一条导航链接。

有关内容版本如何读取,见内容对象、元数据与语言;有关站点配置字段,见全站配置