Добавление / удаление языковых записей в «Настройках» -> «Выбрать локаль» с телефона Android - PullRequest
30 голосов
/ 01 апреля 2011

Мой вопрос:

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

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

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

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

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

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

Что я сделал:

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

  1. Синкиру в Stackoverflow задал вопрос о том, что именно я ищу. Смотрите это здесь . Однако никто не ответил ему. Его собственный ответ только говорит, где запросить настройку языка CURRENT, которая не , что я хочу. Я лично отправил ему электронное письмо на этот вопрос, но не получил его ответа.

  2. Я много искал в Stackoverflow, с ключевыми словами "android locale", "android language", "android new locale" и чем-то похожим. Большинство вопросов на этом сайте касаются того, как изменить язык приложения, как добавить многоязычную поддержку приложения и т. Д. Они НЕ , что я хочу.

  3. Я много искал в группе Google android-платформы (http://groups.google.com/group/android-platform). Некоторые люди задают мой вопрос, но после прочтения сообщений я все еще не получаю свой ответ .. :-( Вот список сообщений, которые я прочитал в группе (и я не получаю от них то, что я хочу):

  4. Вернуться к записи "(a)", указанной выше. В ветке сообщений «Локализация ОС» Дайана Хэкборн, инженер по Android Framework, сказала следующее:

"Приложение настроек показывает вам все локали, которые доступны в ресурсы платформы. Добавление строк для новой локали должен автоматически те, которые указаны в настройках . Вы сообщить системе сборки , в какой локали ресурсы для включения, когда он делает 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 и объявлен как собственный, поэтому я вошел в $ (ANDR_SRC_ROOT) /frameworks/base/libs/utils/AssetManager.cpp, который я GUESS должен быть реальной реализациейметода Java getLocales ().C ++ AssetManager :: getLocales (), наконец, приводит меня к методу C ++ ResTable :: getConfigurations (), в котором сканируется переменная-член " mPackageGroups ", чтобы получить все доступные элементы ResTable_config. Таким образом, я думаю, что все доступные локали должны быть добавлены в этот mPackageGroups во время запуска системы. Однако я, наконец, потерял в коде и не смог найти, где локали добавляются в mPackageGroups.

Ответы [ 6 ]

2 голосов
/ 07 июня 2012

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

1 голос
/ 31 декабря 2011

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

1 голос
/ 19 декабря 2011

вы должны создать папку «values» в папке «res» пакета Android-Framework-Res. Название этой новой папки должно содержать код страны, в которой вы нуждаетесь, т.е. values-pl-rPL (требуется rPL ) для польского языка (для британского английского: en-rGB и т. Д.), Этого должно быть достаточно - если нет - создайте strings.xml файл в этой папке и добавьте туда пустой узел " resources ".

1 голос
/ 01 апреля 2011

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

0 голосов
/ 21 февраля 2012

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

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

0 голосов
/ 04 января 2012

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

PRODUCT_LOCALES

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...