Использование множественных строк без номера
Я немного смущен .stringsdict
документация (выделите "Файл списка локализованных свойств").
Учитывая количество файлов, я хочу показать " Сохранить файл" или " Сохранить файлы соответственно". Я думал, что следующее будет работать, но не работает.
В коде:
NSString *string = [NSString localizedStringWithFormat:NSLocalizedString(@"%Save Files", @""), (long)files.count];
В Localizable.stringsdict
:
<key>Save Files</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Save %#@files@</string>
<key>files</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>File</string>
<key>other</key>
<string>Files</string>
</dict>
</dict>
Всегда показывает Сохранить файлы, независимо от количества.
Что я делаю неправильно?
4 ответа
Проблема в том, что вашему коду не хватает числа сохраненных файлов. Чтобы локализовать множественную строку с использованием файла stringsdict, строка ДОЛЖНА иметь числовые переменные. Так что там, где написано @ "% Save Files", должно быть написано @ "Save%ld File (s)". Это%ld - это число, требуемое Xcode, чтобы понять, какое правило множественного числа использовать во время выполнения.
Затем в вашем файле Localizable.stringsdict ваш plist должен выглядеть так:
<key>Save %ld File(s)</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@files@</string>
<key>files</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>Save %ld File</string>
<key>other</key>
<string>Save %ld Files</string>
</dict>
</dict>
С такими проблемами действительно можно помочь, используя генератор / учебник Localizable.stringsdict, подобный этому:
Генератор множественных чисел iOS Stringsdict
Также важно, чтобы вы оставили переводчику целые строки для переделки фразы. Вместо "Сохранить%#@files@" дайте им целую строку для работы с "%#@files". Зачем? Поскольку слово "Сохранить" в некоторых языках может потребоваться сопряжение в зависимости от количества файлов или может появиться на другой стороне числа (т.е. 3 файла для сохранения). Никогда не предполагайте, что английская грамматика будет работать, и пусть переводчики переводят полные строки.
Работает, если вы удалите "%" из NSLocalizedString(@"%Save Files", @"")
Для тех, кто посмотрит на это позже в Swift. Да, вы можете использовать множественное число без числа, например:
let string = String.localizedStringWithFormat(NSLocalizedString("Save Files", comment: ""), files.count)
вывод этой строки будет:
Файл (для одного)
Файлы (подробнее)
Вы пропустили %ld
внутри NSLocalizesString
:
NSString *string = [NSString localizedStringWithFormat:NSLocalizedString(@"%ld Save Files", nil), (long)files.count];
plist dict
должно быть:
<key>%ld Save Files</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%ld Save %#@files@</string>
<key>files</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>File</string>
<key>other</key>
<string>Files</string>
</dict>
</dict>