2012-09-11 13 views
10

ラベルを文字列に設定したい: "ただ購入した:Disguise Kit" しかし、私がテストを実行すると、ラベルは ".just買った:Disguise Kitخخخ"と表示されますか?Xcodeでは、英語+アラビア語をマージしてアラビア語で始まるテキストを表示する方法は?

テキストがアラビア語で始まらない場合は、設定したとおりに表示されます。 どうしたのですか?

誰もこの問題に対処する方法を知っていますか?

+0

これはRTLの問題ですか?あなたはLTRを表示するアラビア語を奨励できますか? –

+0

@JamesWebster私はそうは思わない。それがRTLの問題であれば、アラビア語で始まるこのケースの理由は何ですか? – user1300503

+0

文章はRTLを開始するので(左の見出しが左から始まる)、LTRにスワップして残りの単語を描くように見えます。 –

答えて

30

まず、Cal Hendersonの優れた"Understanding Bidirectional (BIDI) Text in Unicode."を読んでください。

信じるかどうか、UILabelは尋ねたとおりにそれを敷設しています。右から左の文字列(アラビア語で始まる)を指定しました。右から左への表示が開始されます。次に、左から右の英文ストリングを埋め込み、左から右に配置します。それは期間を見て、これはアラビア語の文字列であるため右から左に配置されています(最高でUILabelが示すように)。

あなたが持っていたことは、アラビア語が埋め込まれた左から右の文字列です。つまり、左から右の文字で文字列を開始する必要があります。 2つのオプション:最初に英語を追加するか、LTRモードに文字列の先頭を固定するために、幅ゼロの左から右のマーク(U + 200E、LRM)を使用します。

のObjective-C:

self.label.text = @"\u200eكتب just bought: Disguise Kit."; 

スウィフト:

self.label.text = "\u{200E}كتب just bought: Disguise Kit." 

U + 200Eについての良いニュースは、あなたがそれを表示する前に、安全に、すべてのLTR文字列に追加することができるということです。 LTR言語のローカライズされた文字列の先頭にも安全に配置することができます。重複していると、何も傷つけることはありません。

注意すべきことがいくつかあります:كككでこのことをテストしてはいけません。いつもكتبでテストしてください。そうでなければ、アラビア語が逆向きに配置されているかどうかを知ることはできません。私はそれが大きく違って見えるので、嫌です。

また、テストするとき、Xcodeはアラビア語のレイアウト方法を知らないことに注意してください。したがって、コード内に静的な文字列を書くと、それらはエディタで後方に表示されますが、UIに正しく表示されます。私を狂わせます。

+0

ありがとう、それは私が欲しいものです! – user1300503

+0

Robありがとうございます。この回答を探して30分を費やしました! – Lefteris

+0

私は4時間をHTMLや属性文字列で修正しようとしましたが、これは素晴らしいことです! –

関連する問題