Локализация Вашего приложения

Когда Вы сделаны, интернационализируя пользовательский интерфейс и код приложения, начинаете процесс локализации. Экспортируйте все строковые файлы языка разработки, содержащие бывший обращенным к пользователю текст к стандартному XML Localization Interchange File Format (XLIFF). Представьте файл XLIFF команде локализации для перевода на многократные языки. Продолжайте разрабатывать свое приложение при ожидании переводов. Импортируйте переводы XLIFF в проект и протестируйте приложение на каждом языке, который Вы добавили. Повторите процесс по мере необходимости, переведя просто изменения между каждой версией приложения. По мере необходимости выполните дополнительные шаги локализации сами.

../Art/export_import_process_2x.png

Выбор языков

Можно выбрать больше чем из 100 различных языков и диалектов, определяемых областями для локализации приложения. Однако, чем более общий Вы делаете свои локализованные ресурсы, тем больше областей можно поддерживать с единственным набором ресурсов. Это может оставить много свободного места в Вашем комплекте приложений, и справка сокращают затраты локализации. Например, если Вы не должны различать различные области, использующие английский язык, можно добавить английский язык для поддержки пользователей в США, Соединенном Королевстве и Австралии. Даже если Вы обеспечиваете, специфичные для области ресурсы всегда обеспечивают полный набор специфичных для языка ресурсов для всех языков, которые Вы поддерживаете.

При поиске ресурсов пакет APIs пытается счесть лучшее соответствие между языками поддержками приложений и языком пользователя и настройками области. Специфичные для области папки ресурса ищутся перед специфичными для языка папками ресурса. Например, если Вы добавляете английский язык (США), английский язык (Соединенное Королевство) и английский язык (Австралия) к Вашему проекту, пакет, APIs ищет надлежащие специфичные для области папки сначала, сопровождаемый английской папкой языка. Для получения дополнительной информации о том, как пакет APIs находит локализованные ресурсы, считайте Образец Поиска Пакета в Руководстве по программированию Пакета.

Если Вы не уверены о том, какой языки добавить, считайте основные языки используемыми на территориях App Store, Вы принимаете решение в Подключении iTunes представить свое приложение на рынке. Территории App Store перечислены на Территориях App Store в Руководстве разработчика Подключения iTunes.

Блокировка представлений

В Интерфейсном Разработчике заблокируйте представления, которые Вы не хотите случайно изменять при ожидании переводов. Когда представление заблокировано, Вы не можете изменить некоторых или все его свойства в инспекторе или редакторе проекта. Вы указываете набор свойств для блокировки путем выбора уровня блокировки (см. опции уровня Блокировки).

Табличные 6-1  уровни Блокировки

Блокировка уровня

Описание

Ничто

Можно отредактировать все свойства представления.

Все свойства

Вы не можете отредактировать свойства представления.

Локализуемые свойства

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

Нелокализуемые свойства

Вы можете изменить видимые пользователем строки и атрибуты — такие как размер представления — но не можете изменить никакие другие атрибуты представления.

Можно установить атрибут блокировки для единственного представления или всего файла пера. По умолчанию представления наследовали свой атрибут блокировки от их родительского представления, и представления верхнего уровня наследовали свой атрибут блокировки от .storyboard или .xib файл. При установке атрибута блокировки представления он устанавливает атрибут блокировки для всех своих порожденных представлений.

Изменить уровень блокировки представления

  1. В Интерфейсном Разработчике выберите представление, которое Вы хотите заблокировать.

  2. В инспекторе Идентификационных данных (под разделом Document), выберите уровень блокировки из всплывающего меню Блокировки.

    Обратитесь к Блокировке уровней для описания выбора блокировки в этом меню.

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

Например, выберите Localizable Properties, чтобы продолжать разрабатывать Ваше приложение при ожидании пера или строкового файла, который будет локализован. Выберите Non-localizable Properties, если Вы включаете переводы в файл пера и не хотите вносить другие изменения непреднамеренно.

Изменить уровень блокировки файла пера

  1. В навигаторе проекта выберите a .storyboard или .xib файл.

  2. Выберите уровень блокировки из меню Editor> Localization Locking.

    Обратитесь к Блокировке уровней для описания выбора блокировки в этом меню.

    Для разблокирования всех представлений в файле выберите Reset Locking Controls.

