[안드로이드] 아랍어와 다른 언어가 섞인 문장을 TextView로 띄우기

한 줄 요약 : 아랍어가 등장하는 TextView의 텍스트 가장 앞에 "u200E" 유니코드 문자를 추가해준다.

2016. 04. 04.

문제점

대부분의 언어는 왼쪽부터 오른쪽으로 작성하지만, 아랍어와 같은 일부 경우는 오른쪽에서 왼쪽으로 작성하는 경우가 있다. 전자를 LTR(Left to Right), 후자를 RTL(Right to Left)라고 한다.

최신 버전의 안드로이드에서는 이에 대한 대응이 잘 되어있어, 단말기의 언어 설정에 따라 텍스트의 방향을 잘 바꾸어준다. 물론 디자인적인 이유로 한 방향으로 고정하거나 원하는 경우만 오른쪽으로 정렬되도록 설정하는 것도 가능하다.

문제는 RTL과 LTR 언어를 섞어 사용할 경우이다. 다음 문장의 예시를 보자.

이 애플리케이션은 العربية를 지원합니다.

주 언어는 한국어이고 이 가운데 RTL 언어인 아랍어가 끼어든 형태이다. 하지만 일부 안드로이드 단말기에서는

이 애플리케이션은 를 지원합니다. العربية

의 형태로 출력되는 경우가 있다. 레이아웃에서 'android:textDirection' 속성을 바꾸어도 동일한 현상이 나타난다. 이는 RTL과 LTR언어가 각자의 정렬 위치를 가져 때문에 나타나는 현상이다.

해결책

stackoverflow에서는 여러가지 해결 책을 제시해주었으나, 결국 작동하는 방법은 하나 뿐이었다.

아랍어가 등장하는 TextView의 텍스트 가장 앞에 "u200E" 유니코드 문자를 추가해준다.

"u200E" 문자는 텍스트의 방향을 강제로 고정해주는 유니코드 문자이며, 당연히 문자 형태로 보이지는 않는다. 이 문자를 'strings.xml' 파일에서 정렬이 필요한 문장의 가장 앞에 넣어주면 의도한 순서대로 텍스트가 보이게 된다.

썩 깔끔한 방법은 아니지만 아쉽게도 다른 방법은 찾기가 어려웠다.

크리에이티브 커먼즈 라이선스

이 저작물은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

© 2011 - 2020 Do Hoerin, LYnLab