2012-09-11 17 views
10

Chcę ustawić etykietę do napisu: "خخخ właśnie kupiłem: Disguise Kit." , ale kiedy przeprowadzę test, etykieta pokazuje ".just kupił: Disguise Kit خخخ"?W Xcode, jak wyświetlić tekst łączący angielski + arabski i zaczynający się od arabskiego?

Jeśli tekst nie zaczyna się od arabskiego, będzie wyświetlany jako ustawiony. W czym problem?

Czy ktoś wie, jak sobie z tym poradzić?

+0

Czy to jest problem z RTL? Czy możesz zachęcić Arabów do wyświetlania LTR? –

+0

@JamesWebster Nie sądzę. jeśli jest to problem z RTL, dlaczego akurat ten przypadek zaczyna się od arabskiego słowa? – user1300503

+0

Ponieważ zdanie rozpocznie się RTL, (خخخ rozpoczyna się od prawej strony w lewo), wydaje się, że zamienia się na LTR, aby narysować pozostałe słowa. –

Odpowiedz

30

Najpierw przeczytaj znakomitą wersję Cal Henderson "Understanding Bidirectional (BIDI) Text in Unicode.".

Wierzcie lub nie, UILabel układa go tak, jak prosiliście. Podałeś ciąg od prawej do lewej (zaczynając od arabskiego). Zaczyna wyświetlać to od prawej do lewej. Następnie osadzono angielski ciąg od lewej do prawej strony, który układa się od lewej do prawej. Następnie widzi ten okres i określa to od prawej do lewej, ponieważ jest to arabski ciąg znaków, w którym po prostu występuje jakiś angielski (jak najlepiej może powiedzieć UILabel).

Co masz zamiar mieć to ciąg od lewej do prawej z arabskim osadzonym. Oznacza to, że musisz rozpocząć ciąg znaków od lewej do prawej. Dwie opcje: dodaj trochę angielskiego na początek lub użyj znaku zerowej szerokości od lewej do prawej (U + 200E, LRM), aby zakotwiczyć początek napisu w trybie LTR.

Objective-C:

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

Swift:

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

Dobrą wiadomością o U + 200E jest to, że można bezpiecznie go dodać do każdej struny LTR zanim go wyświetlić . Możesz nawet bezpiecznie umieścić go na początku swoich zlokalizowanych ciągów dla języków LTR. Jeśli jest zbędny, nic nie boli.

Kilka innych rzeczy do zapamiętania: nigdy nie testuj tego za pomocą ككك, zawsze testuj z كتب (jak każdy dobry uczeń: D) lub lepiej jeszcze coś jak الو. W przeciwnym razie nie można powiedzieć, kiedy język arabski jest rozłożony do tyłu. Lubię الو, ponieważ wygląda bardzo różnie do tyłu.

Ponadto podczas testowania należy pamiętać, że Xcode nie wie, jak rozplanować język arabski. Jeśli więc napiszesz w swoim kodzie statyczne ciągi znaków, będą one wyświetlane w edytorze wstecz, ale będą wyświetlane poprawnie w interfejsie. Doprowadza mnie do szaleństwa.

+0

Wielkie dzięki, właśnie tego chcę! – user1300503

+0

Dziękuję Rob. Spędziłem 30 minut szukając tej odpowiedzi! – Lefteris

+0

zmarnowałem 4 godziny próbując naprawić to za pomocą html lub przypisanego ciągu, to jest niesamowite! –

Powiązane problemy