如何在代码中提取由字符串字典文件本地化的参数?

Posted

技术标签:

【中文标题】如何在代码中提取由字符串字典文件本地化的参数?【英文标题】:How to extract arguments localized by a stringsdict file in code? 【发布时间】:2015-08-02 03:08:59 【问题描述】:

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

例如

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>

【问题讨论】:

不理想,但你能在复数字符串中添加一些分隔符吗?因此,在完成本地化后,您最终可能会得到类似 - John and &lt;b&gt;2 others&lt;/b&gt; commented on your post 的内容,然后您可以对其执行第二次扫描。 谢谢,可以。如果我找不到更好的解决方案,我会试一试。 【参考方案1】:

您可以在 stringsdict 文件中将句子分成两条规则。看看下面的代码和示例 plist 文件。

(我尝试传入带有第二个名称的第四个参数,并将其用于 more 键的“一”情况,但这在我的机器上不起作用并显示字符串损坏。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];

在您的字符串字典文件中:

<?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>

【讨论】:

谢谢@lensovet,但我不太明白你的解决方案。您介意提供一个简单的示例,说明%d others%@ and %@ commented on your post 两个字符串在.strings.stringsdict 文件中的关系吗? 是的,希望明天。 刚刚用实际的示例代码更新了我的答案,抱歉耽搁了……然后想起你为什么想要两个字符串……如果这有帮助,请告诉我。 感谢@lensovet 提供示例,但我想我在这里遗漏了一些东西。然后如何提取本地化词以应用属性(如粗体等)?【参考方案2】:

不理想,但你能在复数字符串中添加一些分隔符吗?因此,在完成本地化之后,您最终可能会得到类似的结果 - John 和 2 个人 对您的帖子发表了评论,然后您可以对其进行第二次扫描。

【讨论】:

以上是关于如何在代码中提取由字符串字典文件本地化的参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何提取本地化字符串资源进行翻译?

EXCEL用VBA提取字符串

提取嵌套字典和列表中的叶值集,不包括无

python cookies提取——从字符串到字典(一行Python代码)

如何从具有由“|”分隔的字段的行中提取数据C++中的字符?

python语言翻译的过程是