Table of Contents

Понимание локализации и интернационализации

Создание многоязычной системы поддержки в iOS начинается с понимания различия между интернационализацией и локализацией. Интернационализация (i18n) - это процесс проектирования вашего приложения, чтобы оно могло быть адаптировано к различным языкам и регионам без инженерных изменений. Локализация (l10n) - это фактический перевод и культурная адаптация контента приложения и пользовательского интерфейса для конкретной местности. Рамки Apple обрабатывают большую часть тяжелой работы, но продуманная стратегия на старте экономит значительные усилия позже.

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

Возможность локализации в вашем проекте Xcode

Первым шагом является указание Xcode, какие языки будет поддерживать ваше приложение. Откройте настройки проекта, выберите свой проект в Project Navigator, а под вкладкой «Инфо» найдите раздел «Локализация». Нажмите кнопку «+» для добавления языков. Для каждого языка Xcode автоматически создает файлы ресурсов (раскадровки, XIB, файлы строк), которые вы можете редактировать отдельно.

Базовая интернационализация

Apple рекомендует использовать Base Internationalization. В вкладке Info вашего проекта проверьте «Использовать Base Internationalization». В этом хранится оригинальный макет пользовательского интерфейса в базовой локализации (обычно на английском языке), и каждый дополнительный язык перекрывает только строки, а не макет. Это уменьшает дублирование и обеспечивает согласованность макета. Если вы отключите его, вы должны дублировать всю раскадровку для каждого языка, что подвержено ошибкам.

Добавление локализации в существующие файлы

Для существующих раскадров или XIB выберите файл в File Inspector, затем в разделе Локализация проверьте языки, которые вы хотите локализовать. Xcode генерирует файлы .strings для раскадров. Для кодовых интерфейсов вы будете полагаться на и отдельные файлы .strings.

Создание и управление локализуемыми файлами строк

Основной способ перевода текста из кода — через файлы. Создать один, перейдя в File > New > File > Strings File (под Ресурсом). Назовите его . Затем в File Inspector локализуйте его: нажмите Localize, затем выберите базовый язык. После этого для каждого дополнительного языка в подпапке появляется новый файл.

Формат является ключевым = пары значений:

Для немецкой локализации:

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

Организация струн с комментариями

Добавить комментарии, чтобы объяснить контекст для переводчиков. Они не компилируются в приложение. Пример:


Использование NSLocalizedString в коде

Макро читает строку из соответствующего файла на основе языка устройства пользователя.

Большинство звонков используют только ключ и комментарий:

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

Обработка строк формата с помощью параметров

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

В коде:

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

Использование .stringsdict для множественных правил

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

Затем в коде используется тот же ключ: . iOS автоматически выбирает правильную форму множественного числа на основе правил локализации.

Локализация раскадров и XIB

При локализации раскадровки каждая метка, кнопка и текстовое поле получает аналог в файле строк, специфичных для языка. Вы можете редактировать эти строки напрямую или использовать Interface Builder для предварительного просмотра и изменения макетов на языке. Однако для более динамичного пользовательского интерфейса вы можете предпочесть настраивать текст программно с помощью , а затем обрабатывать макет с помощью Auto Layout.

Предварительный просмотр локализаций в Xcode

В Xcode можно предварительно просмотреть раскадровку на разных языках без построения: открыть раскадровку, затем в меню Editor выбрать Preview. Добавить устройство предварительного просмотра, затем изменить язык с помощью выпадающего внизу. Это показывает, как расширяются или сжимаются строки.

Корректировка макета для расширения текста

Немецкий текст часто на 30% длиннее английского. Используйте Auto Layout с ограничениями, которые могут выращивать метки вертикально или горизонтально. Установите количество строк метки до 0. Избегайте ограничений фиксированной ширины. Используйте приоритеты объятий контента и сопротивления сжатию соответствующим образом. Для кнопок рассмотрите возможность использования или допуская динамическую ширину. Тест с самыми длинными возможными переводами.

Обработка языков справа налево (RTL)

Арабский, иврит, персидский, урду и другие потоки справа налево. iOS поддерживает RTL через свойство на просмотры и автоматическое переворачивание изображений и макета системы на основе направления макета пользовательского интерфейса (с языка устройства).

Настройка для RTL

Убедитесь, что ваши просмотры раскадровки используют ограничения на ведение/притяжение вместо левого/правого. Автоматическая настройка Xcode поддерживает правильное ведение/притяжение автоматически. Для программных макетов используйте и . Если у вас есть пользовательский рисунок или преобразования, уважайте направление макета пользовательского интерфейса от или проверьте .

Изображения и RTL

Изображения, имеющие направленное значение (например, стрелка, указывающая вперед), должны быть перевернуты в режиме RTL. В каталоге активов вы можете установить изображения как «Зеркало» для RTL. Альтернативно, предоставьте отдельные наборы изображений для каждого направления. Для шаблонных изображений iOS может автоматически зеркально отображаться, если вы установите на изображение.

Текстовая связка

Для ярлыков и текстовых просмотров используйте , который автоматически выравнивается слева для LTR и справа для RTL.

