2012-02-25 16 views
9

Quería saber si hay una manera de detectar si la entrada del usuario está en griego juego de caracteres.Detectar lenguaje de entrada de cadena/usuario

Editar:
sólo para estar más claro, tengo que reconocer el idioma que el usuario escribe, y no el entorno local del teléfono.

Por ejemplo, mi teléfono está en inglés y digamos que mi teclado está en ruso, getDefault() devuelve "en", pero necesito tener "ru" en ese punto.


No sé si esto está disponible fuera de la caja del androide, tal vez un enfoque para detectar códigos de caracteres de la cadena y ver si está en el alfabeto Inglés o en otro. ¿Algún punto sobre esto?

me imagino algo así como
if character belongs to K then is English
(where K is the essemble of english characters)


Solución:

Finalmente utilicé expresión regular para determinar si la cadena está en Inglés.

String pattern = "^[A-Za-z0-9. ]+$"; 
if (string.matches(pattern) 
    // is English 
else 
    // is not English 

Si alguien tiene que proponer una solución mejor voy a marcarlo como respuesta.

+0

El IME funcionamiento debe ajustarse a la configuración regional del usuario. Si no es así, no sé si hay algo, como desarrollador de la aplicación, que pueda hacer para detectarlo o corregirlo. – Pedantic

Respuesta

3
Locale.getDefault().getLanguage().equals("gr") 

En otra forma:

contains(Charset) 

EDIT:

Después de algo más de tiempo de navegación, que han llegado a través de CharsetDetector y Character Set Detection.

Aquí tienes el método detect() pero no estoy seguro de cómo se puede utilizar esto.

+0

Gracias por su respuesta. Supongo que esta devuelve la configuración regional del teléfono. Necesito la configuración regional actual del idioma del teclado/cadena de entrada. – Vame

0

Como sugiere Siva, puede verificar la configuración regional del usuario.

En Android, esto se puede hacer usando Locale.getDefault(). Aunque no lo compararía estrictamente con un código de 2 letras, la implementación actual de Android tiene un código de idioma de 2 letras, un guión bajo y un código de país de dos letras. Es decir, de_US sería German as spoken in the United States.

Esta no es la forma en que la industria se está moviendo, pero es el modelo mejor soportado a partir de Java 6. Java 7, una vez soportado por Android debería admitir códigos ISO 639 alpha-3 que son más a prueba de futuro.

+0

Gracias. Por favor vea la pregunta editada. – Vame

5

Puede utilizar siguiente método en lugar de coincidencia de patrones:

boolean isEnglish = true; 
for (char c : s.toCharArray()) { 
    if (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) { 
    isEnglish = false; 
    break; 
    } 
} 
+0

Muchas gracias darkmist .... Esto es lo que necesito ... Solo tengo que saber isEnglish o no .. – praveenb

Cuestiones relacionadas