iOS 7复数+阿拉伯语

时间:2014-07-16 09:16:33

标签: ios7 string-formatting arabic pluralize

基本问题是以下一行:

[NSString stringWithFormat:@"باقي للشراء %d", 3];

返回一个形式为" 3 arabic_text "的字符串。

当我写一行时:

[NSString stringWithFormat:@"%d باقي للشراء "];

再次返回一个形式为" 3 阿拉伯语文本"的字符串。

当我写一个创建这样的字符串时:

NSString *digitThree = @"3";
NSString *expressionString = [NSString stringWithFormat:@"باقي للشراء %@", digitThree];

expressionString的值变为带有" 3 阿拉伯语文本"形式的字符串。

但是当我写这样的代码时:

NSString *someChar = @"d";
NSString *expressionString = [NSString stringWithFormat:@"باقي للشراء %@", someChar];

expressionString的值变为带有" 阿拉伯语文字 d"形式的字符串。

这种行为可能与阿拉伯字母表中的数字被接受这一事实有关,但拉丁字母字符不是。

我正在使用iOS7本地化复数功能(本地化属性列表文件部分[此处] [1])。

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>%d days</key>
    <dict>
        <key>NSStringLocalizedFormatKey</key>
        <string>%1$#@num_days@</string>
        <key>num_days</key>
        <dict>
            <key>NSStringFormatSpecTypeKey</key>
            <string>NSStringPluralRuleType</string>

            <key>NSStringFormatValueTypeKey</key>
            <string>d</string>

            <key>one</key>
            <string>يوم %d</string>

            <key>other</key>
            <string>أيام %d</string>
        </dict>
    </dict>




</dict>
</plist>

从代码中我使用它:

[NSString localizedStringWithFormat:NSLocalizedString(@"%d days", @"'%d' denotes the number of days. The expression would, for example, evaluate to: '4 days'"), 1])

但是我永远不会接到这个电话来回复&#34; 阿拉伯语文本 1&#34;它总是返回&#34; 1 阿拉伯语文本&#34 ;

修改

谢谢你,Holax。

起初,你的答案看起来并不像是有用的。但现在我明白了。 我被一些事情搞糊涂了。

1)在调试期间使用NSLog()并打印NSString值。似乎以这种方式打印带有阿拉伯语内容的NSString值会在相反方向上打印它们,而不是将它们作为UILabel内容放置时的显示方式。

2)当文本涉及阿拉伯字符与数字结合时,UILabel将内容包装成多行的方式。具体来说,在我的情况下,我有:

&#34; 1234567890128兑换码&#34;,其中包含:

&#34; 123456789012

阿拉伯语文本 8&#34;

1 个答案:

答案 0 :(得分:1)

通常,在Localizable.string文件中,您可以播放实际的翻译,如:

e.g。 英文

"%d day" = "Expiration: %d days";

然后使用其他语言

"%d day" = "<expiration in days>: %d"

键是相同的,但该值可以将格式化程序保存在不同的位置。


此外,阿拉伯语的方向是RTL,与屏幕上的英语LTR相反,因此您可能需要考虑这个事实,并在您的语言文件,如:

<key>other</key>
<string>%d أيام</string>