如何进行文本转换:大写与希腊文正常工作?

时间:2015-02-28 15:18:22

标签: uppercase lang css

我遇到的问题与text-transform: uppercase属性对希腊字符的大写有关。

在希腊语中,元音可以有小音调和大写字母,例如希腊语中的 one ένα。在句子的开头是Ένα。但是当一个单词或短语用全部大写编写时,希腊语语法会说它应该有没有重音字母

就像现在一样,CSS的text-transform: uppercase大写希腊字母保留了语法错误的重音(因此ένα变成ΈΝΑ,而它应该是 ΕΝΑ)。

如何让text-transform: uppercase正常使用希腊文?

3 个答案:

答案 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实际修复的内容或测试哪个浏览器可能需要此类解决方案。