Подтвердить что ты не робот

Добавление/удаление языковых записей в "Настройки" → "Выбрать локаль" с телефона Android

Мой вопрос:

Как добавить или удалить языковые записи в "Настройки" → "Настройки языка и клавиатуры" → "Выбрать язык" (или "Выбрать язык" ) на телефоне Android из исходного кода уровень?

Я расскажу больше о том, чего я хочу и что я сделал. Пожалуйста, извините меня, если я представляю какое-либо глупое понимание или информацию. Я новичок в разработке Android, начинаю изучать его несколько дней назад. Есть еще много чего не знаю.

Дополнительная информация о том, что я хочу:

Недавно я работал над задачей локализовать продукт всего телефона с новыми языками (я имею в виду, что я не работает над конкретным приложением. почему мне нужно добавить новый язык в настройках). Когда я получил телефон разработки, я обнаружил, что есть только несколько языковых записей, доступных в "Выбрать язык" , например "Английский", "Французский" и "Испания". Поэтому, прежде всего, мне нужно добавить и отобразить некоторые новые записи языка в этот список, например, "японский", "китайский", "корейский".

У меня есть исходный код платформы Android и мой собственный код, поэтому я думаю, что эту задачу можно выполнить , изменив исходный код или файлы ресурсов где-нибудь. К сожалению, я не знаю, где находятся код и файлы.

" Hello, L10N" учебник показывает способ добавления новой локали из "Custom Locale" во время выполнения. Но я хочу, чтобы добавлять новые локали во время сборки, поэтому при запуске телефона новые локали будут отображаться непосредственно в "Выбрать локаль" без каких-либо других действий.

Что я сделал:

Я провел много исследований в Интернете, прежде чем я приеду сюда. Вот что я нашел:

"Приложение настроек просто показывает вам все локали, которые доступны в ресурсов платформы. Добавление строк для новой локали автоматически есть те, которые показаны в настройках. Вы сообщите системе сборки , которая ресурсов для включения, когда он build... к сожалению, я не могу помочь вы с этой стороны, но, может быть, кто-то иначе может."

Его слова, выделенные жирным шрифтом, предполагают, что моя задача может быть выполнена автоматически путем добавления нового исходного ресурса в исходный код и путем настройки или изменения чего-либо в системе сборки. Мне интересно, раньше ли кто-нибудь делал подобное? Я собираюсь попробовать завтра.

  1. И последнее, но не менее важное: я искал на официальном сайте разработчика Android. В "Запустить и протестировать локализованное приложение" в учебнике " Hello, L10N в нем говорится о доступных локалях в "Настройках", но это в основном говорит о том, что делать в эмуляторе, и это не должно быть то, что мне нужно. Я хочу, чтобы это было сделано на реальном телефоне.

  2. Я также погрузился в исходный код платформы 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.

4b9b3361

Ответ 1

на телефонах HTC вы также должны изменить /system/customize/CID/default.xml... Это файл, который они используют для указания локалей на своих запасных ромах. Если rom является WWE, возможно, что нужно редактировать CID, но это не всегда верно.

Ответ 2

Я думаю, что нормальное приложение не должно добавлять адреса в телефон. Для этой цели существуют специальные пакеты, такие как MoreLocale 2. Если вы добавите языковой стандарт, вы несете ответственность не только за предоставление локализации для своего приложения, но и для всей системы!

Ответ 3

вам нужно создать папку "values" в папке "res" в пакете android framework-res. Имя этой новой папки должно содержать код страны вашей потребности, т.е. values-pl-rPL (требуется часть rPL) для польского языка (для британского английского: en-rGB и т.д.), этого должно быть достаточно - если нет - создайте файл strings.xml в этой папке и добавьте туда пустые "ресурсы" node.

Ответ 4

Чтобы создать или добавить несколько языков в ваше приложение, сначала вам нужно определить все строковые значения в файле string.xml в папке значений, а не жестко кодировать их в вашей программе. Затем вам также нужно иметь разные папки значений для разных языков, например. Значения для испанского и Value-fr для французского. Это должно выполнить эту работу. Я не думаю, что приложение может поменять локаль по умолчанию.

Ответ 5

Я думаю, вам нужно отредактировать

PRODUCT_LOCALES

Принять в build/target/product/languages_full.mk и добавить и удалить строки, назначенные для этого.

Вы можете определить свою настраиваемую строку, такую ​​как zz_zz, и добавить папку values_zz_zz в каждую из ваших папок res.

Не пробовал, но это может сработать.

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

Ответ 6

Для удаления языков, если мы удалим строку locale из PRODUCT_LOCALES, она будет работать.

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