浏览器语言与应用本地化
把浏览器语言偏好作为本地化提示,但不要把它当作身份或位置证明,也不要取代用户的明确选择。
浏览器语言偏好可以帮助应用选择第一种翻译,但它只是提示。navigator.language 表示主要语言,navigator.languages 可能返回有序偏好列表。它们都不能证明用户住在哪里、属于哪个国家,或用户在每项任务中想用哪种语言。可靠的应用应协商受支持的 locale,提供语言选择器,并在资源缺失时保留可读的回退体验。
Navigator 语言值的含义
Navigator 接口公开浏览器或用户设置的语言偏好。MDN Navigator.language 说明主要语言标签,WHATWG Navigator.languages 说明有序偏好列表。fr-CA 表示内容的语言和地区偏好,不表示用户的实际地理位置。
列表可能为空、只有一个值,也可能在浏览器设置改变后更新。应把它当作选择过程的输入,而不是永久画像。文档的 lang 属性承担不同职责:它帮助屏幕阅读器选择发音规则,并且在可见语言改变时必须同步更新。
协商受支持的 locale
先列出应用真正完成翻译的 locale。规范化语言标签,先尝试最具体的地区形式,再回退到父语言。若支持 fr-CA、fr 和 en,加拿大法语请求可使用 fr-CA,其他法语请求使用 fr,剩余请求使用 en。不要编造翻译,也不要把不同地区当成完全相同。
可以使用这样的顺序:已保存的明确选择、navigator.languages 中第一个受支持值、列表不可用时的 navigator.language,最后是稳定的产品默认语言。这一顺序也适用于只能提供较少信息的内嵌网页。默认语言必须是完整体验,不能显示未翻译的键名。
国际化要区分语言、文字和地区。W3C Internationalization 说明这些标签部分不能互相替代。缺少某个变体时,应说明采用了哪种回退,并让用户能在选择器中切换其他语言。
让明确选择保持优先
自动选择适合首次访问,但不能让用户困在看不懂的界面。选择器应显示已翻译的语言名称,有明确的当前值,并支持键盘操作。只有在用户明确选择后才保存 locale;再次访问时,先恢复该选择,再读取已变化的浏览器偏好。说明选择影响当前页面、账户还是后续访问。
切换时保留内容、焦点、表单和草稿。如果资源加载失败,保留上一个可读语言并提供重试。语言偏好不是推广消息、数据传输或法律决定的同意。语言协商只改变呈现方式,不能改变功能的隐私政策。
加载资源而不破坏内容
对翻译资源做版本管理,并验证每个页面需要的键都存在。过渡期间显示原来的文字或上一版本,而不是内部键名。不要把独立短语拼接成句子,因为语序和复数规则会随语言变化。日期、数字和列表应使用 Intl 格式化;存储数据保持规范形式,不能用语言推断税务国家或支付方式。
更新文档 lang、标题、描述、alternate 链接和文字方向。测试长译文、从右到左文字、数字与代码混排、缩放和大字体。多语言 URL 应保持相同内容意图;缺少翻译时不能把有效 URL 重定向到无关首页。
测试偏好、fallback 与无障碍
测试空偏好列表、不支持的地区、带文字系统的标签,以及只提供 navigator.language 的浏览器。先做明确选择,再改变浏览器偏好,确认应用选择仍然优先;清除应用选择后,确认协商再次可预测。
测试慢网、请求中断和过期缓存。保留用户输入,提供进度说明和可恢复的重试。用键盘操作选择器,验证语言切换后的焦点,并让屏幕阅读器读到新的 lang 和标签。检查复数、十进制分隔符、文本扩展和放大显示。
隐私与边界
语言偏好与其他值组合时,可能增加浏览器配置的可识别性。如果应用只需要一个 locale,就不要把完整列表发送到分析系统。不能据此推断居住地、国籍或敏感属性。如果提供远程翻译,要说明接收文本的服务、保留期限以及启动传输的明确操作。缺少本地资源时,绝不能静默上传私密内容。
公开说明哪些 locale 完整、哪些使用语言回退,并始终保留可访问的默认路径。存储、同步或资源打包发生变化时重新检查控制边界。
日期和数字的显示应把 locale 决策与存储数据分开,可参考 Intl 格式化指南。还可以阅读浏览器隐私选择来检查数据边界。
通知、生成文件和支持记录也应遵循相同边界:改变标签,不改变数据或权限。
说明每个选择器的作用范围,并在资源缺失时显示清晰的回退选项。
语言标签可能包含文字系统和地区,协商时应保留这些区别。
协商应保持确定性,以便支持人员复现结果,同时不必保存完整的浏览器列表。
即使选择的资源包尚未加载,登录和恢复流程也应保持可理解。
服务器渲染和客户端渲染都应让已保存的明确选择保持相同优先级。
本地化质量包括标题、标签、提示、替代文本和复数规则,而不只是翻译词语。
缺少某个 locale 时,应提供其他语言、默认语言或重新加载的选择。
隐私控制、内嵌网页行为或国际化数据改变后,应重新检查协商路径。
默认语言必须让用户完成任务,而不是等待新的资源下载。
切换语言不能删除已输入的数据或已经授予的权限。
错误消息同样需要翻译,或提供用户能理解的回退。
存储的日期和金额含义不能因为显示 locale 改变。
文字方向与文档 lang 都属于无障碍支持。
浏览器偏好不能替代用户对内容传输的明确决定。
让每种 locale 的选择都易于理解,并说明如何在移动设备和桌面设备返回默认语言。
相同建议适用于移动和桌面浏览器。
断言与来源对应
- MDN Navigator.language 说明主要语言值。
- WHATWG Navigator.languages 说明有序偏好列表。
- W3C Internationalization 说明语言、文字和地区的区别。
- MDN Navigator 说明浏览器接口。