基本问题是以下一行:
[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;
答案 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>