自动检测应可被用户覆盖
别名: 语言自动检测 · 语言协商 · 持久语言偏好 · language negotiation
概念解释
可覆盖的语言协商(overrideable language negotiation)把浏览器、操作系统、账号资料或访问来源推测出的语言当作首次呈现建议,而不是不可逆决定。检测信号可能过时、共享设备可能属于多人,位置也不能可靠推出读写语言。用户一旦明确选择语言,该选择应高于推测信号、可被看见和再次修改,并按已说明的范围持久保存。
机制
多个信号经常冲突:带语言的链接表达当前访问意图,已登录账号保存过去选择,浏览器 Accept-Language 表达设备偏好,操作系统和地理位置又可能不同。若没有明确优先级,每次页面加载、登录或跨设备同步都可能把界面切回“检测结果”。稳健的协商链将当前显式选择与持久用户选择置于自动信号之上,再使用受支持语言匹配和产品默认值兜底;还要记录选择的来源和时间,才能处理会话选择与账号偏好冲突。语言选择只决定界面语言,不应顺带改写地区、货币或时区。
怎么研究
建立信号组合矩阵,覆盖显式 URL/入口选择、匿名持久偏好、账号偏好、浏览器语言序列、操作系统语言、缺失信号和不受支持语言。逐项观察初始语言、用户切换后刷新、登录/退出、跨设备同步与清除站点数据后的结果,并记录决策来源。生产指标可区分检测后立即切换率、反复切换率、错误语言退出率和不同信号组合的覆盖成功率;访谈则询问共享设备、多语言使用和特定任务为何需要临时选择。不能把低切换率直接解释为检测准确,因为入口可能不可发现。
边界
语言标签表示内容或界面的语言选择,不等于用户的国籍、民族、居住地或单一母语。账号级持久化适合个人设备和跨端体验,匿名设备上的持久化却可能影响下一位使用者,应提供清除与临时会话选择。链接中明确指定的语言可能是分享者对该页面的意图,但不应悄悄覆盖接收者长期偏好;产品需声明它是一次性页面覆盖还是新的持久选择。因隐私或同意限制不能写入持久存储时,仍应让当前会话的明确选择稳定生效。
怎么落地
- 公布并实现一致的优先级:当前控件中的明确选择最高;带语言的入口链接作为本次页面请求优先于持久偏好,但不自动改写它;随后才是适用的账号/设备偏好、受支持的浏览器或系统语言匹配和产品默认值。地理推断只作低置信提示。
- 切换时显示当前语言并提供“仅本次”与“保存偏好”等符合产品场景的作用域;登录后若会话与账号偏好冲突,询问或采用公开策略,不静默覆盖刚做的选择。
- 保存 BCP 47 语言标签、来源、作用域和更新时间;不让同一字段驱动地区格式、货币或时区。删除偏好、退出共享设备和账号切换时按声明清理或恢复。
- 用所有信号冲突排列做端到端测试,覆盖刷新、深链接、登录前后、离线、缓存和旧客户端;在遥测中记录决策类别而非推断敏感身份,并对检测后快速切换建立告警。