Например, для предотвращения любых редактирований к файлу пера, который повлиял бы на файлы локализованных строк выберите Reset Locking Controls, сопровождаемый Локализуемыми Свойствами.

Экспорт локализаций

Экспортируйте ресурсы языка разработки в файл XLIFF и представьте его команде локализации для перевода на многократные языки.

В первый раз Вы экспортируете локализации, только основная интернационализация — .storyboard и .xib файлы ресурсов — существуют в папке проекта. XCode генерирует строковые файлы от Ваших файлов проекта и включает их в экспортируемый .xliff файл. XCode не добавляет строковые файлы к проекту, пока Вы не импортируете локализации позже. Экспортируемый [Language ID].xliff файл кодирует строковые файлы в стандартном XML Localization Interchange File Format (XLIFF). (Большинство сторонних инструментов локализации поддерживает этот формат файла XLIFF.), Например, если язык разработки является английским, en.xliff файл содержит основные строковые файлы интернационализации (один для каждого .storyboard и .xib файл), a Localizable.strings файл, и InfoPlist.strings файл. Исходный текст в строковых файлах находится на английском языке.

Переводчики должны возвратить отдельное .xliff файл для каждого языка. Файлы должны использовать язык ID в качестве префикса. Например, если Вы запрашиваете en.xliff для английского языка быть переведенными на немецкий и русский язык, нужно назвать возвращенные файлы de.xliff для немецкого языка и ru.xliff для русского языка. Частное лицо.xliff файлы содержат фактические переводы.

../Art/export_details_2x.png../Art/export_details_2x.png

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

Экспортировать языковой перевод разработки

  1. В редакторе проекта XCode выберите проект или цель.

  2. Выберите Editor> Export For Localization.

  3. В листе, появляющемся, введите расположение в поле Save As и нажмите Save.

    XCode сохранил файл к расположению, которое Вы указали с a .xliff расширение. XCode создает папку (если это не существует), и помещает названный файл [Language ID].xliff в папке, где Language ID идентификатор для языка разработки. Например, если язык разработки является английским, имя файла en.xliff.

    Если Вы никогда не добавляли язык к своему проекту, диалоговое окно экспорта кажется подобным этому снимку экрана:

    ../Art/export_base_localization_2x.png

В следующий раз Вы экспортируете локализации, дополнительно экспортируете ресурсы языка разработки, определенные ресурсы языка или все ресурсы языка.

Экспортировать многократные локализации для перевода

  1. В редакторе проекта XCode выберите проект или цель.

  2. Выберите Editor> Export For Localization.

  3. В листе, появляющемся, введите расположение в поле Save As.

    Если Вы добавили язык к своему проекту, диалоговое окно экспорта кажется подобным этому снимку экрана:

    ../Art/export_multiple_localizations_2x.png
  4. От Включать всплывающего меню выберите Existing Translations или Development Language Only.

    Для экспорта всех или определенных ресурсов языка выберите Existing Translations и затем отмените выбор языков, которые Вы не хотите включать в экспорт в разделе Languages ниже. Для экспорта ресурсов языка разработки выберите Development Language Only.

  5. Нажмите Save.

    Для каждого языка Вы выбираете, XCode сохранил файл XLIFF (файл с языком префикс ID и .xliff расширение) к расположению Вы указали в поле Save As. Например, при выборе German и French из списка языка XCode добавляет a de.xliff и fr.xliff файл к папке.

Импорт локализаций

При импорте локализаций XCode добавляет язык и ряд файлов локализованных строк для языка к проекту. Например, если Вы импортируете ru.xliff в стандартном XML Localization Interchange File Format (XLIFF), включающем атрибут выходного языка, русский язык добавляется к проекту. В первый раз, когда Вы импортируете локализации, основные файлы интернационализации изменяются на группу, содержащую строковые файлы в навигаторе проекта. XCode хранит специфичные для языка строковые файлы в папках языка. Например, XCode создает a ru.lproj папка в папке проекта и добавляет локализованную копию Localizable.strings и InfoPlist.strings файлы к ru.lproj папка. Файлы локализованных строк извлечены из соответствия [Language ID].xliff файл. В следующий раз, когда Вы импортируете локализации, строковые файлы объединяются с Вашими существующими файлами проекта.

