Что такое локализация в телефоне
В статье, посвященной ресурсам, мы уже затрагивали эту тему с теоретической точки зрения. Разберем теперь практическую часть. Мы уже умеем пользоваться строковыми ресурсами и меняли строчки, например, 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
В режиме Android вы можете не увидеть созданную папку, поэтому временно переключитесь в режим Project. Скопируйте файл res/values/strings.xml и вставьте его в новую папку. Можете вернуться в прежний режим. Если папка не пуста, то она уже видна.
Изменим его содержание.
В английской версии им соответствуют ресурсы
Запустим приложение и увидим, что текст выводится на русском, если у вас на эмуляторе или реальном устройстве выбраны русские настройки.
Как перейти на американскую локаль? Идём в Настройки→Язык и клавиатура→Выбрать язык. Выбираем английский язык English (United States). Снова запускаем приложение в эмуляторе или на телефоне. Теперь наше приложение будет выглядеть так:
Ресурсы из каталога res/values считаются ресурсами по умолчанию. Они отображаются в том случае, когда система не найдёт ресурсы для текущей локали устройства. В нашем случае, при выборе любого языка, кроме русского будет использоваться res/values. Если мы захотим разделить англичан и американцев, тогда придётся создавать два каталога: res/values-en-rUK и res/values-en-rUS. Обратите внимание, что перед кодом второй части ставится буква ‘r’. Иными словами, мы определяем не только язык, но и регион.
Проведем несколько экспериментов. Удалим из файла res/values-ru/strings.xml строковый ресурс hello_world с текстом Здравствуй, Мир!. Сохраним изменения и запустим проект на устройстве с русским языком. Платформа заменила отсутствующий в локализации ресурс дефолтным английским.
Отсюда можно сделать вывод, что вам необходимо следить за ресурсами по умолчанию. Старайтесь проконтролировать, чтобы ваше приложение всегда содержало все необходимые ресурсы по умолчанию, а уже потом можете начинать локализацию приложения. Для этого вам достаточно будет скопировать файл в новый подкаталог и отредактировать его.
На самом деле локализовать можно не только строковые ресурсы. В разных странах принято рисовать какой-нибудь объект в соответствии со своими традициями, например, изображение почтового ящика. В этом случае вы можете создать каталог /res/drawable-de, в котором будут находиться изображения, предназначенные для немцев.
В коде вы обращаетесь к нужным ресурсам следующим образом:
Система сама подставит нужную строку. Явно указать, что хочется использовать ресурс на конкретном языке, у вас не получится.
Спустя продолжительное время один из читателей подсказал, как всё-таки задействовать локальный ресурс. Объяснять код не буду, сами поймёте, когда наберётесь опыта.
Просмотр и создание локализованных строк в режиме дизайна
Чтобы увидеть, как меняется текст в различных локализованных версиях вашего приложения, необязательно запускать приложение в эмуляторе. Можно в студии на панели инструментов щёлкнуть на значке глобуса и выбрать из выпадающего списка нужный вам пункт (он появится после того, как вы создадите необходимые локализованные ресурсы), и все локализованные строчки сразу поменяются на экране активности.
После того, как вы завершите перевод всех ресурсов, нажимаете на кнопку OK и у вас появится готовая папка с новым файлом strings.xml для выбранной локализации.
Сейчас в студии вместо диалогового окна выводится окно редактора, в котором можно редактировать текст.
Непереводимая игра слов с использованием местных идиоматических выражений
Если вы решили использовать локализацию на разных языках, то можете встретиться с одной проблемой. Предположим, вы перевели только несколько строковых ресурсов и в один прекрасный день решили выложить программу в магазин приложений. Android Studio при сборке подписанного приложения может заругаться, что вы перевели не все строки. Есть два способа обхода проблемы. Вы можете использовать атрибут translatable=»false», чтобы указать среде разработке, что данная строка не требует перевода:
В окне редактора это сделать проще через флажки в столбце Untranslatable.
Есть ещё один вариант, когда непереводимые строки размещаются не в ресурсе 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 нажатием на кнопку с изображением «двух стрелок вправо».
В результате предыдущего действия интерфейс окна изменится и появятся другие компоненты и списки. Теперь необходимо в списке Language выбрать нужный язык. Прокрутка списка для выбора русского языка не дала нужного результата. Русский язык не был найден и представленная на скриншоте строка не была обнаружена, несмотря на то, что в последнем списке (Specific Region Only:) страна «RU: Russia» присутствует. Но после ввода символов «ru» при активности (нахождении фокуса) списка Language, сразу же появилась нужная запись и поле фильтрации в верхней части списка. Возьмите это на вооружение при поиске требуемого языка локализации. Наименование директории values-ru было сформировано студией автоматически после выбора языка локализации. Следующим шагом точно также была добавлена директория для английского языка «en».
Примечание : в проекте ничего не изменилось; как была одна директория res/values, так к ней ничего и не добавилось. Это специфика Android Studio – ничего личного, только проект.
Но если посмотреть на структуру проекта со стороны проводника, то Вы сразу же увидите добавленные ресурсные директории values-en, values-ru. Так что особых тревог быть не должно; все делаем правильно и ничего не пропало.
Ресурсные файлы
После определения ресурсных директорий необходимо добавить ресурсные файлы. Для этого опять же выделяем проект, вызываем контекстное меню правой клавишей мыши и выбираем New / Android Resource File. В открывшемся диалоговом окне опять же выбираем Language и переносим его в список Chosen qualifiers, как это было сделано на предыдущем шаге. В списке Language вводим требуемый язык, в результате чего Studio определит директорию размещения файла (Directory name). Теперь необходимо ввести наименование файла (File name) и нажать ОК. Скриншот отображает состояние после выбора языка локалилизации и определения наименования файла ресурсов string.xml.
В результате создания ресурсных файлов в структуре проекта будут добавлены записи в раздел res/values/strings. Помним, что простой strings.xml используется по умолчанию, если в системе не будет найден ресурсный файл приложения для соответствующего объекта Locale.
Ресурсные файлы
После выполнения двух предыдущих шагов были созданы ресурсные директории с файлами 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. Для этого необходимо выделить компонент и перейти к панели атрибутов. Здесь следует найти соответствующий параметр. На следующем скриншоте представлена выделенная строка текстового параметра компонента кнопки.
Сейчас у кнопки определено несвязанное текстовое значение Button. Можно в этой же строке ввести новое/необходимое значение; но можно и нажать на кнопку с изображением многоточия. В результате будет открыто окно выбора ресурсного значения. Здесь находим нужную строку в списке и нажимаем ОК.
Динамическое подключение ресурсных файлов
Для реализации динамического изменения локализуемых надписей интерфейса приложения проще всего в интерфейс добавить пару кнопок : одна из кнопок будет переводить интерфейс на русский язык, а другая – на английский. Конечно же, желательно, чтобы на кнопках были изображены соответствующие флаги. Но не будем сейчас усложнять задачу и ограничимся дополнительным размещением обычных кнопок. Вопрос использования изображений рассмотрен в отдельной статье Представления изображений в Android.
Полагаю, особого труда у Вас не составит самостоятельно поместить в таблицу две строки TableRow : одну для кнопок (btnEn, btnRu) и одну в качестве «разделителя». Ну и в заключении создадим метод changeLocale(Locale locale).
Теперь, когда интерфейс определен и ресурсные файлы подготовлены, осталось только разработать метод определения локализованных надписей интерфейса (changeLocale) и к кнопкам подключить соответствующие обработчики событий. Для этого откроем основной класс приложения MainActivity и внесем в него дполнительный код, представленный ниже :
В методе onCreate к кнопкам btnRu и btnEn подключены соответствующие обработчики событий. При нажатии на одну из кнопок в «консоль» выводится сообщение, формируется объект локализации и вызывается метод changeLocale. В методе changeLocale выполняется определение текущей Locale, после этого выполняется чтение соответствующего ресурсного файла и локализуются надписи интерфейса.
«Консоль» сообщений
Чтобы открыть консоль сообщений работающего приложения необходимо нажать вкладку Run, которая появляется после первого старта.
После старта Вы должны увидеть интерфейс приложения, представленный на следующем скриншоте. Нажатием на верхние кнопки текстовые строки интерфейса переводятся на соответствующий язык локализации.
Локализация даты и времени
Для проверки функционирования локализации даты и времени ниже представлен соответствующий метод. Здесь все тривиально просто. Обратите только внимание на импорт класса Calendar.
Вызвав printCurentDateTime из метода changeLocale в консоль будут выведены следующие сообщения о дате и времени для двух различных языков локализации :
Что разработчику нужно знать о локализации приложения
Как показали исследования AppAnnie, Россия замыкает пятёрку стран-лидеров по количеству скачиваний мобильных приложений в AppStore и Google Play Market в первом квартале 2016 года, но по выручке с продаж не вошла и в первую 10-ку. Значит ли это, что разработчикам стоит ориентироваться исключительно на Западный рынок для увеличения своей прибыли и если да, то на какой язык, кроме английского, переводить, а точнее – локализовать приложение?
Чем отличается локализация от перевода
Перевод – это интерпретация текста или речи с одного языка на другой. Она нацелена на передачу смысла информации без учёта национальных особенностей, культурных ценностей и в случае с разработкой мобильных приложений – привычного user experience жителей конкретной страны и особенностей целевой аудитории.
Локализация включает в себя целый комплекс технических задач по адаптации кода, компонентов и добавления ресурсов. Она решает проблему различия в культуре, языке и восприятии материала разными национальностями. По сути, локализовать приложение – значит перевести его так, чтобы у пользователя не возникло никаких сложностей с пониманием и использованием продукта, с назначением его функций.
То есть, перевести – значит – интерпретировать, а локализовать – адаптировать.
Интернет пестрит “смешнявками” с некачественным переводом как приложений, так и веб-контента, но дословный перевод и отсутствие локализации далеко не одно и то же. Здесь часто наблюдается подмена понятий.
Локализация – это не просто качественный перевод, это смысловая адаптация текста, который буквально вгрызается в нейронные сети и кишки пользователя с полуслова. Скажем, если жителям СНГ в e-commerce сайтах и приложениях привычнее видеть кнопку “Купить”, то не нужно выдумывать велосипед и лепить кнопку “Приобрести товар”. Казалось бы, человек и так поймет, о чем идёт речь, но зачем усложнять ему жизнь? А точнее – себе.
Что даёт локализация
Жители Бразилии, России, Китая и Индии составляют 40% населения всего мира. Проигнорировав необходимость перевода на хинди, мандарин или португальский язык, есть шанс быть выкинутым за борт компаниями, которые внедряют эти языки в свои продукты. Мониторинг спроса на локализацию приложений на тот или иной язык позволит компаниям-разработчикам расширить свою клиентскую базу.
Какие языки правят Интернетом
Топ 10 самых востребованных языков в Интернете
Итальянский занял только 11-е место в рейтинге, а польский, занявший 17-е место, набирает всё больше популярности и часто встречается в востребованных языковых парах.
Последнее исследование агентства CommonSenseAdvisory в марте 2016 года показало, что стоимость перевода самых распространенных языковых пар не имеет четкой линейной зависимости. Это связано с тем, что цены на перевод могут снижаться в то время, как спрос растёт из-за высокой конкуренции на рынке языковых услуг.
Чем вызвано такое формирование рейтинга
Рейтинг востребованности языков зависит не только от количества носителей, но и от влияния экономики страны на мировой рынок.
Английский – язык международного общения и во многих странах он является официальным государственным языком. Мандарин (китайский язык) является языком международного бизнеса и это совсем неудивительно. Это наиболее используемый язык во всём мире, а китайская экономика занимает 2-е место по номинальному значению ВВП в стране. Экономика Бразилии занимает 9-е место в мире и её рост продолжится ещё как минимум 5 лет, согласно данным InternationalMonetaryFund. На французском языке в мире разговаривают около 274 млн человек, в 29-ти странах он является государственным. Япония – 3-я в рейтинге стран по ВВП в мире. Она является мировым лидером в автомобилестроении и высоких технологиях, что делает знание японского языка востребованным на рынке языковых услуг. Около 240 млн человек разговаривает на арабском языке и в 23 странах он является официальным. ОАЭ являются мировым лидером на нефтяном рынке.
Что делать с этими данными заказчикам и поставщикам услуг перевода
Обзор рынка мобильных приложений
Первый квартал 2016 года стал знаменательным для мирового рынка мобильных iOS-приложений. Китай впервые перегнал Японию по объёму выручки с продаж и занял 2-е место в рейтинге стран по уровню дохода от мобильных приложений – за последние 4 месяца доход Китая вырос более чем в 2 раза. Такой рост был обеспечен в основном за счёт мобильных игр.
Вытеснив Японию со второй позиции по доходам от приложений на обеих платформах, Китай вплотную приблизился к лидеру в рейтинге по мобильным играм в AppStore – США. По прогнозам AppAnnie, уже в этом году Китай станет безоговорочным лидером по выручке от продаж игр на платформе от Apple.
На какой язык локализовать приложение
Проанализировав данные по наиболее распространённым языкам, востребованным языковым парам, количеству загрузок и доходу от мобильных приложений по странам, составим рейтинг языков, на которые разработчикам стоит локализовать свои приложения для увеличения прибыли.
Стоит добавить, что магазина мобильных приложений GooglePlay в Китае всё ещё нет. Китайские разработчики ориентируются на локальные сторы для Android-продуктов, поэтому и доходы от продажи приложений на платформе от Google достаточно низкие.
Топ 5 языков для локализации iOS-приложений
Топ 5 языков для локализации Android-приложений
Какими навыками должен обладать специалист по локализации приложений
Локализация игр и приложений действительно является по своей сути переводом, но требует владения специальных программистских и технических навыков. Поэтому локализация – самая трудоёмкая отрасль лингвистических услуг. Языковой специалист должен не только великолепно знать язык, но и обладать базовыми знаниями разработчика для локализации отдельных элементов меню и интерфейса. Кроме того, специалист по локализации должен хорошо разбираться в тематике приложения и иметь хотя бы минимальный опыт работы с такими приложениями и ресурсами. Локализация игр ещё сложнее. Тут от переводчика требуется самим быть немного геймером и иметь хорошую фантазию. В мобильных играх переводчик не просто интерпретирует текст на другой язык, а буквально создаёт отдельную версию игры на другом языке.
Однако и это далеко не всё, что влияет на качество локализации. В процессе выполнения переводов возникает определённый ряд трудностей и проблем. Например, разные специалисты по-разному могут интерпретировать одни и те же фразы или слова в одних и тех же местах. Подробнее об этом, о видах локализации, о стоимости услуг локализации и о том, как и где заказать локализацию можно узнать здесь.
Локализация приложений даёт возможность выйти на рынки других стран, тем самым существенно увеличить количество загрузок и соответственно – прибыль. Исследования в компании мобильного маркетинга Applead показывают, что локализация страницы приложения в Google Play и AppStore повышает конвертацию в установку на 25-30%, что несомненно сыграет в плюс для продвижения мобильных приложений и увеличению вовлечённости пользователей. Разнообразие вариантов монетизации мобильного приложения позволяет подобрать наиболее подходящую модель, а локализация – сделать из этой модели генератор масштабируемой прибыли. Глупо упускать источники возможного дохода на подъёме рынка разных стран, несмотря на то, что локализация является трудоёмким и кропотливым процессом. Рост мирового рынка мобильной рекламы, увеличение количества пользователей смартфонов и повышение интереса владельцев “умных” мобильных устройств к приложениям ясно даёт понять, что локализация – это необходимый инструмент для расширений клиентской базы в мире.