Быстрый способ локализации iOS приложения на Swift

Swift локализация iOS приложения с помощью NSLocalizedString и Storyboard

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

Код с примерами написан на языке программирования Swift. При написании статьи использовался Xcode версии 12.1.

Перед началом

Для демонстрации нами был создан тестовый проект. В роли интерфейса мы выбрали Storyboard. Данный способ поможет локализовать проекты, написанные с помощью фреймворка Uikit. Хотя, даже если проект написан на SwiftUI, вы все равно можете воспользоваться информацией из статьи, просто подключение String-файлов локализации, возможно, будет реализовано иначе.

Создаем проект для примера

Наш тестовый проект имеет один экран в Main.storyboard, который связан с ViewController.swift. Естественно, если у Вас несколько экранов, в которых хочется что-то локализовать, то под каждый нужно будет создать собственный ViewController и связать его с конкретными экраном в storyboard файле. Это нужно для локализации через .string файлы.

Пример связи Storyboard и ViewController

Приступаем к локализации iOS приложения

Допустим, мы хотим локализовать наш заголовок и описание. А также контекстное меню.

Контекстное меню — это небольшое всплывающее окно, которое появляется, когда мы выделяем какой-нибудь текст (вырезать, копировать, вставить). Думаю, все ни раз сталкивались с таким контекстным меню в своем iPhone.

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

Подготовка

В данный момент, судя по скриншоту выше, у нас текст заголовка и описания хранится прямо в Main.storyboard. Для начала нам нужно заполнить текстовое значение наших лейблов через код. Это обязательно для локализации через String файлы.

Поэтому давайте объявим соответствующие переменные во ViewController и свяжем с объектами на экране в Main.storyboard.

Связываем переменные со storyboard

В iOS разработке круто иметь большой монитор. Работать с 13 дюймового MacBook немного больно.

А после статично заполним их каким-нибудь текстом. Естественно, это временно. Ну и проверим результат в эмуляции.

Проверяем связь

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

Завершаем подготовку

Добавляем локализацию

Нам нужно перейти в Info раздел проекта. Поэтому нажимаем на имя проекта слева в углу. Далее, как показано на скриншоте, “переключаем” экран с режима target на project.

Добавляем локализацию в настройках Xcode часть 1

Здесь, в разделе Localization, жмем на плюс.

Добавляем локализацию в настройках Xcode часть 2

Чтобы не покрывать все скриншотами, объясним на словах. После нажатия на плюс перед вами появится список из возможных языков. Выберите русский язык. Далее Xcode спросит вас, для каких storyboard файлов нужно создать зависимости. Здесь выбор зависит от того, какие экраны и в каких storyboard файлах хочется локализовать контент. В нашем случае снимаем галочки со всего, кроме Main.storyboard.

После всех действий у Вас в разделе Localization появится новый язык, а также Xcode создаст локализационный файл внутри Main.storyboard (он как подкатегория выглядит).

Внутри у него будет следующее содержимое, как на скриншоте ниже.

Локализация через storyboard

Ни в коем случае не меняйте ключ (ID элемента) слева, только значения справа .

Считайте это все огромным массивом “ключ — значение”. Слева ключ (уникальный ID элемента), по которому приложение будет получать значение, справа — обычный локализованный текст. За локализацию тут отвечает storyboard, он сам все будет делать “магическим образом”.

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

Для этого, нажмите в Xcode Edit Scheme.

Переходим в Xcode Edit Scheme

После, в разделе Option, установите русский язык.

Запускаем приложение из под русского региона

Есть еще способ, чуть-чуть странный, но рабочий. Запустите эмуляцию какого-нибудь iPhone, сверните свое приложение, перейдите в настройки iPhone и смените язык на русский. Перезапустите эмуляцию (главное эмулированное устройство не меняйте).

В итоге Вас будет ждать приятный сюрприз.

Результат локализации через storyboard

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

Работаем с NSLocalizedString

Но что будет, если элемент не создан с помощью .storyboard файла? Как его локализовать? Например, уведомление перед использованием Face/Touch ID.

Здесь приходят на помощь .string файлы. Давайте создадим такой в нашем проекте и назовем его Localizable, это обязательно.

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

Создаем .string файл

Далее открываем File Inspector и нажимаем Localize.

Открываем File Inspector и нажимаем Localize

После проставляем галочки у русского и английского языка.

Выбираем на какие языки локализировать проект

Теперь переходим в русский .string файл (он появился внутри Localizable.string) и там пишем следующее:

Содержимое русского string файла

"title" = "Заголовок NS";
"description" = "Описание NS";

После дублируем тоже самое в английский .string файл, но русское содержимое меняем на английское.

Содержимое английского string файла

После возвращаемся во ViewController. Раскомментируем участок кода и заменим наш статичный текст в элементах на вызов класса локализации:

NSLocalizedString("", comment: "")

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

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

Прописываем NSLocalizedString во ViewController

Теперь запускаем эмулятор и проверяем.

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

Поздравляем, у Вас все получилось.

Пару советов

Если хотите локализовать изображения, то, с помощью .string файла, Вам нужно лишь менять название элемента, которое вы цепляете из Assets с помощью UIImage(named: «»).

Так как некоторые иностранные слова могут быть в два, а то и три, раза больше (привет финский и немецкий), установите авторегулирование размера шрифта у конкретных элементов.

Совет

Спасибо за внимание, надеемся данная статья была Вам полезна. Если вдруг что-то не получилось или в статье есть ошибка — смело оставляйте комментарии. В случае недопонимания мы постараемся помочь. А в случае с ошибкой модератор призовет программиста-автора и заставит исправить грязное недоразумение.


Локализация iOS приложений


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

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

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *