Trước tiên, hãy đọc xuất sắc của Cal Henderson "Understanding Bidirectional (BIDI) Text in Unicode.".
Tin hay không, UILabel
đang đặt nó theo cách bạn đã hỏi. Bạn đã cung cấp chuỗi từ phải sang trái (bắt đầu bằng tiếng Ả Rập). Nó bắt đầu hiển thị từ phải sang trái. Sau đó, bạn nhúng một chuỗi tiếng Anh từ trái sang phải, nó đưa ra từ trái sang phải. Sau đó nó nhìn thấy khoảng thời gian, và đặt ra từ phải sang trái vì đây là một chuỗi tiếng Ả Rập mà chỉ xảy ra để có một số tiếng Anh trong đó (như là tốt nhất UILabel
có thể cho biết).
Điều bạn muốn có là chuỗi từ trái sang phải với tiếng Ả Rập được nhúng. Điều đó có nghĩa là bạn phải bắt đầu chuỗi ký tự từ trái sang phải. Hai tùy chọn: thêm một số tiếng Anh để bắt đầu, hoặc sử dụng đánh dấu trái-phải-phải (U + 200E, LRM) chiều rộng bằng không để neo đầu của chuỗi vào chế độ LTR.
Objective-C:
self.label.text = @"\u200eكتب just bought: Disguise Kit.";
Swift:
self.label.text = "\u{200E}كتب just bought: Disguise Kit."
Các tin tốt về U + 200E là bạn có thể yên tâm bổ sung nó vào mỗi chuỗi LTR trước khi bạn hiển thị nó . Bạn thậm chí có thể đặt nó ngay khi bắt đầu các chuỗi được bản địa hóa của bạn cho các ngôn ngữ LTR. Nếu nó dư thừa, nó không làm tổn thương gì cả.
Một vài điều khác cần lưu ý: không bao giờ thử nghiệm công cụ này với ككك, luôn kiểm tra với كتب (giống như mọi sinh viên giỏi: D) hoặc tốt hơn nhưng giống như الو. Nếu không, bạn không thể biết khi nào tiếng Ả Rập được đặt ra phía sau. Tôi thích الو vì nó trông cực kỳ khác nhau về phía sau.
Ngoài ra, khi thử nghiệm, lưu ý rằng Xcode không biết cách bố cục tiếng Ả Rập. Vì vậy, nếu bạn viết bất kỳ chuỗi tĩnh nào trong mã của mình, chúng sẽ được hiển thị ngược trong trình chỉnh sửa, nhưng chúng sẽ hiển thị chính xác trong giao diện người dùng. Làm tôi phát điên.
Nguồn
2012-09-28 02:52:39
Đây có phải là sự cố RTL không? Bạn có thể khuyến khích người Ả Rập để hiển thị LTR? –
@JamesWebster Tôi không nghĩ vậy. nếu đó là vấn đề RTL, tại sao chỉ cho trường hợp này bắt đầu bằng từ tiếng Ả Rập? – user1300503
Bởi vì câu sẽ bắt đầu RTL, (خخخ bắt đầu từ bên phải sang trái), sau đó nó xuất hiện để hoán đổi thành LTR để vẽ các từ còn lại. –