Локализация дат, цифр и валют

Конечные пользователи ожидают даты и номера, отформатированные в соответствии с их местоположением. Используйте и с местоположением пользователя. Настройте (который является по умолчанию) и используйте предварительно определенные стили, такие как , или пользовательские шаблоны. Например:

Для чисел используйте со стилем или . Он автоматически обрабатывает сепараторы группирования, десятичный сепаратор и символ валюты.

Использование Locale с струнами формата

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

Тестирование локализации

Тщательное тестирование имеет решающее значение. Моделирование различных языков на тренажере путем редактирования настроек языка приложений и региона схемы. Перейдите в продукт > Схема > Схема редактирования, затем в разделе Запуск > Варианты, выберите другой язык приложений (например, немецкий) и регион (например, Германия).

Использование языкового коммутатора Simulator

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

Тестирование RTL

Установите язык приложений схемы на арабский. Проверьте, чтобы все просмотры переворачивались правильно. Обратите пристальное внимание на пользовательские просмотры, прокрутки просмотров и просмотры веб-страниц. Используйте инструментарий Debug > View Debugging для проверки макета.

Тестирование с псевдолокализацией

Xcode предлагает псевдолокализацию для имитации длинных строк или RTL без фактических переводов. В опциях схемы включить «Двухдлинный псевдоязык» или «Правый левый псевдоязык». Это помогает уловить проблемы усечения и выравнивания на ранней стадии.

Локализация динамического контента и пользовательского интерфейса на сервере

Если ваше приложение загружает контент с сервера, вы не можете полагаться исключительно на . Вам нужно отправить предпочтение локального пользователя серверу и вернуть переведенный контент. Используйте заголовок или пользовательский параметр. На стороне iOS вы можете получить предпочтительные языки из или .

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

Лучшие практики для устойчивой локализации

  • Сохраняйте ключи описательными и последовательными — используйте точечные обозначения, такие как , для ключей пространства имен.
  • Использовать единый источник истины — избегать дублирования переводов между файлами.Использовать локализацию базы и ссылаться на один и тот же ключ.
  • Автоматизировать экспорт/импорт — Xcode может экспортировать все локализации в виде файлов XLIFF для переводчиков, затем импортировать переведенные файлы обратно.
  • Версия управления строками — Храните и файлы в Git. Используйте дифференцированные инструменты для отслеживания изменений.
  • Никогда не включайте локализуемый текст в код — Всегда используйте или для разделения.
  • Тщательно проанализируйте интерполяцию струн — Переводчики должны понимать, что представляет собой каждый заполнитель. Используйте позиционные аргументы, чтобы разрешить переупорядочение.

Работа с локализацией SwiftUI

SwiftUI упрощает локализацию. По умолчанию просматривает строку в с помощью клавиши «Привет». Если ключа нет, он использует саму строку. Вы можете выражать клавиши с помощью и предоставлять переводы.

Для отформатированных строк используйте — SwiftUI автоматически использует , если у вас есть ключ «У вас есть %d элементов» в файле . Однако, чтобы точно соответствовать ключу, вам может потребоваться определить полный формат.

не работает напрямую. Вместо этого используйте:

Или используйте SwiftUI с интерполяцией: , но для этого требуется, чтобы ключ был точно «items count %d» в файле строк. Самый безопасный подход — продолжать использовать с внутри вычисленного свойства.

Локализация изображений в SwiftUI

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

Обычные подводные камни и как их избежать

  • Отсутствующие переводы — Используйте с параметром , чтобы обеспечить обратный эффект от английского языка. Регулярно запускайте симулятор на каждом языке, чтобы обнаружить непереведенные строки.
  • Твердо закодированная компоновка — Избегайте фиксированных ширин.Проверка с самыми длинными немецкими переводами.
  • Игнорирование правил множественного числа — Всегда используйте .stringsdict для многократно умножаемых строк.
  • Забывание локального значения для парсинга даты/числа — При парсинге пользовательского ввода используйте фиксированный локальный показатель, такой как en US POSIX, для внутреннего хранения.
  • Не тестируется на реальных устройствах — Переключение языка симулятора является надежным, но тестирование устройств показывает поведение, характерное для региона, такое как календарь, часовой пояс и клавиатура.
  • Обзор доступности — VoiceOver говорит на локализованных строках.Обеспечить локализацию этикеток доступности и использовать соответствующим образом.

Внешние ресурсы для более глубокого понимания

Заключение

Внедрение многоязычной поддержки в iOS — это больше, чем перевод: она включает в себя тщательное планирование строк, макетов, форматов и культурных конвенций. Используя встроенные инструменты локализации Apple — Base Internationalization, , и Auto Layout — вы можете создать приложение, которое чувствует себя как дома на любом языке. Регулярное тестирование с псевдолокализацией и реальными устройствами застает проблемы на ранней стадии. Усилия заранее спасают будущие головные боли и открывают ваше приложение миллионам пользователей по всему миру. Начните с прочной основы интернационализации, а затем расширяйте языки по мере роста вашей пользовательской базы.