CSS规则text-transform:capitalize的效果应该是什么? HTML标记中包含的文本是意大利语,西班牙语,葡萄牙语, 法语等...(这些语言AFAIK没有利用第一个大写 每个单词的字母,因为这是特定于英语而不是这些语言环境)。 我想的是你有一个多语言网站的情况 选择要从数据库中提取的内容的语言 从右上角的下拉菜单显示在页面上。 在这种情况下,因为CSS应该可能是相同的并且是独立的 语言,当开始标记是,
时,效果应该是什么< html lang =“fr”>,< html lang =“pt”>,< html lang =“es”>,< html lang =“it”>等...
而不是
< html lang =“en”>
恕我直言这应该关闭“text-transform:capitalize”的行为, 如果我错了,请纠正我,或者是否应该在某些方面实现 另一方面,也许只能通过用另一个覆盖基本CSS文件 每种支持语言的CSS文件。
感谢您对CSS的I18N问题的回复。
答案 0 :(得分:4)
根据CSS 2.1 definition,text-transform: capitalize
“将每个单词的第一个字符设为大写;其他字符不受影响“。
如果没有严格的“单词”定义,这是模糊的,但对于“大写”,唯一可行的解释是它是Unicode标准的字符大写映射。
规范补充说:“每种情况下的实际转换都是依赖于语言的。”合理的解释是,这是指一些依赖于语言的案例映射异常;例如,用土耳其语,“i”映射到“İ”(上面带有点的大写字母I),而不是普通的“我”。
对于用拉丁字母书写的文本,“单词”通常是字母字符的最大序列,但可以说是像“免税”这样的带连字符的单词是两个单词还是一个单词。无论如何,原则显然是每个字都是大写的。这使得设置相当无用,因为几乎没有任何语言具有这样的规则。在英语中,当作品的标题大写时,对文章和介词都有例外;但CSS属性不知道这样的规则。
CSS文本模块级别3(最后调用工作草案)中的definition更明确一些:“用于'大写'的”单词“的定义是UA依赖的;建议(但不要求)[UAX29]来确定这样的字边界。作者不应期望“大写”遵循特定语言的标准惯例(例如跳过英文文章)。“
这也意味着它不打算遵守有关问题的特定语言规则,一般来说,作品和类似表达的标题是否应该有大写字母。大多数语言没有这样的原则。
如果指定text-transform: capitalize
,则无论语言是什么,无论语言是什么,都要求所有单词都大写,无论语言是什么。如果你认为这使得设置相当无用,那么你得出了正确的结论。
正确的本地化会在需要时将实际上下文中的单词大写。
答案 1 :(得分:3)
我同意你的观点,许多CSS指令的行为应该取决于 lang 属性的值。但问题是它没有。
出于这个原因,使用任何 text-transform 指令会向页面引入I18n错误。至少有(至少)原因:
在先前的案例中,人们通常会给出这三个例子:
还有更多具体案例转换的例子(特别是希腊语),我只想指出你真的需要语言信息才能正确转换案例。
在后一种情况下(附加含义),我只想指出,德语名词应该以大写字母开头,但其他的话不应该。它实际上可能会改变句子的含义,如果你只是将句子中的所有单词都大写(“标题为”它们)。
这个故事的寓意很简单:不使用文本转换指令。留给译员,他们会知道使用什么案例 哦,顺便说一句,相同的单词可能会根据上下文以不同的方式翻译,所以重新使用翻译并“纠正”案例实际上是 坏主意 强>
答案 2 :(得分:0)
但是,您要在HTML标记中设置语言,还可以将类附加到给定语言的HTML标记中。
<html lang="fr" class="lang-fr">
然后在你的css中,你可以使用语言选择器来定位元素。
EG:
.lang-fr p {
text-transform: none;
}