Многие видели и возможно разрабатывали мульти-язычные приложения. Такие приложения, автоматически меняют язык интерфейса и в некоторых случаях название приложения. В данной статье речь пойдёт об автоматической смене названия приложения в зависимости от выбранного языка в системе.
Начнём…
Запускаем студию, создаём новый проект. Проект автоматически получит название ProjectX (где Х – это число), изменить можно в Project Manager, это же название будет отображаться после установки приложения на устройство.
Мы знаем, чтобы изменить отображаемое название приложения, необходимо зайти в меню «Project->Options->Version Info» и там изменить свойство «label». Подробнее о свойствах можно почитать тут: Delphi XE5/XE6 - Project->Options->Version Info(Android)
Но, как вы понимаете, название будет всегда одинаковое. Т.е. если мы указали название на русском языке и приложение установил англичанин/француз/немец, то все они будут видеть русское название, что крайне неудобно.
Теперь-то мы и попробуем решить эту задачку.
Что необходимо запомнить:
- Название приложения для выбранного на устройстве языка будет выбираться автоматически
- Для каждого языка создаётся отдельная папка в ресурсах (Об этом, более подробно, я расскажу ниже).
- Если в ресурсах приложения не найден каталог с языком системы и нет общего каталога для всех языков, то будет отображаться название вашего проекта из Project Manager
С первым пунктом всё ясно, перейдём сразу ко второму.
У приложения есть папка «res\», в ней хранятся все ресурсы (иконки, стили, SplashScreen и т.д.) приложения.
Идём в справку по Андроиду - http://developer.android.com/intl/ru/guide/topics/resources/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
Сохраняем файл.
Получится примерно так:
Компилируем на устройстве и тестим.
На видео, виден результат наших трудов, задачу мы полностью выполнили.