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

42

Por favor, disculpe la longitud de esta pregunta. Necesito explicar todo esto para ayudar a otros y evitar contribuyentes útiles para dar respuestas sin pedir aclaraciones.

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

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

Poco fondo 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 / sistema / fuentes que tiene pocas. El archivo más interesante en esa carpeta es el DroidSansFallback.ttf. Como su nombre indica, cuando el sistema de Android no puede encontrar un carácter en las fuentes del sistema (que podría ser DroidSans.ttf o DroidSans-Bold.ttf, etc.), recurre a la búsqueda en DroidSansFallback.ttf.

Al reemplazar un archivo de fuente adecuado de 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 el DroidSansFallback.ttf, los caracteres tamiles que se muestran no se representan correctamente. El carácter tamil "தி" es un conjunto de dos caracteres y, en lugar de aparecer 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, Tamil y otros pocos idiomas son compatibles a través del navegador como se dice 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 incorporado", lo que significa que los caracteres tamiles se representarán perfectamente si se representa como contenido HTML y no se representarán de otra manera. Opera y otros pocos navegadores hicieron esto incluso antes de Android 4.0 sustituyendo imagen en lugar de carácter.

Me di cuenta de que en pocos dispositivos que se dirigen al mercado indio (por ejemplo: LG Optimus One, la mayoría de los teléfonos y tabletas Samsung) pueden mostrar Tamil correctamente tanto en el navegador como incluso en lugares fuera del navegador, como contactos, mensajes de texto, nombres de archivos, etc. Para mi sorpresa, lo hacen incluso en Android 2.3 en adelante. También noté que el mismo modelo dirigido a un país no indio que ejecuta la misma versión de Android no es compatible con la visualización de caracteres Tamil.

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 que encontré son Skia y Harfbuzz. Noté que LG usa skia y Samsung usa las bibliotecas Harfbuzz en sus dispositivos para brindar esta capacidad.

Encontré muchos sitios web que sugieren reemplazar estas bibliotecas y fuentes. No funcionó y se congela. Afortunadamente hice una copia de seguridad usando clockworkmod y, por lo tanto, restauré mi teléfono.

Aunque había explicado esto con tamil, esto es aplicable para 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 desde AOSP (Android Open Source Project).

Narayanan
fuente
Cyanogenmod tiene la capacidad de 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 de 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" caer harfbuzz en otra ROM que no está construida con esa biblioteca: las bibliotecas están vinculadas, por lo que si la construcción de la ROM no tiene conocimiento de harfbuzz, no funcionará)
t0mm13b
1
@narayanan por alguna razón, el sitio m.oneindia.in/tamil representa tamil perfectamente en Chrome en Android 4.1.2. ¿Qué está haciendo este sitio web correctamente que los demás no?
FMFF

Respuestas:

9

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 soporte para muchos, incluido el tamil.

Siempre se puede reemplazar el archivo con uno que contenga caracteres tamiles, permitiendo así el uso de tamiles en su teléfono.

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

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

  • Leer ¿Cómo puedo rootear mi dispositivo? si tu teléfono aún no está rooteado.
  • Siga el hilo 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 atraer a algunos usuarios, prefiero una aplicación cuando esté disponible.

Además, Tamil tiene un teclado con un total de 247 caracteres, mientras que el inglés solo necesita 26. Por lo tanto, esto se convierte en un problema importante al escribir:

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 las 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 de Tamil en todo el sistema y un teclado que se puede usar para escribir caracteres Tamil.

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

Para resumir

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

Zuul
fuente
44
Ya había mencionado que reemplazar la fuente es solo una solución parcial que mostrará solo caracteres no conjuntos y los caracteres conjuntos 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 manera de componer texto en tamil escribiendo en inglés y convirtiendo y citando las páginas web como ejemplo, no es aceptable como ya lo dije en mi expectativa. De cualquier forma, gracias por su esfuerzo y tiempo.
Narayanan
3

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

Este problema se ha informado como resuelto en Jelly Bean. Si esta captura de pantalla es correcta, entonces el problema debería resolverse. (Realmente no puedo decirme a mí mismo, pero tengo acceso a Jelly Bean y puedo hacer capturas de pantalla desde él).

Página de prueba de ICS para Unicode

Michael Hampton
fuente
1
Gracias, esto parece no solo un error, ya que dije que el renderizado Tamil está funcionando incluso en teléfonos Android 2.3.3 con algún tipo de intervención del fabricante.
Narayanan
1
El 20 de julio de 2012, asistí a los gDays de Google y en el que fui testigo de que Android JellyBean 4.1 mostraba caracteres tamiles incluso fuera del navegador. Lamentablemente no pude probar nada más.
Narayanan
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 también debería ser igual para telugu, kannada, bengalí e hindi.
Narayanan
1

Instalar el navegador web Opera Mini

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

usar fuentes de mapa de bits para scripts complejos: seleccione Sí

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

Saludos

Rajesh
fuente
55
Este es un mapa de bits interno del navegador y no es una solución para todo el sistema operativo (por ejemplo, no podrá escribir o ver caracteres tamiles u otros caracteres índicos en SMS). Por cierto, lo que has sugerido ya se ha mencionado 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".
0

No es necesario rootear y reemplazar la fuente en el sistema Android.

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

Ghana
fuente