android studio локализация приложения

В статье, посвященной ресурсам, мы уже затрагивали эту тему с теоретической точки зрения. Разберем теперь практическую часть. Мы уже умеем пользоваться строковыми ресурсами и меняли строчки, например, Hello, World на Здравствуй, Мир! Но на самом деле это не совсем правильный подход. Для профессионально написанного приложения лучше использовать другой подход. А именно, локализацию.

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

Чтобы не усложнять материал, воспользуемся стандартным приложением, который мы изучали в самом начале. Создадим новый проект «LocaleApp», но на этот раз мы не будем трогать файл strings.xml в каталоге res/values.

Для русской локализации необходимо создать новый подкаталог values-ru в том же каталоге res. Если вы планируете создавать локализацию только для русского языка, то название каталога не трудно запомнить и вы можете создать папку вручную через res | New | Directory. Но вряд ли вы запомните названия других папок. Поэтому покажу способ создания с помощью мастера студии.

Щёлкаем правой кнопкой мыши на папке res и выбираем New | Android resource directory. В диалоговом окне в левой части Available qualifiers: выбираем пункт Locale и переносим его в правую часть Chosen qualifiers: с помощью кнопки с двумя стрелками вправо. В появившейся третьей колонке выбираем нужные языки, например, русский. Вы увидите, что в поле Directory name автоматически появится нужное название папки. Дополнительно вы можете указать и регион в колонке Specific Region Only

localeapp4

В режиме Android вы можете не увидеть созданную папку, поэтому временно переключитесь в режим Project. Скопируйте файл res/values/strings.xml и вставьте его в новую папку. Можете вернуться в прежний режим. Если папка не пуста, то она уже видна.

Изменим его содержание.

В английской версии им соответствуют ресурсы

Запустим приложение и увидим, что текст выводится на русском, если у вас на эмуляторе или реальном устройстве выбраны русские настройки.

localeapp1

Как перейти на американскую локаль? Идём в Настройки→Язык и клавиатура→Выбрать язык. Выбираем английский язык English (United States). Снова запускаем приложение в эмуляторе или на телефоне. Теперь наше приложение будет выглядеть так:

localeapp2

Ресурсы из каталога res/values считаются ресурсами по умолчанию. Они отображаются в том случае, когда система не найдёт ресурсы для текущей локали устройства. В нашем случае, при выборе любого языка, кроме русского будет использоваться res/values. Если мы захотим разделить англичан и американцев, тогда придётся создавать два каталога: res/values-en-rUK и res/values-en-rUS. Обратите внимание, что перед кодом второй части ставится буква ‘r’. Иными словами, мы определяем не только язык, но и регион.

Проведем несколько экспериментов. Удалим из файла res/values-ru/strings.xml строковый ресурс hello_world с текстом Здравствуй, Мир!. Сохраним изменения и запустим проект на устройстве с русским языком. Платформа заменила отсутствующий в локализации ресурс дефолтным английским.

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

На самом деле локализовать можно не только строковые ресурсы. В разных странах принято рисовать какой-нибудь объект в соответствии со своими традициями, например, изображение почтового ящика. В этом случае вы можете создать каталог /res/drawable-de, в котором будут находиться изображения, предназначенные для немцев.

В коде вы обращаетесь к нужным ресурсам следующим образом:

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

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

Просмотр и создание локализованных строк в режиме дизайна

Чтобы увидеть, как меняется текст в различных локализованных версиях вашего приложения, необязательно запускать приложение в эмуляторе. Можно в студии на панели инструментов щёлкнуть на значке глобуса и выбрать из выпадающего списка нужный вам пункт (он появится после того, как вы создадите необходимые локализованные ресурсы), и все локализованные строчки сразу поменяются на экране активности.

localeapp6

localeapp3

После того, как вы завершите перевод всех ресурсов, нажимаете на кнопку OK и у вас появится готовая папка с новым файлом strings.xml для выбранной локализации.

Сейчас в студии вместо диалогового окна выводится окно редактора, в котором можно редактировать текст.

Непереводимая игра слов с использованием местных идиоматических выражений

