¿Cómo hacer que un dispositivo Android muestre una representación compleja de caracteres índicos?

Disculpe la extensión de esta pregunta. Necesito explicar todo esto para ayudar a otros y evitar que los contribuyentes útiles brinden respuestas sin pedir aclaraciones.

Mi requisito en una línea: "permitir que un teléfono Android muestre correctamente los caracteres tamiles".

Elaboración: Tamil, como cualquier otro idioma indio, tiene un sistema complejo de interpretación de caracteres. A diferencia del inglés o de otras escrituras latinas, tiene un glifo (lo que ve en la pantalla) compuesto por más de un carácter. Android no tiene la capacidad de procesar scripts tan complejos (con excepciones). Mi objetivo es saber cómo puedo proporcionar esa capacidad a un teléfono o tableta Android.

Pequeños antecedentes que he reunido hasta ahora: para mostrar un glifo en la pantalla, Android primero necesita un archivo de fuente adecuado. El dispositivo Android tiene una carpeta / system / fonts que tiene algunas de ellas. El archivo más interesante de esa carpeta es DroidSansFallback.ttf. Como sugiere el nombre, cuando el sistema de Android no encuentra un carácter en las fuentes del sistema (que podría ser DroidSans.ttf o DroidSans-Bold.ttf, etc.), vuelve a buscarlo en DroidSansFallback.ttf.

Al reemplazar un archivo de fuente adecuado desde la PC (Latha.ttf o Lohit-Tamil.ttf - estas son fuentes para Tamil) y DroidSansFallback.ttf permitirá mostrar caracteres Tamil en el dispositivo. No es tan fácil de reemplazar e implica rootear el dispositivo y montar el sistema como grabable.

A pesar de esos problemas, incluso si se reemplaza DroidSansFallback.ttf, los caracteres tamiles que se muestran no se procesan correctamente. El carácter tamil "தி" es un conjunto de dos caracteres y, en lugar de mostrarse como "தி", se mostrará como "த ி" sin espacio entre ellos. Aunque esto es suficiente para leer mensajes cortos, no se puede usar para leer libros, etc.

Desde Android 4.0 en adelante, el navegador admite tamil y otros pocos idiomas, como se indica en la descripción general de la API de Android 4.x, como se ve a continuación.

Support for Indic fonts (Devanagari, Bengali, and Tamil, including the complex
character support needed for combining glyphs) in WebView and the built-in Browser

Las palabras a tener en cuenta son "en WebView y el navegador integrado", lo que significa que los caracteres tamiles se representarán perfectamente si se representan como contenido HTML y no se representarán de otra manera. Opera y otros pocos navegadores hicieron esto incluso antes de Android 4.0 al sustituir la imagen en lugar del carácter.

Noté que en algunos dispositivos que apuntan al mercado indio (por ejemplo, LG Optimus One, la mayoría de los teléfonos y tabletas de Samsung) pueden mostrar tamil correctamente tanto en el navegador como en lugares fuera del navegador, como en contactos, mensajes de texto, nombres de archivos, etc. Para mi sorpresa hacen esto incluso en Android 2.3 en adelante. También noté que el mismo modelo dirigido a países no indios que ejecutan la misma versión de Android no es compatible con la visualización de caracteres tamiles.

Esto me hizo investigar más y llegué a la conclusión de que Android (como otros sistemas operativos basados ​​en Linux) depende de un motor de representación de fuentes para mostrar caracteres tan complejos. Los dos motores con los que me encontré son Skia y Harfbuzz. Noté que LG usa skia y Samsung usa bibliotecas Harfbuzz en sus dispositivos para brindar esta capacidad.

Encontré muchos sitios web que sugerían reemplazar estas bibliotecas y fuentes. No funcionó y los resultados en la congelación. Afortunadamente, hice una copia de seguridad usando clockworkmod y, por lo tanto, restauré mi teléfono.

Aunque expliqué esto con el tamil, esto se aplica a la mayoría de los idiomas indios.

Aquí viene mi pregunta (si todavía está leyendo;)) Ahora, estoy seguro de que está claro que un archivo TTF debe estar presente para proporcionar caracteres y se requieren bibliotecas apropiadas (libskia.so o libharfbuzz.so) para representarlos correctamente. ¿Alguien sabe cómo estos fabricantes pueden proporcionar la capacidad? Incluso estoy listo para construir mi propia ROM de AOSP (Proyecto de código abierto de Android).

Cyanogenmod tiene capacidades para mostrar la representación de textos de derecha a izquierda. Skia es estándar para la representación de los gráficos. Los resultados variarán, tomar una biblioteca Skia de una ROM y ponerla en otra puede ser catastrófico, ya que requeriría construir desde cero, tomando la fuente AOSP y reemplazando Skia con harfbuzz y recompilar (Simplemente no puede "simplemente" dejar caer harfbuzz en otra ROM que no está construida con esa biblioteca; las bibliotecas están vinculadas, por lo que si la compilación de la ROM no reconoce harfbuzz, no funcionará)
@narayanan, por alguna razón, el sitio m.oneindia.in/tamil muestra tamil perfectamente en Chrome en Android 4.1.2. ¿Qué está haciendo correctamente este sitio web que los otros no?

