我对.stringsdict
documentation(滚动到“本地化属性列表文件”)有点困惑。
给定一些文件,我想相应地显示 * 保存文件 * 或保存 * 保存文件 *。我以为下面的方法会起作用,但没有。
代码:
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条答案
按热度按时间nfs0ujit1#
问题是你的代码缺少保存文件的数量。为了使用stringsdict文件本地化复数行,该行必须有数量变量。所以在它说@"%SaveFiles”的地方,它应该说@"Save %ld File(s)"。这%ld是Xcode在运行时理解使用哪个复数规则所需要的数字。
然后,在您的Localizable.stringsdict文件中,您的plist必须如下所示:
使用Localizable.stringsdict生成器/教程可以真正帮助解决此类问题,如下所示:
iOS Stringsdict Plurals Generator
同样重要的是,您要保留完整的行,以便翻译人员修改短语。不要使用“保存%#@files@”,而是使用整行,以便翻译人员处理“%#@files”。为什么?因为在某些语言中,单词“Save”可能需要根据文件的数量进行组合,或者可能需要出现在数字的另一侧(iidoEe. 3个文件要保存)。永远不要假设英语语法会起作用,让翻译人员翻译完整的行。
rkkpypqq2#
如果从
NSLocalizedString(@"%Save Files", @"")
中删除“%”,则有效6rqinv9w3#
稍后在swift中看到这个的人。是的,你可以使用不带数字的复数,如下所示:
这个字符串的输出将是:
文件(一份)
文件(了解更多)
wpx232ag4#
您在
NSLocalizesString
中遗漏了%ld
:plist dict
应为: