2012-09-11 105 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或属性字符串来解决这个问题,这真是太棒了! –