Come realizzare un dispositivo Android per visualizzare rendering complessi di caratteri Indic?


42

Scusa per la lunghezza di questa domanda. Devo spiegare tutto ciò per aiutare gli altri ed evitare collaboratori utili per fornire una risposta senza chiedere chiarimenti.

Il mio requisito in una riga: "consentire a un telefono Android di visualizzare correttamente i caratteri Tamil".

Elaborazione: il tamil, come qualsiasi altra lingua indiana, ha un complesso sistema di rendering dei personaggi. A differenza dell'inglese o di altri script a base latina, ha glifo (quello che vedi sullo schermo) composto da più di un personaggio. Android non ha la capacità di eseguire il rendering di script così complessi (con eccezioni). Il mio obiettivo è sapere come posso fornire tale capacità a un telefono o tablet Android.

Poco sfondo che ho raccolto finora: per visualizzare un glifo sullo schermo, Android ha prima bisogno di un file di caratteri adatto. Il dispositivo Android ha una cartella / sistema / caratteri che ne ha pochi. Il file più interessante in quella cartella è DroidSansFallback.ttf. Come suggerisce il nome, quando il sistema Android non riesce a trovare un carattere nei caratteri di sistema (che potrebbe essere DroidSans.ttf o DroidSans-Bold.ttf ecc.), Torna a cercarlo in DroidSansFallback.ttf.

Sostituendo un file di font adatto dal PC (Latha.ttf o Lohit-Tamil.ttf - questi sono i caratteri per Tamil) e DroidSansFallback.ttf consentirà di visualizzare i caratteri Tamil nel dispositivo. Non è così facile da sostituire e comporta il rooting del dispositivo e il montaggio del sistema come scrivibile.

Nonostante questi problemi, anche se DroidSansFallback.ttf viene sostituito, i caratteri tamil visualizzati non vengono visualizzati correttamente. Il carattere tamil "தி" è un congiunto di due caratteri e invece di essere visualizzato come "தி", verrà visualizzato come "த ி" senza spazio in mezzo. Sebbene questo sia sufficiente per leggere brevi messaggi, non può essere utilizzato per leggere libri, ecc.

Da Android 4.0 nei reparti, il Tamil e altre poche lingue sono supportate tramite il browser, come indicato nella panoramica dell'API di Android 4.x come mostrato di seguito.

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

Le parole da notare sono "in WebView e nel browser integrato", il che significa che i caratteri tamil verranno resi perfettamente se sono resi come contenuto HTML e non saranno resi altrimenti. Opera e altri pochi browser lo hanno fatto anche prima di Android 4.0 sostituendo l'immagine anziché il personaggio.

Ho notato che in alcuni dispositivi destinati al mercato indiano (ad esempio LG Optimus One, la maggior parte dei telefoni e tablet Samsung) sono in grado di visualizzare correttamente il Tamil sia nel browser che anche in luoghi al di fuori del browser come contatti, messaggi di testo, nomi di file, ecc. Con mia sorpresa lo fanno anche in Android 2.3 in poi. Ho anche notato che lo stesso modello destinato a paesi non indiani con la stessa versione di Android non supporta la visualizzazione dei caratteri tamil.

Questo mi ha spinto a indagare ulteriormente e ho concluso che Android (come altri sistemi operativi basati su Linux) dipende da un motore di rendering dei caratteri per visualizzare caratteri così complessi. I due motori che ho incontrato sono Skia e Harfbuzz. Ho notato che LG usa skia e Samsung usa le librerie Harfbuzz nei loro dispositivi per portare questa abilità.

Mi sono imbattuto in molti siti web che mi hanno suggerito di sostituire queste librerie e caratteri. Non ha funzionato e provoca il congelamento. Fortunatamente ho eseguito il backup utilizzando clockworkmod e quindi ho ripristinato il mio telefono.

Anche se l'ho spiegato con il Tamil, questo è applicabile per la maggior parte delle lingue indiane.

Ecco la mia domanda (se stai ancora leggendo;)) Ora, è certo che è chiaro che dovrebbe essere presente un file TTF per fornire caratteri e che sono necessarie librerie appropriate (libskia.so o libharfbuzz.so) per renderli correttamente. Qualcuno sa come questi produttori sono in grado di fornire la capacità? Sono anche pronto a costruire la mia ROM da AOSP (Android Open Source Project).


Cyanogenmod ha le capacità per visualizzare il rendering dei testi da destra a sinistra. Skia è standard per il rendering della grafica. I risultati varieranno, prendere una libreria Skia da una ROM e inserirla in un'altra potrebbe essere catastrofica poiché richiederebbe la costruzione da zero, prendendo la sorgente AOSP, e sostituendo Skia con harfbuzz e ricompilando (semplicemente non si può semplicemente "inserire" harfbuzz in un'altra ROM non costruita con quella libreria - le librerie sono collegate, quindi se la build della ROM non è a conoscenza di harfbuzz, non funzionerà)
t0mm13b

