Множественное число iOS 7 + арабский язык

Основная проблема заключается в том, что следующая строка:

[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"


person ancajic    schedule 16.07.2014    source источник


Ответы (1)


в общем, в файле Localizable.string вы можете воспроизвести фактический перевод, например:

например на английском языке:

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

затем на другом языке:

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

ключ тот же, но значение может содержать средство форматирования в другом месте.


кроме того, направление арабского языка — RTL, напротив английского языка на экране — LTR, поэтому вам может потребоваться учесть этот факт и учесть его в своем языковом файле, например:

<key>other</key>
<string>%d أيام</string>
person holex    schedule 16.07.2014