Если вы решили использовать локализацию на разных языках, то можете встретиться с одной проблемой. Предположим, вы перевели только несколько строковых ресурсов и в один прекрасный день решили выложить программу в магазин приложений. Android Studio при сборке подписанного приложения может заругаться, что вы перевели не все строки. Есть два способа обхода проблемы. Вы можете использовать атрибут translatable=»false», чтобы указать среде разработке, что данная строка не требует перевода:

В окне редактора это сделать проще через флажки в столбце Untranslatable.

locale3

Есть ещё один вариант, когда непереводимые строки размещаются не в ресурсе strings.xml, а в другом файле под именем donottranslate.xml.

Когда вы исправите строковые ресурсы, то избавьтесь от ошибок через Project | Clean. и попытайтесь собрать приложение заново.

Поддержка письма справа налево

Арабы и некоторые другие народы используют непривычную для европейцев схему написания текстов справа налево. В Android 4.2 появилась поддержка данного режима. В блоге (англ.) Native RTL support in Android 4.2 рассказано о некоторых вещах по этой теме.

Теперь вы можете писать приложение для израильских военкоматов. Русские призывники в интервью офицерам душевного здоровья часто используют сочетание хатуль мадан (חתול מדען). Теперь вы знаете, как локализовать строки пушкинского стихотворения про кота учёного.

Несколько локалей

В Android 7.0 (API 24) пользователь может установить несколько локалей. В этом случае, если не будут найдены ресурсы для первой локали, то будут искаться ресурсы для второй локали. Таким образом, если француз знает два языка, например, французский и испанский, а в приложение не поддерживает французского, но поддерживает испанский, то пользователь увидит текст на испанском, а не на английском.

Источник

Локализация приложения Android

Вопросам локализации приложений уделено немало места на страницах нашего сайта. Наиболее значимая статья, связанная с фундаментальными основами локализации, рассказывает о региональных стандартах, форматах представления числовых, денежных и временных значениях в различных странах, ресурсных файлах и форматах сообщений. Поэтому, в этой статье будет рассмотрен только вопрос локализации интерфейса Android приложений. Здесь на примере мы должны увидеть процесс формирования и использования ресурсных файлов.

На странице описания табличной разметки TableLayout был создан файл table.xml, в котором уже подключались свойства ресурсного файла strings.xml. В этой статье мы продолжим эту тему и рассмотрим следующие вопросы локализации приложений в среде разработки Android Studio :

Ресурсные директории

Для локализации интерфейса, первое, что нам необходимо выполнить, это создать ресурсные файлы, которые хранятся в определенных ресурсных директориях. Создадим такие директории для языков локализации «ru» и «en». Для этого выделяем проект p02Layout, открываем контексное меню правой клавишей мыши и выбираем пункт меню New / Android Resource Directory. В открывшемся диалоговом окне в списке Available qualifiers выбираем пункт Locale и переносим его в правую часть Chosen qualifiers нажатием на кнопку с изображением «двух стрелок вправо».

android i18n00

В результате предыдущего действия интерфейс окна изменится и появятся другие компоненты и списки. Теперь необходимо в списке Language выбрать нужный язык. Прокрутка списка для выбора русского языка не дала нужного результата. Русский язык не был найден и представленная на скриншоте строка не была обнаружена, несмотря на то, что в последнем списке (Specific Region Only:) страна «RU: Russia» присутствует. Но после ввода символов «ru» при активности (нахождении фокуса) списка Language, сразу же появилась нужная запись и поле фильтрации в верхней части списка. Возьмите это на вооружение при поиске требуемого языка локализации. Наименование директории values-ru было сформировано студией автоматически после выбора языка локализации. Следующим шагом точно также была добавлена директория для английского языка «en».

android i18n01

Примечание : в проекте ничего не изменилось; как была одна директория res/values, так к ней ничего и не добавилось. Это специфика Android Studio – ничего личного, только проект.

Но если посмотреть на структуру проекта со стороны проводника, то Вы сразу же увидите добавленные ресурсные директории values-en, values-ru. Так что особых тревог быть не должно; все делаем правильно и ничего не пропало.

android i18n05

Ресурсные файлы

