В SwiftUI-тексте остались русские надписи, а английская версия не появляется?
Быстрее всего перенести видимые фразы в String Catalog, добавить английский язык в локализацию проекта и проверить оба варианта в запущенном приложении.

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

Последняя проверка: 26 сентября 2026 года. Сведения о локализации и доступности версий сверены с документацией Apple по String Catalog и примечаниями к выпуску Xcode 27.2. Упоминание Xcode 27.2 относится к Beta: не считайте функции этой предварительной версии доступными во всех стабильных выпусках.

Сначала определите, какие строки действительно нужно переводить

Если вы делаете двуязычное приложение для iOS 27, начните с надписей, которые видит пользователь: названий кнопок, заголовков, подсказок, сообщений об ошибках и пустых состояний. Для первого результата хватит небольшого экрана. Переводить сразу каждое изображение, описание проекта и тестовое сообщение не требуется.

Для учебного приложения со списком заданий это могут быть заголовок «Мои задания», кнопка добавления, сообщение «Пока нет заданий» и подтверждение удаления. Сначала составьте список таких фраз. Так вы не перепутаете интерфейс с данными, которые случайно похожи на текст.

Не переводите автоматически:

  • значения, введённые пользователем;
  • имена файлов, идентификаторы и названия переменных;
  • данные, полученные от сервера или из учебного набора;
  • отладочные сообщения, не предназначенные для пользователя.

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

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

Для первого экрана перенесите текст в String Catalog

String Catalog — это каталог строк проекта, где Xcode хранит исходный текст и его варианты для других языков. В актуальной документации Apple его файл имеет расширение .xcstrings. Это не отдельный экран приложения и не готовый переводчик: каталог помогает организовать локализуемые записи и их варианты.

Обычный SwiftUI-текст, написанный прямо как видимая надпись, Xcode может распознать как локализуемый при сборке. Но автоматическое извлечение не означает, что редактор поймёт любой способ, которым текст оказался в коде. Подробности и ограничения описаны в документации Apple о String Catalog.

Для первого экрана действуйте так:

  1. Найдите строки, которые пользователь увидит на экране, и запишите, где они находятся.
  2. В настройках проекта добавьте нужный язык локализации. Названия и расположение элементов интерфейса Xcode могут меняться; ориентируйтесь на документацию для установленной версии, а не на инструкцию со скриншотами от другой сборки.
  3. Используйте текст в форме, которую Xcode распознаёт для локализации. Например, SwiftUI-текстовый литерал или явный вызов String(localized:) для строки, которую вы формируете отдельно.
  4. Соберите проект, затем откройте String Catalog и проверьте, появились ли нужные исходные фразы и языковые варианты.
  5. Заполните перевод, повторите сборку и запустите приложение с другим языком.

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

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

Если надписи уже разбросаны по SwiftUI-коду, устраните причину пропусков

Проверьте, как именно строка объявлена. Если она находится в переменной, передаётся через собственный компонент или собирается из нескольких фрагментов, Xcode может не извлечь её так, как извлёк бы обычный текстовый литерал. Также каталог не должен автоматически превращать в перевод всё содержимое проекта: строка может быть техническим значением или данными, а не пользовательским интерфейсом.

Вместо склейки переведённых частей:

Text(prefix + name + suffix)

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

Для текста, который создаётся в отдельном свойстве или функции, используйте явное локализуемое объявление, например String(localized:), если оно соответствует контексту. Затем выполните сборку и проверьте, добавилась ли запись в каталог. Если Xcode её не показывает, выясните, откуда пришла строка и распознаётся ли выбранный API, а не вводите перевод в случайный файл вручную.

Плюсы такого перехода:

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

Ограничения тоже есть:

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

Для проектных настроек и локализуемых ресурсов сверяйте поведение со справкой Apple о многоязычных приложениях. Не делайте вывод «строка в файле есть — значит, всё работает»: важно подтвердить и запись, и отображение на экране.

Для чисел и переменных задавайте целое сообщение, а не набор обрывков

Представьте экран списка: «Найдено 1 задание» и «Найдено 5 заданий». Если написать одно слово, а затем вручную приклеить число и окончание, получится хрупкая конструкция. В другом языке грамматическая форма может зависеть от числа, а порядок слов — отличаться от русского. Даже в пределах одного языка одна форма множественного числа подходит не каждому количеству.

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

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

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

Для группового проекта подготовьте строки к передаче

Если перевод делает другой участник команды, не отправляйте ему только список фраз без пояснений. Одна и та же короткая надпись может означать команду, статус или заголовок. Запишите экран, элемент интерфейса и действие, при котором появляется фраза. Если есть ограничение по ширине или текст должен оставаться коротким, отметьте это отдельно.

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

