Jak sprawić, by urządzenie z Androidem wyświetlało złożone renderowanie znaków Indyka?

42

Proszę wybaczyć długość tego pytania. Muszę to wszystko wyjaśnić, aby pomóc innym i uniknąć pomocnych autorów, którzy udzieliliby odpowiedzi bez pytania.

Moje wymaganie w jednym wierszu: „aby telefon z Androidem mógł poprawnie wyświetlać znaki tamilskie”.

Opracowanie: tamilski, jak każdy inny język indyjski, ma złożony system renderowania znaków. W przeciwieństwie do angielskiego lub innego skryptu łacińskiego ma glif (to, co widać na ekranie) złożony z więcej niż jednego znaku. Android nie ma możliwości renderowania tak złożonych skryptów (z wyjątkami). Moim celem jest wiedzieć, jak mogę zapewnić taką możliwość telefonowi lub tabletowi z Androidem.

Małe tło, które zebrałem do tej pory: Aby wyświetlić glif na ekranie, Android najpierw potrzebuje odpowiedniego pliku czcionek. Urządzenie z Androidem ma folder / system / czcionki, który ma kilka z nich. Najciekawszym plikiem w tym folderze jest DroidSansFallback.ttf. Jak sama nazwa wskazuje, kiedy system Android nie znajdzie znaku w czcionkach systemowych (może to być DroidSans.ttf lub DroidSans-Bold.ttf itp.), Wraca do wyszukiwania w DroidSansFallback.ttf.

Po zastąpieniu odpowiedniego pliku czcionek z komputera (Latha.ttf lub Lohit-Tamil.ttf - są to czcionki dla Tamil), a DroidSansFallback.ttf umożliwi wyświetlanie znaków tamilskich w urządzeniu. Wymiana nie jest tak łatwa i polega na zrootowaniu urządzenia i zamontowaniu systemu jako zapisywalnego.

Pomimo tych problemów, nawet jeśli DroidSansFallback.ttf zostanie zastąpiony, wyświetlane tamilskie znaki nie są poprawnie renderowane. Tamilski znak „தி” jest połączeniem dwóch znaków i zamiast być wyświetlany jako „தி”, będzie wyświetlany jako „த ி” bez spacji pomiędzy nimi. Chociaż wystarczy to do czytania krótkich wiadomości, nie można go używać do czytania książek itp.

Od Androida 4.0 na oddziałach, tamilski i kilka innych języków jest obsługiwanych przez przeglądarkę, jak wspomniano w przeglądzie API Androida 4.x, jak pokazano poniżej.

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

Zwracane słowa to „w WebView i wbudowanej przeglądarce”, co oznacza, że ​​znaki tamilskie będą doskonale renderowane, jeśli będą renderowane jako treść HTML i nie będą renderowane w inny sposób. Opera i kilka innych przeglądarek zrobiły to jeszcze przed Androidem 4.0, zastępując obraz zamiast postaci.

Zauważyłem, że na kilku urządzeniach kierowanych na rynek indyjski (np. LG Optimus One, większość telefonów i tabletów Samsung) jest w stanie poprawnie wyświetlać Tamil zarówno w przeglądarce, a nawet w miejscach poza przeglądarką, takich jak kontakty, wiadomości tekstowe, nazwy plików itp. Ku mojemu zaskoczeniu robią to nawet w systemie Android 2.3 i nowszych. Zauważyłem również, że ten sam model kierowany na kraj spoza Indii, w którym działa ta sama wersja Androida, nie obsługuje wyświetlania znaków w języku tamilskim.

To skłoniło mnie do dalszego zbadania i doszedłem do wniosku, że Android (podobnie jak inny system operacyjny oparty na Linuksie) zależy od silnika renderowania czcionek, aby wyświetlał tak złożone znaki. Dwa silniki, które spotkałem, to Skia i Harfbuzz. Zauważyłem, że LG używa skia, a Samsung używa bibliotek Harfbuzz w swoich urządzeniach, aby wprowadzić tę możliwość.

Natknąłem się na wiele stron internetowych sugerujących zastąpienie tych bibliotek i czcionek. Nie działało i powoduje zamarzanie. Na szczęście utworzyłem kopię zapasową przy użyciu clockworkmod i dlatego przywróciłem swój telefon.

Chociaż wyjaśniłem to w języku tamilskim, dotyczy to większości języków indyjskich.

Nadchodzi moje pytanie (jeśli nadal czytasz;)) Teraz jestem pewien, że plik TTF powinien być obecny w celu zapewnienia znaków, a odpowiednie biblioteki (libskia.so lub libharfbuzz.so) są wymagane do poprawnego renderowania. Czy ktoś wie, jak ci producenci są w stanie zapewnić taką możliwość? Jestem nawet gotowy do zbudowania własnej pamięci ROM z AOSP (Android Open Source Project).

Narayanan
źródło
Cyanogenmod ma możliwości wyświetlania tekstów od prawej do lewej. Skia jest standardem do renderowania grafiki. Rezultaty będą się różnić, pobranie jednej biblioteki Skia z jednej pamięci ROM i umieszczenie jej w innej może być katastrofalne, ponieważ wymagałoby zbudowania od podstaw, biorąc źródło AOSP, i zastąpiono Skię harfbuzzem i ponownie skompilowano (po prostu nie można po prostu „po prostu” wpaść harfbuzz do innej pamięci ROM, która nie jest wbudowana w tę bibliotekę - biblioteki są połączone, więc jeśli kompilacja ROM nie wie o harfbuzz, nie zadziała)
t0mm13b
1
@narayanan z jakiegoś powodu strona m.oneindia.in/tamil doskonale renderuje tamilski w Chrome na Androida 4.1.2. Co ta strona robi poprawnie, a inni nie?
FMFF

