gpt4 book ai didi

ios - 复数字典总是从 "zero"键返回值

转载 作者:行者123 更新时间:2023-11-29 12:48:45 24 4
gpt4 key购买 nike

我正在使用新的 stringsdict 格式对我的应用程序中的一些字符串进行本地化和复数化。

我读了thisthis供引用,我希望我从 stringsdict 中本地化的字符串被正确抓取。

问题是,我总是看到“零”键的值,但我不知道这里出了什么问题,因为调试本地化方法中的操作非常困难。

让我在这里放一些代码:

1 - 这是我的 Localizable.stringsdict 文件,在同一个项目中也存在一个 Localizable.strings。

    <?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>%i minutes</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%i %#@minutes@</string>
<key>minutes</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>i</string>
<key>one</key>
<string>One minute</string>
<key>two</key>
<string>Two minutes</string>
<key>other</key>
<string>Other minutes</string>
<key>zero</key>
<string>Zero minutes</string>
</dict>
</dict>
</dict>
</plist>

2 - 有一个简单的代码来测试这个字符串

NSString *output = [NSString localizedStringWithFormat:NSLocalizedString(@"%i minutes", nil), 5 ];
NSLog(@"Output: %@", output); // And here, always display "Output: 5 Zero minutes" independently the value I put in the formated string, in this case (five) needs to display "Output: 5 Other minutes"

感谢您的帮助。

最佳答案

错误是

[NSString localizedStringWithFormat:NSLocalizedString(@"%i minutes", nil), 5 ];

仅将一个参数(整数5)传递给字符串格式化函数,但格式扩展为

 %i %#@minutes@

需要两个参数。所以第一个 %i 是由 5 替换,下一个 %#@minutes@ 由未定义的内容替换。一种可能的解决方法是使用“位置参数”:

 %i %1$#@minutes@

第二种格式中的 1$ 部分指定应该从第一个参数。

或者,将第一个 %i 格式移动到可能的替换中。然后 stringsdict 文件看起来像这样:

<plist version="1.0">
<dict>
<key>%i minutes</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@minutes@</string>
<key>minutes</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%i One minute</string>
<key>two</key>
<string>%i Two minutes</string>
<key>other</key>
<string>%i Other minutes</string>
<key>zero</key>
<string>%i Zero minutes</string>
</dict>
</dict>
</dict>
</plist>

但请注意,对于英语,复数规则仅支持“零”和“一”,而不支持“二”,如下所述:https://stackoverflow.com/a/21095611/1187415 .

关于ios - 复数字典总是从 "zero"键返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22965932/

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