1
@narayanan per qualche motivo, il sito m.oneindia.in/tamil rende perfettamente tamil in Chrome su Android 4.1.2. Cosa sta facendo correttamente questo sito Web che gli altri non fanno?
FMFF,

Risposte:


9

Telefono rootato

Android nella cartella /system/fontscontiene un file chiamato "DroidSansFallback.ttf" che dovrebbe contenere tutti i caratteri della lingua. Attualmente manca il supporto per molti, incluso il Tamil.

Si può sempre sostituire il file con uno che contiene caratteri Tamil, consentendo così l'uso di Tamil sul telefono.

Dal thread degli sviluppatori XDA - DroidSans Fallback Indic Font , gli utenti hanno provato e usato con successo Tamil sui loro telefoni.

Per completare questo metodo, è necessario l'accesso root al telefono, al fine di accedere al /systemfile Fallback e modificarlo:

  • Leggi Come posso eseguire il root del mio dispositivo? se il tuo telefono non è ancora rootato.
  • Segui il thread degli sviluppatori XDA per vedere come sostituire il file :

    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: il mount point non è lo stesso per tutti i telefoni.


APP Android

Mentre il metodo sopra può fare appello ad alcuni utenti, preferisco un'APP quando disponibile.

Inoltre, Tamil ha una tastiera con un totale di 247 caratteri, mentre quella inglese ne ha solo 26. Quindi questo diventa un grosso problema durante la digitazione:

Vedi Wikipedia :: Tamil language - Writing System

L'attuale scrittura tamil è composta da 12 vocali, 18 consonanti e un carattere speciale, l'āytam. Le vocali e le consonanti si combinano per formare 216 caratteri composti, per un totale di 247 caratteri (12 + 18 + 1 + (12 x 18))


Grazie a Krishan, e sta lavorando su questo argomento, c'è già un'APP disponibile per affrontare entrambi i problemi, l'uso a livello di sistema di Tamil e una tastiera che può essere utilizzata per digitare caratteri Tamil.

Leggi il post di Krishan intitolato Tamil Unicode Font per Android - Lavorare per informazioni dettagliate sullo sviluppo di questa soluzione.

Riassumere

Krishan ha sviluppato e pubblicato due APP su Google Play che affrontano completamente il problema di avere un intero sistema operativo Android in Tamil:


4
Avevo già detto che la sostituzione del carattere è solo una soluzione parziale che mostrerà solo caratteri non congiunti e che i caratteri di congiunzione non saranno resi correttamente. E la seconda soluzione relativa all'app non è una soluzione accettata per me. Fornisce il modo di comporre il testo tamil digitando in inglese e convertendo e citando le pagine Web come esempio non è accettabile come avevo già detto nelle mie aspettative. In ogni caso grazie per i tuoi sforzi e il tuo tempo.
Narayanan,

3

Sembra che tu stia descrivendo il problema 4153 , un bug noto in Android.

Questo problema è stato segnalato come risolto in Jelly Bean. Se questa schermata è corretta, il problema dovrebbe essere risolto. (Non posso davvero dirmelo, ma ho accesso a Jelly Bean e posso fare screenshot da esso.)

Pagina di test ICS per Unicode


1
Grazie, questo non sembra solo un bug poiché avevo affermato che il rendering Tamil funziona anche nei telefoni Android 2.3.3 con una sorta di intervento da parte del produttore.
Narayanan,

1
Il 20 luglio 2012, ho partecipato ai gDays di Google e in cui ho assistito ad Android JellyBean 4.1 ha mostrato i caratteri Tamil anche fuori dal browser. Purtroppo non ho potuto testare altro.
Narayanan,

Con un commento sulla domanda android.stackexchange.com/questions/26797/… direi che sono in grado di leggere il tamil in pagine Web, file di testo, SMS, contatti, nomi di file, file DOCX tramite ThinkFree Office Mobile Viewer. Ho osservato che questo dovrebbe essere lo stesso per Telugu, Kannada, bengalese e hindi.
Narayanan,

1

Installa il browser web Opera Mini

Nel browser Web Opera Mini digitare "about: Config"

utilizzare i caratteri bitmap per script complessi: selezionare Sì

Puoi visualizzare tutti i siti in caratteri tamil su qualsiasi telefono cellulare di marca

Saluti


5
Questo è bitmap interno al browser e non è una soluzione a livello di sistema operativo (ad esempio, non sarà possibile digitare o vedere caratteri Tamil o altri caratteri Indic negli SMS). A proposito, ciò che hai suggerito è già stato menzionato nel post principale:> "Opera e altri pochi browser lo hanno fatto anche prima di Android 4.0 sostituendo l'immagine anziché il personaggio".

0

Non è necessario eseguire il root e sostituire il carattere sul sistema Android.

Sostituisci il firmware del tuo dispositivo con un firmware simile della regione indiana per rendere correttamente il font Devanagari. Il firmware di altre regioni non esegue correttamente il rendering dei caratteri Devanagari. I caratteri Devanagari vengono visualizzati correttamente su Android versione 2.x della regione indiana.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.