Lingo.dev + .stringsdict (Xcode)

Lingo.dev CLI translates Xcode .stringsdict files while preserving pluralization rules, format variations, and iOS plural handling. The CLI automatically applies correct language-specific plural rules, maintains all plist structure and metadata, handles multiple variables in complex strings, ensures proper encoding and character handling, and integrates natively with iOS localization workflows.

Quick Setup

Configure for Xcode stringsdict pluralization files:

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

Reminder: [locale] is a placeholder that should remain in the config literally, as it's replaced with the actual locale during CLI run.

Translate Stringsdict Files

npx lingo.dev@latest i18n

Handles complex iOS pluralization rules while preserving plist structure and format variations.

Pluralization Structure

Basic Plural Forms

<?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>No items</string>
            <key>one</key>
            <string>One item</string>
            <key>other</key>
            <string>%d items</string>
        </dict>
    </dict>
</dict>
</plist>

Complex Plural Rules

<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>No new messages</string>
        <key>one</key>
        <string>One new message</string>
        <key>few</key>
        <string>%d new messages</string>
        <key>many</key>
        <string>%d new messages</string>
        <key>other</key>
        <string>%d new messages</string>
    </dict>
</dict>

Multiple Variables

<key>files_and_folders</key>
<dict>
    <key>NSStringLocalizedFormatKey</key>
    <string>%#@files@ and %#@folders@</string>
    <key>files</key>
    <dict>
        <key>NSStringFormatSpecTypeKey</key>
        <string>NSStringPluralRuleType</string>
        <key>NSStringFormatValueTypeKey</key>
        <string>d</string>
        <key>zero</key>
        <string>no files</string>
        <key>one</key>
        <string>one file</string>
        <key>other</key>
        <string>%d files</string>
    </dict>
    <key>folders</key>
    <dict>
        <key>NSStringFormatSpecTypeKey</key>
        <string>NSStringPluralRuleType</string>
        <key>NSStringFormatValueTypeKey</key>
        <string>d</string>
        <key>zero</key>
        <string>no folders</string>
        <key>one</key>
        <string>one folder</string>
        <key>other</key>
        <string>%d folders</string>
    </dict>
</dict>

Language-Specific Rules

Different languages have unique pluralization rules:

  • English: zero, one, other
  • Russian: zero, one, few, many, other
  • Polish: zero, one, few, many, other
  • Arabic: zero, one, two, few, many, other

The translation engine automatically applies correct rules for each target language.

Advanced Configuration

Multiple Stringsdict Files

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

Lock Format Keys

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