Как сделать так, чтобы на Android-устройстве отображался сложный рендеринг индийских символов?

42

Пожалуйста, извините за длину этого вопроса. Мне нужно объяснить все это, чтобы помочь другим и избежать того, чтобы полезные участники давали ответ, не спрашивая разъяснений.

Мое требование в одной строке: «чтобы на телефоне Android правильно отображались тамильские символы».

Разработка: тамильский, как и любой другой индийский язык, имеет сложную систему рендеринга символов. В отличие от английского или другого латинского алфавита, он имеет глиф (то, что вы видите на экране), состоящий из более чем одного символа. Android не имеет возможности отображать такие сложные скрипты (за исключением). Моя цель - узнать, как я могу предоставить такую ​​возможность для телефона или планшета Android.

Небольшой фон, который я собрал до сих пор: чтобы отобразить глиф на экране, Android сначала нужен подходящий файл шрифта. На устройстве Android есть папка / system / fonts, в которой их мало. Самый интересный файл в этой папке - DroidSansFallback.ttf. Как следует из названия, когда системе Android не удается найти символ в системных шрифтах (это может быть DroidSans.ttf или DroidSans-Bold.ttf и т. Д.), Он вынужден искать его в DroidSansFallback.ttf.

Заменив подходящий файл шрифта с ПК (Latha.ttf или Lohit-Tamil.ttf - это шрифты для тамильского языка), и DroidSansFallback.ttf позволит отображать тамильские символы в устройстве. Заменить его не так-то просто, для этого нужно рутировать устройство и монтировать систему как доступную для записи.

Несмотря на эти проблемы, даже если DroidSansFallback.ttf заменен, отображаемые тамильские символы не отображаются должным образом. Тамильский символ «தி» является соединением двух символов, и вместо того, чтобы отображаться как «தி», он будет отображаться как «த ி» без пробела между ними. Хотя этого достаточно для чтения коротких сообщений, его нельзя использовать для чтения книг и т. Д.

Начиная с Android 4.0 и выше, тамильский и другие языки поддерживаются через браузер, как указано в обзоре API Android 4.x, как показано ниже.

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

Следует отметить слова «в WebView и во встроенном браузере», что означает, что тамильские символы будут отображаться идеально, если они будут отображаться в виде содержимого HTML, и не будут отображаться иначе. Opera и несколько других браузеров сделали это еще до Android 4.0, заменив изображение вместо символа.

Я заметил, что на нескольких устройствах, предназначенных для индийского рынка (например, LG Optimus One, большинство телефонов и планшетов Samsung), можно правильно отображать тамильский язык как в браузере, так и даже в местах вне браузера, таких как контакты, текстовые сообщения, имена файлов и т. Д. К моему удивлению, они делают это даже в Android 2.3 и выше. Я также заметил, что та же модель, предназначенная для неиндийских стран и использующая ту же версию Android, не поддерживает отображение символов на тамильском языке.

Это заставило меня продолжить исследование и пришло к выводу, что Android (как и другие ОС на базе Linux) зависит от механизма рендеринга шрифтов для отображения таких сложных символов. Два двигателя, с которыми я столкнулся, - Skia и Harfbuzz. Я заметил, что LG использует skia, а Samsung использует библиотеки Harfbuzz в своих устройствах для реализации этой возможности.

Я сталкивался со многими сайтами, предлагающими заменить эти библиотеки и шрифты. Это не сработало и приводит к зависанию. К счастью, я сделал резервную копию с помощью clockworkmod и, следовательно, восстановил свой телефон.

Хотя я объяснил это на тамильском, это применимо к большинству индийских языков.

Здесь возникает мой вопрос (если вы все еще читаете;)) Теперь, безусловно, ясно, что файл TTF должен присутствовать, чтобы предоставить символы, и для правильной визуализации необходимы соответствующие библиотеки (libskia.so или libharfbuzz.so). Кто-нибудь знает, как эти производители могут предоставить возможность? Я даже готов построить свой собственный ROM из AOSP (Android Open Source Project).

Нарайанан
источник
Cyanogenmod имеет возможность отображать справа налево отрисовку текстов. Skia является стандартной для рендеринга графики. Результаты могут отличаться, если взять одну библиотеку Skia из одного ПЗУ и поместить ее в другое, это может привести к катастрофическим последствиям, так как это потребует сборки с нуля, взятия исходного кода AOSP и замены Skia на harfbuzz и перекомпиляцию (вы просто не можете просто «вставить» harfbuzz в другое ПЗУ, которое не встроено в эту библиотеку - библиотеки связаны, поэтому, если сборка ПЗУ не знает о harfbuzz, он не будет работать)
t0mm13b
1
@narayanan почему-то сайт m.oneindia.in/tamil прекрасно отображает тамильский язык в Chrome на Android 4.1.2. Что этот сайт делает правильно, а другие нет?
FMFF