После определения ресурсных директорий необходимо добавить ресурсные файлы. Для этого опять же выделяем проект, вызываем контекстное меню правой клавишей мыши и выбираем New / Android Resource File. В открывшемся диалоговом окне опять же выбираем Language и переносим его в список Chosen qualifiers, как это было сделано на предыдущем шаге. В списке Language вводим требуемый язык, в результате чего Studio определит директорию размещения файла (Directory name). Теперь необходимо ввести наименование файла (File name) и нажать ОК. Скриншот отображает состояние после выбора языка локалилизации и определения наименования файла ресурсов string.xml.

android i18n02

В результате создания ресурсных файлов в структуре проекта будут добавлены записи в раздел res/values/strings. Помним, что простой strings.xml используется по умолчанию, если в системе не будет найден ресурсный файл приложения для соответствующего объекта Locale.

android i18n06

Ресурсные файлы

После выполнения двух предыдущих шагов были созданы ресурсные директории с файлами string.xml. То есть в трех разных директориях (values, values-en, values-ru) хранятся три файла с одинаковыми наименованиями strings.xml. В этом суть отличия локализации приложений Android. Теперь необходимо определить содержимое файлов так, чтобы ключевые наименования у них были одинаковыми. Эти ключевые наименования будут использоваться для определения заголовков меток и кнопок.

Листинг файла values-ru/string.xml

Листинг файла values-en/string.xml

Содержимое файла values/string.xml определим согласно англоязычного варианта локализации.

Локализация интерфейса

При локализации интерфейса необходимо к текстовым параметрам меток (android:text), полям ввода (android:hint) и кнопкам (android:text) подключить соответствующие ресурсные строки. Это можно сделать двумя способами.

Определение ресурсных значений в файле описания конфигурации

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

Текстовое значение метки tvLogin связали с ресурсной строкой «@string/lbl_login» (android:text), а подсказку текстового поля edLogin связали с «@string/hint_login» (android:hint).

Определение ресурсных значений в панели атрибутов компонента

Установить связь текстового значения компонента с ресурсным значением можно через интерфейс среды разработки Studio. Для этого необходимо выделить компонент и перейти к панели атрибутов. Здесь следует найти соответствующий параметр. На следующем скриншоте представлена выделенная строка текстового параметра компонента кнопки.

android i18n03

Сейчас у кнопки определено несвязанное текстовое значение Button. Можно в этой же строке ввести новое/необходимое значение; но можно и нажать на кнопку с изображением многоточия. В результате будет открыто окно выбора ресурсного значения. Здесь находим нужную строку в списке и нажимаем ОК.

android i18n04

Динамическое подключение ресурсных файлов

Для реализации динамического изменения локализуемых надписей интерфейса приложения проще всего в интерфейс добавить пару кнопок : одна из кнопок будет переводить интерфейс на русский язык, а другая – на английский. Конечно же, желательно, чтобы на кнопках были изображены соответствующие флаги. Но не будем сейчас усложнять задачу и ограничимся дополнительным размещением обычных кнопок. Вопрос использования изображений рассмотрен в отдельной статье Представления изображений в Android.

android i18n08

Полагаю, особого труда у Вас не составит самостоятельно поместить в таблицу две строки TableRow : одну для кнопок (btnEn, btnRu) и одну в качестве «разделителя». Ну и в заключении создадим метод changeLocale(Locale locale).

Теперь, когда интерфейс определен и ресурсные файлы подготовлены, осталось только разработать метод определения локализованных надписей интерфейса (changeLocale) и к кнопкам подключить соответствующие обработчики событий. Для этого откроем основной класс приложения MainActivity и внесем в него дполнительный код, представленный ниже :

В методе onCreate к кнопкам btnRu и btnEn подключены соответствующие обработчики событий. При нажатии на одну из кнопок в «консоль» выводится сообщение, формируется объект локализации и вызывается метод changeLocale. В методе changeLocale выполняется определение текущей Locale, после этого выполняется чтение соответствующего ресурсного файла и локализуются надписи интерфейса.

«Консоль» сообщений

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

android i18n09

После старта Вы должны увидеть интерфейс приложения, представленный на следующем скриншоте. Нажатием на верхние кнопки текстовые строки интерфейса переводятся на соответствующий язык локализации.

