2012-09-11 5 views
10

Voglio impostare un'etichetta alla stringa: "خخخ appena acquistato: Kit travestimento." ma quando eseguo il test, l'etichetta mostra ". È stato appena acquistato: Disguise Kit خخخ"?In Xcode, come visualizzare il testo che unisce inglese + arabo e che inizia con l'arabo?

Se il testo non inizia con l'arabo, verrà visualizzato come impostato. Qual è il problema?

Qualcuno sa come affrontare questo problema?

+0

Si tratta di un problema RTL? Puoi incoraggiare l'arabo a visualizzare LTR? –

+0

@JamesWebster Io non la penso così. se è un problema RTL, perché solo per questo caso che inizia con la parola araba? – user1300503

+0

Poiché la frase inizierà RTL, (خخخ inizia a destra verso sinistra), quindi sembra passare a LTR per disegnare le parole rimanenti. –

risposta

30

Per prima cosa, leggere l'eccellente "Understanding Bidirectional (BIDI) Text in Unicode." di Cal Henderson.

Che ci crediate o no, UILabel stende il modo in cui avete chiesto. Hai fornito una stringa da destra a sinistra (iniziando in arabo). Inizia a visualizzarlo da destra a sinistra. Quindi hai incorporato una stringa inglese da sinistra a destra, che è disposta da sinistra a destra. Quindi vede il periodo e lo espone da destra a sinistra poiché questa è una stringa araba che sembra avere un po 'di inglese (come meglio può dire UILabel).

Quello che intendevi avere è una stringa da sinistra a destra con arabo incorporato. Ciò significa che devi iniziare la stringa con i caratteri da sinistra a destra. Due opzioni: aggiungi un po 'di inglese all'inizio, oppure usa il segno da sinistra a destra a larghezza zero (U + 200E, LRM) per ancorare l'inizio della stringa in modalità LTR.

Objective-C:

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

Swift:

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

La buona notizia di U + 200E è che si può tranquillamente aggiungere a ogni stringa di LTR prima di visualizzare lo . Puoi anche inserirlo in modo sicuro all'inizio delle stringhe localizzate per le lingue LTR. Se è ridondante, non fa male nulla.

Un paio di altre cose da notare: mai testare questa roba con ككك, prova sempre con كتب (come ogni bravo studente: D) o meglio ancora qualcosa come و. Altrimenti non puoi dire quando l'arabo è disposto all'indietro. Mi piace و perché sembra molto diverso all'indietro.

Inoltre, durante il test, si noti che Xcode non sa come impaginare l'arabo. Quindi se scrivi delle stringhe statiche nel tuo codice, verranno visualizzate all'indietro nell'editor, ma verranno visualizzate correttamente nell'interfaccia utente. Mi fa impazzire.

+0

Grazie mille, questo è quello che voglio! – user1300503

+0

Grazie Rob. Abbiamo trascorso 30 minuti alla ricerca di questa risposta! – Lefteris

+0

ho sprecato 4 ore cercando di sistemarlo con html o stringa attribuita, è incredibile! –

Problemi correlati