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

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

Что должно происходить при изменении исходного сообщения?

Apple указывает, что изменение исходной строки помечает её переводы для проверки. В каталоге различаются строки без перевода (New), строки, требующие внимания (Needs Review), и переведённые строки с зелёной галочкой. Отдельный статус Stale означает, что Xcode больше не может найти ранее переведённую строку в коде. Знакомство с каталогами строк

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

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

Найдите точное сообщение, прежде чем проверять переводы

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

Например, предположим, что на кнопке рабочего стола раньше было написано Open item, а теперь — Open selected items. Нужно проверить, описывает ли каждый перевод открытие текущего выбора, в том числе возможный выбор нескольких элементов. Найти перевод слова Open недостаточно, чтобы ответить на этот вопрос.

Различайте ключ для поиска и отображаемый текст

В Swift можно задать явный статический ключ для поиска и отдельное значение defaultValue. Обычно это текст на языке разработки, который используется, если поиск не дал результата. comment задаёт контекст для переводчика. Если таблица не указана, поиск выполняется в Localizable; если пакет не указан, поиск идёт в основном пакете приложения. Инициализатор строки Swift с явным ключом

Используйте эту иллюстративную запись сообщения, чтобы различать её составляющие. Это условные значения, а не файл каталога или исполняемая программа.

Составляющая До правки После правки
Ключ для поиска selection.open selection.open
Исходный текст на английском Open item Open selected items
Контекст для переводчика Кнопка открывает один элемент Кнопка открывает все элементы текущего выбора
Таблица каталога Localizable Localizable

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

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

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

В Xcode выберите Product > Build, затем выберите нужный каталог в навигаторе проекта. Apple указывает, что при сборке каталоги обновляются в соответствии с изменениями локализуемых строк в коде. Выберите Editor > Assistant, затем нажмите на ключ, чтобы проверить расположение исходного текста. Локализация и вариации текста с помощью каталога строк

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

Проверьте таблицу и пакет, указанные в вызове локализации, особенно если в проекте есть несколько каталогов или модулей. Apple указывает, что для выбора каталога можно передать имя таблицы, а для строк вне основного пакета приложения — соответствующий пакет. Также Apple рекомендует использовать локализуемые API, чтобы Xcode мог обнаруживать пользовательский текст. Подготовка текста приложения к переводу

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

Сравните смысл с помощью таблицы решений для изменений исходного текста

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

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

Пример изменения исходного текста Что проверить Решение о проверке
Open item → Open selected items Область выбора и значение единственного или множественного числа Проверьте, описывает ли перевод по-прежнему всё действие.
Show details → Hide details Направление действия Проверьте, что действие в переводе изменилось соответствующим образом.
Items → Items: Пунктуацию и расположение подписи Оставьте формулировку, только если она по-прежнему подходит по контексту.
Open не изменилось, но используется иначе Не обозначает ли подпись теперь другое действие Проверьте контекст, даже если исходный текст не изменился.

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

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

Если сообщение содержит количество или вариант для конкретного устройства, раскройте эти варианты и проверяйте их, а не только родительскую строку. Apple описывает варианты для множественного числа и устройств в каталогах. В английском для количества могут потребоваться 1 item и 2 items; проверяйте применимые формы для каждого целевого языка, не копируя механически грамматику английского. Локализация и вариации текста с помощью каталога строк

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

Откройте контекстное меню записи и пометьте сомнительный перевод для проверки. Если существующая формулировка прошла проверку и по-прежнему подходит, выберите Mark as Reviewed; в противном случае обновите перевод. Эти действия описаны в руководстве Apple по каталогам строк. Знакомство с каталогами строк

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

Для условного примера с выбором полезная задача для локализатора будет содержать ключ selection.open, изменение Open item на Open selected items и пояснение, что кнопка открывает все выбранные элементы. Так локализатор получит конкретное действие и его область, которые нужно оценить.

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

Проверьте исправленное сообщение в приложении для Mac

После правки протестируйте интерфейс. Выберите Product > Scheme > Edit Scheme, нажмите Run, откройте Options и выберите целевой язык в разделе App Language. Закройте диалоговое окно, выберите место назначения для запуска на Mac и запустите приложение. Apple описывает этот способ проверки локализации через схему. Тестирование локализаций при запуске приложения

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

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

Источники