Localizzazione: come mappare le informazioni sulla cultura su un nome di script o un intervallo di caratteri Unicode?

StackOverflow https://stackoverflow.com/questions/252662

Domanda

Ho bisogno di alcune informazioni sulla localizzazione. Sto usando .net 2.0 con C # 2.0 che si occupa della maggior parte dei problemi relativi alla localizzazione. Tuttavia, devo disegnare manualmente gli alfabeti corrispondenti alla cultura corrente sullo schermo in una schermata particolare.

Sarebbe simile alla schermata Contatti di Microsoft Outlook (vista Schede indirizzi o Vista Schede indirizzi dettagliate sotto Contatti), quindi ha bisogno di una colonna di pulsanti all'estremità destra, una per ogni alfabeto.

Sto cercando di emularlo, ma non voglio chiedere all'utente di scegliere lo script. Se la cultura attuale è cinese, voglio disegnare alfabeti cinesi. Quando l'utente modifica le informazioni sulla cultura in inglese (e quando riavvia l'applicazione), desidero invece disegnare alfabeti inglesi. Spero che tu capisca dove sto andando con questa domanda.

Posso determinare la cultura dell'utente corrente (Application.CurrentCulture o System.Globalization.CultureInfo.CurrentCulture fornirà le informazioni relative alla cultura). Ho anche tutti gli script per il rendering degli alfabeti. Tuttavia, il problema è che non so come mappare le informazioni sulla cultura sul nome di una sceneggiatura.

In altre parole, c'è un modo per determinare il nome dello script corrispondente a una cultura? Oppure è possibile determinare l'intervallo dei valori dei caratteri Unicode corrispondenti a una cultura? Ognuno di essi mi consentirebbe di visualizzare correttamente gli alfabeti sul pulsante.

Eventuali suggerimenti o indicazioni in merito sono davvero apprezzati. Se c'è qualcosa di fondamentalmente sbagliato nel mio approccio (o in quello che sto cercando di ottenere), ti preghiamo di sottolineare anche questo. Grazie per il tuo tempo.

PS: so che la soluzione più semplice è configurare il nome dello script come parte delle preferenze dell'utente o visualizzare un elenco di lingue tra le quali l'utente può scegliere (a la Contact in Outlook 2007). Ma sto solo cercando di vedere se riesco a rendere gli alfabeti corrispondenti alla cultura senza che l'utente debba fare nulla.

È stato utile?

Soluzione

Nel codice nativo c'è LOCALE_SSCRIPTS per GetLocaleInfoEx () (Vista e amp; sopra) che mostra quali script sono previsti per una locale. Al momento non esiste un concetto simile per .Net.

Altri suggerimenti

Il cinese ha migliaia di caratteri, quindi potrebbe non essere possibile mostrare tutti i personaggi nel loro set di caratteri. Non esiste un concetto nativo di "alfabeto" in cinese e non credo che il cinese abbia un sillabario come il giapponese.

Pinyin (cinese scritto in alfabeto romano) può essere usato per rappresentare i caratteri cinesi e ciò potrebbe aiutarti a indicizzarli. So che questo non risponde alla tua domanda, ma spero sia utile.

Sono pienamente d'accordo con mikiemacman. Inoltre, un determinato linguaggio non utilizza necessariamente tutte le lettere di una sceneggiatura.

Comunque, il più vicino a cui riesco a pensare è CultureInfo.TextInfo.ANSICodePage - > Ci sono solo una manciata di pagine di codice ANSI . Potresti aver creato una tabella (o un'istruzione switch (), qualunque cosa) che elenca lo script per ogni tabella codici ANSI.

Proto, aspetta! C'è una soluzione molto più accurata. È un non gestito su hance che potresti dover P / Invoke.

GetLocaleInfoW(MAKELCID(wLangId, SORT_DEFAULT), LOCALE_FONTSIGNATURE, wcBuf, MAXWCBUF);

Questo ti dà una LOCALESIGNATURE . La risposta si trova nel campo lsUsb: Unicode subset bitfield. Ratti! la pagina MS per questa struttura è vuota. Ma cercalo nella tua copia MSDN. È completamente documentato lì: un intero set di flag che descrivono quali script sono opportuni. E sì, c'è una bandiera per il Tamil ;-)

HTH.

EDIT: Oops! Non avevo visto la risposta di Shawne. Wow! Risposta di un esperto interno! ;-) Ad ogni modo, potresti essere ancora interessato a una risposta compatibile con Pre-Vista.

Argomento affascinante. Anche se potrebbe non rispondere alla tua domanda, Omniglot è una buona risorsa.

La risposta corretta è probabilmente complessa e dipende dal problema esatto che stai risolvendo. Supponendo che il tuo obiettivo mostri solo le lettere utilizzate in una determinata lingua per separare le sezioni della rubrica (come in Outlook), alcuni dei problemi sono:

  • Persone che hanno nomi di contatti che coprono diversi script / lingue.
  • lettere a 2 glifi (ad es. "Lj" in serbo). È un fonema, sempre trattato come una singola lettera sebbene abbia 2 simboli Unicode. 'Avrebbe una sua sezione nella rubrica (separata da' L ').
  • Troppi glifi da elencare (ad esempio cinese)
  • Ordinamento non ortodosso (ad es. tailandese: un elenco telefonico sarebbe separato solo da consonanti, ignorando le vocali).
  • Distinzione maiuscola / minuscola (presumibilmente si vorrebbe solo un caso per le lingue che lo supportano - che si suddivide in modi minori in turco 'i').
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top