Пожалуйста, извините за длину этого вопроса. Мне нужно объяснить все это, чтобы помочь другим и избежать того, чтобы полезные участники давали ответ, не спрашивая разъяснений.
Мое требование в одной строке: «чтобы на телефоне 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).