我遇到的问题与text-transform: uppercase
属性对希腊字符的大写有关。
在希腊语中,元音可以有小音调和大写字母,例如希腊语中的 one ένα。在句子的开头是Ένα。但是当一个单词或短语用全部大写编写时,希腊语语法会说它应该有没有重音字母。
就像现在一样,CSS的text-transform: uppercase
大写希腊字母保留了语法错误的重音(因此ένα变成ΈΝΑ,而它应该是 ΕΝΑ)。
如何让text-transform: uppercase
正常使用希腊文?
答案 0 :(得分:25)
如果CSS知道该语言是希腊语,它将处理这个问题。仅仅指定希腊字符并不能告诉CSS该语言是希腊语;这需要某些父元素的lang
属性(包括html
标记)。
<p lang='el' style="text-transform: uppercase">ένα</p>
应该为你完成工作,渲染
ΕΝΑ
请参阅http://jsfiddle.net/34tww2g8/的小提琴。
答案 1 :(得分:3)
你所描述的并不是CSS中的错误。 CSS旨在设计页面元素的样式。这是一个不可知的定义,独立于文化。你所描述的将要求CSS处理页面的本地化,基于文化特定的程式化CSS然后将被加载。 (en,fr,au ...)。
网上有很多链接可以讨论全球化和本地化以及CSS。
Check the Mozilla site which discusses this same topic请参阅有关创建可本地化UI的部分
答案 2 :(得分:2)
Torazaburo的答案是正确的,但对于较旧的浏览器(主要是IE版本),没有对希腊语重音字符的正确支持,因此您需要使用javascript来替换带有非重音字符的重音
replaceAccented();
function replaceAccented(){
var e = document.getElementsByTagName('*'), l = e.length, i;
if( typeof getComputedStyle == "undefined")
getComputedStyle = function(e) {return e.currentStyle;};
for( i=0; i<l; i++) {
if( getComputedStyle(e[i]).textTransform == "uppercase") {
// do stuff with e[i] here.
e[i].innerHTML = greekReplaceAccented(e[i].innerHTML);
}
}
}
function greekReplaceAccented(str) {
var charList = {'Ά':'Α','ά':'α','Έ':'Ε','έ':'ε','Ή':'Η','ή':'η','Ί':'Ι','ί':'ι','ΐ':'ϊ','Ό':'Ο'
,'ό':'ο','Ύ':'Υ','ύ':'υ','ΰ':'ϋ','Ώ':'Ω','ώ':'ω','ς':'Σ'
};
return str.replace(/./g, function(c) {return c in charList? charList[c] : c}) ;
}
以下是fiddle中的工作函数。
您可以发表评论//replaceAccented()
以查看JavaScript实际修复的内容或测试哪个浏览器可能需要此类解决方案。