iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 复数NSLocalizedString中的String参数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将字符串%@翻译为%i sun小时,并进行适当的复数化.

%@包含一天,%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 %@",sunHours,dayString];

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

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

但是根据指南构建字典并没有给出所述结果. (请注意,之后立即给出的示例XML与此字典不匹配.)

可能有一些我误读的东西,(或者可能存在错误),但我无法确切地说明发生了什么.现在,我将离开这个“改变参数顺序将解决你的问题”.

大佬总结

以上是大佬教程为你收集整理的ios – 复数NSLocalizedString中的String参数全部内容,希望文章能够帮你解决ios – 复数NSLocalizedString中的String参数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: