2012-03-02 18 views
7

Ho una tastiera touchscreen nella mia applicazione WPF e vorrei consentire agli utenti di scrivere in cinese.Come convertire una stringa pinyin in cinese in C#

Ho visto che c'è un IME in Windows che consente di scrivere in cinese con Pinyin. Funziona benissimo ma mi piacerebbe personalizzarlo per la mia applicazione WPF. (Soprattutto la lista dei candidati). Non ho trovato alcuna documentazione per questo.

L'idea è che l'utente scrive in Pinyin con la tastiera virtuale e ci sarà una lista di scelta con ideogrammi cinesi accanto alla casella di testo.

Avete qualche consiglio per raggiungerlo? Forse c'è una libreria (non di Microsoft) che può farcela e in questo caso non userò l'IME della MS?

+0

se è entrata touch-based, wouldn' è meglio lasciarli inserire i caratteri "scrivendo" sullo schermo invece di usare la conversione pinyin? – Szabolcs

+0

Il touchscreen non è molto reattivo e non sarà facile scrivere in piccole caselle di testo. È per un'applicazione medica, quindi i medici hanno la possibilità di creare nuovi pazienti e dopo averli trovati con il loro nome, il loro nome ecc. Ecco perché non è possibile implementare la soluzione. –

+0

Quindi il motivo per cui si desidera personalizzare l'elenco dei candidati è il completamento automatico del nome del paziente? Il modo in cui la maggior parte dei programmi che conosco implementano questo è consentendo di digitare pinyin (direttamente, non tramite l'IME di sistema) e il completamento automatico basato su quello.Questo problema è molto più semplice dell'implementazione di un IME generale ed efficace --- un IME generale deve gestire tutti i caratteri e deve suggerire le corrispondenze più probabili Il nuovo MS pinyin IME si aggiorna automaticamente da Internet con le ultime statistiche per migliorare le previsioni, e apprende anche dall'utente. – Szabolcs

risposta

3

http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=7D1DF9CE-4AEE-467F-996E-BEC826C5DAA2

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=15251

Microsoft infatti ha buone componenti/librerie per questo, ma sono nascosti qui in Visual Studio Feature Pack International.

Nota che è necessario 1.0 SR 1 che fornisce le librerie di base, mentre 2.0 aggiunge molti controlli WinForms o WPF.

(aggiornato il giorno 26 Ottobre, 2017. Molti ragazzi hanno pubblicato pacchetti Nuget su NuGet.org basata sul codice di Microsoft, per cui si potrebbe anche verificare i pacchetti out.)

+0

Grazie Lex Li, Ho scaricato il pacchetto in precedenza ma non ho visto nulla su come convertire una stringa pinyin in ideogrammi cinesi. Quale funzione devo usare? –

+0

Avrei dovuto rendere più chiaro che occorrono sia 1.0 SR 1 che 2.0. CHSPinyinConv.msi in 1.0 SR1 è quello per la conversione di Pinyin. ChineseChar.GetChars (string pinyin) può essere il tuo punto di partenza. –

+1

Penso che sia meglio menzionare l'intero spazio dei nomi, che è 'Microsoft.International.Converters.PinYinConverter'. Inoltre, più facile da ottenere tramite NuGet oggi: https://www.nuget.org/packages/Microsoft.International.Converters.PinYinConverter/ –

2

Non sono sicuro se siano disponibili pacchetti OS (Open Source). Tuttavia, in teoria, non è troppo difficile costruire questo tipo di libreria. In cinese, ci sono circa 1300 suoni singoli: iniziale + finale + toni. Ogni suono ha un gruppo di caratteri cinesi, un numero variabile da 1 a 130 caratteri.

È possibile definire una matrice di tutti Pinyin suoni:

string[] pinyins = new string[] { 
    "a:c1c2c3...",  // pinyin 1 a: character1 character2... 
    ... 
    "zuo:z1z2z3z4z5..." // last pinyin (1300) zuo: character character... 
}; 

La matrice di cui sopra è una base per la mappatura Pinyin al cinese (caratteri cinesi e toni Pinyin sono stringhe Unicode). Poi per ogni suono di input Pinyin, un elenco di caratteri si ottiene una funzione come questa:

string getCharacters(string aPinyin) { 
    string characters = null; 
    foreach(string item in pinyins) { 
     string[] temp = item.split(':'); 
     if (temp[0].Equals(aPinyin)) { 
      charaters = temp[1]; 
      break; 
     } 
    } 
    return characters; 
} 

ho scritto molto tempo JavaScipt fa, dove ho definito il rapporto tra Pinyin e caratteri cinesi. Nel mio blog: Get Pinyin From Chinese Characters, è possibile trovare lo script visualizzando i codici sorgente o Ispeziona elemento nel menu di scelta rapida. Nel mio blog, lo script viene utilizzato per convertire il cinese in Pinyin, ma la relazione può essere utilizzata come riferimento.

enter image description here

Per aggiungere funzionalità intelligente Pinyin - visualizzazione di un elenco di parole per Pinyin, questo può essere fatto attraverso la definizione di tutte le parole di uso comune nel modello simile: pinyin: parole.

+0

Ciao David, grazie per la risposta. Pensi che gli utenti saranno in grado di scrivere tutto ciò che desiderano con questo dizionario? Intendo cose di base come il loro cognome, nome, commenti su un esame medico. –

Problemi correlati