Как сгруппировать японские и другие нелатинские имена в LongListSelector? - PullRequest
8 голосов
/ 02 февраля 2012

Если вы поместили свой эмулятор Windows Phone или устройство на японский, корейский или другие нелатинские языки и используете приложение people, их реализация LongListSelector отображает японские символы группировки, затем символ Unicode "глобус с меридианами", за которым следуетсимволы z:

WP7 People App WP7 People App

Используя LongListSelector из набора инструментов Windows Phone, вы должны выполнить собственную логику группировки вручную.Как получить список символов группировки имен в японском / корейском / и т. Д. И как определить, к какому символу группировки относится имя (поскольку, глядя на мой 2-й снимок экрана, символ группировки нигде не указан в имени пользователя)?

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Короткий ответ: вы добавляете 96 к значению юникода хираганы (ま), чтобы получить эквивалент катаканы (マ).

Вы можете определить, является ли символ хирагана, проверив, что его значение в юникоде падаетв диапазоне 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); // マ
2 голосов
/ 03 февраля 2012

В частности, я ничего не знаю о Windows Phone Toolkit, но в основном он работает следующим образом: большинство японских имен будут иметь форму кандзи (обычно так, как она написана и что отображается).Поскольку форма кандзи может иметь неоднозначное произношение, также есть поля для произношения.Вы используете поле произношения для группировки имен.(И вы можете сгруппировать любые имена без данных в поле произношения в другую "другую" группу).

Например: кандзи: 次郎 本 次郎 катакана: ヤ マ モ ト ジ ロ ウ

Тогда ваши "символы группирования"это просто список (или частичный список) катаканы или хираганы, и этот парень попадет под "" "или" ヤ ".

...