../Art/import_details_2x.png

Импортировать локализации из переводчиков

  1. В редакторе проекта XCode выберите проект или цель.

  2. Выберите Editor> Import Localizations.

  3. В листе, появляющемся, выберите файл с a .xliff расширение и нажимает Open.

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

    ../Art/import_localizations_2x.png
  4. Нажмите Import.

    XCode декодирует файлы локализованных строк от файла XLIFF и добавляет их к папке проекта. XCode заменяет существующие строковые файлы.

Проверка Ваших шагов

После импорта локализаций XCode обновляет навигатора проекта для показа новых специфичных для языка ресурсов. Локализованный .storyboard и .xib файлы теперь появляются как группы в навигаторе проекта. Щелкните по треугольнику раскрытия рядом с a .storyboard или .xib файл для раскрытия основного ресурса и специфичных для языка строковых файлов.

../Art/localized_nib_2x.png

Выберите строковый файл, чтобы просмотреть и дополнительно, отредактировать содержание. Строковый файл содержит пары ключ/значение, которые XCode автоматически генерирует из текста, который это находит в соответствии .storyboard или .xib файл. Если Вы используете NSLocalizedString макросы в Вашем коде, как описано в Разделении Бывшего обращенным к пользователю текста от Вашего Кода, a Localizable.strings группа также появляется в навигаторе проекта.

../Art/localized_strings_2x.png

Другой вид строкового файла InfoPlist.strings, который Вы используете для локализации свойств приложения, которые видимы пользователям (таким как имя приложения). Для ключей можно локализовать в InfoPlist.strings файл, считайте Локализацию информационных Файлов Списка свойств.

Экспорт локализаций Используя утилиты командной строки

Также можно использовать xcodebuild утилита командной строки для экспорта локализаций.

Для экспорта локализаций введите эту команду в Терминал, заменив <dirpath> и <projectname> параметры:

xcodebuild -exportLocalizations -localizationPath <dirpath> -project <projectname> [[-exportLanguage <targetlanguage>]]

Экспортируемые файлы XLIFF помещаются в <dirpath>. Дополнительно, используйте exportLanguage параметр для экспорта других локализаций.

При добавлении дополнительных ресурсов Вы хотите локализовать

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

Локализовать ресурс

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

  2. Если необходимо, открытый инспектор Файла.

  3. В разделе Localization нажмите кнопку Localize.

    ../Art/localize_resource_1_2x.png
  4. В диалоговом окне, появляющемся, выберите язык из всплывающего меню и нажмите кнопку Localize.

    Например, выберите Base, если Вы хотите использовать файл ресурсов для всех языков.

    ../Art/localize_resource_2_2x.png

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

Добавить локализации к ресурсу

  1. В навигаторе проекта с открытым инспектором Файла выберите ресурс.

  2. В разделе Localization выберите дополнительные языки, которые Вы хотите добавить.

    XCode копирует файл в соответствующей папке языка, и это появляется в навигаторе проекта.

    ../Art/localize_resource_3_2x.png

Обработка множественных чисел существительного и единиц измерения

Если строка содержит множественное число существительного или единицы измерения, обеспечьте альтернативные строки для языков, имеющих различные множественные правила. Для указания правил множественного числа языка, которые не могут быть представлены парами ключ/значение в строковом файле используйте a .stringsdict файл, список свойств XML с a .stringsdict расширение файла. Языки варьируются по тому, как они обрабатывают множественные числа существительных или единиц измерения. Некоторые языки имеют единственную форму, у некоторых есть две категории, и у других есть три или больше категории для представления количеств. При отображении отформатированной строки, содержащей переменное количество можно использовать одну строку в коде, локализующемся с помощью множественных правил, указанных в a .stringsdict файл.

