2012-09-11 4 views
10

Ich möchte ein Label zu string: "خخخ soeben gekauft: Disguise Kit." aber wenn ich den Test laufen lasse, zeige das Etikett ". Gerade gekauft: Disguise Kit خخخ"?Wie kann in Xcode angezeigt werden, dass Text mit Englisch + Arabisch kombiniert wird und mit Arabisch beginnt?

Wenn der Text nicht mit Arabisch beginnt, wird es angezeigt, was ich eingestellt habe. Was ist das Problem?

Weiß jemand, wie man mit diesem Problem umgeht?

+0

Ist das ein RTL-Problem? Kannst du das Arabische ermutigen, LTR zu zeigen? –

+0

@JamesWebster Ich glaube nicht. wenn es RTL-Problem ist, warum gerade für diesen Fall, der mit arabischem Wort beginnt? – user1300503

+0

Da der Satz mit RTL beginnen wird (ÎÎÎÎ beginnt rechts nach links), dann scheint er zu LTR zu wechseln, um die restlichen Wörter zu zeichnen. –

Antwort

30

Zuerst lesen Sie Cal Henderson ausgezeichnete "Understanding Bidirectional (BIDI) Text in Unicode.".

Ob Sie es glauben oder nicht, UILabel legt es so aus, wie Sie gefragt haben. Sie haben eine Zeichenfolge von rechts nach links angegeben (beginnend in Arabisch). Es beginnt die Anzeige von rechts nach links. Sie haben dann eine von links nach rechts verlaufende englische Zeichenfolge eingebettet, die von links nach rechts angeordnet ist. Dann sieht er die Periode und legt diese von rechts nach links, da dies eine arabische Zeichenfolge ist, die zufällig etwas Englisch enthält (wie am besten UILabel erkennen lässt).

Was Sie haben wollten, ist eine von links nach rechts string mit arabischen eingebettet. Das bedeutet, dass Sie die Zeichenfolge mit Zeichen von links nach rechts beginnen müssen. Zwei Optionen: Fügen Sie etwas Englisch zum Start hinzu oder verwenden Sie die Null-Breite-Markierung von links nach rechts (U + 200E, LRM), um den Anfang der Zeichenfolge im LTR-Modus zu verankern.

Objective-C:

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

Swift:

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

Die gute Nachricht über U + 200E ist, dass Sie sicher, es zu jedem LTR-String hinzufügen können, bevor Sie es anzeigen . Sie können es sogar sicher an den Anfang Ihrer lokalisierten Strings für LTR-Sprachen setzen. Wenn es überflüssig ist, tut es nichts weh.

Ein paar andere Dinge zu beachten: Testen Sie dieses Zeug nie mit ككك, immer mit كتب (wie jeder gute Schüler: D) oder besser noch etwas wie وو. Sonst kann man nicht sagen, wann das Arabisch rückwärts ausgelegt ist. Ich mag اوو, weil es sehr unterschiedlich nach hinten aussieht.

Beachten Sie auch, dass Xcode beim Testen nicht weiß, wie Arabisch formatiert werden soll. Wenn Sie also in Ihrem Code statische Strings schreiben, werden diese im Editor rückwärts angezeigt, sie werden jedoch in der Benutzeroberfläche korrekt angezeigt. Macht mich verrückt.

+0

Vielen Dank, das ist was ich will! – user1300503

+0

Danke Rob. Verbrachte 30 Minuten auf der Suche nach dieser Antwort! – Lefteris

+0

Ich habe 4 Stunden damit verbracht, das mit HTML oder attributierten Saiten zu beheben, das ist unglaublich! –

Verwandte Themen