Перед передачей проверьте:

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

Импортированный перевод — это материал для проверки, а не автоматическое подтверждение качества. Запустите приложение, посмотрите на реальные экраны и попросите участника команды проверить смысл. В учебном проекте полезно хранить список неготовых переводов отдельно, чтобы черновая фраза не выглядела окончательной.

Если своего Mac нет, разделите подготовку и проверку

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

Но редактирование проекта в Xcode, сборка и запуск SwiftUI-приложения требуют доступной среды Mac с совместимой версией Xcode. Актуальные требования проверяйте на официальной странице системных требований Xcode: требования зависят от версии, поэтому не переносите выводы о совместимости с одной сборки на другую.

Выберите маршрут по требованиям курса:

  • Если нужно только подготовить переводы и описать логику, начните с плана строк и контекста, а сборку выполните позже на доступном Mac.
  • Если нужно сдать собранный проект и показать переключение языка, заранее договоритесь о лабораторном Mac или другом совместимом компьютере.
  • Если доступ к личному Mac невозможен, а задание требует работы именно в Xcode, рассмотрите удалённый Mac. Проверьте, что подключение позволяет открыть проект и увидеть результат запуска.
  • Если сеть нестабильна или задание требует подключить физическое устройство и проверить его напрямую, уточните у преподавателя, подойдёт ли удалённая среда. Не считайте её заменой любого физического теста.

Здесь полезно разделить два маршрута, а не выбирать устройство по общему совету:

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

Разницу между подготовкой к iOS-разработке и задачами, которым действительно нужен Xcode, можно разобрать через материалы MACCOME о работе с Mac. Это поможет заранее определить, какие части курса вы можете выполнить на своём компьютере, а какие лучше оставить для среды Mac.

Ответы на частые вопросы о двуязычном проекте

Как добавить русский и английский интерфейс в приложение на SwiftUI?

Добавьте нужные языки в локализацию проекта и используйте для видимых надписей локализуемые строки: например, текстовые литералы SwiftUI или String(localized:). Затем соберите проект и проверьте записи в String Catalog. Запустите приложение с каждым языком. Не начинайте с перевода всех ресурсов: сначала доведите до результата один экран.

Почему строка из кода не появилась в String Catalog?

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

Как проверить переключение языка в приложении?

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

Можно ли учиться локализации SwiftUI без своего Mac?

На Windows или школьном компьютере можно изучить принципы перевода, подготовить словарь и продумать контекст строк. Но для редактирования проекта в Xcode, его сборки и проверки результата потребуется доступ к совместимому Mac. Если курс требует запуска приложения, заранее договоритесь о Mac или оцените вариант удалённого доступа.

Перед сдачей проверьте интерфейс по условиям курса

Не подтверждайте готовность только по тому, что String Catalog заполнен. Выберите каждый поддерживаемый язык в настройках запуска схемы и откройте основные экраны. Официальные рекомендации Apple по проверке локализаций при запуске приложения объясняют, почему важна именно проверка в работающем приложении.

Проверьте проект перед отправкой:

  • [ ] На языке по умолчанию все кнопки, заголовки и подсказки отображаются ожидаемо.
  • [ ] При запуске с другим языком переведены те же элементы, а исходный текст не остался случайно на экране.
  • [ ] Длинные фразы не перекрывают соседние элементы и не обрезаются.
  • [ ] Сообщение с числом или переменной сохраняет смысл при изменении значения.
  • [ ] Пустое состояние, ошибка и подтверждение действия тоже проверены.
  • [ ] После импорта переводов проект собирается, а используемые языки указаны корректно.
  • [ ] Участник команды может понять, где появляется каждая строка и кто отвечает за её проверку.

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

Для учебного проекта текущий Windows-компьютер или школьная машина подходят для написания плана и подготовки текста, но не дают прямого доступа к Xcode и проверке iOS-сборки. У такого маршрута есть три ограничения: среду может быть нельзя установить, запуск приложения проверить не получится, а передачу проекта придётся согласовать с владельцем Mac. Если нужно выполнить эти этапы без покупки компьютера, аренда удалённого Mac у MACCOME даст доступ к Mac-среде для работы с Xcode; при этом качество проверки всё равно зависит от сети, а физическое устройство может потребоваться отдельно. Сначала посмотрите варианты доступа к Mac через MACCOME, затем сопоставьте срок проекта с тем, сколько времени вам действительно нужно для сборки и приёмки.