基本问题是以下行:
[NSString stringWithFormat:@"باقي للشراء %d", 3];
返回格式为“3 arabic_text ”的字符串。
当我写一行时:
[NSString stringWithFormat:@"%d باقي للشراء "];
再次返回一个格式为“3 arabic text ”的字符串。
当我写一个创建这样的字符串时:
NSString *digitThree = @"3";
NSString *expressionString = [NSString stringWithFormat:@"باقي للشراء %@", digitThree];
expressionString
的值变成了“3 个阿拉伯文本”形式的字符串。
但是当我写这样的代码时:
NSString *someChar = @"d";
NSString *expressionString = [NSString stringWithFormat:@"باقي للشراء %@", someChar];
expressionString
的值变成了一个形式为“ arabic text 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])
但我永远无法得到这个返回“阿拉伯文本1”的调用,它总是返回“1阿拉伯文本”。
编辑:
谢谢你,霍拉克斯。
起初,您的答案似乎没什么用。但现在我明白了。我对几件事感到困惑。
1) 在调试期间使用 NSLog() 并打印 NSString 值。似乎以这种方式打印带有阿拉伯语内容的 NSString 值会以与将它们作为 UILabel 内容放置时的显示方式相反的方向打印它们。
2)当文本涉及阿拉伯字符与数字结合时,UILabel 将内容包装成多行的方式。具体来说,就我而言,我有:
“1234567890128兑换码”,被包装成:
"123456789012
阿拉伯文字8"