如何正确地在.NET中大写希腊语单词?

时间:2010-01-07 13:15:06

标签: asp.net .net localization

我们有ASP.NET应用程序,它运行世界各地的不同客户端。在这个应用程序中,我们有每种语言的字典。在字典中,我们使用小写字母,有时我们会在代码中将其大写为排版原因。

var greek= new CultureInfo("el-GR");
string grrr = "Πόλη";
string GRRR = grrr.ToUpper(greek); // "ΠΌΛΗ"

问题是:

  

...如果你使用大写字母   然后他们必须这样:f.e。   ΠΟΛΗ而不是像ΠΌΛΗ,所有人都一样   用大写字母写的其他单词

因此,通常可以在.NET中正确地使用大写的希腊语单词吗?或者我应该为希腊大写编写我自己的自定义算法吗?

他们如何在希腊解决这个问题?

4 个答案:

答案 0 :(得分:4)

我怀疑如果el-GR没有做你想做的事,你将不得不编写自己的方法。如果这就是你所需要的,那么你认为你不需要全长creating a custom CultureInfo。这很好,因为这看起来非常繁琐。

我建议你做的是阅读this Michael Kaplan blog post以及他可以找到的任何其他相关内容 - 他多年来一直致力于写关于i18n和语言问题的文章,他的评论是我的第一个观点对于Windows上的任何此类问题。

答案 1 :(得分:2)

我对ASP.Net了解不多,但我知道如何用Java做这件事。

如果字符是Unicode,我只需要对ToUpper的输出进行一些简单的替换后处理,一个是将\ u038C(Ό)转换为\ u039F({{1} }或\ u0386(Ο)到\ u0391(Ά)。

从希腊/科普特代码页(\ u0370到\ u03ff)的外观来看,只需要更改几个字符(6或7)。

答案 2 :(得分:2)

答案 3 :(得分:1)

如何用正确的字符替换错误的字符:

/// <summary>
/// Returns the string to uppercase using Greek uppercase rules.
/// </summary>
/// <param name="source">The string that will be converted to uppercase</param>
public static string ToUpperGreek(this string source)
{
    Dictionary<char, char> mappings = new Dictionary<char, char>(){
        {'Ά','Α'}, {'Έ','Ε'}, {'Ή','Η'}, {'Ί','Ι'}, {'Ό','Ο'}, {'Ύ','Υ'}, {'Ώ','Ω'}
    };

    source = source.ToUpper();

    char[] result = new char[source.Length];
    for (int i = 0; i < result.Length; i++)
    {
        result[i] = mappings.ContainsKey(source[i]) ? mappings[source[i]] : source[i];
    }

    return new string(result);
}