Lingo.dev + .strings (Xcode)

Lingo.dev CLI переводит файлы .strings для Xcode, сохраняя структуру ключ-значение, комментарии и конвенции локализации iOS. CLI поддерживает старые проекты и рабочие процессы Xcode, сохраняет контекст разработчика и инструкции в комментариях, сохраняет форматные спецификаторы iOS, такие как %@ и %d, корректно обрабатывает кодировки UTF-16 и UTF-8, а также интегрируется со стандартными конвейерами локализации iOS.

Быстрая настройка

Настройка для старых файлов строк Xcode:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de", "ja"]
  },
  "buckets": {
    "xcode-strings": {
      "include": ["Resources/[locale].lproj/Localizable.strings"]
    }
  }
}

Напоминание: [locale] — это заполнитель, который должен оставаться в конфигурации буквально, так как он заменяется на фактический локаль во время выполнения CLI.

Перевод файлов строк

npx lingo.dev@latest i18n

Сохраняет формат файла строк, комментарии разработчиков и специфические для iOS конвенции при переводе значений.

Структура файла строк

Основные пары ключ-значение

/* Основная навигация */
"nav.home" = "Главная";
"nav.settings" = "Настройки";
"nav.profile" = "Профиль";

/* Аутентификация */
"auth.login" = "Войти";
"auth.logout" = "Выйти";
"auth.register" = "Зарегистрироваться";

Форматные спецификаторы

/* Сообщения пользователю с заполнителями */
"welcome.user" = "С возвращением, %@!";
"items.count" = "У вас %d предметов в корзине";
"download.progress" = "Загрузка... %.1f%% завершено";

Многострочные строки

/* Длинный контент */
"terms.agreement" = "Используя это приложение, вы соглашаетесь с нашими условиями использования и политикой конфиденциальности. Пожалуйста, внимательно прочитайте их перед продолжением.";

"help.description" = "Эта функция помогает вам эффективно управлять своими задачами. Вы можете создавать, редактировать и организовывать свои рабочие элементы.";

Особенности iOS

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

/* Отображается на панели вкладок внизу */
"tab.home" = "Главная";

/* Текст кнопки для отправки формы */
"button.submit" = "Отправить";

/* Сообщение об ошибке, когда сеть недоступна */
"error.network" = "Пожалуйста, проверьте ваше интернет-соединение";

Комментарии разработчиков предоставляют контекст для переводчиков.

Специальные символы

/* Строки с кавычками и специальными символами */
"message.quote" = "Она сказала: \"Привет!\"";
"path.file" = "Документы\\МойФайл.txt";
"symbol.copyright" = "© 2024 Название компании";

Правильное экранирование кавычек и обратных слэшей сохранено.

Интеграция с Storyboard

/* Локализации для Storyboard */
"A8K-3L-9X7.text" = "Добро пожаловать";
"B9M-4N-0Y8.placeholder" = "Введите ваше имя";
"C0P-5Q-1Z9.title" = "Настройки";

Ключи, сгенерированные Interface Builder, обрабатываются корректно.

Расширенная конфигурация

Несколько файлов строк

"xcode-strings": {
  "include": [
    "Resources/[locale].lproj/Localizable.strings",
    "Resources/[locale].lproj/InfoPlist.strings"
  ]
}

Блокировка системных ключей

"xcode-strings": {
  "include": ["Resources/[locale].lproj/Localizable.strings"],
  "lockedKeys": ["CFBundleName", "CFBundleDisplayName"]
}