2013-06-21 2 views
2

Я пытался выяснить, какие языки ввода, установленные в Windows, из приложения Java. Вы можете вручную определить это из панели управления -> Регион и язык -> Изменить клавиатуру (кнопка) -> Общие -> Установленные службы (нижняя панель).Java: Как установить языки ввода текста в Windows

Предпосылка, что в заявке я принуждая Locale.US используя следующий вызов -

Component component = getAWTComponent(); 
component.getInputContext().selectInputMethod(Locale.US) 

Но на некоторых хостах не установлен язык клавиатуры США (скажем, система в Великобритании). Я хотел убедиться, что язык недоступен и выдает ошибку или что-то в этом роде.

Кроме того, можно ли устанавливать такие службы с Java (надуманные могут быть ...)?

+0

Получает ли язык 'default' полезный для вас? Это, конечно, можно сделать через java. – vikingsteve

+0

@vikingsteve К сожалению, нет. Также (пожалуйста, поправьте меня, если я ошибаюсь здесь) существование Locale в Java не означает, что соответствующие службы ввода установлены в системе. – Veera

+0

ok, то же самое относится к 'getAvailableLocales' (по запросу пользователя2504380) – vikingsteve

ответ

1

Мессинг с раскладкой клавиатуры по умолчанию - это то, что нужно делать только с большой осторожностью. Если вы это сделаете, вы должны дать пользователям возможность выбрать, какой макет они хотят, а не форсировать определенный макет для всех.

Представьте свою реакцию, если я написал приложение и попытался заставить вас использовать немецкую клавиатуру.

При этом API вернется к действующей раскладке клавиатуры, если Locale.US недоступен. Код, который скрыт в sun.awt.im.InputContext.selectInputMethod()

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

+0

Спасибо Аарон. Это выглядит многообещающе. Я бы попробовал. И я принимаю вашу озабоченность по поводу изменения Locale. Но приложение, в котором я работаю, предназначено только для внутренних целей и используется для тестирования некоторых других приложений, которые мы разрабатываем. Поэтому я могу жить с рисками - :) – Veera

-1

Java можно найти ваше кодовый по умолчанию:

public final static Charset CHARSET_SYSTEM = 
      Charset.forName(System.getProperties().get("sun.jnu.encoding").toString()); 

, то вы можете использовать его в сканере для преобразования входных кодовых в UNICODE:

Scanner scan = null; 
final void defineScan(Charset charsetCanBeNull) { 
    scan = new Scanner(System.in, (null == charsetCanBeNull) 
      ? charset 
      : charsetCanBeNull); 
} 

Затем вы можете использовать сканер. методы (..)

+0

Прошу прощения, я не уверен, что понимаю. Это вернет мне используемую кодировку. Как это поможет в достижении того, чего я пытаюсь достичь? – Veera

+0

-1, не связанный с вопросом –

+0

@AaronDigulla Я говорил о первой части вопроса: «Я пытался выяснить, какие языки ввода установлены на Windows из приложения Java». Это может помочь найти используемую клавиатуру –

-1
static public void main(String[]args) { 
     Locale al[] = DateFormat.getAvailableLocales(); 
     for (Locale l : al) { 
      System.out.println(l); 
     } 
    } 
+0

Как упоминалось в @vikingsteve, это не помогло бы. Я думаю, что это возвращает список локалей, которые поддерживает Java. Не нужно ничего делать с установленными языками ввода текста. – Veera

+0

-1 не имеет отношения к вопросу –