【问题标题】:What is the correct way to use the lang attribute with phonetic pronunciations (if at all)?将 lang 属性与语音发音(如果有的话)一起使用的正确方法是什么?
【发布时间】:2012-07-19 11:57:29
【问题描述】:

某些语言可以接受拉丁字符的音译,例如印地语、俄语或日语。例如,用梵文书写的“男人在吃东西”的印地语是“आदमी खा रहा है।”。音译为“Aadmi kha raha hai”。 (或类似的东西;这种方法经常在网上使用,尤其是当人们无法使用印地语键盘时。)

在这种情况下,我们使用的是拉丁文,但仍在编写印地语,因此可以使用 lang 属性标记任一变体:

<span lang="hi">आदमी खा रहा है।</span> <span lang="hi">Aadmi kha raha hai.</span>

然后我的问题是关于通常用拉丁字母本身编写的语言,但可能有针对非演讲者/学习者的语音指南(国际音标或临时发音)在赋予其语义意义方面是否有任何最佳实践?

例如,在爱尔兰语中,如果我说“男人在吃东西”,我会说“Tá an fear ag ithe”。我可以将其标记为:

<span lang="ga">Tá an fear ag ithe.</span>

如果我要为不会说话的人提供发音指南,我可能会说“Taw on far eg ih-he”。这句话不是毫无意义的,(如“lorem ipsum”文本)但英语或爱尔兰语的句子也不是。

在这种情况下,HTML 中与语言相关的属性的正确用法是什么,或者该用例目前没有被规范涵盖?

【问题讨论】:

  • 在 SO 上看到爱尔兰语很有趣 :)
  • @Darragh 想为什么不用离家近的例子:)

标签: html localization


【解决方案1】:

短版:如果您想明确地说它是用拉丁字母书写的,请在您提供的示例中选择“hi-Latn”或“ga-Latn”。

长版:

The W3C spec for the lang attribute 没有特别提到这一点 - 它建议了一些依赖于正字法的 this 用途(例如使用它来呈现所用字符的高质量版本),但有些则没有(例如至于搜索引擎)。

RFC1766 指定语言标签的格式,建议标签的特殊化可用于表示“脚本变体,例如 az-arabic 和 az-cyrillic”。还有更多关于脚本子标签in this article on the W3C site 的内容,the later RFC5646 中还有一些额外内容。那一个指向ISO standard list of script names,在该列表中,您想要的脚本是“Latn”,因为它们是其他脚本的罗马化形式。

(这不包括诸如指定您如何进行音译之类的事情,但是,对于可能具有多个标准的语言,例如使用 Wade-Giles 与拼音的拉丁文字中的中文。)

【讨论】:

  • 谢谢,-Latn 后缀很有趣。尽管我试图与印地语做出的区别是爱尔兰语默认是拉丁语:因此,在音译印地语时,它在新脚本中以语音方式拼写,仍然被认为是“印地语”。已经在拉丁语中的语言的语音拼写,如爱尔兰语(或法语/德语/等)呈现出不能被视为任何一种语言的东西。谢谢你的链接,我有一些新的作业要读:)
  • 作为奖励:我不确定您为爱尔兰文本提供的语音拼写有多标准,但 iana.org/assignments/language-subtag-registry 有变体标签,如果它在 IPA (ga-fonipa) 中,您可以使用或 X-SAMPA (ga-fonxsamp)。
  • 完全,100% 不标准 :) 哇,这很有趣,就像我使用 IPA 标准一样,那将是完美的。我还从该页面看到有 Zyyy Zzzz 变体(分别用于“未确定的脚本”和“未编码的脚本”),它们也可能用于非标准变体。
  • 警告:虽然这是正确的,但在某些电子书平台上,此代码会触发奇怪的字体更改;见mobileread.com/forums/showthread.php?t=274838
【解决方案2】:

对于大多数实际用途来说,这并不重要,因为浏览器、搜索引擎和其他相关程序通常会忽略 lang 属性。属性可能会影响字体的选择,但仅限于页面本身不建议字体时(这种情况很少见)。一些语音浏览器识别lang 的一些值并相应地调整它们的功能。如果您在 MS Word 中打开 HTML 文档,它会识别 lang 标记并应用特定语言的拼写工具。但所有这些都是相当有限的,很少有什么关系。此外,在这些情况下,只能识别最简单类型的语言代码。