Respuestas (4)

Teléfono desbloqueado

Android debajo de la carpeta /system/fontscontiene un archivo llamado "DroidSansFallback.ttf" que se supone que contiene todos los caracteres del idioma. Actualmente carece de apoyo para muchos, incluido el tamil.

Siempre se puede reemplazar el archivo con uno que contenga caracteres Tamil, lo que permite el uso de Tamil en su teléfono.

Desde XDA Developers Thread - DroidSans Fallback Indic Font , los usuarios han probado y utilizado con éxito Tamil en sus teléfonos.

Para llevar a cabo este método, necesita acceso de root a su teléfono, para poder acceder /systemy cambiar el archivo Fallback:

  • Lea ¿Cómo rooteo mi dispositivo? si su teléfono aún no está rooteado.
  • Siga el hilo de XDA Developers para ver cómo reemplazar el archivo :

    Using and Android SDK environment:
    
    First Copy the DroidSansFallback.ttf file into your sdcard,
    then issue the following commands:
    
    adb shell
    su
    mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
    cd /sdcard
    busybox cp DroidSansFallback.ttf /system/fonts
    mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system
    exit
    exit
    
    Lastly, rebooted the phone
    

    Nota: el punto de montaje no es el mismo para todos los teléfonos.


Aplicación Android

Si bien el método anterior puede resultar atractivo para algunos usuarios, prefiero una aplicación cuando esté disponible.

Además, el tamil tiene un teclado con un total de 247 caracteres, mientras que el inglés solo necesita 26. Así que esto se convierte en un gran problema a la hora de teclear:

Ver Wikipedia :: Idioma tamil - Sistema de escritura

La escritura tamil actual consta de 12 vocales, 18 consonantes y un carácter especial, el āytam. Las vocales y consonantes se combinan para formar 216 caracteres compuestos, dando un total de 247 caracteres (12 + 18 + 1 + (12 x 18))


Gracias a Krishan, y está trabajando en este tema, ya hay una aplicación disponible para tratar ambos problemas, el uso generalizado del sistema de tamil y un teclado que se puede usar para escribir caracteres tamiles.

Lea la publicación de Krishan titulada Tamil Unicode Font for Android – Working para obtener información detallada sobre el desarrollo de esta solución.

Para resumir

Krishan desarrolló y publicó dos aplicaciones en Google Play que abordan por completo el problema de tener un sistema operativo Android completo en tamil:

Ya mencioné que reemplazar la fuente es solo una solución parcial que mostrará solo los caracteres que no están en conjunción y los caracteres en conjunción no se representarán correctamente. Y la segunda solución con respecto a la aplicación no es una solución aceptada para mí. Proporciona una forma de componer texto en tamil escribiendo en inglés y convertir y citar las páginas web como ejemplo no es aceptable, como ya había dicho en mis expectativas. De cualquier manera gracias por su esfuerzo y tiempo.

Parece que estás describiendo el problema 4153 , un error conocido en Android.

Se informó que este problema se resolvió en Jelly Bean. Si esta captura de pantalla es correcta, entonces el problema debe resolverse. (Realmente no puedo decírmelo, pero tengo acceso a Jelly Bean y puedo hacer capturas de pantalla).

Página de prueba de ICS para Unicode

Gracias, esto no parece ser solo un error, ya que dije que la representación en tamil funciona incluso en teléfonos con Android 2.3.3 con algún tipo de intervención del fabricante.
El 20 de julio de 2012, asistí a los gDays de Google y en los que fui testigo de que Android JellyBean 4.1 mostraba caracteres tamiles incluso fuera del navegador. Lamentablemente no pude probar nada más.
Con un comentario sobre la pregunta android.stackexchange.com/questions/26797/… Diría que puedo leer Tamil en páginas web, archivos de texto, SMS, contactos, nombres de archivos, archivos DOCX a través de ThinkFree Office Mobile Viewer. Observé que esto debería ser lo mismo para telugu, kannada, bengalí e hindi también.

Instalar el navegador web Opera Mini

En el navegador web Opera Mini, escriba "about:Config"

usar fuentes de mapa de bits para secuencias de comandos complejas: Seleccione Sí

Puede ver todos los sitios en fuente tamil en cualquier teléfono móvil de marca

Saludos

Este es un mapa de bits interno del navegador y no es una solución para todo el sistema operativo (no podrá escribir o ver tamil u otros caracteres índicos en los SMS, por ejemplo). Por cierto, lo que sugirió ya se mencionó en la publicación principal: > "Opera y otros pocos navegadores hicieron esto incluso antes de Android 4.0 al sustituir la imagen en lugar del carácter".

No necesita rootear y reemplazar la fuente en el sistema Android.

Reemplace el firmware de su dispositivo con el firmware de una región india similar para representar correctamente la fuente Devanagari. El firmware de otras regiones no representa correctamente las fuentes Devanagari. Las fuentes Devanagari se representan correctamente en la versión 2.x de Android de la región india.