Lingo.dev + .stringsdict (Xcode)

Lingo.dev CLI переводит файлы .stringsdict для Xcode, сохраняя правила множественного числа, вариации форматов и обработку множественного числа в iOS. CLI автоматически применяет правильные языковые правила множественного числа, сохраняет всю структуру plist и метаданные, обрабатывает несколько переменных в сложных строках, обеспечивает правильное кодирование и обработку символов, а также интегрируется с рабочими процессами локализации iOS.

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

Настройка для файлов множественного числа stringsdict в Xcode:

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

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

Перевод файлов Stringsdict

npx lingo.dev@latest i18n

Обрабатывает сложные правила множественного числа iOS, сохраняя структуру plist и вариации форматов.

Структура множественного числа

Основные формы множественного числа

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>items_count</key>
    <dict>
        <key>NSStringLocalizedFormatKey</key>
        <string>%#@items@</string>
        <key>items</key>
        <dict>
            <key>NSStringFormatSpecTypeKey</key>
            <string>NSStringPluralRuleType</string>
            <key>NSStringFormatValueTypeKey</key>
            <string>d</string>
            <key>zero</key>
            <string>Нет элементов</string>
            <key>one</key>
            <string>Один элемент</string>
            <key>other</key>
            <string>%d элементов</string>
        </dict>
    </dict>
</dict>
</plist>

Сложные правила множественного числа

<key>message_count</key>
<dict>
    <key>NSStringLocalizedFormatKey</key>
    <string>%#@messages@</string>
    <key>messages</key>
    <dict>
        <key>NSStringFormatSpecTypeKey</key>
        <string>NSStringPluralRuleType</string>
        <key>NSStringFormatValueTypeKey</key>
        <string>d</string>
        <key>zero</key>
        <string>Нет новых сообщений</string>
        <key>one</key>
        <string>Одно новое сообщение</string>
        <key>few</key>
        <string>%d новых сообщения</string>
        <key>many</key>
        <string>%d новых сообщений</string>
        <key>other</key>
        <string>%d новых сообщений</string>
    </dict>
</dict>

Несколько переменных

<key>files_and_folders</key>
<dict>
    <key>NSStringLocalizedFormatKey</key>
    <string>%#@files@ и %#@folders@</string>
    <key>files</key>
    <dict>
        <key>NSStringFormatSpecTypeKey</key>
        <string>NSStringPluralRuleType</string>
        <key>NSStringFormatValueTypeKey</key>
        <string>d</string>
        <key>zero</key>
        <string>нет файлов</string>
        <key>one</key>
        <string>один файл</string>
        <key>other</key>
        <string>%d файлов</string>
    </dict>
    <key>folders</key>
    <dict>
        <key>NSStringFormatSpecTypeKey</key>
        <string>NSStringPluralRuleType</string>
        <key>NSStringFormatValueTypeKey</key>
        <string>d</string>
        <key>zero</key>
        <string>нет папок</string>
        <key>one</key>
        <string>одна папка</string>
        <key>other</key>
        <string>%d папок</string>
    </dict>
</dict>

Языковые правила

Разные языки имеют уникальные правила образования множественного числа:

  • Английский: zero, one, other
  • Русский: zero, one, few, many, other
  • Польский: zero, one, few, many, other
  • Арабский: zero, one, two, few, many, other

Система перевода автоматически применяет правильные правила для каждого целевого языка.

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

Несколько файлов Stringsdict

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

Блокировка ключей формата

"xcode-stringsdict": {
  "include": ["Resources/[locale].lproj/Localizable.stringsdict"],
  "lockedKeys": ["NSStringLocalizedFormatKey", "NSStringFormatSpecTypeKey"]
}