原则上,可以指明书写系统(“脚本”),例如拉丁文与梵文,以及已使用的音译或转录系统。这已在BCP 47 中进行了描述。但在大多数情况下,它是针对实施者的指导方针,而不是你现在可以使用的东西。

例如,您可以写<span lang="hi-Latn">Aadmi kha raha hai.</span> 表示内容是印地语但用拉丁字母书写。至少在原则上,有一种方法可以指示使用了哪些竞争罗马化系统。我认为任何与网络相关的软件都无法识别lang="hi-Latn";即使识别lang="hi",程序甚至可能无法识别它。

所以你可以使用lang 的详细值,但它没有多大用处。使用像lang="hi" 这样的简单标记对另一种语言的任何主要 片段(例如,一个句子或更多)是一种很好的做法,尽管不多。在花费太多时间之前,请考虑一下您可以期待哪些实际好处。例如,如果您考虑使用像hyphenate.js 这样的客户端连字符,那么lang 标记就变得必不可少;但是您需要查看该软件的预期,而不仅仅是一般规范。

一句警告:在使用lang="ru" 处理用拉丁字母书写的俄语时,我看到了奇怪的结果。原因是浏览器可能会切换到他们的“俄语字体”的想法,导致字体混合。但简单的补救措施是为所有文本进行一些一致的字体设置,在这种情况下覆盖浏览器默认设置。

像“Taw on far eg ih-he”这样的字符串不能被有意义地归类为某种语言。如果您使用语言标记,请使用lang=""(以空字符串作为值),因为这是明确指示未指示语言的定义方式!

【讨论】:

  • 谢谢,我不知道你可以提供一个空的 lang 属性!关于搜索引擎忽略 lang 属性的事实——你有这个链接吗?我一直认为 Google 等人将其用于高级设置(以法语显示结果等)
  • 通常说搜索引擎使用lang 属性,但没有证据表明这一点。测试表明它们没有效果。来自搜索引擎相关人员的非官方声明称lang 属性太不可靠,通常是完全错误的,例如因为一些创作系统会在不询问作者的情况下发出lang="en"。搜索引擎可以很好地从内容中猜出语言,而且确实如此。
  • lang 属性对可访问性很重要,是 WCAG 2.0 的要求。屏幕阅读器使用 lang 属性的值来确定播放期间要使用的正确语音和语音引擎。
【解决方案3】:

您可能想考虑将其标记为<ruby>

例如:

<ruby lang="hi">आदमी<rt>Aadmi</rt> खा<rt>kha</rt> रहा<rt>raha</rt> है।<rt>hai</rt></ruby>

【讨论】:

  • 诚然,我不是专家,但这看起来像是答案。否决者可以发表评论吗? (也许只是形式问题——我同意答案可以提供更多细节,而不仅仅是一个链接)
  • @Jukka 但是&lt;ruby&gt;不是关于语言标记/发音指南吗?
  • @Jukka 所以? &lt;ruby&gt; 用于使用语音指南标记文本。点击链接?
  • :) 谢谢@deceze — 它正在调查ruby 标签,这让我一开始就想到了这个问题!当我研究它时,我认为&lt;rt&gt; 标签可以提供辅助信息,但目前还不清楚这些信息是什么——例如。翻译/简化/音译。我们需要以某种方式添加语义以澄清这一点。因此,如果我在上面的爱尔兰语发音示例中有一个&lt;rt&gt; 标签,您将如何添加该语义含义?主要的&lt;ruby&gt; 标签你可以给一个 'ga' 的 lang 属性,但我不知道你会用 &lt;rt&gt; 做什么。
  • @deceze,我当然想多了,但这就是整个问题! ;) 我想说 1) Lang 属性可以对 SEO、屏幕阅读器等产生影响,目前没有任何用户主动解析文档 2) 如果内容标记正确,它应该优雅地降级而不依赖于某人理解标签(例如,如果代理不理解 &lt;rt&gt; 标签,文本将在浏览器中内联显示)和 3) 根据规范,它可能是原始语言,这是有效的用例。感谢您对此的讨论,它正在澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2021-01-08
  • 1970-01-01
  • 2018-04-10
  • 2013-01-02
  • 1970-01-01
  • 2020-08-27
相关资源
最近更新 更多