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

Это руководство покажет вам, как преобразовать одноязычное приложение 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 непосредственно в сайт, поэтому, когда переводы готовы, я могу просто заменить мои строковые файлы в моем проекте, и все сделано.»

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

Если вы хотите, чтобы ваше приложение пользовалось успехом у пользователей 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 , которые позволят успешно опубликовать приложение.
  • Проведите итоговую проверку и опубликуйте приложение. Вы выполнили все действия из этого списка? Тогда все готово к публикации и продвижению вашего приложения в целевой стране.
  • Оказывайте пользователям поддержку после публикации приложения. Обязательно следите за оценками и отзывами, скачивайте статистику, чтобы вовремя узнавать о возникающих проблемах. Если это возможно, создайте отдельные сообщества или форумы для разных языков.

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

Пока мы пишем программы “для себя”, то о локализации, интернационализации и пр. заморочках мы как-то и не задумываемся. А зачем? Врядли кому-то в здравом уме придет в голову мысль “А не перевести ли мне свою утилиту на иврит, чтобы потом с такой программой работать?” Совсем другое дело, когда программа “вырастает из коротких штанишек” и на неё появляется спрос в других странах. Тогда, если спрос достаточно большой, можно (и нужно) взяться за локализацию - найти подходящий инструмент, нанять переводчиков (или переводить самому) и работать, работать, работать. Решение типа “Сделаю INI-файлик” вполне может подойти для небольших программок, но никак не для серьезных проектов с развитым интерфейсом, большим количеством форм, русурсов и т.д. - в этом случае стоит подыскать подходящее готовое решение. Собственно, основные цели поиска решения для локализации, которые были мне поставлены - это найти решение, которое позволит:

  1. проводить локализацию руками не-программистов
  2. работать с собственными словарями для перевода
  3. поддержка XE2

ну и, как обычно, решение должно быть удобным в использовании, дешевым, по возможности, простым в освоении и т.д. и т.п. А так как я все равно решил пройтись в своем поиске по всем возможным вариантам (а точнее по максимально возможному количеству вариантов), то решил весь найденный материал систематизировать и оформить вот этим самым постом. Здесь Вы сможете узнать и о существующих компонентах Delphi и о библиотеках и о программах - в общем о всем, чего только душа пожелает. В общем, если Вы тоже задались целью отыскать во всем множестве предложений для локализации то, которое придется по душе именно Вам, то читайте далее:)

TSILang components suite

  • Разработчик: SiComponents
  • Официальный сайт:
  • Цена: от $259 до $399 . Пакет за $259 не содержит исходников (только DCU и OBJ)
  • имеется .
  • Дата последнего релиза: 05 мая 2012
  • Поддержка Delphi XE2: имеется

TsiLang ® Components Suite позволяет добавлять поддержку для неограниченного количества языков , а также, создавать полностью локализованные версии продуктов, основанные на базовой версии проекта. Автоматически находятся и заносятся в список для перевода все необходимые элементы интерфейса пользователя, предоставляются удобные способы сохранения и управления переводами, и конечно, переключение языка интерфейса осуществляется “налету” как во время работы приложения, так и в режиме дизайнера , что позволяет тестировать интерфейс даже без компиляции и запуска приложения.

Мой тест.

Для тестирования я скачал и установил последнюю версию компонентов (6.5.4.7) и создал простенькое приложение на котором разместил Button, Label, OpenDialog, добавил ресурсные строки и константы. Специально на OnClick кнопки был создан такой “кривой” обработчик:

procedure TForm19. Button1Click (Sender: TObject ) ; begin ShowMessage("Привет, мир!" ) ; end ;

Локализация с TsiLang проводится следующим образом:

1. Запускаем TsiLang expert из меню Delphi: Tools ->TsiExpert

Здесь отображаются все формы проекта, а также компоненты , расположенные на этих формах. Теперь выбираем в меню File->Languages и редактируем список языков для нашего приложения. По умолчанию все языки имею названия типа Language1 , Language2 и т.д. я переименовал их так:

После того как была нажата кнопка “Ok” на главной (и единственной) форме приложения появился компонент TsiLang:

