Как локализовать Android приложение
Главная » Как локализовать Android приложение

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

 С использованием Android SDK, язык используемых локализованных строковых ресурсов и формата/значения времени, а также даты автоматически будут подстраиваться под тот регион и языковую среду, в которой работает устройство. Язык определяется стандартом ISO 639-1, страна - ISO 3166-1. То есть, можно смело говорить, что Android совместим с большинством стран мира (ну может разве какие африканские племена не в счет:)) и языками. 

 

Локализация языка

Стоит отметить, что единственный язык, который 100% будет представлен в любом Android устройстве - это американский английский, обозначаемый кодом en_US. Чтобы произвести языковую локализацию вашего приложения, нужно в его папку res/ вложить дополнительные ресурсы, которые вы посчитаете нужным добавить. 

Чтобы добавить альтернативные языки вашему приложению нужно создать папки в корневой папке res/, присваивая им имена типа: res/values-<языковой код> или res/values-<языковой код>-r<код страны>. Стоит отметить, что если вы определили для некоторого региона языковые настройки, то они, при использовании в приложения в этом регионе, будут приоритетными, то есть будут по умолчанию более "важными" для приложения и будут применяться первостепенно. Выше их приоритета может быть только так называемый мобильный код страны MCC. Мобильный код страны (определяемый с помощью мобильного кода сети MNC из Sim карты) определяет преимущественные ресурсы для данной страны.

Итак, давайте научимся создавать языковую локализацию. Создайте новое приложение, либо же откройте не слишком сложное существующее у вас приложение. Мы ставим задачу локализовать наше приложение для русско язычных регионов и англоязычных. Для настройки русского языка мы просто используем существующую папку res/values/strings.xml и создадим так необходимые нам строковые ресурсы. Для английского же языка, создаем подпапку /values-en в папке res/ ресурсов, и создаем следующий файл с адесом: res/values-en/strings.xml. В этот созданный нами файл мы и добавим английские строковые ресурсы. Как должен выглядеть код:

Для файла с русскими языковыми ресурсами res/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <string name="app_name">Мое приложение</string>
 <string name="hello_world">Привет мир!</string>
 <string name="action_settings">Настройки</string>
 <string name="word">Слово</string>
</resources>

Для файла английской локализации res/values-en/strings.xml ресурсы будут следующими:

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <string name="app_name">My Application</string>
 <string name="hello_world">Hello world!</string>
 <string name="action_settings">Settings</string>
 <string name="word">Word</string>
</resources>

Все готово, теперь при запуске в англоязычной стране программа автоматически будет использовать ресурсы с папки res/values-en/strings.xml и отображать английский текст.

Стоит отметить, что для того, чтобы этот механизм языковой локализации корректно сработал в ваших приложениях, нужно для элементов программы, использующих текст, например при настройке android:text="" для объектов <TextView>, присваивать им текст не просто написанием слова, типа android:text="Привет мир!", а ссылкой на созданный соответствующий строковый ресурс: android:text="@string/hellow_world"

Если вы хотите выполнить локализацию строк в самом  коде программы, если это не было сделано в файле layout.xml или других подобные ему файлах разметки интерфейса, то для локализации таких строк нужно вызвать в коде объект android.content.res.Resourses, который содержит все ресурсы в пакете приложения, и обратиться к необходимому ресурсу отсюда с помощью метода get.String. Вот как можно локализовать наш "Hellow world!" этим способом:

// Подключаем необходимый ресурс:
android.content.res.Resources res = context.getResources();
String helloWorld = res.getString(R.string.hello_world);
 
//Привязываем локализованную строку к элементу <TextView>
TextView helloTextView;
helloTextView = (TextView)findViewById(R.id.hello_world_textview);
helloTextView.setText(helloWorld);

Есть еще один способ произвести локализацию строковых ресурсов вашего приложения. Он довольно простой, проще всего, о чем здесь говорилось и будет говориться, но точно так же работающий. Итак, когда вы работаете над своим приложением в файлах разметки, типа activity_main.xml, то можно прямо здесь, без редактирования файлов ресурсов, настроить языковую локализация. Неважно, в каком режиме вы находитесь, Text или Design, находим на панели следующую кнопочку :

Локализация

Жмем ее, выбираем первый пункт - Add Translation, и перед нами появляется окошко, где предлагается выбрать нужный для локализации язык. Находим с списке нужный язык, жмем на него и видим новое окно:

Локализация

Как видите, в появившейся таблице 3 столбца: Key, Defuolt, Russian (ru) (потому, что я выбрал для локализации русский язык). В первом отображаются имеющиеся у нас строковые ресурсы в файле res/values/strings.xml, во втором - их значение в этом же файле res/values/strings.xml, ну а 3-е окно позволят нам здесь же ввести перевод всех существующий строковых ресурсов. Вводим нужный перевод, жмем ОК. Видим, что открылся файл ru\string.xml, а это значит, что программа сама создала необходимую папку для русскоязычной локализации. Все готово!

 

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

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

 

Локализация даты 

Настройка локализации даты может быть выполнена с помощью класса DateFormat в пространстве имен android.text.format. Следующий фрагмент кода показывает, как получить строку с отформатированным под локализацию устройства значением даты:

// Получаем текущее время и дату:
Date currentDate = Calendar.getInstance().getTime();
 
// Получаем стандартный вид даты для текущей локализации устройства:
java.text.DateFormat dateFormat;
dateFormat = android.text.format.DateFormat.getDateFormat(this);
 
// Форматируем текущую дату в соответствии с местоположением устройства:
String formattedCurrentDate = dateFormat.format(currentDate);

Если текущим местоположением устройства является, например, США, то формат даты по местному значению будет показан в виде 11/29/2014. Классом DateFormat можно настроить и другие форматы даты. Если вместо команды getDateFormat исполнить, например, getLongDateFormat, то мы получим дату в таком виде: Понедельник, Декабрь 29, 2014.

 

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

С тех пор, как время представлено в Android SDK как Date объекты, оно также настраивается классом DateFormat в пространстве имен android.text.format. Тут все делается приблизительно также, как и с настройкой даты, с использованием того же метода. Смотрим код:

// Настраиваем текущие время и дату
java.util.Date currentDate = Calendar.getInstance().getTime();
 
// Настраиваем правильное отображение времени для текущей локализации устройства
java.text.DateFormat timeFormat;
timeFormat = android.text.format.DateFormat.getTimeFormat(this);
 
// Настраиваем формат времени в соответствии с локализацией устройства 
String formattedTime = timeFormat.format(currentDate);

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

Категория: Уроки программирования | Просмотров: 1229 | Добавил: Oleg | Теги: локализация программ, Android локализация | Рейтинг: 0.0/0
Всего комментариев: 0
avatar