HTML5   发布时间:2022-04-27  发布网站:大佬教程  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];

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

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

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

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

大佬总结

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

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

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