Теперь находим в эксперте кнопку “Save Project” и сохраняем наш проект. В TsiLang используется два типа файлов проекта:

  1. *.sib - бинарные файл с переводами. Этот тип файла разработчики рекомендуют использовать, т.к. загрузка таких файлов происходит значительно быстрее, чем при использовании второго типа файлов
  2. *.sil - текстовые файлы. Преимуществом этого типа файлов является то, что мы можем передать этот файл с утилитой “SIL Editor ” другому человеку для перевода.

Я сохранил свой проект в файл test.sil.

Теперь, находясь в эксперте дважды щелкаем мышкой по названию формы в списке - откроется окно редактора перевода:

В левой части окна (в дереве) редактора содержатся группы переводимых свойств компонентов и строк и, соответственно, справа - таблица для перевода. TsiLang может локализовать не только свойства компонентов типа Caption , Hint , Text и т.д., но также и строки из диалогов, например, на рисунке ниже представлены все строки для перевода из различных диалоговых окон, которые могут использоваться в приложении:

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

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

После того, как все строки переведены снова сохраняем наш проект. Теперь sil-файл должен содержать примерно такой текст:

последовательность символов #$ - это разделитель, который мы сами можем определить при сохранении файла. В процессе перевода строк в редакторе можно заметить, что TsiLang ни коим образом не учёл, что в pas-файле формы есть и секция resourcestring и const и даже строка текста в обработчике OnClick. Чтобы добавить эти строки к переводу необходимо выбрать в меню эксперта TsiLang:

  • File -> Source -> With Form - чтобы выбрать строки из секции implementation модуля,
  • File -> Source -> With Form - чтобы выбрать все строковые константы и ресурсные строки

В итоге откроется окно с результатами поиска в котором Вы можете добавить строку в список исключений или заменить её на вызов функции TsiLang:

Жмем в этом окне кнопку “Modify Source” и получаем такое сообщение:

Открываем pas-файл и видим следующую странную картину:

Мне показалось странным то, что TsiLang прекрасно определяет строковые константы в pas-файле и даже изменяет самостоятельно исходник, но почему-то “ленится” сам определить var - ну сделали бы доп.опцию в настройках проекта перевода типа “Определять VAR для констант со строками” и “Изменять настройки компилятора”. Но это ладно - окно с сообщением есть и то хлеб. Вот, что мне действительно не понятно, так это откуда TsiLang нашел в моем проекта непонятные иероглифы? Думал, что это может быть по причине того, что pas-файл сохранен в ANSI, но нет - сменил на UTF8, а проблема с иероглифами осталась…В общем странно это.

После того как строки были помещены в перевод можно снова открыть редактор перевода и провести перевод группы Strings (благо в редактор строки попадают без искажений):

После того, как все строки переведены, а sil-файл сохранен, можно организовать переключение языков в своей программе. В TsiLang каждый язык имеет свой идентификатор типа integer. Например, в моем случае идентификаторы были такими:

  • Russian = 1
  • English = 2

Теперь, чтобы интерфейс моей программки переключился на английский язык достаточно где-нибудь вставить вот такой код:

siLang_Form19. ActiveLanguage : = 2

Это приведет к тому, что TsiLang подгрузит из sil-файла строки на необходимом языке.
Что касается работы со словарем переводов, то может передавать в словарь (предварительно созданные) только уже переведенные строки. Для этого можно воспользоваться все тем же редактором переводов - жмем в редакторе кнопку “Add All”, которая предназначена для передачи в словарь всех переводов и получаем вот такое окошко для выбора необходимых опций передачи:

выбираем здесь файл словаря, жмем “Ok” и получаем все переведенные строки в свой словарик, который, кстати, выглядит вот так:

Впоследствии этот словарь можно будет использовать для автоматических переводов строк в своих программах. Ну и, как я уже говорил выше, для работы с SIL-файлами имеется отдельная утилита под названием SIL Editor, которая предназначена для переводчиков. Для чистоты эксперимента я скопировал папку с SIL Editor на флэшку и запустил программу с виртуалки “Windows XP Mode”:

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

Другие возможности TsiLang:

  1. Импорт словарей из doc-, html-, xls-, csv-, po-файлов
  2. Импорт ресурсных строк из исполняемых файлов
  3. Наличие собственных компонентов - диалоги открытия файлов, метки, списки и т.д.
  4. Ведение статистики по переводам

Довольно большой получился обзор, но инструмент того стоит. Подведем небольшой итог:

