gpt4 book ai didi

ios - 复数 NSLocalizedString 中的字符串参数

转载 作者:可可西里 更新时间:2023-11-01 05:11:30 26 4
gpt4 key购买 nike

我想翻译字符串 %@ there are up to %i sun hours 并使用适当的复数形式。

%@ 包含一天,%i 太阳时数。

这是我的 Localizable.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>%@ there are up to %i sun hours</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@hours@</string>
<key>hours</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>i</string>
<key>zero</key>
<string>%@ there are no sun hours</string>
<key>one</key>
<string>There is one sun hour %@ </string>
<key>other</key>
<string>%@ there are up to %i sun hours</string>
</dict>
</dict>
</dict>
</plist>

我是这样调用它的:

[NSString stringWithFormat:NSLocalizedString(@"%@ there are up to %i sun hours", nil), dayString, sunHours];

无论我将什么 NSInteger 作为第二个参数传入,翻译将始终使用“其他”模板。我将其缩小到 NSStringLocalizedFormatKey 是错误的,当我使用像 %@ %#@hours@ 这样的键时它正在工作。

不过,我希望字符串参数成为本地化的一部分。有办法做到这一点吗?

最佳答案

根据我所做的实验,您需要更改参数的顺序。似乎只有第一个可以作为替换规则的控制值。

这本词典

<key>%i hours %@</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@hours@</string>
<key>hours</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>i</string>
<key>zero</key>
<string>%2$@ there are no sun hours</string>
<key>one</key>
<string>There is one sun hour %2$@ </string>
<key>other</key>
<string>%2$@ there are up to %1$d sun hours</string>
</dict>
</dict>

结合

[NSString stringWithFormat:NSLocalizedString(@"%i hours %@", nil), sunHours, dayString];

为我产生了预期的结果。请注意,我已将参数索引添加到替换字符串中,以便正确放置值。

看起来文档在描述此功能时过于雄心勃勃。给出的例子in the document titled "OS X 10.9 Release Notes" (尽管该链接适用于 iOS)例如,暗示您应该能够打开第二个参数:

We're allowing the recursive formatting by applying the entire argument list to each substituted format specifier.

@"%d in %d files are selected" = @"%2$#@d_in_d_files_are_selected@"

The configuration dictionary can contain

"d_in_d_files_are_selected" = {

"NSStringFormatSpecTypeKey" = "NSStringPluralRuleType"; // plural type
"NSStringFormatValueTypeKey" = "d"; // int argument

"zero" = "There is no file";
"one" = "There is a file, and %1$#@it_is_selected@";
"other" = "%1$d in %2$d files are selected";
};

但是根据那里的指南构建字典并没有给出规定的结果。 (请注意,紧随其后给出的示例 XML 与该词典不匹配。)

我可能误读了某些内容(或者可能存在错误),但我无法准确判断出到底发生了什么。现在,我将其保留为“更改参数顺序将解决您的问题”。

关于ios - 复数 NSLocalizedString 中的字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32320741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com