使用.stringsdict时遇到一些问题。代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>groups-selected</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@groups@</string>
<key>groups</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%d group selected</string>
<key>other</key>
<string>%d groups selected</string>
</dict>
</dict>
<key>friends-online</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@friends@</string>
<key>friends</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%d friend online</string>
<key>other</key>
<string>%d friends online</string>
</dict>
</dict>
<key>points-usage-message</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@points@</string>
<key>points</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%d point will be deducted</string>
<key>other</key>
<string>%d points will be deducted</string>
</dict>
</dict>
</dict>
</plist>
本地化工作在iOS9 +中可以在模拟器和设备上找到,但是对于iOS8,它既不会起作用,也只会得到密钥名称输出,即:points-usage-message
。我在这里做错了什么想法?
答案 0 :(得分:5)
实际上它适用于iOS 8.4。我们也使用.strinsgdict
格式。所以我添加了这段代码:
<key>points-usage-message</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@points@</string>
<key>points</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%d point will be deducted</string>
<key>other</key>
<string>%d points will be deducted</string>
</dict>
</dict>
到我们的文件,它正常工作,当我用这段代码检索它时:
[NSString localizedStringWithFormat:NSLocalizedString(@"points-usage-message", nil), 42];
或swift:
let localizedFormat = NSLocalizedString("points-usage-message", comment: "")
let pointsInfo = String.localizedStringWithFormat(localizedFormat, 42)
请尝试该代码并分享结果。
此外,您还可以尝试检查.strinsgdict
文件目标成员资格和本地化(应设置为某个国家/地区)。
答案 1 :(得分:4)
检查http://maniak-dobrii.com/understanding-ios-internationalization/,特别是说:
的部分“.stringsdict的快速问题:不要忘记为你支持的每个本地化使用相同名称的.strings文件(至少为空)。否则.stringsdict将无法被识别和使用。”
就我而言,我有一个本地化的.stringsdict文件和一个非本地化的.strings文件。 iOS9能够显示正确的翻译,但iOS8失败了
答案 2 :(得分:1)
尝试更改
<string>%#@points@</string>
<key>credits</key>
到
<string>%#@points@</string>
<key>points</key>
为你points-usage-message
字符串。
string
和key
都必须相同。
答案 3 :(得分:1)
另外要注意。 .stringsdict和.strings文件必须位于项目的根目录下。 否则他们找不到。
答案 4 :(得分:0)
我在Xcode 9上遇到了类似的麻烦,我不得不删除我的.stringsdict文件,重新创建它,将其放入根项目文件夹,然后将其添加到目标。