ios 使用不带数字的复数字符串

polkgigr  于 2023-03-14  发布在  iOS
关注(0)|答案(4)|浏览(145)

我对.stringsdictdocumentation(滚动到“本地化属性列表文件”)有点困惑。
给定一些文件,我想相应地显示 * 保存文件 * 或保存 * 保存文件 *。我以为下面的方法会起作用,但没有。
代码:

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>

始终显示 * 保存文件 *,无论计数如何。
我哪里做错了?

nfs0ujit

nfs0ujit1#

问题是你的代码缺少保存文件的数量。为了使用stringsdict文件本地化复数行,该行必须有数量变量。所以在它说@"%SaveFiles”的地方,它应该说@"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 Plurals Generator
同样重要的是,您要保留完整的行,以便翻译人员修改短语。不要使用“保存%#@files@”,而是使用整行,以便翻译人员处理“%#@files”。为什么?因为在某些语言中,单词“Save”可能需要根据文件的数量进行组合,或者可能需要出现在数字的另一侧(iidoEe. 3个文件要保存)。永远不要假设英语语法会起作用,让翻译人员翻译完整的行。

rkkpypqq

rkkpypqq2#

如果从NSLocalizedString(@"%Save Files", @"")中删除“%”,则有效

6rqinv9w

6rqinv9w3#

稍后在swift中看到这个的人。是的,你可以使用不带数字的复数,如下所示:

let string = String.localizedStringWithFormat(NSLocalizedString("Save Files", comment: ""), files.count)

这个字符串的输出将是:
文件(一份)
文件(了解更多)

wpx232ag

wpx232ag4#

您在NSLocalizesString中遗漏了%ld

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>

相关问题