Достаточно одного формата.В записи NSStringLocalizedFormatKey
можно использовать несколько заполнителей, а для каждого заполнителя - отдельный словарь с правилом множественного числа.Пример:
<?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>apples_and_pears</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@num_apples@ : %#@num_pears@</string>
<key>num_apples</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>zero</key>
<string>no apple</string>
<key>one</key>
<string>1 apple</string>
<key>other</key>
<string>%ld apples</string>
</dict>
<key>num_pears</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>zero</key>
<string>no pear</string>
<key>one</key>
<string>1 pear</string>
<key>other</key>
<string>%ld pears</string>
</dict>
</dict>
</dict>
</plist>
Использование:
let apples = 1
let pears = 3
let format = NSLocalizedString("apples_and_pears", comment: "")
let applesAndPears = String.localizedStringWithFormat(format, apples, pears)
print(applesAndPears) // 1 apple : 3 pears
Это можно комбинировать с позиционными параметрами: если формат изменяется на
<key>NSStringLocalizedFormatKey</key>
<string>%2$#@num_pears@ : %1$#@num_apples@</string>
, тогда вывод становится «3 груши: 1 яблоко ».