Достоинства:

  1. Просто подключается к проекту - бросили компонент на форму, вызвали 1 метод и интерфейс переведен
  2. Удобный редактор перевода - все строки разложены, что называется “по полочкам”, можно быстро ориентироваться по дереву в поиске нужных строк для перевода
  3. Поддерживает как бинарные так и текстовые файлы с переводами. Создали sil-файл, отдали переводчику, потом пересохранили в sib и все готово - и программа быстрее будет работать и никто больше в перевод не залезет.
  4. Наличие инструментов для переводчиков (SIL Editor, словари)

Недостатки :

  1. “Корежит” русские строки в pas-файле. Пусть они и заключаются в комментарии, но, тем не менее, факт на лицо.
  2. В процессе работы обнаружились непонятные ошибки при работе со словарями. Например, при переносе переведенных строк в словарь через раз появлялась ошибка выхода за границы диапазона.
  3. Небольшие проблемы с окнами . Они, конечно, жить не мешают, но тем не менее, не хорошо, когда ты вызываешь словарь, а он какого-то лешего сворачивается в панели управления.

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

DKLang Localization Package

  • Разработчик: DKSoftware
  • Официальный сайт: www.dk-soft.org
  • Цена: бесплатно
  • Дата последнего релиза: 25.12.2008
  • Поддержка Delphi XE2: нет

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

Во-первых, настораживает дата последнего релиза - 2008 год - не факт, что компоненты заработают в XE2 без проблем.

Во-вторых пакет требует дополнительной установки компонентов Tnt Unicode Controls 2.3.0 , которые в 2012 году уже как бы и лишние - юникод и так поддерживается.

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

UPDATE : про DKLang Localization Package. Кратко и понятно.

UPDATE 2 : DKLang в XE2

EMS Advanced Localizer

  • Разработчик: EMS
  • Официальный сайт: www.sqlmanager.net
  • Цена: 2 900,00 руб.
  • Наличие ознакомительной версии: имеется
  • Дата последнего релиза: 13 января 2012
  • Поддержка Delphi XE2: имеется

Что говорят о своем продукте разработчики:

Advanced Localizer™ - это незаменимый пакет компонентов для Borland® Delphi®, позволяющий добавлять языковую поддержку Вашим Delphi® приложениям. Широкие возможности пакета Advanced Localizer позволяют быстро и просто локализовать свойства компонентов каждой формы, создавать языковые файлы с текущими значениями свойств компонентов, управлять файлами локализаций, а также назначать компоненты и их свойства, подлежащие локализации. Язык приложений, использующих Advanced Localizer , может быть переключен на другой непосредственно во время работы без последующего перезапуска приложения. Advanced Localizer также предусматривает возможность написания приложений-потомков, использующих языковые файлы, заданные пользователем.

Так как “незаменимых” у нас нет, то я провел свой небольшой тест этих компонентов все на том же маленьком приложении в 1 форму.
Мой тест
Скачал и установил пакет компонентов в Delphi XE2, открыл проект. В палитре компонентов Delphi появилась новая вкладка - EMS Advanced Localizer. С этой вкладки бросам на форму компоненты:

  1. TQLanguageSource
  2. TQFormLocalizer

У TQFormLocalizer в свойстве Source указываем TQLanguageSource и приступаем к работе.

Первым делом создаем файлы для локализованных строк - делаем два пустых файлика с расширениями *.lng (расширение по умолчанию для EMS Localizer) и называем их просто - rus и eng.

Можно и не создавать эти файлы - они создадутся автоматически при переводе

Теперь дважды щелкаем мышкой по компоненту TQLanguageSource для вызова менеджера языковых файлов:

Жмем единственную активную кнопку и добавляем файлы:

Теперь, по идее разработчиков, в списке менеджера должна появиться новая запись…однако её нет. Вот значения, которые содержатся в свойстве Languages компонента:

Однако список визуального редактора девственно чист. Ну да Бог с ним со списком - пробуем перевести наше приложение. Дважды щелкаем по второму компоненту (TQFormLocalizer) для вызова редактора перевода:

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

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

QLanguageSource1. ActiveLanguage : = 1 ;

При этом, если используется язык по-умолчанию (отмечен как “Original”), то у него индекс равен -1, а у остальных - начинается с нуля и наращивается по порядку в списке Languages.

