2010-01-07 19 views
10

Tenemos una aplicación ASP.NET que ejecuta diferentes clientes en todo el mundo. En esta aplicación tenemos diccionario para cada idioma. En el diccionario tenemos palabras en minúsculas y, a veces, las mayúsculas en el código por razones tipográficas.¿Cómo palabras mayúsculas griegas correctamente en .NET?

var greek= new CultureInfo("el-GR"); 
string grrr = "Πόλη"; 
string GRRR = grrr.ToUpper(greek); // "ΠΌΛΗ" 

El problema es:

... si estás usando letras mayúsculas entonces debe aparecer así: F. E. ΠΟΛΗ y no como ΠΌΛΗ, lo mismo para todos los demás palabras escritas en mayúsculas

Así es posible de forma genérica a las palabras griegas mayúsculas correctamente en .NET? ¿O debería escribir mi propio algoritmo personalizado para mayúsculas griegas?

¿Cómo resuelven este problema en Grecia?

+0

¿Dónde están citando la regla de? – AakashM

+0

@AakashM: de la comunicación con el cliente. –

+0

¿Ha verificado que su requisito es realmente cierto para el griego en general, o simplemente es cierto para ellos? –

Respuesta

4

Sospecho que tendrá que escribir su propio método, si el-GR no hace lo que desea. No crea que necesita ir a la longitud completa de creating a custom CultureInfo, si esto es todo lo que necesita. Lo cual es bueno, porque se ve bastante complicado.

Lo que sugiero que hagas es leer this Michael Kaplan blog post y cualquier otra cosa relevante que puedas encontrar - él ha estado trabajando y escribiendo sobre i18n y problemas de lenguaje durante años y años y su comentario es mi primer punto de referencia para cualquiera problemas en Windows.

2

No sé mucho sobre ASP.Net pero sé cómo haría esto en Java.

Si los caracteres son Unicode, me gustaría simplemente post-proceso de la salida de ToUpper con algunas sustituciones simples, uno siendo la conversión de \ u038C (Ό) a \ u039F (Ο) o \ u0386 (Ά) a \ u0391 (Α).

Desde el aspecto de la página de códigos griegos/coptos (\ u0370 hasta \ u03ff), solo hay unos pocos caracteres (6 o 7) que deberá cambiar.

+0

Eso es malo. ¿Qué pasa si un día el cliente ingresa voluntariamente a ese personaje? –

+0

Ya se ha dicho en los comentarios que las palabras en mayúsculas griegas nunca tienen signos diacríticos excepto la palabra Ἢ: "Cuando una palabra está escrita completamente en mayúsculas, nunca se usan signos diacríticos, la palabra Ἢ (" o ") es una excepción a esto regla "(ver http://www.statemaster.com/encyclopedia/Diacritics-%28Greek-alphabet%29) – paxdiablo

+0

Entonces? Yo, como cliente, quiero que el programa no cambie la letra mayúscula que ya he escrito, incluso si contiene un signo tan diacrítico. Depende de mí lo que quiero guardar en un campo de texto, y si su programa cambia mi texto explícitamente escrito, voy a convencer a su departamento de soporte hasta que salgan llorando del edificio de la compañía. ;) Bueno, tal vez un poco exagerado, pero mi punto es que esa sería una solución rápida y sucia que nunca debería estar en un sistema de producción. –

1

Cómo sobre la sustitución de los caracteres incorrectos con las correctas:

/// <summary> 
/// Returns the string to uppercase using Greek uppercase rules. 
/// </summary> 
/// <param name="source">The string that will be converted to uppercase</param> 
public static string ToUpperGreek(this string source) 
{ 
    Dictionary<char, char> mappings = new Dictionary<char, char>(){ 
     {'Ά','Α'}, {'Έ','Ε'}, {'Ή','Η'}, {'Ί','Ι'}, {'Ό','Ο'}, {'Ύ','Υ'}, {'Ώ','Ω'} 
    }; 

    source = source.ToUpper(); 

    char[] result = new char[source.Length]; 
    for (int i = 0; i < result.Length; i++) 
    { 
     result[i] = mappings.ContainsKey(source[i]) ? mappings[source[i]] : source[i]; 
    } 

    return new string(result); 
} 
Cuestiones relacionadas