android i18n07

Локализация даты и времени

Для проверки функционирования локализации даты и времени ниже представлен соответствующий метод. Здесь все тривиально просто. Обратите только внимание на импорт класса Calendar.

Вызвав printCurentDateTime из метода changeLocale в консоль будут выведены следующие сообщения о дате и времени для двух различных языков локализации :

Источник

Локализация в Android

В этом документе представлены функции локализации пакет SDK для Android и способы доступа к ним с помощью Xamarin.

Возможности на платформе Android

Locale

пользователи выбирают язык в Параметры > языке & входе. Этот выбор контролирует как отображаемый язык, так и региональные параметры (например, для форматирования даты и чисел).

Текущий языковой стандарт можно запрашивать с помощью текущего контекста Resources :

Это значение будет идентификатором локали, который содержит код языка и код локали, разделенные символом подчеркивания. Для справки ниже приведен список языковых стандартов Java и языков с поддержкой Android через StackOverflow.

Ниже приведены распространенные примеры.

LOCALE_CHANGED

Действия могут решить эту android:configChanges операцию, задав атрибут для действия следующим образом:

Основы интернационализации в Android

Стратегия локализации Android состоит из следующих основных частей.

Папки ресурсов для хранения локализованных строк, изображений и других ресурсов.

GetText метод, используемый для извлечения локализованных строк в коде

@string/id в файлах AXML для автоматического размещения локализованных строк в макетах.

Папки ресурсов

Приложения Android управляют большинством содержимого в папках ресурсов, например:

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

resources

Формат файла Strings.xml

Каждая Преобразуемая строка является XML-элементом с ИДЕНТИФИКАТОРом ресурса, указанным в качестве name значения атрибута, а Переведенная строка — значением:

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

значения и Strings.xml

Значения каталога на испанском языке -ES содержат файл с тем же именем (Strings.xml), который содержит переводы:

значения-ES/Strings.xml

values

При настройке строковых файлов переведенные значения можно ссылаться как в макетах, так и в коде.

Файлы макета AXML

Для ссылки на локализованные строки в файлах макета используйте @string/id синтаксис. В этом фрагменте кода XML из примера показаны text свойства, заданные с помощью локализованных идентификаторов ресурсов (некоторые другие атрибуты опущены):

Метод GetText

Чтобы получить переведенные строки в коде, используйте GetText метод и передайте идентификатор ресурса:

Строки количества

(вместо универсального «есть n задач, слева»).

В Strings.xml

Допустимые quantity Параметры:

Они более подробно описаны в документах Android. Если на данном языке не требуется обработка «Special», эти quantity строки будут пропускаться (например, только на английском языке, а, при one other указании zero строки не будет действовать, она не будет использоваться).

Изображения

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

Образы, зависящие от языкового стандарта, затем должны размещаться в готовых для рисования папках, таких как Draw-ES или Draw-JA (также можно добавить описатели DPI).

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

drawable

Другие типы ресурсов

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

Дополнительные сведения об именовании и откате каталога ресурсов см. в документации по Android для предоставления альтернативных ресурсов.

Имя приложения

Имя приложения легко локализовать с помощью @string/id в для MainLauncher действия:

Языки с направлением письма справа налево

Android 4,2 и более поздние версии обеспечивают полную поддержку макетов RTL, подробно описанных в блоге о поддержке RTL.

На следующем снимке экрана показан Пример локализованной задачи на арабском языке.

rtl ar sml

На следующем снимке экрана показан локализованный пример задачи на иврите:

rtl he sml

Текст с письмом справа налево локализуется с помощью Strings.xml файлов так же, как текст на LTR.

Тестирование

Обязательно выполните тщательное тестирование языкового стандарта по умолчанию. Приложение аварийно завершит работу, если ресурсы по умолчанию не могут быть загружены по какой-либо причине (т. е. отсутствуют).

Emulator Тестиру

Тестирование устройства

Запишите значки и расположение пунктов меню, чтобы можно было вернуть язык к исходному значению.

Сводка

