ПРЕАМБУЛА: поскольку API 17 (Android 4.2) существует метод TextView.setTextLocale()
, который явно решает эту проблему для TextViews и производных классов. Назначьте японский язык (Locale.JAPAN
), а символы Unihan будут выглядеть японскими.
У меня есть приложение на Android, которое отображает японский текст в WebViews и TextViews. Есть несколько китайских иероглифов (кандзи), которые, по соглашению, выглядят по-разному в Китае и Японии, но имеют один и тот же код Unicode. Обычно браузер будет использовать тег lang
, чтобы выбрать правильный глиф. На Android все они по умолчанию имеют свои китайские формы, и мне нужны японские формы.
Проблема хорошо объясняется в этой статье. Эта статья также служит прекрасной иллюстрацией проблемы - при просмотре на Android (до 2.2) символы в "примерах зависимых от языка символов" выглядят одинаково и китайски.
Использование атрибута lang="ja"
не помогает. Переключение всей языковой системы на японский язык тоже не помогает.
Мне интересно, какие телефоны Android продаются в Японии. Такие персонажи, как 直, 今, 化 выглядят в китайском стиле тоже? Я предполагаю, что нет.
Итак, есть вопросы: есть ли официальные локализованные изображения Android там? Могу ли я запустить его на эмулятор? Является ли шрифт DroidSansFallback по-прежнему единственным шрифтом с поддержкой CJK? И если это так, это то же самое, что и на vanilla USA Android?
Я как бы надеюсь, что японские глифы скрыты где-то глубоко в шрифте (частная область Юникод или что-то еще). Если это так, я могу использовать их...
EDIT: расположенный DroidSansJapanese.ttf, установлен на эмулятор, скопировав его в /system/fonts, перезапустив его. Это не повлияло на внешний вид статьи Unihan. Даже область подсказок японского ввода текста (который должен знать лучше) отображается, как будто китайский.
Как узнать имя шрифта DroidSansJapanese.ttf? У меня есть чувство, что это все еще Droid Sans, так же, как и во встроенном шрифте DroidSansFallback. Но если они содержат один и тот же шрифт, что определяет, какой из них должен иметь приоритет? Можно было бы подумать - системный язык, но, видимо, нет. Шрифты в Android установлены только путем копирования, правильно?