Primero, lea la excelente "Understanding Bidirectional (BIDI) Text in Unicode." de Cal Henderson.
Lo creas o no, UILabel
lo está haciendo como lo pediste. Has proporcionado una cadena de derecha a izquierda (comenzando en árabe). Comienza a mostrar ese derecho a la izquierda. Luego incrustó una cadena de inglés de izquierda a derecha, que se muestra de izquierda a derecha. Luego ve el período, y lo establece de derecha a izquierda, ya que es una cadena árabe que simplemente tiene algo de inglés (como mejor puede decirse UILabel
).
Lo que quiso decir es una cadena de izquierda a derecha con incrustado en árabe. Eso significa que debe iniciar la cadena con caracteres de izquierda a derecha. Dos opciones: agregue algo de inglés al inicio, o use la marca de izquierda a derecha de ancho cero (U + 200E, LRM) para anclar el comienzo de la cadena en el modo LTR.
Objective-C:
self.label.text = @"\u200eكتب just bought: Disguise Kit.";
Swift:
self.label.text = "\u{200E}كتب just bought: Disguise Kit."
Las buenas noticias sobre U + 200E es que se puede añadir con seguridad a cada secuencia LTR antes de mostrar que . Incluso puede ponerlo de manera segura al inicio de sus cadenas localizadas para idiomas LTR. Si es redundante, no duele nada.
Un par de otras cosas a tener en cuenta: nunca pruebe esto con ككك, siempre pruebe con كتب (como cualquier buen estudiante: D) o mejor aún algo como الو. De lo contrario, no puede decir cuándo el árabe está tendido hacia atrás. Me gusta porque parece muy diferente al revés.
Además, al realizar pruebas, tenga en cuenta que Xcode no sabe cómo distribuir árabe. Por lo tanto, si escribe cadenas estáticas en su código, se mostrarán al revés en el editor, pero se mostrarán correctamente en la interfaz de usuario. Me vuelve loca.
¿Este es un problema de RTL? ¿Puedes animar al árabe a mostrar LTR? –
@JamesWebster No lo creo. si es un problema de RTL, ¿por qué solo para este caso que comienza con la palabra árabe? – user1300503
Debido a que la oración comenzará RTL, (خخخ comienza a la derecha hacia la izquierda), entonces parece intercambiarse a LTR para dibujar las palabras restantes. –