Другие возможности EMS Advanced Localizer:

Подведем итог.

Достоинства:

  1. Компоненты просты в использовании - на то, чтобы разобраться что и как работает ушло от силы минут 5.
  2. Достаточно дешевые
  3. Есть возможность хранить переводы в БД

Недостатки:

  1. Нет поддержки словарей и, соответственно, авто-переводов
  2. Проблемы в простеньком менеджере языков
  3. Не поддерживается перевод констант и ресурсных строк
  4. Нет инструментов для сторонних переводчиков

В целом мое мнение по поводу EMS Advanced Localizer - достаточно удобные компоненты для работы с небольшими проектами, но для более менее крупных проектов где требуется поддержка многих языков, работа нескольких человек над переводом и т.д. этот набор компонентов, к сожалению, слабоват.

Korzh Localizer

  • Разработчик: KORZH developers tools
  • Официальный сайт: devtools.korzh.com
  • Цена: от 149.0 EUR до 649.0 EUR
  • Наличие ознакомительной версии: имеется
  • Дата последнего релиза: 23 июля 2012
  • Поддержка Delphi XE2: имеется .

Что говорят о своем продукте разработчики:

Один EXE-файл может поддерживать несколько языков. Дополнительные языки могут быть добавлены без перекомпиляции. Нет необходимости создавать множество exe-файлов
Строковые данные могут храниться как в стандартных ресурсных DLL, так и в специальных языковых файлах
При локализации код программы либо изменяется очень мало (буквально пару строк), либо не изменяется вообще. Localizer не меняет проект приложения, т.к. не используются какие-либо дополнительные компоненты
Локализованный проект можно запускать на компиляцию без установленного Localizer
Localizer переводит как ресурсы из VCL, так и любые другие ресурсы
Поддерживается хранение переводов в стандартном Хранилище переводов (Translation Repository) и их повторное использование в будущем
Поддерживает все сторонние компоненты и пакеты (например, DevExpress, TurboPower, ElPack, RX и т.д.)
Процесс перевода можно осуществлять с помощью встроенной утилиты Language Manager , свободно доступной для закачки переводчиками
Простой переход из Borland ITE (Integrated Translation Environment — интегрированная среда перевода)

Мой тест

Скачал триал, отличие которого от полной версии заключается в том, что Localizer переводит только первые 30 строк из каждой формы/файла. Установил После чего в главном меню Delphi XE2 появился новый пункт:

Выбрал в меню “Start project localization” в итоге меня попросили выбрать основной язык для проекта и указать папку для хранения языкового файла:

После нажатия “Localize mu project!” была запущена перекомпиляция проекта, а в dpr-файле проекта добавились необходимые модули и вызов методов Korzh Localizer’а:

uses {....} , LocOnFly, {Form18} ; {$R Project16.KLR} {$R *.res} begin LocalizerOnFly. InitReg ; {...} end .

Также, сразу же после информационного сообщения о том, что мой проект локализован запустился Language Manager:

В диалоге выбора нового языка для локализации есть замечательная опция - “Try to automatically translate via Google”. Однако опция эта в настоящий момент не работает:

Связано это не стем, что разработчики там чего-то не так сделали. Причина кроется в том, что Google перевел API Translate на коммерческие рельсы и, если не ошибаюсь, сделали доступ только по OAuth 2.0. Так, что, видимо в следующих редакциях Korzh Localizer’а эта опция пропадет либо будет использоваться для более доступных API, например, для Bing Translator API.

После добавления языка для локализации в Language Managere появляется таблица для перевода найденных в проекте строк. Помимо того, что непосредственно находится в проекте, Korzh Localizer также позволяет локализовать и строки, содержащиеся в других модулях Delphi:

После перевода Localizer может показать вам статистику - сколько строк переведено, процент перевода и т.д., однако и тут обнаружилась ошибка при переключении на вкладку “External Items”:

Помощник (назовем его так) предлагает выбрать модули для сканирования на наличие строк, а также, предлагает два варианта хранения строк - в ресурсном файле или в pas-файле:

Я оставил все настройки по умолчанию. В модуле было три строки - одна в секции resourcestring, вторая - в const и третья - в обработчике OnClick кнопки. В итоге Korzh Localizer определил следующее:

