跳转到内容

多语言支持

提示

如问题仍未解决,可前往 GitHub Issues 搜索或提交新的反馈,或加入 QQ 群 694413711 获取社区支持。

随时欢迎您为本教程添砖加瓦。

如何正确设定 HTML 页面语言

设定优先级:请查阅页面语言设定优先级

  1. 正确设定主题设置中的默认内容语言
  2. 文章分类标签页面默认内容语言不同的,前往对应设置正确设定其元数据。

规范大小写

设置默认内容语言与页面语言元数据时,请使用规范大小写:语言小写、脚本首字母大写、地区大写,例如 zh-Hans-CNzh-Hanszh-CNen-US

如何修改页面固定文字/修改语言文件

请到 Halo CMS 部署目录下,找到 themes/howiehz-higan/i18n 文件夹。在里面找到对应语言的 properties 文件,修改保存即可(如简体中文是 zh_Hans.properties)。

本主题默认开启是否根据页面内容语言同步 Cookie 语言

开启后,若无非空 ?language= 参数访问页面,且浏览器中的 language Cookie 与当前页面语言[1]不一致,主题会将 language Cookie 同步为当前页面语言[1:1],并在设置成功后刷新一次页面。

规范大小写

Cookie 语言同步只在比较时忽略大小写,并会将 _ 视为 -。例:zh_CNzh-CNzh-cn 会被视为同一个语言值。
写入 language Cookie 时会保留当前页面语言[1:2]的原始写法;若当前页面语言[1:3]zh-Hans,写入值就是 zh-Hans,不会改成 zh-hans
因此,页面语言设定优先级涉及的项应使用规范大小写:语言小写、脚本首字母大写、地区大写,例如 zh-Hans-CNzh-Hanszh-CNen-US

若本次访问会触发浏览器按语言自动跳转,主题会先跳转到带有 ?language=... 的目标页面,不会在当前页面执行 Cookie 同步。

这可避免主题固定文字继续按上一次 Cookie 语言显示,导致当前页面语言[1:4]与主题文字不一致。若不希望同步 Cookie 造成额外刷新,可关闭此项。

浏览器按语言自动跳转使用指南

本主题有完善的按语言自动跳转支持,可启用浏览器按语言自动跳转

警告

若 URL 已包含非空 ?language= 参数,或当前文章分类标签页面已设置“页面语言”元数据标记,则不会执行浏览器按语言自动跳转。

提示

F12(或 Fn+F12)打开开发者控制台,上面选择控制台(console)。 输入 navigator.language 后回车即可查看你浏览器的 navigator.language 值。

规范大小写

浏览器按语言自动跳转只在匹配时忽略大小写,并会将 _ 视为 -。例:zh_CNzh-CNzh-cn 会按同一个候选值参与匹配。
写入 ?language= 时会使用匹配到的允许跳转目标写法(仅会将 _ 替换为 -);若配置值是 zh-Hans,跳转参数就是 ?language=zh-Hans,不会改成 ?language=zh-hans
因此,允许跳转的目标区域语言代码列表应使用规范大小写:语言小写、脚本首字母大写、地区大写,例如 zh-Hans-CNzh-Hanszh-CNen-US

启用此选项后,允许跳转的目标区域语言代码列表应设置形如以下形式。
注:未启用多语言功能前缀匹配模式时,按浏览器语言候选路径顺序匹配;启用后,按下方列表从上到下匹配。

允许跳转的目标区域语言代码列表
zh-CN
en-US

匹配流程

为方便配置,自动跳转会先根据浏览器语言生成候选路径,再用候选路径匹配允许跳转的目标区域语言代码列表。

命中目标语言后,主题会判断它和默认内容语言是否“等价”:如果默认内容语言已经能覆盖这个目标语言,就不跳转;否则才跳转到带 ?language= 的 URL。

例如,默认内容语言是 zh-CN,浏览器最终匹配到的目标语言是 zh-Hans。因为 zh-CN 的候选路径包含 zh-Hans,当前页面已经可以作为简体中文目标页,所以不会跳转。

判断 zh-Hanszh-Hant 等具体中文语言目标是否等价时,会刻意排除通用 zh,所以 zh-Hanszh-Hant 不会只因为都能回退到 zh 就被当成同一种语言。

候选路径表格

中文语言的候选路径会尽量与 Halo CMS 后端语言资源查找逻辑保持一致,如下:

navigator.language候选路径
zh-CN / zh-SGzh-Hans-{REGION} -> zh-Hans -> 原始语言代码 -> zh
zh-Hans-*原始语言代码 -> zh-Hans -> zh-{REGION} -> zh
zh-Hanszh-Hans -> zh-CN -> zh
zh-TW / zh-HK / zh-MOzh-Hant-{REGION} -> zh-Hant -> 原始语言代码 -> zh
zh-Hant-*原始语言代码 -> zh-Hant -> zh-{REGION} -> zh
zh-Hantzh-Hant -> zh-TW -> zh
zh-MY 等其他 zh-*原始语言代码 -> zh
zhzh
其他非中文语言原始语言代码

