Мой вопрос:
Как добавить или удалить языковые записи в "Настройки" → "Настройки языка и клавиатуры" → "Выбрать язык" (или "Выбрать язык" ) на телефоне Android из исходного кода уровень?
Я расскажу больше о том, чего я хочу и что я сделал. Пожалуйста, извините меня, если я представляю какое-либо глупое понимание или информацию. Я новичок в разработке Android, начинаю изучать его несколько дней назад. Есть еще много чего не знаю.
Дополнительная информация о том, что я хочу:
Недавно я работал над задачей локализовать продукт всего телефона с новыми языками (я имею в виду, что я не работает над конкретным приложением. почему мне нужно добавить новый язык в настройках). Когда я получил телефон разработки, я обнаружил, что есть только несколько языковых записей, доступных в "Выбрать язык" , например "Английский", "Французский" и "Испания". Поэтому, прежде всего, мне нужно добавить и отобразить некоторые новые записи языка в этот список, например, "японский", "китайский", "корейский".
У меня есть исходный код платформы Android и мой собственный код, поэтому я думаю, что эту задачу можно выполнить , изменив исходный код или файлы ресурсов где-нибудь. К сожалению, я не знаю, где находятся код и файлы.
" Hello, L10N" учебник показывает способ добавления новой локали из "Custom Locale" во время выполнения. Но я хочу, чтобы добавлять новые локали во время сборки, поэтому при запуске телефона новые локали будут отображаться непосредственно в "Выбрать локаль" без каких-либо других действий.
Что я сделал:
Я провел много исследований в Интернете, прежде чем я приеду сюда. Вот что я нашел:
-
Sinkiru в Stackoverflow задал вопрос о том, чего я точно ищу. Смотрите здесь здесь. Однако никто больше не ответил ему. Его собственный ответ сообщает только, где запрашивать параметр языка CURRENT, который не, что я хочу. Я лично отправил ему электронное письмо по этому вопросу, но не получил его ответа.
-
Я много искал в Stackoverflow с ключевыми словами "Android-локаль", "Язык Android", "Android-локаль" и что-то подобное. Большинство вопросов на этом сайте спрашивают, как изменить локаль приложения, как добавить поддержку нескольких языков для приложения и т.д. Они НЕ, что я хочу.
-
Я много искал в группе Google Android-платформы (http://groups.google.com/group/android-platform). Некоторые люди задают мой вопрос, но после прочтения сообщений я до сих пор не получаю ответа.:-( Вот список сообщений, которые я читал в группе (и я делаю не получить то, что я хочу от них):
-
" Локализация ОС "- я расскажу подробнее ниже.
-
" Как добавить новый язык и связанный с ним шрифт в источнике android "
-
-
Вернитесь к записи "(a)", указанной выше. В потоке сообщений "Локализация ОС" Dianne Hackborn, разработчик инфраструктуры Android, сказал следующее:
"Приложение настроек просто показывает вам все локали, которые доступны в ресурсов платформы. Добавление строк для новой локали автоматически есть те, которые показаны в настройках. Вы сообщите системе сборки , которая ресурсов для включения, когда он build... к сожалению, я не могу помочь вы с этой стороны, но, может быть, кто-то иначе может."
Его слова, выделенные жирным шрифтом, предполагают, что моя задача может быть выполнена автоматически путем добавления нового исходного ресурса в исходный код и путем настройки или изменения чего-либо в системе сборки. Мне интересно, раньше ли кто-нибудь делал подобное? Я собираюсь попробовать завтра.
-
И последнее, но не менее важное: я искал на официальном сайте разработчика Android. В "Запустить и протестировать локализованное приложение" в учебнике " Hello, L10N в нем говорится о доступных локалях в "Настройках", но это в основном говорит о том, что делать в эмуляторе, и это не должно быть то, что мне нужно. Я хочу, чтобы это было сделано на реальном телефоне.
-
Я также погрузился в исходный код платформы Android, пытаясь что-то обнаружить. Я начал с $(ANDR_SRC_ROOT)/Packages/app/Settings/src/.../LocalePicker.java. В методе LocalePicker:: onCreate() я заметил эту строку кода:
String [] locales = getAssets(). getLocales();
Код ниже этой строки пытается установить все полученные имена локалей в ArrayAdapter, а затем установить адаптер в представление списка для отображения. Таким образом, я думаю, что метод getLocales() является ключом к решению.
Затем я просмотрел код getLocales(). getLocales() является элементом метода AssetManager и объявляется как native, поэтому я вступил в $(ANDR_SRC_ROOT)/frameworks/base/libs/utils/AssetManager.cpp, который я GUESS должен быть фактическим реализация метода java getLocales(). С++ AssetManager:: getLocales(), наконец, приводит меня к методу С++ ResTable:: getConfigurations(), в котором проверяется переменная-член " mPackageGroups" для извлечения всех доступных элементов ResTable_config. Таким образом, я думаю, что все доступные локали должны быть добавлены в эту группу mPackageGroups во время запуска системы. Тем не менее, я потерял код в конце и не смог найти, где локали добавлены в mPackageGroups.