ラベルを文字列に設定したい:「購入したばかりのخخخ:変装キット」。しかし、テストを実行すると、ラベルに「購入したばかり:変装キットخخخ」と表示されますか?
テキストがアラビア語で始まらない場合は、設定したものとして表示されます。どうしたの?
誰かがこの問題に対処する方法を知っていますか?
まず、Cal Henderson の優れた「Understanding Bidirectional (BIDI) Text in Unicode」を読んでください。.
信じられないUILabel
かもしれませんが、あなたが求めた方法でレイアウトしています。右から左への文字列を指定しました (アラビア語で始まります)。その右から左への表示を開始します。次に、左から右に配置される左から右への英語の文字列を埋め込みました。次に、ピリオドを確認し、右から左に配置します。これは、たまたま英語が含まれているアラビア語の文字列であるためです (最もよくUILabel
わかるように)。
あなたが意図したのは、アラビア語が埋め込まれた左から右の文字列です。つまり、左から右の文字で文字列を開始する必要があります。2 つのオプション: 先頭に英語を追加するか、ゼロ幅の左から右へのマーク (U+200E、LRM) を使用して文字列の先頭を LTR モードに固定します。
目的 C:
self.label.text = @"\u200eكتب just bought: Disguise Kit.";
迅速:
self.label.text = "\u{200E}كتب just bought: Disguise Kit."
U+200E に関する良いニュースは、表示する前にすべての LTR 文字列に安全に追加できることです。LTR 言語のローカライズされた文字列の先頭に安全に配置することもできます。冗長であれば、何も害はありません。
他に注意すべき点がいくつかあります。このようなことは決して ckckck でテストしないでください。常に कتب (すべての優秀な学生のように :D) でテストするか、さらには الو のようなものでテストしてください。そうしないと、アラビア語がいつ逆向きに配置されているかわかりません。後ろから見ると大きく違うように見えるので、私はアロが好きです。
また、テストするときは、Xcode がアラビア語をレイアウトする方法を認識していないことに注意してください。そのため、コードに静的文字列を記述すると、エディタでは逆に表示されますが、UI では正しく表示されます。私を狂わせます。
iOS 10+/macOS 10.12 で追加された便利な関連機能については、 guru_meditator の回答も参照してください。