如何在LongListSelector中对日语和其他非拉丁语名称进行分组?

时间:2012-02-02 18:11:47

标签: c# windows-phone-7 internationalization longlistselector

如果您将Windows Phone模拟器或设备放入日语,韩语或其他非拉丁语言并使用人员应用程序,他们的LongListSelector实现显示日语分组字符,然后是unicode“地球与子午线”字符,其次是az字符:

WP7 People App WP7 People App

使用Windows Phone工具包中的LongListSelector,您必须执行自己的手动分组逻辑。如何获取日语/韩语/等名称分组字符列表以及如何确定名称所属的分组字符(因为查看我的第二个屏幕截图,分组字符在用户名中没有出现)?

2 个答案:

答案 0 :(得分:3)

简短的回答是:你将hiragana(ま)的unicode值加96,得到相应的片假名(マ)。

您可以通过检查字符的unicode值是否在3040-309F范围内来确定字符是否为平假名。

不幸的是,正如诺亚所提到的,许多名字拼写使用汉字:一个大约40,000个字符的字母表,每个字符都有平假名等价物,并且与周围环境有很多相关联。如果你想支持这些,你需要找一个日语库来帮助你。

仅供参考,片假名偶尔用于代表大写字母,以便在此处解释它们的用法。 (考虑到Metro的小写偏好,我认为片假名更适合)。

如果你只想支持平假名,这里应该有所帮助:

const int KatakanaStartCode = 0x30A0;
const int HiraganaStartCode = 0x3040;
const int HiraganaEndCode = 0x309F;

private char GetGroupChar(string name)
{
    // Check for null/blank
    // Check for numbers, etc

    char firstChar = name[0];
    int firstCharCode = (int)firstChar;

    bool isHiragana = (HiraganaStartCode <= firstCharCode && 
        firstCharCode <= HiraganaEndCode);

    if (isHiragana)
    {
        char katakanaChar = (char)(firstCharCode + 
            (KatakanaStartCode - HiraganaStartCode));

        return katakanaChar;
    }

    return Char.ToLowerInvariant(firstChar);
}

然后:

string name = "またな たなかあ";

char s = GetGroupChar(name);

Debug.WriteLine(s); // マ

答案 1 :(得分:2)

我对Windows Phone Toolkit一无所知,但基本上,它的工作方式如下:大多数日语名称都有汉字形式(通常是如何编写的,以及显示的内容)。由于汉字形式可能具有模糊的发音,因此也存在用于发音的字段。您可以使用发音字段对名称进行分组。 (并且您可以将发音字段中没有数据的任何名称分组到另一个“其他”组中。)

例如: 汉字:山本次郎 片假名:ヤマモトジロウ

然后你的“分组字符”只是片假名或平假名的列表(或部分列表),这个人会属于“や”或“ヤ”。