java - tipografia - Los caracteres en inglés no aparecen cuando ingresas texto con fuentes Urdu en Swing
tipo de letra en ingles (1)
Establecí la configuración regional en
ur_IN
.
Lamentablemente, ur_IN
no se encuentra entre las configuraciones regionales compatibles ; Solo veo en_IN
y hi_IN
. En el ejemplo citado, utilicé el siguiente código para obtener la imagen a continuación:
spinner.setLocale(new Locale("hi", "IN"));
Esto es similar a mi pregunta anterior , pero esa solución no funcionó aquí. Como mencioné en la pregunta anterior, estoy trabajando en una aplicación multiplataforma (Windows / Ubuntu) que tiene que transliterar el inglés a uno de varios idiomas oficiales de la India. La aplicación tiene un método de entrada personalizado, y escribir en inglés y presionar espacio transcribirá el texto escrito en el idioma local específico. El urdu es diferente de los demás al ser de derecha a izquierda, como el árabe / hebreo. Logré encontrar una fuente de Urdu con licencia abierta que tenga glifos en inglés y en urdu, pero cuando escribo caracteres en inglés, no aparece nada.
No entiendo si se trata de un problema de pintura de fuente o está relacionado con el método de entrada. Hasta ahora, si desactivo el método de entrada personalizado ( InputMethod.dispatchEvent()
) para este idioma, puedo ver el texto en inglés (pero, por supuesto, no tiene lugar la transliteración).
Mis hallazgos:
- Cambie la fuente a una de las fuentes en árabe de Windows, el mismo resultado.
- En lugar de usar
ComponentOrientation
para alinear el texto en el campo de texto, utilicésetHorizontalAlignment
para cuando la configuración regional es urdu. Mismo resultado. - Descompiled el proveedor de método de entrada predeterminado de JDK en Windows (
sun.awt.windows.WInputMethod
). Aquí veo quedispatchEvent()
hace una llamada nativa al sistema operativo para manejar IME. No puedo hacer eso aquí. - Encontré una IM personalizada para hebreo : mi versión de
dispatchEvent()
es esencialmente la misma. - Paso por el código para
JTextField
en Eclipse: no fue posible encontrar nada en elAbstractDocument
y las subclases. El métodoAbstractDocument.insertUpdate()
busca y actualiza el ingreso de texto bidireccional, pero no había nada más significativo.
No puedo entender lo que sucede después de la llamada dispatchEvent()
. Los caracteres se están registrando, es decir, el motor de transliteración puede detectar los caracteres escritos y procesarlos, pero simplemente no aparecen en la pantalla.
Solución
Si dejo que la orientación del campo de texto sea la misma que para los idiomas normales de izquierda a derecha, puedo ver el texto en inglés. Sin embargo, esto no sería aceptable para un usuario que habla urdu.
¿Alguien me puede apuntar en la dirección correcta?