c# - tabla - unicode simbolos
Localización: ¿Cómo mapear la información cultural a un nombre de script o rango de caracteres Unicode? (5)
Necesito información sobre localización. Estoy usando .net 2.0 con C # 2.0 que se encarga de la mayoría de los problemas relacionados con la localización. Sin embargo, necesito dibujar manualmente los alfabetos correspondientes a la cultura actual en la pantalla en una pantalla en particular.
Esto sería similar a la pantalla Contactos en Microsoft Outlook (vista Tarjetas de direcciones o Vista de tarjetas de direcciones detalladas en Contactos), por lo que necesita una columna de botones en el extremo derecho, uno para cada alfabeto.
Intento emular eso, pero no quiero pedirle al usuario que elija la secuencia de comandos. Si la cultura actual es, por ejemplo, chino, quiero dibujar alfabetos chinos. Cuando el usuario cambia la información cultural a inglés (y cuando reinicia la aplicación), quiero dibujar alfabetos en inglés. Espero que entiendas a dónde voy con esta consulta.
Puedo determinar la cultura del usuario actual (Application.CurrentCulture o System.Globalization.CultureInfo.CurrentCulture dará la información relacionada con el cultivo). También tengo todos los scripts para renderizar los alfabetos. Sin embargo, el problema es que no sé cómo asignar la información cultural al nombre de un script.
En otras palabras, ¿hay alguna forma de determinar el nombre del script correspondiente a una cultura? ¿O es posible determinar el rango de valores de caracteres Unicode correspondientes a una cultura? Cualquiera de ellos me permitiría reproducir los alfabetos en el botón correctamente.
Cualquier sugerencia u orientación con respecto a esto es realmente apreciada. Si hay algo fundamentalmente erróneo en mi enfoque (o con lo que estoy tratando de lograr), por favor señale eso también. Gracias por tu tiempo.
PD: Sé que la solución más fácil es configurar el nombre del script como parte de las preferencias del usuario o mostrar una lista de idiomas para que el usuario elija (a la Contact en Outlook 2007). Pero solo estoy tratando de ver si puedo renderizar los alfabetos correspondientes a la cultura sin que el usuario tenga que hacer nada.
Estoy totalmente de acuerdo con mikiemacman. Además, un lenguaje dado no necesariamente utiliza todas las letras de un guión.
De todos modos, lo más cercano que puedo pensar es CultureInfo.TextInfo.ANSICodePage -> Solo hay un puñado de páginas de códigos ANSI . Podría haber creado una tabla (o una instrucción switch (), cualquiera que sea) que enumere la secuencia de comandos para cada página de códigos ANSI.
Los chinos tienen miles de caracteres, por lo que podría no ser posible mostrar todos los personajes en su conjunto de caracteres. No existe un concepto nativo de ''alfabeto'' en chino, y no creo que el chino tenga un silabario como el japonés.
Pinyin (chino escrito en alfabeto romano) se puede utilizar para representar los caracteres chinos, y eso podría ayudarlo a indexarlos. Sé que esto no responde a tu pregunta, pero espero que sea útil.
En el código nativo, hay LOCALE_SSCRIPTS para GetLocaleInfoEx () (Vista y superior) que le muestra qué secuencias de comandos se esperan para una configuración regional. No hay un concepto similar para .Net en este momento.
Proto, espera! Hay una solución mucho más precisa. Es un estado no administrado que puede tener que P / Invocar.
GetLocaleInfoW(MAKELCID(wLangId, SORT_DEFAULT), LOCALE_FONTSIGNATURE, wcBuf, MAXWCBUF);
Esto le da una estructura LOCALESIGNATURE . El anwer está en el campo lsUsb: campo de bit de subconjuntos Unicode. ¡Ratas! la página MS para esta estructura está vacía. Pero búsquelo en su copia de MSDN. Está completamente documentado allí: un conjunto completo de indicadores que describen qué scripts están distribuidos. Y sí, hay una bandera para Tamil ;-)
HTH.
EDITAR: ¡Ups! No había visto la respuesta de Shawne. ¡Guauu! ¡Respuesta de un experto interno! ;-) De todos modos, es posible que aún esté interesado en una respuesta compatible con Vista previa.
Tema fascinante Si bien es posible que no responda a su pregunta, Omniglot es un buen recurso.
Es probable que la respuesta correcta sea compleja y dependa del problema exacto que está resolviendo. Suponiendo que su objetivo muestre solo las letras utilizadas en un idioma particular para separar las secciones de la agenda (como en Outlook), algunos de los problemas son:
- Personas que tienen nombres de contacto que abarcan varios scripts / idiomas.
- Letras de 2 glifos (p. Ej., ''Lj'' en serbio). Es un fonema, siempre tratado como una sola letra, aunque tiene 2 símbolos Unicode. ''Tendría su propia sección en el directorio telefónico (separada de'' L '').
- Demasiados glifos en la lista (por ejemplo, chino)
- Ordenación poco ortodoxa (por ejemplo, tailandés: una guía telefónica estaría separada solo por consonantes, ignorando las vocales).
- Distinción mayúscula / minúscula (presumiblemente, solo querría un caso para los idiomas que lo admitan, que se divide en menor medida en turco ''i'').