Как локализовать Android приложение. Руководство по локализации iOS для многоязычных приложений для iPhone и iPad Локализация приложения

Большинство мобильных приложений так или иначе разрабатывается для использования более чем в одной стране или одном регионе. Как следствие, перед разработчиками встаёт вопрос о локализации строковых ресурсов для различных языков.

К счастью в Android существует достаточно эффективный встроенный механизм для решения этой задачи.

Описание процесса локализации приложений приведено на примере Android Studio 2.3

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

Для этого нужно щёлкнуть правой кнопкой мыши на папке app в дереве проекта и в выпадающем меню выбрать New – Android Resource File. В открывшемся окне следует выбрать пункт Locale с помощью кнопки «>>» или двойного клика мышью.

В результате откроется список доступных языков. При выборе языка к имени папки с ресурсами в поле «Directory name» будет автоматически добавлен соответствующий суффикс.

Если необходимо создать отдельную локализацию для какого-либо региона, то после выбора основного языка следует указать соответствующий регион.

В этом случае в названии папки появится дополнительный суффикс, начинающийся с буквы «r» (регион).

Имя файла локализации (поле «File name») необходимо задавать вручную. Настоятельно рекомендуется следовать стандартам Android и называть файлы локализаций strings. Конфликта имён это не вызовет, так как вновь созданные файлы будут находиться в отдельных папках, вложенных в папку Values.

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

Само описание локализации абсолютно аналогично «обычному» strings.xml. Единственное отличие в том, что значения строковых ресурсов указываются на соответствующем языке.

Ниже приведён простейший пример.

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

Multilanguage Application Hello World!

< resources >

< string name = "app_name" > Multilanguage Application < / string >

< string name = "hello_world" > Hello World ! < / string >

< / resources >

Скриншот приложения:

Содержимое файла strings.xml для русской локализации:

Мультиязычное приложение Здравствуй мир!

< resources >

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

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

Мы переводим на иностранные языки компьютерные программы, игры и онлайн-приложения.

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

Все переводы выполняются профессиональными переводчиками-носителями языка. Мы переводим на 68 языков , а также на другие языковые пары.

Локализация десктопных, браузерных и мобильных игр

Мы работаем с издателями и разработчиками мобильных и игровых проектов, помогая делать доступными приложения под iOS, Android, HTML5 на более, чем 60 языках. Помимо перевода строковых ресурсов самих приложений, мы также пишем и переводим описания для App Store и Google Play.

Лингвистическое тестирование

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

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

Расчет стоимости

Стоимость локализации и перевода рассчитывается исходя из объема текста (количества знаков с пробелами). Ознакомьтесь с расценками на перевод . При подсчете не учитываются теги, ключи, разметка.

Если вы хотите, чтобы ваше приложение пользовалось успехом у пользователей Google Play со всего мира, вам стоит его локализовать.

Теги

  • Публикация
  • Мировой рынок
  • Разработка
  • Тестирование

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

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

