8

Se si inserisce l'emulatore di Windows Phone o il dispositivo in giapponese, coreano o in altre lingue non latine e si utilizza l'app per persone, la loro implementazione di LongListSelector mostra caratteri di raggruppamento giapponesi, quindi un carattere Unicode "globe with meridians", seguito da az personaggi:Come raggruppare nomi giapponesi e altri non latini in LongListSelector?

WP7 People AppWP7 People App

Con la LongListSelector dal toolkit di Windows Phone, si hanno a che fare la propria logica di raggruppamento manuale. Come ottengo l'elenco dei caratteri di raggruppamento dei nomi giapponese/coreano/ecc. E come posso determinare a quale personaggio di raggruppamento va un nome (dal momento che guardando il mio secondo screenshot, il carattere di raggruppamento non si trova da nessuna parte nel nome dell'utente)?

+3

マ (ma) significa la stessa cosa di ま, il primo carattere della nome mostrato. La differenza è che il carattere di raggruppamento è katakana, mentre l'altro è hiragana. Entrambi i sillabari sono usati per scrivere in giapponese, e mentre hanno scopi diversi (katakana è usato principalmente per prestiti), dovresti trattarli in modo identico per questo tipo di raggruppamento. Non posso dire perché usi il katakana invece dell'hiragana per le intestazioni di gruppo, ma non vedo nulla di sbagliato in nessuna delle due immagini. –

+0

Si noti inoltre che non è un raggruppamento per carattere, ma per "suono iniziale" - la parte che precede la vocale. Questo è un modo comune di organizzare le cose in giapponese, a causa del modo in cui funzionano questi sillabari. –

risposta

2

Non so nulla di Windows Phone Toolkit in particolare, ma fondamentalmente funziona in questo modo: la maggior parte dei nomi giapponesi avrà un modulo Kanji (che normalmente è come è scritto e cosa viene visualizzato). Poiché la forma Kanji può avere pronuncia ambigua, ci sono anche campi per la pronuncia. Usa il campo di pronuncia per raggruppare i nomi. (E puoi raggruppare qualsiasi nome senza dati nel campo di pronuncia in un altro gruppo "altro").

Ad esempio: Kanji: 山 本 次郎 katakana: ヤ マ モ ト ジ ロ ウ

Allora la vostra "caratteri di raggruppamento" sono solo un elenco (o una lista parziale) dei Katakana o Hiragana, e questo ragazzo sarebbe caduta sotto "や" o "ヤ".

3

La risposta breve è: aggiungi 96 al valore unicode di hiragana (ま) per ottenere l'equivalente katakana (マ).

È possibile determinare se un carattere è hiragana controllando che il suo valore unicode rientri nell'intervallo 3040-309F.

Sfortunatamente, come menziona Noah, molti nomi sono scritti usando kanji: un alfabeto di circa 40.000 caratteri ciascuno con equivalenti hiragana e molti contestuali ai loro dintorni. Se vuoi supportare quelli, dovrai cercare una libreria di lingue giapponese per aiutarti.

FYI, katakana viene utilizzato occasionalmente per rappresentare le lettere CAPITAL in modo che spiegherebbe il loro utilizzo qui. (Data la preferenza in lettere minuscole della Metro, avrei pensato che il katakana fosse più adatto).

Se solo si desidera supportare hiragana, ecco qualcosa che dovrebbe aiutare:

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); 
} 

E poi:

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

char s = GetGroupChar(name); 

Debug.WriteLine(s); // マ 
+0

E poi per le altre lingue come coreano, cinese, ecc. Devo capire la loro logica di raggruppamento? Quale potrebbe non corrispondere a come il sistema operativo del telefono lo fa? Speriamo che Microsoft rilasci una sorta di raccoglitore di contatti che ha questo integrato. – bkaid

+0

Il tuo presupposto è corretto.Potrebbe valere la pena cercare in giro una biblioteca che gestisca questo genere di cose. –

Problemi correlati