iOS. Множественность. Stringdict с форматом, содержащим 2 аргумента типа int

Мой вопрос похож на Как чтобы добавить обычные строковые заполнители к переведенному множественному числу .stringdict в swift ios, но я пытаюсь понять, можно ли передать 2 параметра int в strings dict.

Скажите, если я хочу перевести что-то вроде:

1 apple : 3 pears
2 apples : 1 pear

Можно ли сделать это в одной строке локализованного формата, например:

let apples = 1
let pears = 3
let applesAndPears = String.localizedStringWithFormat(<format>, apples, pears)
print(applesAndPears)

или я должен объединить их отдельно?


person iur    schedule 18.04.2019    source источник


Ответы (1)


Достаточно одного формата. Вы можете использовать несколько заполнителей в записи 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 яблоко».

person Martin R    schedule 18.04.2019
comment
Могу ли я также использовать $1, $2, ..., чтобы при необходимости иметь возможность менять местами параметры для других языков? Как бы это выглядело? Или мне нужно поменять форматы в этом случае? EN: %#@num_apples@ : %#@num_pears@ -› FR: %#@num_pears@ : %#@num_apples@ - person iur; 19.04.2019