Контрольный список

  • Определите страны с благоприятными условиями для выхода на рынок.
  • Используйте данные Google Play для поиска новых возможностей. Если ваше приложение опубликовано, вы можете просмотреть в Developer Console. В нем вы найдете страны, жители которых активно посещают страницу вашего приложения в Google Play. Локализовав приложение, вы точно увеличите число установок в этих странах.
  • Используйте универсальный набор макетов с небольшими вариациями. Включите в приложение весь набор ресурсов по умолчанию, предусмотрите поддержку написания текста справа налево, используйте системный формат даты, времени, чисел и валюты.
  • Учитывайте особенности развивающихся рынков. Ознакомьтесь с по оптимизации приложений Android для недорогих устройств и сетей с минимальной пропускной способностью.
  • Включите все строки в файл strings.xml, сопроводите их полной и достоверной информацией, следуйте инструкциям Material Design по стилю и укажите контент, который не нужно переводить.
  • Выполните перевод приложения, данных для Google Play и других ресурсов. Для этой цели вы можете обратиться к пользователям вашего приложения, в бюро переводов или воспользоваться сервисом перевода приложений в Google Play Developer Console или Android Studio.
  • Обязательно проверьте работу приложения на стандартных устройствах для ваших целевых рынков. Проверьте ошибки в интерфейсе и при необходимости обратитесь за помощью к носителям языка.
  • Выпустите бета-версию в основных странах, чтобы получить отзывы от реальных пользователей.
  • Подготовьтесь к продвижению в мировом масштабе. Запланируйте кампании, ориентированные на установку приложения , и другие похожие мероприятия для разных стран. Используйте генератор значков Google Play для создания локализованных значков, которые можно будет размещать на сайтах и в маркетинговых материалах. Добавьте в рекламные материалы скриншоты локализованного приложения с помощью инструмента .
  • Воспользуйтесь советами по оптимизации. Проверьте полноту данных для Google Play и получите другие полезные напоминания в Developer Console , которые позволят успешно опубликовать приложение.
  • Проведите итоговую проверку и опубликуйте приложение. Вы выполнили все действия из этого списка? Тогда все готово к публикации и продвижению вашего приложения в целевой стране.
  • Оказывайте пользователям поддержку после публикации приложения. Обязательно следите за оценками и отзывами, скачивайте статистику, чтобы вовремя узнавать о возникающих проблемах. Если это возможно, создайте отдельные сообщества или форумы для разных языков.

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

Загрузите свой файл ресурсов и получите итоговую стоимость прямо сейчас.

Файл ресурсов iOS:

Формат файла:
UTF-16 Unicode UTF-8 Unicode

С языка:

На язык:
— Китайский (упрощенный) Китайский (традиционный) Датский Голландский Английский Французский Немецкий Итальянский Японский Португальский Русский Испанский — Арабский Баскский Каталонский Чешский Финский Греческий Иврит Хинди Венгерский Латынь Македонский Норвежский Пенджаби Персидский Польский Португальский (Португалия) Румынский Шведский Тамильский Тайский Турецкий Украинский Вьетнамский

У вас уже есть переводчики?

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

Введение

Процесс локализации приложения для iOS включает в себя следующее:

  1. Подготовка файлов ресурсов для локализации.
  2. Сбор всех текстов, используемых в приложении, в файлы ресурсов.
  3. Перевод файлов ресурсов.
  4. Интеграция файлов ресурсов обратно в приложение.

Поскольку приложения для iOS многоязычны по своему дизайну, устройство уже знает, что делать, если ваше приложение доступно на нескольких языках. Оно будет отображать тексты GUI на нужном языке, в соответствии с настройками языка устройства.

Все приложения для iOS построены с использованием текстов Unicode, закодированных как UTF-16. Симуляторы iPhone и iPad поддерживают этот формат и позволяют предварительно просмотреть переведенное приложение.

1. Создание ресурсов, локализуемых в Xcode

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

2. Локализация файлов Interface Builder

Извлечение строк

Чтобы извлечь строки из файлов ресурсов Interface Builder, вам необходимо запустить инструмент, подобный ibtool , который входит в стандартную установку комплекта разработчика.

Чтобы извлечь файлы, откройте Терминал в каталоге проекта и выполните команду:
ibtool --generate-strings-file Example.strings en.lpoj/Example.xib
Это создаст файл Example.strings. Откройте его, и вы увидите множество парных значений объекта-строки.

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

Обработка дублированных строк

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

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

Вы можете удалить лишние дубликаты строк (с одинаковым переводом) из файла ресурсов или оставить их в нем и сообщить переводчику обрабатывать их как дубликаты строк.

Вы почти готовы к выпуску, только не забудьте его проверить.

Вот некоторые вещи, на которые стоит обратить внимание:

