如何在代码中提取由字符串字典文件本地化的参数?
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 <b>2 others</b> 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 个人 对您的帖子发表了评论,然后您可以对其进行第二次扫描。
【讨论】:
以上是关于如何在代码中提取由字符串字典文件本地化的参数?的主要内容,如果未能解决你的问题,请参考以下文章