Подобный тому, как Вы получаете локализованный текст от строковых файлов, использовать NSLocalizedString макросы в Вашем коде для получения строки формата для различных форм множественного числа от a .stringsdict файл. Затем, обеспечьте локализованный .stringsdict файл для всех поддерживаемых языков, имеющих различные множественные правила. NSLocalizedString поиск макросов существующее .stringsdict файл перед связанным строковым файлом, имеющим тот же префикс имени файла. Например, макросы ищут Localizable.stringsdict файл для %d file(s) remaining ключ сначала. Если это не найдено, макросы ищут Localizable.strings файл для ключа. Поэтому только добавьте .stringsdict файлы для языков, имеющих различные множественные правила.

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

  1. В Вашем коде используйте a NSLocalizedString макрос, передавая отформатированную строку для получения множественной фразы.

    Например, для отображения переменного числа файлов как текст:

    localizedString = [NSString localizedStringWithFormat:NSLocalizedString(@"%d file(s) remaining", @"Message shown for remaining files"), count];

    Передайте строку формата как основной параметр к NSLocalizedString макрос.

  2. Создать Localizable.strings файл для каждого языка, экспорта и локализаций импорта, как описано в Экспорте Локализаций и Импорте Локализаций.

    XCode генерирует a Localizable.strings файл от NSLocalizedString макросы в Вашем коде. Например, эта пара ключ/значение появляется на языке разработки Localizable.strings от предыдущего фрагмента кода:

    /* Message shown for remaining files */
    "%d file(s) remaining" = "%d file(s) remaining";

    Также можно создать язык разработки Localizable.strings файл самостоятельно, как описано в Создании Строковых Файлов для Бывшего обращенным к пользователю текста в Вашем Коде.

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

    Добавьте файл списка свойств к проекту (выберите File> New> File и выберите Property List из листа). В навигаторе проекта измените имя файла на Localizable.stringsdict и локализуйте его на выбранных языках, как описано в Добавлении Дополнительных Ресурсов, которые Вы Хотите Локализовать.

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

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

    Например, англичане .stringsdict файл для %d file(s) remaining ключ:

    <plist version="1.0">
        <dict>
            <key>%d file(s) remaining</key>
            <dict>
                <key>NSStringLocalizedFormatKey</key>
                <string>%#@files@</string>
                <key>files</key>
                <dict>
                    <key>NSStringFormatSpecTypeKey</key>
                    <string>NSStringPluralRuleType</string>
                    <key>NSStringFormatValueTypeKey</key>
                    <string>d</string>
                    <key>one</key>
                    <string>%d file remaining</string>
                    <key>other</key>
                    <string>%d files remaining</string>
                </dict>
            </dict>
        </dict>
    </plist>

    На английском языке, one категория используется для номера 1, и other категория используется для всех других чисел на английском языке.

    Русский .stringsdict файл для %d file(s) remaining ключ:

    <plist version="1.0">
        <dict>
           <key>%d file(s) remaining</key>
             <dict>
                <key>NSStringLocalizedFormatKey</key>
                <string>%#@files@</string>
                <key>files</key>
                <dict>
                    <key>NSStringFormatSpecTypeKey</key>
                    <string>NSStringPluralRuleType</string>
                    <key>NSStringFormatValueTypeKey</key>
                    <string>d</string>
                    <key>one</key>
                    <string>Остался %d файл</string>
                    <key>many</key>
                    <string>Осталось %d файлов</string>
                    <key>other</key>
                    <string>Осталось %d файла</string>
                </dict>
            </dict>
        </dict>
    </plist>
  5. Протестируйте множественные правила на нескольких языках.

    Выполните шаги в Тестировании Определенных Языков и Областей в XCode для выполнения приложения в XCode с помощью различных настроек языка.

    Например, вышеупомянутое английское множественное число управляет для %d file(s) remaining ключ должен привести к следующим локализованным строкам:

    Категория

    Числа в качестве примера

    Локализованная строка

    один

    1

    1 остающийся файл

    прочее.

    0, 2, 3, …

    2 остающиеся файла

    3 остающиеся файла

    Для русского языка существует три возможных категории с различными форматами:

    Категория

    Числа в качестве примера

    Локализованная строка

    один

    1, 21, 31, 41, 51, 61, …

    Остался 1 файл

    Остался 21 файл

    многие

    0, 5–20, 25–30, 35–40, …

    Осталось 0 файлов

    Осталось 20 файлов

    прочее.

    2–4, 22–24, 32–34, …

    Осталось 2 файла

    Осталось 22 файла