Просчет Что может случиться Как исправить
Переведенные строки выходят за границы Немецкий, французский, испанский и другие европейские языки обычно составляют от 120% до 150% размера английского текста. Азиатские языки обычно составляют 50%-70%. Рекомендуем адаптировать графический интерфейс к строкам разных размеров. Система локализации iOS ICanLocalize проверяет длину строк и предупреждает о слишком длинных или слишком коротких строках.
Отсутствующие символы форматирования Многие строки содержат местозаполнители для данных, такие как %s для текста и %d для чисел. Другие строки включают HTML-код. Если перевод не включает такое же форматирование, приложение не будет работать. Наша система перевода позволяет вам вводить «обязательные» последовательности. Это обеспечит, чтобы переводы включали те же последовательности, что и оригиналы. В противном случае вам следует вручную просмотреть все строки и убедиться, что символы форматирования совпадают.
Перевод вне контекста Всегда есть вероятность, что переводчик не совсем понял значение строки. Это происходит, когда приложения содержат короткие и не описательные строки. Перед началом работы отправьте полное описание приложения переводчику. После этого сделайте снимки экрана приложения и отправьте переводчику для окончательной проверки. Добавление комментариев к строкам поможет вам получить отличный перевод.

Устранение неполадок

Если строки Localizable.strings присутствуют в переведенном файле, но не локализуются на устройстве, проверьте кодировку символов файла.

В отличие от симулятора iPhone, реальное устройство распознает только строковые файлы в формате UTF-16. Всегда проверяйте локализации на устройстве, так как симулятор и устройство не всегда ведут себя одинаково.

Переведенные файлы ресурсов, загружаемые из ICanLocalize , имеют кодировку UTF-16. Они содержатся в архивах gzip , чтобы ваш браузер не изменял их при загрузке.

Обновление перевода, когда приложение для iOS развивается

ICanLocalize позволяет легко поддерживать ваши переводы в актуальном состоянии. Когда приложение развивается, создаются новые строки, и существующие строки могут измениться.

Чтобы обновить переводы, снова запустите genstrings , для создания нового файла Localizable.strings. Затем перезапустите ibtool , чтобы сгенерировать новые строковые файлы.

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

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

Нужен перевод для вашего iOS-приложения?

ICanLocalize предлагает

«Мы используем ICanLocalize с 2012 года, и это действительно упростило наш рабочий процесс, когда речь заходит о переводе нашего контента для разных рынков. Больше не нужно искать переводчиков на разные языки, учить их пользоваться инструментами перевода, индивидуально составлять счета и т. д., поскольку ICanLocalize делает все это для нас! Мы используем сервисы ICanLocalize для перевода наших веб-сайтов, приложений, информационных бюллетеней и других маркетинговых материалов, и вы всегда можете рассчитывать на быструю работу. Я понимаю, что все это заявление звучит как платная реклама или что-то в этом роде, но я действительно не написал ничего, что не соответствует действительности или не является моим подлинным мнением! Я бы порекомендовал ICanLocalize в любое время!»

«ICanLocalize — это лучшее решение для быстрых и качественных переводов вашего приложения. Мы пользуемся их услугами для всех наших приложений с хорошими результатами и положительными отзывами наших пользователей. Я рекомендую использовать ICanLocalize для локализации ваших приложений.»

«Пользоваться ICanLocalize было невероятно просто. Переводчики нам очень помогли, а процесс перевода оказался идеально прост. ICanLocalize доступен для разработчиков всех категорий, и он помог нам достичь намного большего количества клиентов, чем когда-либо ранее.»

«ICanLocalize помог мне сэкономить массу времени, поскольку он предоставляет переводчиков для любого языка, а также вы можете попросить других переводчиков проверить переводы, чтобы убедиться в их точности. Самая большая помощь, которую предоставляет ICanLocalize, — это возможность загружать мои строковые файлы из xcode непосредственно в сайт, поэтому, когда переводы готовы, я могу просто заменить мои строковые файлы в моем проекте, и все сделано.»

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

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

С использованием 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 :

< 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 ресурсы будут следующими:

< resources> < string name= "app_name" > My Application < string name= "hello_world" > Hello world! < / string> < string name= "action_settings" > Settings < string name= "word" > Word < / resources>

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

Стоит отметить, что для того, чтобы этот механизм языковой локализации корректно сработал в ваших приложениях, нужно для элементов программы, использующих текст, например при настройке android:text="" для объектов , присваивать им текст не просто написанием слова, типа 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 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);