После нажатия “Next” IDE выдала сообщение:

После нажатия “Yes” в uses был добавлен новый модуль, содержащий секцию resourcestring в которой находилась одна найденная строка. Также изменился и обработчик OnClick кнопки, который стал выглядеть так:

procedure TForm19. Button1Click (Sender: TObject ) ; begin ShowMessage(SIgeaaoIeg) ; end ;

В Language Manager’е строка не появилась - может предполагается, что такие строки переведутся и без менеджера, а может они как-то хитро добавляются в менеджер - с этим я не разбирался детально. Мне осталось только проверить как происходит локализация. Для того, чтобы проект “заговорил” на другом языке достаточно было выбрать в главном меню необходимый язык:

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

Другие возможности Korzh Localizer:

  1. Создание/импорт/экспорт репозиториев. Импорт и экспорт осуществляется в XML или TMX-форматах.
  2. Поддерживает несколько языков для локализации - на каждый язык создается отдельный файл
  3. Умеет работать с EXE- и DLL-файлами.

Достоинства:

  1. Не требует наличия на форме каких-либо компонентов - все, что необходимо Korzh Localizer сам подключает в dpr.
  2. Есть инструмент для переводчиков
  3. Есть возможность создавать/импортировать/экспортировать репозитории

Недостатки:

  1. Пока работал с инструментов обнаружил разного рода недочёты типа ошибок (см. скрины выше), недочёты в интерфейсе, наличие неработающих опций (в то время как Google уже давным давно закрыл доступ к API, а релиз локализера был относительно недавно). Все это создает ощущение, какой-то заброшенности проекта.
  2. Ресурсные строки не попадают в Language Manager или как-то так хитро, что сразу и не сообразишь куда надо нажать или что куда добавить.

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

GNU gettext for Delphi and C++ Builder toolkit

  • Разработчик: dxgettext.po.dk
  • Официальный сайт: dxgettext.po.dk
  • Цена: бесплатно
  • Дата последнего релиза: неизвестно
  • Поддержка Delphi XE2: нет

Несмотря на то, что поддержки Delphi XE2 нет, я все-таки решил скачать и попробовать в работе эту библиотеку. К сожалению после подключения dxgettext.pas к проекту посыпались ошибки - где-то вместо ansiString указали string, использовали методы, помеченные как depricated, использовали неверные параметры методов (может в Delphi 2009 такой код компилировался, но в XE2 - нет). В общем много чего повылазило… А жаль. В Lazarus я использовал эту библиотеку пару раз и, надо сказать, она мне понравилась. Конечно, для уже существующих проектов внедрять в работу DXGetText будет довольно проблемно, но для новых - вполне сносная и удобная библиотека. Есть несколько утилит для переводчиков, память переводов и т.д. В общем, если задумаете начинать проект на Delphi версии до 2009 и потребуется бибилотека для локализации и интернационализации проекта - попробуйте DXGetText .

i18n Package

  • Разработчик: Kambiz R. Khojasteh
  • Официальный сайт: www.delphiarea.com
  • Цена: бесплатно
  • Дата последнего релиза: 19 августа 2012
  • Поддержка Delphi XE2: нет (согласно информации на оф.сайте)

i18n Package v1.10 for Delph i представляет из себя целую библиотеку компонентов, предназначенных для локализации и интернационализации проектов. Несмотря на то, что официально поддержка Delphi XE2 не заявлена эта библиотека без проблем установилась в Delphi XE2, поэтому я решил немного её протестировать.

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

Итак, работа по локализации с помощью i18n Package происходит следующим образом:

  1. Бросаем на главную форму компонент TLocalizer
  2. На все остальные формы (включая и главную) бросаем компонент для перевода - TTranslator
  3. Для локализации диалогов также необходимо уложить на главную форму форму компонент TMessageBox и указать в нем необходимые заголовки, иконки и т.д.

Теперь надо создать файл с переводами строк. Для этого дважды кликаем мышкой по компоненту TTranslator - откроется редактор в котором необходимо выбрать свойства и строки, которые мы будем переводить:

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

После того, как необходимые элементы выбраны преходим на вкладку Export, указываем язык на котором наши строки написаны (т.е. Русский) и экспортируем строки в файл *.i18n:

Файл создан - можно приступать к переводам. В папке Bin библиотеки находится специальная утилита под названием i18n Editor, которая и предназначена для переводов.

