Skip to main content
AI agent network visualization

Перекладайте каталоги рядків Xcode за лічені секунди

Правильні форми множини відповідно до CLDR. Варіанти для пристроїв збережено. Стани перекладу відстежуються. Ваші файли .xcstrings перекладаються безпосередньо у Вашому IDE.

Переклад каталогів рядків складніший, ніж здається

У Xcode 15 каталоги рядків замінили .strings і .stringsdict єдиним файлом JSON, але складність нікуди не зникла. Для форм множини потрібні правильні категорії CLDR для кожної мови, варіанти для пристроїв (iPhone, iPad і Mac) мають залишатися пов’язаними зі своїми ключами, а через відстеження станів у Xcode одне неправильне поле робить увесь запис недійсним.

Кожна мова потребує власного набору категорій множини CLDR: арабська — усіх шести, японська — лише «other», а російська — чотирьох окремих форм

Варіанти рядків для різних пристроїв (iPhone, iPad, Mac, Apple Watch) мають залишатися правильно пов’язаними зі своїми батьківськими ключами

Xcode відстежує стани перекладу (new, needs_review, translated, stale), а неправильні значення стану призводять до того, що Xcode ігнорує переклади або помилково позначає їх

Під час переходу зі старих форматів .strings/.stringsdict на .xcstrings виникають відмінності форматів, з якими універсальні інструменти не справляються

Джерело (англійська)
Localizable.xcstrings
{
  "sourceLanguage": "en",
  "version": "1.0",
  "strings": {
    "welcome_title": {
      "extractionState": "manual",
      "localizations": {
        "en": {
          "stringUnit": {
            "state": "translated",
            "value": "Welcome to the App"
          }
        }
      }
    },
    "item_count": {
      "localizations": {
        "en": {
          "variations": {
            "plural": {
              "zero": {
                "stringUnit": {
                  "state": "translated",
                  "value": "No items"
                }
              },
              "one": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%lld item"
                }
              },
              "other": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%lld items"
                }
              }
            }
          }
        }
      }
    },
    "device_greeting": {
      "localizations": {
        "en": {
          "variations": {
            "device": {
              "iphone": {
                "stringUnit": {
                  "state": "translated",
                  "value": "Tap to continue"
                }
              },
              "ipad": {
                "stringUnit": {
                  "state": "translated",
                  "value": "Tap or click to continue"
                }
              },
              "mac": {
                "stringUnit": {
                  "state": "translated",
                  "value": "Click to continue"
                }
              }
            }
          }
        }
      }
    }
  }
}
Переклад (німецька)
Localizable.xcstrings (з de)
{
  "sourceLanguage": "en",
  "version": "1.0",
  "strings": {
    "welcome_title": {
      "extractionState": "manual",
      "localizations": {
        "de": {
          "stringUnit": {
            "state": "translated",
            "value": "Willkommen in der App"
          }
        }
      }
    },
    "item_count": {
      "localizations": {
        "de": {
          "variations": {
            "plural": {
              "zero": {
                "stringUnit": {
                  "state": "translated",
                  "value": "Keine Elemente"
                }
              },
              "one": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%lld Element"
                }
              },
              "other": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%lld Elemente"
                }
              }
            }
          }
        }
      }
    },
    "device_greeting": {
      "localizations": {
        "de": {
          "variations": {
            "device": {
              "iphone": {
                "stringUnit": {
                  "state": "translated",
                  "value": "Tippen zum Fortfahren"
                }
              },
              "ipad": {
                "stringUnit": {
                  "state": "translated",
                  "value": "Tippen oder klicken zum Fortfahren"
                }
              },
              "mac": {
                "stringUnit": {
                  "state": "translated",
                  "value": "Klicken zum Fortfahren"
                }
              }
            }
          }
        }
      }
    }
  }
}

Що зберігає i18n Agent

Форми множини

Для кожної цільової мови створюються правильні категорії множини CLDR: від однієї категорії для японської до шести для арабської

Варіанти для пристроїв

Варіанти рядків для iPhone, iPad, Mac і Apple Watch залишаються правильно пов’язаними зі своїми батьківськими ключами

Урахування станів

Стани перекладу (new, needs_review, translated) установлюються правильно, тому процес локалізації в Xcode працює належним чином

Сумісність форматів

Результат повністю сумісний із редактором каталогів рядків Xcode і легко інтегрується як у нові, так і в перенесені проєкти

Працює в усій екосистемі розробки Apple

Каталоги рядків Xcode 15+
Локалізація SwiftUI
UIKit / AppKit
Пакети Swift

Як це працює

How i18n Agent works: Install, Translate, Done
1
2
3
terminal
$translate_filesrc/messages/en.json
 --target["de", "ja", "es"]
Done.3 languages, 142 keys translated.

Без ручного копіювання та вставлення. Без вилучення рядків. Лише перекладені файли.

Спробуйте i18n Agent зараз

Перетягніть сюди файл для перекладу

JSON, YAML, PO, XML, CSV, Markdown, Properties

або натисніть, щоб вибрати

Цільові мови

Реєстрація не потрібнаМиттєвий розрахунок

Поширені запитання

Ви розробник?

Встановіть інструмент CLI та перекладіть свій перший файл за 2 хвилини.

Встановити інструмент CLI

Ви представляєте корпоративну команду?

Досі зв’язані контрактом із постачальником TMS? Обговорімо перехід.