Ответы:

9

Рутованный телефон

Android в папке /system/fontsсодержит файл с именем «DroidSansFallback.ttf», который должен содержать все языковые символы. В настоящее время ему не хватает поддержки многих, в том числе тамильских.

Всегда можно заменить файл файлом, содержащим тамильские символы, что позволяет использовать тамильский на вашем телефоне.

От XDA Developers Thread - DroidSans Fallback Indic Font пользователи пробовали и успешно использовали тамильский на своих телефонах.

Чтобы воспользоваться этим методом, вам нужен root-доступ к вашему телефону, чтобы получить доступ к /systemфайлу Fallback и изменить его:

  • Прочтите Как я могу рутировать мое устройство? если ваш телефон еще не рутирован.
  • Следуйте ветке разработчиков XDA, чтобы узнать, как заменить файл :

    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
    

    Примечание: точка монтирования не одинакова для всех телефонов.


Android-приложение

Хотя вышеуказанный метод может понравиться некоторым пользователям, я предпочитаю приложение, когда оно доступно.

Кроме того, у тамильской клавиатуры всего 247 символов, а для английской - только 26. Поэтому это становится серьезной проблемой при наборе текста:

Смотрите Википедию :: Тамильский язык - Письменная система

Текущий тамильский сценарий состоит из 12 гласных, 18 согласных и одного специального символа, айтама. Гласные и согласные образуют 216 составных символов, что в сумме дает 247 символов (12 + 18 + 1 + (12 x 18))


Благодаря Кришану, и работает над этим вопросом, уже есть приложение для решения обеих проблем: общесистемное использование тамильского языка и клавиатура, которую можно использовать для ввода тамильских символов.

Прочтите сообщение Кришана под названием « Шрифт Tamil Unicode для Android» - работа с подробной информацией о разработке этого решения.

Обобщить

Кришан разработал и опубликовал два приложения в Google Play, которые полностью решают проблему наличия целой ОС Android на тамильском:

Zuul
источник
4
Я уже упоминал, что замена шрифта - это только частичное решение, которое будет отображать только несопряженные символы, а соединенные символы не будут отображаться должным образом. И второе решение относительно приложения не является для меня приемлемым решением. Это дает возможность составлять тамильский текст, печатая на английском языке и конвертируя и цитируя веб-страницы в качестве примера, что неприемлемо, как я уже сказал в моем ожидании. В любом случае спасибо за ваши усилия и время.
Нараянан
3

Вы, кажется, описываете проблему 4153 , известную ошибку в Android.

Эта проблема была решена в Jelly Bean. Если этот снимок экрана верный, проблема должна быть решена. (Я не могу сказать сам, но у меня есть доступ к Jelly Bean и я могу сделать скриншоты из него.)

Тестовая страница ICS для Unicode

Майкл Хэмптон
источник
1
Спасибо, это не просто ошибка, как я уже говорил, что рендеринг на тамильском языке работает даже в телефонах Android 2.3.3 с некоторым вмешательством от производителя.
Нараянан
1
20 июля 2012 года я посещаю gDays от Google, где я видел, как Android JellyBean 4.1 отображал тамильские символы даже вне браузера. К сожалению, я не мог проверить больше ничего.
Нараянан
С комментарием на вопрос android.stackexchange.com/questions/26797/… Я бы сказал, что я могу читать тамильский на веб-страницах, текстовых файлах, SMS, контактах, именах файлов, DOCX-файлах через ThinkFree Office Mobile Viewer. Я заметил, что это должно быть одинаково для телугу, каннада, бенгали и хинди.
Нараянан
1

Установить браузер Opera Mini

В браузере Opera Mini введите «about: Config»

использовать растровые шрифты для сложных сценариев: выберите Да

Вы можете просматривать все сайты тамильским шрифтом в любом бренде мобильного телефона.

С уважением

Раджеш
источник
5
Это растровое отображение, встроенное в браузер, и не решение для всей ОС (например, вы не сможете набирать или видеть тамильские или другие индикативные символы в SMS-сообщениях). Кстати, то, что вы предложили, уже упоминалось в основном посте:> «Opera и некоторые другие браузеры сделали это еще до Android 4.0, заменив изображение вместо символа».
0

Вам не нужно рутировать и заменять шрифт в системе Android.

Замените прошивку вашего устройства на аналогичную прошивку индийского региона, чтобы правильно отобразить шрифт Devanagari. В прошивках других регионов шрифты деванагари неправильно отображаются. Шрифты Devanagari корректно отображаются на Android версии 2.x в Индийском регионе.

Гана
источник