是否应为专有名词与外来词使用HTML lang属性?
我清楚在HTML页面及内容中使用lang属性的诸多作用,比如让辅助技术正确发音、帮助自动翻译工具准确处理内容、符合无障碍规范等,但针对以下两种特定场景,我不确定是否应该使用该属性:
场景1:外来专有名词
比如 <span lang="en">Charles</span> 对应发音/t͡ʃɑɹlz/,而 <span lang="fr">Charles</span> 对应发音/ʃaʁl/;再比如 <span lang="en">Andrea</span> 是女性名字,<span lang="it">Andrea</span> 则是男性名字(这会影响自动翻译时代词的选择)。
场景2:外来词
比如英文里的'café'不管带不带末尾重音符号,发音都是/ˈkæfeɪ/;但法语里'cafe'发音是/kaf/,英文里无重音的'cafe'发音是/keɪf/(两种语言里这两个拼写对应的词汇不同)。由此推测'cafe/café'应该标记为en(继承所在英文文本的语言属性),才能保证两种拼写都能被正确发音。
不同风格指南对外来词是否需要特殊样式(通常是斜体)的规定不一样,一般看使用频率——比如café在英文里用得足够多,不用高亮。但很多不常见的外来词在英文里仍保留原发音,是否应该像 <span lang="en">I'm French, so bad <i lang="fr">pain</i> causes me great pain</span> 这样,给这类词标记lang属性来明确发音规则?
我从没在实际场景中见过针对这两种情况用lang属性的例子,哪怕是无障碍(a11y)/国际化(i18n)标记做得好的网站也没有,网上也找不到WCAG等规范里针对这两种情况的具体参考。
一、理想场景下的答案(不考虑标记成本)
根据W3C国际标准文档、WCAG无障碍规范的核心原则,只要内容的语言属性与上下文语言不同,就应该明确标记lang属性:
- 外来专有名词:如果名字的发音、语义(比如Andrea的性别)依赖其原始语言,必须用
lang属性标记原始语言。比如来自意大利的Andrea,就标lang="it",这样屏幕阅读器会用意大利语发音规则朗读,自动翻译工具也能准确判断性别对应代词。 - 外来词:
- 若外来词已被目标语言完全吸收(比如英文里的café),可以继承上下文的
lang属性(即en),因为它的发音、用法已经本地化; - 若外来词仍保留原始语言的发音、语义(比如英文语境中保留法语发音的
pain),则必须标记原始语言的lang属性(lang="fr"),确保辅助技术用正确的发音规则处理,避免歧义。
- 若外来词已被目标语言完全吸收(比如英文里的café),可以继承上下文的
二、基于实际处理情况的实用答案
结合搜索引擎、主流辅助技术(如屏幕阅读器NVDA、VoiceOver)的实际表现,以及Stack Overflow社区的实践讨论:
- 外来专有名词:
- 只有当名字的语义或发音会产生严重歧义时(比如Andrea的性别),才有必要标记
lang属性。大多数情况下,辅助技术和搜索引擎对常见的外来名字有一定的识别能力,不标记也不会出现大问题;但如果是非常生僻的外来名字,标记lang属性能提升体验。
- 只有当名字的语义或发音会产生严重歧义时(比如Andrea的性别),才有必要标记
- 外来词:
- 对于已经本地化的外来词(如café),完全不需要额外标记,继承上下文
lang属性即可,主流工具都能正确处理; - 对于保留原始发音的不常见外来词,虽然理想场景建议标记,但实际中主流辅助技术对局部
lang属性的支持参差不齐——部分屏幕阅读器可能不会切换发音规则,搜索引擎也很少以此作为排名或翻译的核心依据。除非你的网站核心用户依赖无障碍工具,否则可以不用标记,或者仅用斜体等样式区分即可。
- 对于已经本地化的外来词(如café),完全不需要额外标记,继承上下文
内容的提问来源于stack exchange,提问作者08915bfe02

