LYnLab

블로그취미로그

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

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

2016-04-04#프로그래밍

💡 이 글은 작성된지 1년 이상 지났습니다. 정보글의 경우 최신 내용이 아닐 수 있음에 유의해주세요.

문제점

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

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

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

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

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

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

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

해결책

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

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

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

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

관련된 글

Rails와 GitHub Actions에 커버리지 레포트를 달아보자

이 블로그의 CMS이기도 한 Shiori를 대폭 리팩토링하면서 테스트가 얼마나 잘 작성되어있는지 궁금해졌습니다.

Rails Global ID로 전역 객체 식별하기

Global ID는 Rails의 모든 객체를 식별할 수 있는 URI(Uniform Resource Identifier)입니다.

Ruby on WebAssembly: 살짝 맛보기

Ruby 3.2에 추가된 WebAssembly 지원을 간단하게 테스트해봅시다.

작성한 댓글은 giscus를 통해 GitHub Discussion에 저장됩니다.

크리에이티브 커먼즈 라이선스크리에이티브 커먼즈 저작자표시크리에이티브 커먼즈 동일조건변경허락

본 사이트의 저작물은 별도의 언급이 없는 한 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

© 2011 - 2024 Hoerin Doh, All rights reserved.

LYnLab 로고GitHubTwitterInstagram