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"]
}