Основная проблема заключается в том, что следующая строка:
[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])
Но я никогда не могу заставить этот вызов возвращать "арабский текст 1", он всегда возвращает "1 арабский текст".
ИЗМЕНИТЬ:
Спасибо, Холакс.
Сначала ваш ответ не показался чем-то полезным. Но теперь я вижу, что это так. Меня смутила пара вещей.
1) Использование NSLog() и печать значений NSString во время отладки. Кажется, что печать значений NSString с арабским содержимым таким образом печатает их в противоположном направлении, чем то, как они отображаются при размещении в качестве содержимого UILabel.
2) То, как UILabel оборачивает содержимое в несколько строк, когда текст включает арабские символы в сочетании с цифрами. В частности, в моем случае у меня было:
«1234567890128 код погашения», который был заключен в:
"123456789012
арабский текст 8"