Для полного описания .stringsdict свойства файла, считайте Формат файла Stringsdict. Для множественных категорий и правил для каждого языка, см. Правила Множественного числа Языка CLDR.

Локализация информационных файлов списка свойств

При экспорте локализаций XCode включает InfoPlist.strings файл для перевода. Однако этот файл содержит свойства о Вашем приложении и компании, таким образом, можно хотеть проверить или перевести этот файл сами. Это представляет файл в виде строки, позволяет Вам дополнительно локализовать некоторые значения свойств в информационном списке свойств, такие как имя приложения (имя дисплея пакета) и уведомление об авторском праве.

XCode автоматически добавляет эти ключи к InfoPlist.strings файл:

Для полного описания информационного списка свойств считайте информационную Ключевую Ссылку Списка свойств.

Локализация имени приложения и уведомления об авторском праве

Локализовать имя приложения и уведомление об авторском праве, добавленные стоимости для CFBundleDisplayName и NSHumanReadableCopyright ключи к InfoPlist.strings файл. Например, добавьте эти строки к InfoPlist.strings (French) файл в навигаторе проекта:

CFBundleDisplayName = "Maisons";
NSHumanReadableCopyright = "Copyright © 2014 My Great Company Tous droits réservés.";

Получение локализованного имени приложения

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

NSString *appName = [[[NSBundle mainBundle] localizedInfoDictionary] objectForKey:@"CFBundleDisplayName"];

Для приложений Mac пользователь может переименовать приложение в Средстве поиска, так используйте NSFileManager класс для получения имени приложения:

NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
NSString *appName = [[NSFileManager defaultManager] displayNameAtPath:bundlePath];

Добавление языков

Добавьте языки к своему проекту, если Вы хотите добавить специфичные для языка ресурсы, как описано в Добавлении Дополнительных Ресурсов Вы Хотите Локализовать, прежде, чем импортировать локализации. (XCode автоматически добавляет языки к Вашему проекту при импорте локализаций.), Например, добавьте специфичные для языка файлы образа и аудиофайлы к Вашему проекту или протестируйте специфичные для языка множественные правила, прежде чем Вы начнете локализовать все строковые файлы.

Когда XCode добавляет язык к Вашему проекту, он создает отдельную папку языка для хранения специфичных для языка ресурсов. XCode добавляет строковый файл для каждого .storyboard и .xib файл в Base.lproj папка к папке языка. Строковый файл имеет то же имя как .storyboard или .xib файл, но с strings расширение. Например, если Вам назвали раскадровку MyStoryboard.storyboard, сгенерированный строковый файл называют MyStoryboard.strings.

Добавить язык к проекту

  1. В навигаторе проекта выберите проект (не цель) и нажмите Info.

  2. В разделе Localizations нажмите кнопку Add (+) под столбцом Language и выберите язык, который Вы хотите добавить от всплывающего меню.

    ../Art/add_language_1_2x.png

    Пункты меню содержат имя языка, сопровождаемое языком ID в круглых скобках, как на немецком (de), японском (ja) и арабском языке (площадь). Пункты меню для сценариев или диалектов содержат область в круглых скобках, как на немецком языке (Швейцария). Язык ID для сценариев или диалектов использует подтеги, как в pt-PT где pt код для португальского языка и PT код для Португалии. Например, использовать pt как язык ID для португальского языка, поскольку это используется в Бразилии и pt-PT как язык ID для португальского языка, поскольку это используется в Португалии. Другое подменю (у основания списка) содержит больше языков и диалектов.

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

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

    Для Локализуемых строк типа файла XCode создает строковый файл для того ресурса. Если Вы предпочитаете поддерживать отдельное .storyboard или .xib файл для языка, выберите тип файла ресурсов от всплывающего меню Типов файлов вместо этого — например, выберите Interface Builder Cocoa Touch Storyboard для файла раскадровки Mac.

    ../Art/add_language_3_2x.png
  4. Нажмите кнопку Finish.