Программка довольно простая в использовании и, думаю, Вы с ней очень быстро освоитесь. Скажу только, что i18n Editor способен “обучаться” - для этого программе необходимо указать папку в которой лежат уже готовые файлы *.i18n и программа автоматически их просканирует и вытащит из них новые для себя фразы.

После того, как все необходимые строки переведены возвращаемся в Delphi и указываем в свойстве URI компонента TLocalizer наш файл с локализациями. Теперь добавляем на форму компонент TCultureBox и в его свойстве Localizaer указываем Localiwer1 (если компонент не переименовывался).

Теперь можно запустить программку и убедиться, что перевод интерфейса происходит успешно:

Достоинства:

  1. Для своей цены - $0.0 достаточно качественная (в Delphi XE2 работает отлично)

Недостатки:

  1. Парсер не обнаруживает resourcestring и строковые константы, а обнаруженные и переведенные строки из кода программы все равно не локализуются.
  2. Для каждой формы/модуля необходимо использовать свой TTranslator, что не совсем удобно. Логичнее было бы сделать небольшой сканер всего проекта на наличие строк как это сделано, например, у DXGetText

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

Kryvich’s Delphi Localizer

  • Разработчик: Kryvich
  • Официальный сайт: sites.google.com/site/kryvich/localizer
  • Цена: бесплатно
  • Дата последнего релиза: 7 января 2012
  • Поддержка Delphi XE2: имеется

Ещё одна бесплатная библиотека для локализации и интернационализации приложений Delphi. По заявлению авторов проекта, с этой библиотекой локализация наших приложений должна пройти без каких либо проблем. Проверим, так ли это на самом деле.

Первым делом нам необходимо изменить опции проекта. Заходим в IDE: Project->Options->Linking и устанавливаем Map File = detalied

Теперь собираем проект и получаем три файла - *.exe, *.drc и *.map. Теперь запускаем консольную утилиту kdlscan.exe, которая находится в папке с библиотекой. Утилита запускается с параметром:

kdlscan


где - имя нашего exe-файла.

Сканер проходит по проекту и вытаскивает ресурсные строки и строки из свойств компонентов и укладывает их в файл с расширением *.lng. Этот файл - обычный ini-файлик, поэтому смело его открываем любым редактором и переводим все строки как нам необходимо.

После перевода сохраняем полученный файл, например, с названием english.lng .

Теперь приступаем к работе над проектом. Для поддержки локализации добавляем в uses главной форму модуль uFreeLocalizer.pas, также бросаем в папку с проектом модуль uStringUtils.pas и в любом удобном месте программы пишем:

FreeLocalizer. AutoTranslate : = True ; FreeLocalizer. LanguageDir : = ExtractFilePath (Application. ExeName ) ; FreeLocalizer. LanguageFile : = "english.lng" ;

Первые две строки можно записать в dpr-файле и там же подключить модуль локализатора. Все. Можно запустить программу и проверить работу.

Достоинства:

  1. Очень простая в использовании библиотека
  2. Компактная

Недостатки:

  1. Нет словарей
  2. Сканер не определяет жестко закодированные строки и константы

В целом библиотека вполне подойдет для проектов с небольшим количеством строк для локализации. Всё-таки работа через ini-файл даст о себе знать при большом объеме данных.

JVCL (JEDI Visual Component Library)

  • Разработчик: JEDI Project
  • Официальный сайт: jvcl.delphi-jedi.org
  • Цена: бесплатно
  • Дата последнего релиза: 11 апреля 2011
  • Поддержка Delphi XE2: имеется

Кто не знает проект JEDI? Эту гигантскую библиотеку знают, наверное, все, кто хоть чуть-чуть работал в Delphi. В состав этой библиотеки входит компонент TjvTranslator , который позволяет локализовывать приложения Delphi. Судя по отзывам на различных форумах и в блогах, компонет довольно удобный и пользуется популярностью, но ставить весь набор JCL+JVCL ради того, чтобы взглянуть на работу одного чудо-компонента мне как-то не улыбнулось. Поэтому достоинства и недостатки искать Вам придётся самостоятельно. А я перейду к другим компонентам.

