2012-09-11 102 views
10

我想將一個標籤設置爲字符串:「剛購買:僞裝套件。」 但是當我運行測試時,標籤顯示「.just買了:Disguise Kitخخخ」?在Xcode中,如何顯示合併英文+阿拉伯文並以阿拉伯文開頭的文本?

如果文本不是以阿拉伯語開頭,它會顯示爲我設置的內容。 什麼問題?

有人知道如何處理這個問題嗎?

+0

這是RTL問題嗎?你能鼓勵阿拉伯語顯示LTR嗎? –

+0

@JamesWebster我不這麼認爲。如果這是RTL問題,爲什麼只是以阿拉伯詞開頭的這種情況呢? – user1300503

+0

由於句子將開始RTL,(從右開始向左),它似乎交換到LTR來繪製剩餘的單詞。 –

回答

30

首先,讀卡爾亨德森的優秀"Understanding Bidirectional (BIDI) Text in Unicode."

信不信由你,UILabel正在按照你的要求鋪設。您提供了從右到左的字符串(以阿拉伯語開頭)。它開始顯示從右向左的方向。然後嵌入從左到右排列的從左到右的英文字符串。然後它會看到這段時間,並從右到左放置,因爲這是一段阿拉伯語字符串,它恰好有一些英文(正如最好的UILabel可以告訴的那樣)。

你的意思是從左到右的字符串與阿拉伯語嵌入式。這意味着你必須用從左到右的字符開始字符串。有兩種選擇:在開始時添加一些英語,或者使用零寬度的從左到右的標記(U + 200E,LRM)將字符串的開頭固定到LTR模式。

的Objective-C:

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

斯威夫特:

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

約U + 200E的好消息是,你可以放心地把它添加到每一個LTR字符串你顯示它之前。您甚至可以安全地將它放在LTR語言本地化字符串的開頭。如果它是多餘的,它不會傷害任何東西。

其他一些事情要注意:從來沒有用這種東西測試過,總是用كتب測試(像每個好學生:D),或者更好一些,比如الو。否則,你不能分辨阿拉伯語什麼時候倒退。我喜歡الو,因爲它看起來差異很大。

另外,在測試時,請注意Xcode不知道如何佈局阿拉伯語。因此,如果您在代碼中編寫任何靜態字符串,它們將在編輯器中向後顯示,但它們將在UI中正確顯示。讓我發狂。

+0

非常感謝,這就是我想要的! – user1300503

+0

謝謝Rob。花了30分鐘尋找這個答案! – Lefteris

+0

我浪費了4個小時,試圖用html或屬性字符串來解決這個問題,這真是太棒了! –