ABBR HTML标签中标题和内容使用不同的语言

6
假设我正在使用HTML编写一篇文章。文章的语言是瑞典语,因此我使用<html lang="sv">。现在我想在下面的文本中正确标记缩写:
HTML kan användas till mycket.

为此,我首先进行以下操作:
<abbr title="HyperText Markup Language">HTML</abbr> kan användas till mycket.

仅有这些还不够好,因为title属性的语言是瑞典语(sv)。除了理论问题之外,这会使屏幕阅读器以一种非常尴尬的方式发音。为了解决这个问题,我可以做以下操作:

<abbr title="HyperText Markup Language" lang="en">HTML</abbr> kan användas
  till mycket.

这种情况甚至更糟,因为现在缩写“HTML”将被用英语而不是瑞典语读出来[所以从瑞典人的角度来看,它会听起来像“ejtsch-ti-emm-ell”而不是“hå-te-emm-ell”]。因此,abbr节点的缩写或文本内容应该用瑞典语编写,但title属性应该用英语编写。有没有一种首选的(HTML5)标记方式?是这个吗?
<abbr title="HyperText Markup Language" lang="en">
  <span lang="sv">HTML</span>
</abbr> kan användas till mycket.

?


如果这样符合你的要求,那就尽管使用吧。(我没有瑞典文本阅读器,所以无法检查它是否正常工作!) - Mr Lister
Lister先生:我没有任何屏幕阅读器可以测试...不,情况恰恰相反。'acronym'已经过时了;现在你需要使用'abbr'来表示所有的缩写词(我刚刚从头到尾阅读了HTML5规范)。 - Andreas Rejbrand
2
顺便说一下,这里有近 20 万个关于 HTML 的问题,所以我认为你来对地方了。 - Mr Lister
抱歉,缩写词搞混了。脑抽了! - Mr Lister
1个回答

2
你的结论是正确的:在HTML中的语言标记中,你不能将元素的内容指定为与其属性值不同的语言,因为lang属性设置了它们两者。解决方法就是使用内部标记来表示内容。在这一点上,HTML 4和HTML5没有区别。
然而,这是一个非常理论的问题。
首先,实际上abbr标记几乎没什么用处。缩写应该在正常文本内容中进行解释,而不是在属性中。语音浏览器可以选择性地读取title属性值,但在正常模式下,它们会忽略它们——使用语音浏览器的人更喜欢快速阅读,并且通常习惯于相当高的语音速率,拼出缩写会打扰他们。
第二,像“HTML”这样的“缩写词”(实际上是一个适当的名称而不是其他任何东西)在口语中很少被拼出来。你不想听到这样的话:“HyperText Markup Language的新版本是HyperText Markup Language 5,它有许多扩展功能,超过了HyperText Markup Language 4。”
第三,语言标记大部分是可写性的。在大多数情况下,它只是被忽略。谷歌并不关心它。浏览器可能会使用它来决定默认字体的使用,但大多数页面都指定了自己的字体,所以默认值并不重要。一些语音浏览器可以从lang属性中识别出几种语言,但大多数语音浏览器不能:它们按照用户选择的语言规则读取内容。那些使用语言标记的人可能会区分英国和美国英语,因此如果你仍然认为语言标记是相关的,请考虑在这种情况下使用lang="en-GB"。(我假设大多数说瑞典语的人会发现标准英式发音比标准美式发音更易懂和更自然,但我可能错了。)

1
谢谢你的回答,加一。我只想补充一点:我认为标记缩写不仅仅是为了屏幕阅读器的好处,甚至可能不是主要的。在我看来,它可能对不熟悉术语的人非常有用(如果页面主要面向熟悉该术语的人),特别是如果缩写集合和拼写出的文本之间没有双射关系。例如,“CAD”代表“冠状动脉疾病”还是“计算机辅助设计”?如果文本面向计算机专业人士或医学专业人士,您可能不需要拼写出来。 - Andreas Rejbrand
1
此外,即使您基本上知道缩写代表什么,您可能还想检查文本的精确拼写,这时将其放在“标题”中会很方便。 - Andreas Rejbrand
浏览器中title属性的实现很糟糕(微小的文本会消失等),因此作者们越来越多地使用“CSS工具提示”代替(例如,使用一个最初隐藏但在鼠标悬停在某个元素上时变为可见的元素)。这些方法不会出现本文所讨论的语言标记问题,因为文本内容不是出现在属性中,而是作为元素内容呈现。 - Jukka K. Korpela
1
我认同当前实现存在的问题。但是,如果您使用隐藏的 div,则会失去语义(除非您采取复杂的措施来恢复它)。另一个解决方案是仍然使用 title,例如 abbr[title]:hover:after { content:attr(title); border:1px solid black; padding;2px}(但最好还有更好的方法),但我是“KISS”原则的忠实拥护者。 - Andreas Rejbrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接