启用多语言功能前缀匹配模式后,允许跳转的目标区域语言代码列表中的语言代码可按浏览器语言候选前缀匹配,而无需完全匹配。
例:下面的 zh 可匹配 zh-Hanszh-Hant 等中文候选。

注意:若使用通用 zh 作为允许跳转目标,简体中文与繁体中文会被主动收敛到同一个 zh 目标;若希望简体、繁体分别跳转,请使用 zh-Hanszh-Hant 或更具体的区域语言代码。

允许跳转的目标区域语言代码列表
zh
en

多语言菜单使用指南

本主题有完善的多语言菜单支持,可启用多语言菜单支持

多语言菜单根据当前页面语言[1:5]匹配一级菜单名称。

规范大小写

多语言菜单只在匹配时忽略大小写。例:zh-CNzh-cn 会被视为同一个语言值。
因此,一级菜单名称应使用规范大小写:语言小写、脚本首字母大写、地区大写,例如 zh-Hans-CNzh-Hanszh-CNen-US

警告

若有多个一级菜单项同时命中,所有命中菜单项的子菜单都会渲染。

启用此选项后,主菜单应设置形如以下形式。(注:zh-CN 项可选择自定义链接,链接为 /,名称为 zh-CN。其中名称为关键设置,其他不影响匹配)

一级菜单项二级菜单项
zh-CN首页
关于
en-USHome
About

启用多语言功能前缀匹配模式后,将允许一级菜单名称匹配当前页面语言[1:6]的前缀,而无需完全匹配。
例:当前页面语言[1:7]zh-Hanszh-Hant 时,下面的 zh 菜单均可匹配。

一级菜单项二级菜单项
zh首页
关于
enHome
About

默认内容语言设置值忽略大小写后相同的将被作为默认菜单,默认菜单将在没有成功匹配的时候显示。

多语言页面底部/侧边栏内容使用指南

多语言页面底部/侧边栏内容根据当前页面语言[1:8]匹配配置项中的语言代码。

规范大小写

多语言页面底部/侧边栏内容只在匹配时忽略大小写。例:zh-CNzh-cn 会被视为同一个语言值。
因此,自定义多语言页面底部/侧边栏内容中的“语言代码”应使用规范大小写:语言小写、脚本首字母大写、地区大写,例如 zh-Hans-CNzh-Hanszh-CNen-US

警告

若有多个配置项同时命中,所有命中的页面底部/侧边栏内容都会渲染。

启用多语言页面底部/侧边栏内容支持后,自定义多语言页面底部/侧边栏内容应设置形如以下形式。

自定义多语言页面底部/侧边栏内容
语言代码页面底部/侧边栏内容
zh-CN你好!
语言代码页面底部/侧边栏内容
en-USHello!

启用多语言功能前缀匹配模式后,将允许语言代码匹配当前页面语言[1:9]的前缀,而无需完全匹配。
例:当前页面语言[1:10]zh-Hanszh-Hant 时,下面的 zh 均可匹配。
以上配置可改为:

自定义多语言页面底部/侧边栏内容
语言代码页面底部/侧边栏内容
zh你好!
语言代码页面底部/侧边栏内容
enHello!

默认内容语言设置值忽略大小写后相同的将被作为默认页面底部/侧边栏内容,在没有成功匹配的时候显示。

多语言个人简介/公告栏使用指南

多语言个人简介/公告栏根据当前页面语言[1:11]匹配配置项中的语言代码。

规范大小写

多语言个人简介/公告栏只在匹配时忽略大小写。例:zh-CNzh-cn 会被视为同一个语言值。
因此,自定义多语言公告栏内容中的“语言代码”应使用规范大小写:语言小写、脚本首字母大写、地区大写,例如 zh-Hans-CNzh-Hanszh-CNen-US

警告

若有多个配置项同时命中,所有命中的个人简介/公告栏内容都会渲染。

启用多语言个人简介/公告栏支持后,自定义多语言公告栏内容应设置形如以下形式。

自定义多语言公告栏内容
语言代码个人简介/公告栏内容
zh-CN你好!
语言代码个人简介/公告栏内容
en-USHello!

启用多语言功能前缀匹配模式后,将允许语言代码匹配当前页面语言[1:12]的前缀,而无需完全匹配。
例:当前页面语言[1:13]zh-Hanszh-Hant 时,下面的 zh 均可匹配。
以上配置可改为:

自定义多语言公告栏内容
语言代码个人简介/公告栏内容
zh你好!
语言代码个人简介/公告栏内容
enHello!

默认内容语言设置值忽略大小写后相同的将被作为默认公告栏内容,默认公告栏将在没有成功匹配的时候显示。


  1. 当前页面语言指代页面 <html>lang 属性,设定顺序遵循页面语言设定优先级↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

基于 MIT 许可发布