FAQ Автоматическая Смена Названия Приложения В Зависимости От Языка Системы

  • Автор темы Автор темы Lomanu4
  • Дата начала Дата начала

Lomanu4

Команда форума
Администратор
Ofline
Многие видели и возможно разрабатывали мульти-язычные приложения. Такие приложения, автоматически меняют язык интерфейса и в некоторых случаях название приложения. В данной статье речь пойдёт об автоматической смене названия приложения в зависимости от выбранного языка в системе.




Начнём…


Запускаем студию, создаём новый проект. Проект автоматически получит название ProjectX (где Х – это число), изменить можно в Project Manager, это же название будет отображаться после установки приложения на устройство.






Мы знаем, чтобы изменить отображаемое название приложения, необходимо зайти в меню «Project->Options->Version Info» и там изменить свойство «label».


Но, как вы понимаете, название будет всегда одинаковое. Т.е. если мы указали название на русском языке и приложение установил англичанин/француз/немец, то все они будут видеть русское название, что крайне неудобно.

Теперь-то мы и попробуем решить эту задачку.


Что необходимо запомнить:

  1. Название приложения для выбранного на устройстве языка будет выбираться автоматически
  2. Для каждого языка создаётся отдельная папка в ресурсах (Об этом, более подробно, я расскажу ниже).
  3. Если в ресурсах приложения не найден каталог с языком системы и нет общего каталога для всех языков, то будет отображаться название вашего проекта из Project Manager

С первым пунктом всё ясно, перейдём сразу ко второму.


У приложения есть папка «res\», в ней хранятся все ресурсы (иконки, стили, SplashScreen и т.д.) приложения.

Идём в справку по Андроиду - http://developer.android.com/intl/r...providing-resources.html#AlternativeResources

Из неё понимаем, что Андроид поддерживает несколько квалификаторов для одного имени каталога. Квалификаторы пишутся через дефис после имени каталога. В нашем случае, квалификаторами будут двухбуквенные коды языка ISO 639-1. Также допускается указание региона через дефис после языка (подробнее читайте в справке по ссылке выше).


Примеры:
  • en
  • fr
  • en-rUS
  • fr-rFR
  • fr-rCA

Теперь остаётся понять, как должна выглядеть структура папок для мульти-язычного приложения.


Идём в справку - http://developer.android.com/intl/ru/training/basics/supporting-devices/languages.html#CreateDirs

Из неё понимаем, как должна выглядеть структура каталогов и примерное содержание файлов в каждом каталоге.

Остаётся дело за малым. Выбираем язык по умолчанию, я выбрал английский, и создаём каталоги для необходимых нам языков.


Создаём каталог «res» в корневой папке проекта и заполняем его такими каталогами и файлами.
  • res\values\strings.xml (Название для отсутствующих языков, в моём примере, на английском языке)

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">English lang</string>
</resources>

  • res\values-ru\strings.xml (Русский язык)

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Русский язык</string>
</resources>

  • res\values-fr\strings.xml (Французский язык)

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Français langue</string>
</resources>



В итоге получится вот такая структура:




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

Задеплоили файлы:





Ну и последний шаг. Забываем про «Project->Options->Version Info: label», т.к. теперь мы сами контролируем вывод названия.

Делаем сборку проекта через меню «Build» в Project Manager. После сборки, открываем файл «AndroidManifest.template.xml» из корневой папки проекта и …

Находим

%label%

Заменяем на

@string/app_name

Находим

%activityLabel%

Заменяем на

@string/app_name


Сохраняем файл.

Получится примерно так:





Компилируем на устройстве и тестим.
 
Назад
Сверху Снизу