CnPack Component Package (CnVCL )

  • Разработчик: CnPack
  • Официальный сайт: www.cnpack.org
  • Цена: бесплатно
  • Дата последнего релиза: 5 ноябра 2011
  • Поддержка Delphi XE2: имеется

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

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

Итак, после установки пакета cnVCL в палитре компонентов появляется сразу несколько новых вкладок:

на влкадке cnMultiLang расположены 4 компонента для локализации. Три из них: TCnLangManager , TCnLangTranslator и TChHashLangFileStorage или TChIniLangFileStorage должны быть размещены в приложении.

Надо сказать, что Alpha-версия дает о себе знать. Чтобы по-быстрее разобраться с работой этих компонентов я решил запустить небольшую демку, которая идет в комплекте с исходниками компонентов…она, конечно, открылась в Delphi XE2, но что-то уж как-то совсем странно:

Ну да это, в принципе, терпимо - исходник-то, вроде бы не сильно “покорежин” и разобраться с тем, что и как работает более-менее удалось. Суть работы такова:

1. Бросаем на форму приложения три вышеобозначенных компонента (я выбрал TCnLangManager , TCnLangTranslator и TChIniLangFileStorage )

2. Теперь выбираем TChIniLangFileStorage и добавляем в коллекцию Languages новые языки. Выглядеть это должно примерно так:

3. У TCnLangManager в свойстве LanguageStorage указываем наш компонент CnIniLangFileStorage1

4. Делаем двойной клик по TCnLangTranslator - откроется редактор для перевода строк:

5. Выбираем в дереве необходимый язык и жмем “Gen All” - должна собраться таблица со строками для перевода. У меня она оказалась вот такой:

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

7. Пишем в любом удобном месте программы одну строку:

CnLangManager1. CurrentLanguageIndex : = 0 ;

В итоге это действие приведет к тому, что программа будет “переведена” на язык, который в LangugeStorage имеет индекс 0, т.е. в моем случае - на английский язык. Скрин приводить не буду, просто скажу, что компонент сработал.

Что можно сказать по поводу достоинств и недостатков этих компонентов? Думаю, что пока какие-либо выводы делать не стоит - всё-таки Alpha-версия и тут неизбежны всякого рода баги, странности поведения и т.д. и т.п. Если работа над компонентами продолжится, то скорее всего мы должны получить в свое распоряжение простенькие и легкие в использовании компоненты для локализации и интернационализации проектов. Пока же использовать эти компоненты в серьезных приложениях очень и очень рано.

TLang для FireMonkey

  • Разработчик: Embarcadero
  • Официальный сайт: embarcadero.com
  • Цена: входит в стоимость Delphi
  • Дата последнего релиза: 03 сентября 2012
  • Поддержка Delphi XE2: имеется

Про этот компонент и работу с ним я рассказывать подробно не буду, т.к. в блоге уже есть статья, касающаяся работы именно с TLang в FireMonkey. Статья называется “ ” - в ней же Вы найдете достоинства и недостатки этого компонента. В Delphi XE3 работу компонента не проверял.

Multilizer

  • Разработчик: Finnish technology company
  • Официальный сайт: www2.multilizer.com
  • Цена: 299 - 2900 EUR
  • Дата последнего релиза: неизвестно
  • Поддержка Delphi XE2: имеется

Несмотря на довольно не маленькую цену продукта я все же решил посмотреть, что из себя представляет данных продукт. Multilizer - это специализированный продукт, позволяющий локализовать различные типы приложений, файлов, dll и т.д. Также в комплект поставки входит набор компонентов для Delphi 5 - XE2. Компоненты я устанавливать не стал, а вот само приложение Multilizer решил испробовать на своем приложении.

Все начинается с тог, что мы создаем новый проект для локализации:

Выбираем первый вариант. Следующий шаг - выбор парсера:

На третьем шаге Multilizer просит нас указать ему файл для парсинга (указал exe), проводит парсинг и выводит результат сканирования:

Следующий шаг - это определение нативного языка приложения и добавление новых языков для локализации:

Multilizer позволяет также определять язык автоматически, но при этом почему-то просит логин и пароль к аккаунту Google 0_O (хоть не ключи от квартиры где деньги лежат). Эту функцию программы я проверять не стал.

После того, как проект создан, открывается окно редактора переводов, которые выглядит вот так:

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

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

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

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

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

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

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

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

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

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

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

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