Como fazer um dispositivo Android exibir exibição complexa de caracteres índicos?

42

Por favor, desculpe o comprimento desta pergunta. Preciso explicar tudo isso para ajudar os outros e evitar que colaboradores úteis forneçam respostas sem pedir esclarecimentos.

Minha exigência em uma linha: "ativar um telefone Android para exibir caracteres tamil corretamente".

Elaboração: o tâmil, como qualquer outra língua indiana, possui um complexo sistema de renderização de caracteres. Ao contrário do inglês ou de outro script latino, ele possui um glifo (o que você vê na tela) composto por mais de um caractere. O Android não tem capacidade de renderizar scripts tão complexos (com exceções). Meu objetivo é saber como posso fornecer essa capacidade para um telefone ou tablet Android.

Pouco conhecimento que reuni até agora: para exibir um glifo na tela, o Android precisa primeiro de um arquivo de fonte adequado. O dispositivo Android possui uma pasta / sistema / fontes com poucos deles. O arquivo mais interessante nessa pasta é o DroidSansFallback.ttf. Como o nome sugere, quando o sistema do Android falha em encontrar um caractere nas fontes do sistema (que pode ser DroidSans.ttf ou DroidSans-Bold.ttf etc), ele volta a procurá-lo no DroidSansFallback.ttf.

Ao substituir um arquivo de fonte adequado do PC (Latha.ttf ou Lohit-Tamil.ttf - essas são fontes para o Tamil) e o DroidSansFallback.ttf permitirá exibir caracteres tâmeis no dispositivo. Não é tão fácil de substituir e envolve fazer o root do dispositivo e montar o sistema como gravável.

Apesar desses problemas, mesmo que o DroidSansFallback.ttf seja substituído, os caracteres tâmeis exibidos não serão renderizados corretamente. O caractere tâmil "தி" é um conjunto de dois caracteres e, em vez de ser exibido como "தி", será exibido como "த without" sem espaço no meio. Embora isso seja suficiente para ler mensagens curtas, ele não pode ser usado para ler livros etc.

A partir do Android 4.0 nas divisões, o Tamil e outros idiomas são suportados pelo navegador, conforme mencionado na visão geral da API do Android 4.x, como mostrado abaixo.

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

As palavras a serem observadas estão "no WebView e no navegador interno", o que significa que os caracteres tâmeis serão renderizados perfeitamente se forem renderizados como conteúdo HTML e não serão renderizados de outra forma. O Opera e outros poucos navegadores fizeram isso antes do Android 4.0, substituindo imagem em vez de caractere.

Notei que em alguns dispositivos que visam o mercado indiano (por exemplo: LG Optimus One, a maioria dos telefones e tablets Samsung) são capazes de exibir o Tamil adequadamente no navegador e até mesmo em locais fora do navegador, como contatos, mensagens de texto, nomes de arquivos etc. Para minha surpresa, eles fazem isso mesmo no Android 2.3 em diante. Também notei que o mesmo modelo de país não indiano que executa a mesma versão do Android não suporta a exibição de caracteres tâmeis.

Isso me levou a investigar mais e chegou à conclusão de que o Android (como outro sistema operacional baseado em Linux) depende de um mecanismo de renderização de fontes para exibir caracteres tão complexos. Os dois motores que encontrei são o Skia e o Harfbuzz. Notei que a LG usa o skia e a Samsung usa as bibliotecas Harfbuzz em seus dispositivos para trazer essa capacidade.

Me deparei com muitos sites sugerindo substituir essas bibliotecas e fontes. Não funcionou e resulta em congelamento. Felizmente fiz backup usando o clockworkmod e, portanto, restaurei meu telefone.

Embora eu tenha explicado isso com o tâmil, isso é aplicável à maioria das línguas indianas.

Aqui está minha pergunta (se você ainda está lendo;)) Agora, com certeza está claro que um arquivo TTF deve estar presente para fornecer caracteres e são necessárias bibliotecas apropriadas (libskia.so ou libharfbuzz.so) para renderizá-las corretamente. Alguém sabe como esses fabricantes são capazes de fornecer a capacidade? Estou pronto para criar minha própria ROM a partir do AOSP (Android Open Source Project).

Narayanan
fonte
O Cyanogenmod possui recursos para exibir a renderização de textos da direita para a esquerda. Skia é padrão para a renderização dos gráficos. Os resultados variam, pegar uma biblioteca Skia de uma ROM e colocá-la em outra pode ser catastrófico, pois exigiria construção do zero, pegando a fonte do AOSP e substituindo Skia por harfbuzz e recompile (você simplesmente não pode "simplesmente" aparecer HarfBuzz em outra ROM que não é construída com essa biblioteca - as bibliotecas estão ligados, portanto, se construção da ROM desconhece HarfBuzz, não vai funcionar)
t0mm13b
1
@narayanan por algum motivo, o site m.oneindia.in/tamil processa perfeitamente o Tamil no Chrome no Android 4.1.2. O que este site está fazendo corretamente e os outros não?
FMFF