Odpowiedzi:

9

Zrootowany telefon

Android w folderze /system/fontszawiera plik o nazwie „DroidSansFallback.ttf”, który powinien zawierać wszystkie znaki językowe. Obecnie brakuje wsparcia dla wielu, w tym tamilskiego.

Zawsze można zamienić plik na taki, który zawiera znaki tamilskie, co pozwala na korzystanie z tamilskiego w telefonie.

Z wątku programistów XDA - DroidSans Fallback Indic Font , użytkownicy próbowali i z powodzeniem używali Tamil na swoich telefonach.

Aby wykonać tę metodę, potrzebujesz dostępu roota do swojego telefonu, aby uzyskać dostęp do /systempliku Fallback i zmienić go:

  • Przeczytaj Jak zrootować urządzenie? jeśli Twój telefon nie jest jeszcze zrootowany.
  • Śledź wątek XDA Developers, aby zobaczyć, jak zastąpić plik :

    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
    

    Uwaga: punkt instalacji nie jest taki sam dla wszystkich telefonów.


Aplikacja na Androida

Chociaż powyższa metoda może spodobać się niektórym użytkownikom, wolę aplikację, gdy jest dostępna.

Poza tym tamilski ma klawiaturę o łącznej liczbie 247 znaków, a angielski potrzebuje tylko 26. Staje się to poważnym problemem podczas pisania:

Zobacz Wikipedia :: Język tamilski - system pisania

Obecny skrypt tamilski składa się z 12 samogłosek, 18 spółgłosek i jednego znaku specjalnego, āytam. Samogłoski i spółgłosek tworzą razem 216 znaków złożonych, co daje łącznie 247 znaków (12 + 18 + 1 + (12 x 18))


Dzięki Krishanowi, który pracuje nad tym tematem, jest już dostępna aplikacja, która poradzi sobie z obydwoma problemami, używanie Tamil w całym systemie oraz klawiatura, za pomocą której można pisać Tamilskie Znaki.

Przeczytaj post Krishana zatytułowany Tamil Unicode Font for Android - Praca, aby uzyskać szczegółowe informacje na temat rozwoju tego rozwiązania.

Podsumowując

Krishan opracował i opublikował dwie aplikacje w Google Play, które całkowicie rozwiązują problem posiadania całego systemu operacyjnego Android w języku tamilskim:

Zuul
źródło
4
Wspomniałem już, że zastąpienie czcionki jest tylko częściowym rozwiązaniem, które wyświetli tylko znaki niespójne, a znaki koniunkcyjne nie będą poprawnie renderowane. Drugie rozwiązanie dotyczące aplikacji nie jest dla mnie rozwiązaniem zaakceptowanym. Zapewnia sposób na skomponowanie tekstu tamilskiego poprzez pisanie w języku angielskim oraz konwersję i cytowanie stron internetowych jako przykładu, jest to nie do zaakceptowania, jak już powiedziałem w moich oczekiwaniach. W każdym razie dziękuję za twój wysiłek i czas.
Narayanan,
3

Wygląda na to, że opisujesz problem 4153 , znany błąd w systemie Android.

Ten problem został zgłoszony jako rozwiązany w Jelly Bean. Jeśli zrzut ekranu jest poprawny, problem powinien zostać rozwiązany. (Naprawdę nie mogę sobie powiedzieć, ale mam dostęp do Jelly Bean i mogę z niego robić zrzuty ekranu).

Strona testowa ICS dla Unicode

Michael Hampton
źródło
1
Dzięki, wydaje się, że to nie tylko błąd, ponieważ stwierdziłem, że renderowanie Tamil działa nawet w telefonach z Androidem 2.3.3 z pewną interwencją producenta.
Narayanan,
1
20 lipca 2012 roku biorę udział w gDays Google, w których byłem świadkiem, że Android JellyBean 4.1 wyświetlał znaki tamilskie nawet poza przeglądarką. Niestety nie mogłem nic więcej przetestować.
Narayanan,
Z komentarzem do pytania android.stackexchange.com/questions/26797/ ... Powiedziałbym, że jestem w stanie czytać Tamil na stronach internetowych, w plikach tekstowych, SMS-ach, kontaktach, nazwach plików, plikach DOCX za pośrednictwem ThinkFree Office Mobile Viewer. Zauważyłem, że tak samo powinno być w przypadku telugu, kannada, bengalskiego i hindi.
Narayanan
1

Zainstaluj przeglądarkę internetową Opera Mini

W przeglądarce Opera Mini wpisz „about: Config”

używaj czcionek bitmapowych dla złożonych skryptów: Wybierz Tak

Możesz przeglądać wszystkie strony czcionką tamilską w dowolnym telefonie komórkowym marki

pozdrowienia

Rajesz
źródło
5
Jest to wewnętrzne mapowanie bitowe przeglądarki i nie jest rozwiązaniem dla całego systemu operacyjnego (na przykład nie będziesz mógł pisać ani widzieć tamilskich ani innych znaków indyjskich w SMS-ach). Przy okazji, to, co zasugerowałeś, zostało już wspomniane w głównym poście:> „Opera i kilka innych przeglądarek zrobiło to jeszcze przed Androidem 4.0, zastępując obraz zamiast postaci”.
0

Nie musisz rootować i zamieniać czcionki w systemie Android.

Zamień oprogramowanie wewnętrzne urządzenia na oprogramowanie wewnętrzne podobnego regionu indyjskiego, aby poprawnie renderować czcionkę Devanagari. Oprogramowanie wewnętrzne innych regionów nie wyświetla poprawnie czcionek Devanagari. Czcionki Devanagari poprawnie wyświetlają się w wersji Androida regionu 2.x regionu Indian.

Ghana
źródło