В этой статье рассматриваются основы локализации приложений Android с помощью встроенной обработки ресурсов. Дополнительные сведения о i18n и l10n для приложений iOS, Android и кросс-платформенных (включая Xamarin. Forms) см. в этом межплатформенном руководством.

Источник

Учебник по локализации приложений для Android

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

После того, как вы предоставите перевод, ОС Android выберет ресурсы, соответствующие локали пользователя. Если ваше приложение доступно на нескольких языках, Android выберет язык, который использует устройство.

В этом уроке мы рассмотрим следующее:

1. Процесс локализации приложения

Android загружает текстовые и мультимедийные ресурсы из каталога «res» проекта. Кроме того, Android может выбирать и загружать ресурсы из разных каталогов в зависимости от текущей конфигурации устройства и локали.

Например, если код загружает строку с именем «R.string.title», Android выберет правильное значение для этой строки во время выполнения, загрузив соответствующий файл strings.xml из соответствующего каталога «res/values».

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

Если локаль «en-US», Android будет искать значение «R.string.title» путем поиска файлов в следующем порядке:

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

Давайте рассмотрим пример приложения, чтобы лучше понять процесс локализации. Это очень простое одноязычное приложение, которое отображает изображение страны и текстовое представление в соответствии с языком, установленным в устройстве. Структура проекта будет такой, как показано на рисунке 1.

UnlocalizedProjStructure

Рисунок 1: Структура примера проекта

Приложение не проверяет языковой стандарт пользователя и всегда выполняет одно и то же для любого параметра языкового стандарта. Снимок экрана примера приложения показан на рисунке 2. Обратите внимание, что фоновое изображение относится к изображению Соединенных Штатов, а текст на английском языке (настройка языка по умолчанию).

Unlocalised Output

Рисунок 2: Снимок примера одноязычного приложения.

Нашим первым шагом к локализации этого приложения является планирование того, как оно должно отображаться по-разному для разных локалей. Мы добавим специфическую для региона информацию для Италии, Франции, Канады и России. Таблица 1 подробно описывает различные варианты отображения для разных локалей.

Table1

Таблица 1: Опции отображения для разных локалей

Table2

Таблица 2: Расположение «strings.xml» и фоновых изображений для разных локалей

Таблица 2 показывает пути к различным файлам ресурсов и какие из них используются для какой локали.

Как показано в Таблице 1, у нас будет шесть фоновых изображений (5 конкретных локалей и одно по умолчанию). У нас также будет три набора переводов строк (итальянский, русский и французский).

Языковая часть имени папки содержит языковой код ISO и необязательный код региона, которому предшествует строчная буква r.

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

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

2. Перевод строк

Приложению требуются четыре файла strings.xml, по одному для каждого: на английском, итальянском, французском и русском языках.

Процедура создания файлов strings.xml выглядит следующим образом:

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

3. Локализация изображений

Для нашего приложение также нужно шесть папок для рисования, каждая из которых содержит вариант фонового изображения.

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

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

Фоновое изображение Папка назначения в рабочей области проекта
Итальянский drawable-it-rIT/background.png
Французский drawable-fr-rFR/background.png
Французский (Канада) drawable-fr-rCA/background.png
Английский (Канада) drawable-en-rCA/background.png
Русский drawable-ru-rRU/background.png
Английский (США) drawable-en-rUS/background.png
По умолчанию (изображение Земли) drawable/background.png

Таблица 3: Фоновое изображение и соответствующие папки назначения.

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

LocalizedProjectStructure

Рисунок 3: Структура примера многоязычного приложения для Android

4. Запуск и тестирование локализованного приложения

Как только локализованные строковые и графические ресурсы добавлены в рабочую область проекта, приложение готово к тестированию. Для его тестирования, можно установить разные локали черезHome > Menu > Settings > Locale & text > Select locale.

В зависимости от конфигурации устройства некоторые устройства могут предлагать только несколько локалей или могут не предлагать альтернативные локали через приложение настроек. Тем не менее, эмулятор Android предложит на выбор все локали, доступные в ОС Android. Чтобы установить в эмуляторе локаль, недоступную в образе системы, можно использовать пользовательскую локаль, доступную на вкладке «Приложение».

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

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • android studio кэш приложения
  • android studio клиент серверное приложение