基本的な問題は、次の行です。
[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])
しかし、この呼び出しで「 arabic text 1 」を返すことはできません。常に「 1 arabic text」を返します。
編集:
ありがとう、ホラックス。
最初は、あなたの答えは役に立たないように見えました。しかし、今ではそうです。私はいくつかのことに混乱しました。
1) デバッグ中に NSLog() を使用して NSString 値を出力する。このようにアラビア語のコンテンツで NSString 値を印刷すると、UILabel コンテンツとして配置されたときに表示される方法とは反対の方向に印刷されるようです。
2) テキストに数字と組み合わせたアラビア文字が含まれている場合に、UILabel がコンテンツを複数の行に折り返す方法。具体的には、私の場合、次のことがありました。
「1234567890128 引き換えコード」は、次のようにラップされていました。
"123456789012
アラビア語テキスト8"