.stringsdict在iOS8中不起作用

时间:2016-01-29 13:20:14

标签: ios swift

使用.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。我在这里做错了什么想法?

5 个答案:

答案 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字符串。 stringkey都必须相同。

答案 3 :(得分:1)

另外要注意。 .stringsdict和.strings文件必须位于项目的根目录下。 否则他们找不到。

答案 4 :(得分:0)

我在Xcode 9上遇到了类似的麻烦,我不得不删除我的.stringsdict文件,重新创建它,将其放入根项目文件夹,然后将其添加到目标。