2014-02-14 1 views
3

Я немного смущен .stringsdictdocumentation (перейдите к «Файл списка локализованных свойств»).Использование множественных строк без номера

Учитывая количество файлов, я хочу, чтобы показать Сохранить файл или сохранить Сохранить файлы соответственно. Я думал, что следующее будет работать, но нет.

В коде:

NSString *string = [NSString localizedStringWithFormat:NSLocalizedString(@"%Save Files", @""), (long)files.count]; 

В Localizable.stringsdict:

<key>Save Files</key> 
<dict> 
    <key>NSStringLocalizedFormatKey</key> 
    <string>Save %#@[email protected]</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> 

Всегда показывает Сохранить файлы, независимо от счета.

Что я делаю неправильно?

ответ

-1

Вы пропустили %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 %#@[email protected]</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> 
2

Проблема заключается в том, что ваш код не хватает количества файлов, сохраненных. Для того, чтобы множественная строка была локализована с использованием файла stringsdict, линия ДОЛЖНА иметь числовые переменные. Итак, где он говорит @ "% Сохранить Файлы", он должен сказать @ "Сохранить% ld Файл (ы)". Это% ld - это число, необходимое Xcode для понимания того, какое правило множественности использовать во время выполнения.

Затем в вашем Localizable.stringsdict подаете PLIST должен выглядеть следующим образом:

<key>Save %ld File(s)</key> 
<dict> 
    <key>NSStringLocalizedFormatKey</key> 
    <string>%#@[email protected]</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 Plurals Generator

Также важно оставить в качестве завершенных строк переводчик, чтобы переделать фразу. Вместо «Сохранить% # @ files @» дать им всю строку для работы с «% # @ files». Зачем? Поскольку слово «Сохранить» на некоторых языках может быть сопряжено в зависимости от количества файлов или может появиться на другой стороне номера (т. Е. 3 файла для сохранения). Никогда не предполагайте, что грамматика английского языка будет работать, и пусть переводчики переводят полные строки.

+0

Есть несколько вещей, которые вы упоминающие, которые не обязательно являются правильными. Во-первых: вам не нужно иметь «% ld» в вашем ключе, я часто использую такие клавиши, как «TASK_EDIT_BUTTON», и он работает нормально. Вторая: Ваша точка с грамматикой. Вы правы, что, возможно, переводчик имеет более легкую работу, если он получает целую строку во множественном числе. Но вам не нужно делать так, чтобы иметь правильную грамматику на всех языках. Вы можете изменить LocalizedFormatKey с языка на язык. –

1

Works, если удалить «%» от NSLocalizedString(@"%Save Files", @"")