Английские символы не отображаются при вводе текста со шрифтами урду в Swing - PullRequest
2 голосов
/ 02 июня 2011

Это похоже на мой предыдущий вопрос , но это решение здесь не сработало.Как упоминалось в предыдущем вопросе, я работаю над кроссплатформенным приложением (Windows / Ubuntu), которое должно транслитерировать английский на один из нескольких официальных индийских языков.В приложении есть собственный метод ввода, и ввод текста на английском языке и нажатие пробела транслитерируют набранный текст на конкретный местный язык.Урду отличается от других тем, что он справа налево, как арабский / иврит.Мне удалось найти открытый лицензионный шрифт урду , в котором есть и английский, и урду, но когда я набираю символы на английском, ничего не появляется.

Я не понимаю, является ли это проблемой рисования шрифта или связано с методом ввода.До сих пор, если я отключаю пользовательский метод ввода (InputMethod.dispatchEvent()) для этого языка, я могу видеть текст на английском языке (но, конечно, транслитерация не происходит).

Мои выводы:

  • Изменить шрифт на один из встроенных арабских шрифтов Windows - тот же результат.
  • Вместо использования ComponentOrientation чтобы выровнять текст в текстовом поле, я использовал setHorizontalAlignment, когда языком является урду.Тот же результат.
  • Декомпилирован поставщик метода ввода JDK по умолчанию в Windows (sun.awt.windows.WInputMethod).Здесь я вижу, что dispatchEvent() делает собственный вызов ОС для обработки IME.Я не могу сделать это здесь.
  • Найден специальный чат для иврита - моя версия dispatchEvent() по сути такая же.
  • Пошаговый код для JTextField в Eclipse - не удалось найти ничего в AbstractDocument и подклассах.Метод AbstractDocument.insertUpdate() проверяет и обновляет двунаправленный ввод текста, но ничего более значимого не было.

Я не могу понять, что происходит после вызова dispatchEvent().Символы регистрируются, т. Е. Механизм транслитерации может обнаруживать набранные символы и обрабатывать их, но они просто не отображаются на экране.

Обходной путь

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

Может кто-нибудь направить меня в правильном направлении?

1 Ответ

2 голосов
/ 09 июня 2011

Я установил языковой стандарт на ur_IN.

К сожалению, ur_IN не входит в число поддерживаемых языковых стандартов ;Я вижу только en_IN и hi_IN.В приведенном примере я использовал следующий код для получения изображения ниже:

spinner.setLocale(new Locale("hi", "IN"));

JSpinnerTest Hindi

...