2012-02-25 3 views
9

Я хотел знать, есть ли способ определить, находится ли вход пользователя в греческой кодировке.Определить строку/язык ввода пользователя

Edit:
Просто чтобы быть более понятным, мне нужно признать язык пользовательских типов, а не локали телефона.

Например, мой телефон находится на английском языке, и, скажем, моя клавиатура на русском языке, getDefault() возвращает «en», но мне нужно иметь «ru» в этой точке.


Я не знаю, если это доступно из коробки от андроида, может быть подхода для определения кодов символов Строки и посмотреть, если в английском алфавите, или в другом. Какие-нибудь пункты на этом?

я представляю себе что-то вроде
if character belongs to K then is English
(where K is the essemble of english characters)


Решение:

Наконец я использовал регулярные выражения, чтобы определить, является ли строка на английском языке.

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

Если кто-то должен предложить лучшее решение я буду отмечать его в качестве ответа.

+0

Ходовой IME должен соответствовать языковым настройкам пользователя. Если это не так, я не знаю, есть ли что-либо - как разработчик приложений - вы можете это сделать, чтобы обнаружить/исправить. – Pedantic

ответ

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

В другой форме:

contains(Charset) 

EDIT:

После еще некоторое время просмотра, я наткнулся CharsetDetector и Character Set Detection.

Здесь у вас есть метод detect(), но я не уверен, как это лучше всего использовать.

+0

Спасибо за ваш ответ. Я предполагаю, что это возвращает локаль телефона. Мне нужен текущий язык языка клавиатуры/ввода. – Vame

0

Как предлагает Шива, вы можете проверить локаль пользователя.

В Android это можно сделать, используя Locale.getDefault(). Хотя я бы не стал строго сравнивать его с 2-буквенным кодом, в настоящее время реализация Android - это 2-буквенный код языка, символ подчеркивания и двухбуквенный код страны. То есть, de_US будет German as spoken in the United States.

Это не то, как индустрия движется, но ее лучшая модель с Java 6. Java 7, поддерживаемая Android, должна поддерживать коды ISO 639 alpha-3, которые более надежны в будущем.

+0

Спасибо. См. Отредактированный вопрос. – Vame

5

Вы можете использовать следующий метод вместо поиска по шаблону:

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

Огромное спасибо darkmist .... Это то, что мне нужно ... Я просто должен знать isEnglish или нет. – praveenb