Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to prevent automatic right-to-left text direction for Hebrew and Arabic?

In a TextView, when a text starts with a Hebrew letter, the entire text is shown in RTL mode.

The problem is that in my case only the first word is in Hebrew, while the entire sentence is in English, so instead of

 דני went to school

the user sees

                                                  went to school דני

(the first word is in the end of the sentence, when reading in English)

How can I prevent this from happening and force the text to start from the left?

like image 621
Ilya Kogan Avatar asked Jan 12 '15 20:01

Ilya Kogan


2 Answers

Unicode characters are intrisectly LTR or RTL. In most situations, the whole text takes its orientation from the first character. Hebrew character are RTL.

See http://en.wikipedia.org/wiki/Bi-directional_text

Your text starts with a RTL character, and is therefore considered RTL. You can force it to be seen as LTR by using the left-to-right mark, "\u200E".

Starting your text with this special character will tell the layout system the explicit orientation of the whole text. RTL sections will still be considered as such, though, because the characters are explicitly RTL.

Numbers, for example, are not a strong indicator, and therefore don't affect the direction of the section they are placed in. Therefore, numbers between section of different direction can be a problem, and may need explicit indication.

like image 186
njzk2 Avatar answered Nov 15 '22 20:11

njzk2


As alternative you can use android:textDirection="locale", so for devices with LTR locales any string with RTL characters will be displayed properly.

like image 29
Viacheslav Avatar answered Nov 15 '22 19:11

Viacheslav