CSS:“文本转换:大写”和意大利语,西班牙语,葡萄牙语,法语等

Joh*_*son 4 html css localization internationalization

CSS规则text-transform的效果是什么:如果HTML标记中包含的文本为意大利语,西班牙语,葡萄牙语,法语等,则大写(这些语言AFAIK不使用大写)每个单词的第一个字母,因为它专用于英语,而不是特定于这些语言环境。我想到的是您有一个多语言站点,可以在其中选择要从数据库中提取内容的语言,并从右上角的下拉菜单中将其显示在页面上。在这种情况下,由于CSS可能与语言相同且无关紧要,因此,例如,当开始标记为

<html lang =“ fr”>,<html lang =“ pt”>,<html lang =“ es”>,<html lang =“ it”>等。

代替

<html lang =“ zh-CN”>

恕我直言,这应该关闭“文本转换:大写”的行为,如果我错了,请纠正我,或者如果应该以其他方式实现,也许只能通过用每个CSS覆盖另一个CSS文件来覆盖基本CSS文件支持的语言。

感谢您对有关CSS的I18N问题的答复。

Juk*_*ela 6

根据CSS 2.1的定义text-transform: capitalize“将每个单词的首字母大写;其他字符不受影响”。

没有对“单词”的严格定义,这是模糊的,但是对于“大写”,唯一可行的解​​释是,它是Unicode标准对字符的大写映射。

该规范补充说:“每种情况下的实际转换都取决于书面语言。”合理的解释是,这指的是某些与语言有关的案例映射异常。例如,在土耳其语中,“ i”映射到“?”(上面有点的大写字母I),而不是通用的“ I”。

对于以拉丁字母书写的文本,“单词”通常是字母字符的最大序列,尽管可以断定诸如“免税”之类的连字单词是两个单词还是一个单词。无论如何,原则是每个单词都大写。这使得该设置变得毫无用处,因为几乎所有语言都没有这样的规则。用英语,当作品的标题大写时,冠词和介词例外。但是CSS属性不知道此类规则。

定义的CSS文本模块级别3(一个最后呼叫工作草案)是较为明确的:用于‘利用’字‘“的定义’是UA-依赖; 建议(但不是必需)[UAX29]来确定此类单词边界。作者不应期望“大写”遵循特定于语言的标题惯例(例如跳过英语文章)。”

这也意味着,我们无意遵守与特定语言有关的规则,即有关作品标题和可比表达方式一般应大写的问题。大多数语言没有这样的原则。

如果指定text-transform: capitalize,则无论语言是什么,无论上下文是什么,无论什么词,都要求所有单词都大写。如果您认为这样会使设置变得毫无用处,那么您就得出了正确的结论。

适当的本地化在需要时将实际情况下的单词大写。


Paw*_*yda 5

我同意你的看法,许多 CSS 指令的行为应该取决于lang属性的值。然而,问题是它没有。

因此,使用任何文本转换指令都会向页面引入 I18n 错误。有(至少)原因:

  • 文本转换规则严格依赖于语言
  • 在某些语言中,首字母的大小写会带来额外的信息

在前面的案例中,人们通常会给出这三个例子:

  • 土耳其语中的两个“i”字符:dotted i(大写版本:?)和 dotless ? (大写版本:)。如您所见,没有上下文就无法正确转换
  • 德语字母 s: ß根据语法规则应大写为两个字母SS。我已经有一段时间没有测试过它了,但几个月前,唯一能正确使用它的网络浏览器是 Chrome ......
  • 希腊字母sigma有一种大写形式吗?,但有两种小写形式:? (常规)和(最终的)。两者中的任何一个的使用取决于它们在词中的位置。

有更多具体案例转换的例子(尤其是希腊语),我只是想指出您确实需要语言信息才能正确转换案例。

在后一种情况下(附加含义),我只想指出,在德语中名词应该以大写字母开头,但其他单词不应该。如果您只是将句子中的所有单词大写(“标题大小写”),它实际上可能会改变句子的含义。

这个故事的寓意很简单:不要使用 text-transform 指令。交给翻译人员,他们会知道使用什么大小写。
哦,顺便说一句,根据上下文,相同的词可能会以不同的方式翻译,因此重新使用翻译并“纠正”案例确实是个坏主意