studio spanish objeto language change java android locale

java - objeto - locale spanish android studio



Configuración regional turca e inglesa: traduzca caracteres turcos a equivalentes en latín (5)

Quiero traducir mis cadenas turcas a minúsculas tanto en inglés como en turco. Estoy haciendo esto:

String myString="YAŞAT BAYRI"; Locale trlocale= new Locale("tr-TR"); Locale enLocale = new Locale("en_US"); Log.v("mainlist", "en source: " +myString.toLowerCase(enLocale)); Log.v("mainlist", "tr source: " +myString.toLowerCase(trlocale));

La salida es:

en source: yaşar bayri tr source: yaşar bayri

Pero quiero tener una salida como esta:

en source: yasar bayri tr source: yaşar bayrı

¿Es esto posible en Java?


Los caracteres ş y s son caracteres diferentes. Cambiar la configuración regional no puede ayudarle a traducir una a otra. Tienes que crear una tabla de caracteres de turco a inglés y hacerlo tú mismo. Una vez hice esto para el lenguaje vietnamita que tiene muchos de esos personajes. Tienes que lidiar con 4 de 5, ¿verdad? ¡Buena suerte!


Si está utilizando el constructor Locale , puede y debe configurar el idioma, el país y la variante como argumentos separados:

new Locale(language) new Locale(language, country) new Locale(language, country, variant)

Por lo tanto, su programa de prueba crea locales con el lenguaje "tr-TR" y "en_US". Para su programa de prueba, puede usar la new Locale("tr", "TR") y la new Locale("en", "US") .

Si está utilizando Java 1.7+, también puede analizar una etiqueta de idioma usando Locale.forLanguageTag :

String myString="YASAT BAYRI"; Locale trlocale= Locale.forLanguageTag("tr-TR"); Locale enLocale = Locale.forLanguageTag("en_US");

Crea cadenas que tienen la minúscula adecuada para el idioma.


Si solo desea la cadena en ASCII, sin acentos, lo siguiente podría hacer. Primero, un carácter acentuado se puede dividir en caracteres ASCII y una marca diacrítica combinada (acento de ancho cero). Entonces solo esos acentos pueden ser removidos por reemplazo de expresiones regulares.

public static String withoutDiacritics(String s) { // Decompose any ş into s and combining-,. String s2 = Normalizer.normalize(s, Normalizer.Form.NFD); return s2.replaceAll("(?s)//p{InCombiningDiacriticalMarks}", ""); }


Yo pienso que éste es el problema:

Locale trlocale= new Locale("tr-TR");

Intenta esto en su lugar:

Locale trlocale= new Locale("tr", "TR");

Ese es el constructor a utilizar para especificar el país y el idioma.


usted puede hacer eso:

Locale trlocale= new Locale("tr","TR");

El primer parámetro es su idioma, mientras que el otro es su país.