2012-09-11 29 views
10

Quiero establecer una etiqueta para la cadena: "خخخ acaba de comprar: Disguise Kit". pero cuando ejecuto la prueba, la etiqueta muestra ".just compró: Disguise Kit خخخ"?En Xcode, ¿cómo mostrar texto combinando inglés + árabe y comenzando con árabe?

Si el texto no comienza en árabe, se mostrará como lo que configuré. ¿Cuál es el problema?

¿Alguien sabe cómo resolver este problema?

+0

¿Este es un problema de RTL? ¿Puedes animar al árabe a mostrar LTR? –

+0

@JamesWebster No lo creo. si es un problema de RTL, ¿por qué solo para este caso que comienza con la palabra árabe? – user1300503

+0

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. –

Respuesta

30

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.

+0

¡Muchas gracias, eso es lo que quiero! – user1300503

+0

Gracias Rob. Pasé 30 minutos buscando esta respuesta! – Lefteris

+0

perdí 4 horas tratando de arreglar eso con html o string atribuido, ¡esto es increíble! –

Cuestiones relacionadas