我对.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>
无论计数如何,始终显示保存文件。
我做错了什么?
答案 0 :(得分:3)
问题是您的代码缺少保存的文件数。为了使用stringsdict文件来定位多行,该行必须具有数字变量。所以在它说@&#34; %保存文件&#34;时,应该说@&#34; 保存%ld文件&#34;。 %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
同样重要的是,你要留下翻译的完整行来重写这句话。而不是&#34; Save%#@ files @&#34;让他们全程使用&#34;%#@ files&#34;。为什么?因为这个词&#34; Save&#34;某些语言可能需要根据文件的数量进行共轭,或者可能需要在数字的另一侧出现(即3个要保存的文件)。永远不要假设英语语法会起作用,让翻译人员翻译完整的句子。
答案 1 :(得分:1)
如果您从NSLocalizedString(@"%Save Files", @"")
答案 2 :(得分:-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 %#@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>