如何在代码中提取由stringsdict文件本地化的参数?

时间:2015-08-02 03:09:00

标签: ios objective-c cocoa cocoa-touch localization

有没有办法从stringsdict文件中提取本地化的单词以在代码中执行字符串比较?

E.G。

NSStringLocalizedFormatKey%@ and %#@lu_total_users@ commented on your post

可以产生John and 2 others commented on your post.

的输出

2 others部分是根据stringsdict文件中的规则生成的。我想在文本的那一部分添加一些字符串属性(例如粗体字体),以产生如下输出:

  

John和另外2人对您的帖子发表了评论。

这可能吗?

这是我的字符串文件:

<?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>activity.text.new_comment.group</key>
    <dict>
        <key>NSStringLocalizedFormatKey</key>
        <string>%@ and %#@lu_total_users@ commented on your post</string>
        <key>lu_total_users</key>
        <dict>
            <key>NSStringFormatSpecTypeKey</key>
            <string>NSStringPluralRuleType</string>
            <key>NSStringFormatValueTypeKey</key>
            <string>lu</string>
            <key>one</key>
            <string>one other</string>
            <key>other</key>
            <string>%lu others</string>
        </dict>
    </dict>
</dict>
</plist>

2 个答案:

答案 0 :(得分:0)

您可以将该句子拆分为stringsdict文件中的两个规则。看看下面的代码和示例plist文件。

(我尝试使用第二个名称传递第四个参数,并在more键的#34;一个&#34;情况下使用它,但这不适用于我的机器并显示字符串损坏.YMMV。)

在代码中:

int totalUsers = 2; // for example, obviously coming from somewhere else
int secondaryUsers = 0;
NSString *firstName = @"John";
if (totalUsers > 1) {
    secondaryUsers = totalUsers - 1;
}
NSString *commented =  [NSString localizedStringWithFormat:NSLocalizedString(@"COMMENTED", @"Users who commented string"), totalUsers, secondaryUsers, firstName];

在你的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>COMMENTED</key>
        <dict>
            <key>NSStringLocalizedFormatKey</key>
            <string>%1$#@users@</string>
            <key>users</key>
            <dict>
                <key>NSStringFormatSpecTypeKey</key>
                <string>NSStringPluralRuleType</string>
                <key>NSStringFormatValueTypeKey</key>
                <string>d</string>
                <key>one</key>
                <string>%3$@ commented on your post.</string>
                <key>other</key>
                <string>%3$@ and %2$#@more@ commented on your post.</string>
            </dict>
            <key>more</key>
            <dict>
                <key>NSStringFormatSpecTypeKey</key>
                <string>NSStringPluralRuleType</string>
                <key>NSStringFormatValueTypeKey</key>
                <string>d</string>
                <key>other</key>
                <string>%d others</string>
            </dict>
        </dict>
    </dict>
</plist>

答案 1 :(得分:-1)

不理想,但是你可以为复数字符串添加一些分隔符吗?因此,在完成本地化之后,您最终会得到类似的内容 - 约翰和另外2人对您的帖子发表评论,然后您可以执行第二次扫描。