Respostas:

9

Telefone rooteado

O Android na pasta /system/fontscontém um arquivo chamado "DroidSansFallback.ttf" que deve conter todos os caracteres do idioma. Atualmente, falta suporte para muitos, incluindo o tâmil.

Pode-se sempre substituir o arquivo por um que contenha caracteres tâmeis, permitindo assim o uso do tâmil no seu telefone.

No XDA Developers Thread - DroidSans Fallback Indic Font , os usuários tentaram e usaram com sucesso o Tamil em seus telefones.

Para realizar esse método, você precisa de acesso root ao seu telefone, para acessar /systeme alterar o arquivo Fallback:

  • Leia Como faço para fazer root no meu dispositivo? se o seu telefone ainda não estiver enraizado.
  • Siga o tópico XDA Developers para ver como substituir o arquivo :

    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: o ponto de montagem não é o mesmo para todos os telefones.


APP para Android

Embora o método acima possa apelar para alguns usuários, prefiro um APP quando disponível.

Além disso, o Tamil possui um teclado com um total de 247 caracteres, enquanto o inglês precisa apenas de 26. Portanto, esse se torna um grande problema ao digitar:

Veja linguagem Wikipedia :: Tamil - Sistema de Escrita

O atual script tâmil consiste em 12 vogais, 18 consoantes e um caractere especial, o aytam. As vogais e consoantes se combinam para formar 216 caracteres compostos, resultando em um total de 247 caracteres (12 + 18 + 1 + (12 x 18))


Graças a Krishan, e é um trabalho sobre esse assunto, já existe um aplicativo disponível para lidar com ambos os problemas, o uso do Tamil em todo o sistema e um teclado que pode ser usado para digitar caracteres tâmeis.

Leia a postagem de Krishan intitulada Tamil Unicode Font para Android - Trabalhando para obter informações detalhadas sobre o desenvolvimento desta solução.

Resumir

Krishan desenvolveu e publicou dois aplicativos no Google Play que tratam completamente do problema de ter um sistema operacional Android inteiro no Tamil:

Zuul
fonte
4
Eu já havia mencionado que substituir a fonte é apenas uma solução parcial que exibirá apenas caracteres não conjuntos e os caracteres conjugados não serão renderizados corretamente. E a segunda solução em relação ao aplicativo não é uma solução aceita para mim. Ele fornece uma maneira de compor o texto em tâmil digitando em inglês e convertendo e citando as páginas da web como exemplo, não é aceitável, como eu já havia dito na minha expectativa. De qualquer forma, obrigado por seus esforços e tempo.
Narayanan
3

Parece que você está descrevendo o problema 4153 , um bug conhecido no Android.

Esse problema foi relatado como resolvido no Jelly Bean. Se esta captura de tela estiver correta, o problema deverá ser resolvido. (Eu realmente não posso dizer a mim mesma, mas tenho acesso ao Jelly Bean e posso fazer capturas de tela a partir dele.)

Página de teste do ICS para Unicode

Michael Hampton
fonte
1
Obrigado, isso parece não ser apenas um bug, como afirmei que a renderização em tâmil está funcionando mesmo em telefones Android 2.3.3 com algum tipo de intervenção do fabricante.
Narayanan
1
Em 20 de julho de 2012, participei dos gDays do Google e testemunhei o Android JellyBean 4.1 exibindo caracteres tâmeis mesmo fora do navegador. Infelizmente não pude testar mais nada.
Narayanan
Com um comentário sobre a pergunta android.stackexchange.com/questions/26797/…, eu diria que posso ler o Tamil em páginas da Web, arquivos de texto, SMS, contatos, nomes de arquivos e arquivos DOCX através do ThinkFree Office Mobile Viewer. Observei que isso deveria ser o mesmo para Telugu, Kannada, Bengali e Hindi também.
Narayanan
1

Instalar o navegador Opera Mini

No navegador Mini Opera, digite "about: Config"

usar fontes de bitmap para scripts complexos: selecione Sim

Você pode visualizar todos os sites em fonte tamil em qualquer telefone celular de marca

Saudações

Rajesh
fonte
5
Esse é o bitmap interno do navegador e não é uma solução para todo o sistema operacional (você não poderá digitar ou ver o Tamil ou outros caracteres índicos nos SMS, por exemplo). Aliás, o que você sugeriu já foi mencionado no post principal:> "O Opera e outros poucos navegadores fizeram isso antes do Android 4.0, substituindo imagem em vez de caractere".
0

Você não precisa fazer o root e substituir a fonte no sistema Android.

Substitua o firmware do seu dispositivo pelo firmware da região indiana semelhante para renderizar a fonte Devanagari corretamente. O firmware de outras regiões não processa as fontes Devanagari corretamente. As fontes Devanagari são renderizadas corretamente na versão 2.x da região indiana do Android.

Gana
fonte