상세 컨텐츠

본문 제목

안드로이드 문서 정리 - 언어 및 로케일 해상도 개요

카테고리 없음

by yebon.kim 2021. 5. 23. 22:36

본문

반응형

언어 및 로케일(Locale) 해상도 개요

안드로이드 7.0(API 24)부터 안드로이드는 다국어 사용자에게 더 다양한 언어를 선택할 수 있게 하여 더 좋은 환경을 제공한다. 안드로이드는 선택 가능한 언어를 대폭 늘리고 리소스를 결정하는 형식을 변경하였다.

7.0 미만 리소스 결정 전략과 7.0 이상 버전에서의 향상된 결정 전략을 알아본다.

 

언어 리소스 결정에서의 과제

안드로이드 7.0 미만에서는 앱과 시스템 언어를 매칭하지 못하는 경우가 있었다. 아래와 같은 예시를 보면,

  • 앱의 기본 언어 설정은 en_US이며, 앱 안에 스페인언어 리소스파일인 es_ES를 가지고 있으며 기기 설정은 es_MX이다.

Java 코드에서 문자열을 참조할 때 7.0미만에서는 en_US에서 문자열을 가져온다. 시스템이 정확한 일치하는 언어를 찾을 수 없을 때 해당 Locale에서 국가 코드를 제거한 리소스를 찾기 때문이다. 여기서 Locale에서 국가 코드를 제거한 리소스가 없으면 기본 리소스인 en_US 리소스를 불러온다. 위의 환경에서 strings-es 파일이 존재하면 아래처럼 es 리소스를 잘 불러오지만 strings-es가 없는 경우 strings-es-rES 를 불러오지 못한다.

 

 

프랑스어를 예시로 한 예제를 보면 이해가 쉽다

안드로이드가 7.0미만에서 Locale 찾는 방법

 

리소스 결정 전략 개선

안드로이드 7.0 이상에서는 위와 같은 문제점이 개선되었다. 아래 표를 보면 국가 코드를 제거하여 리소스를 찾고, 없다면 같은 언어의 다른 국가 코드까지 찾아 매칭하는 것을 알 수 있다.

위의 예제에서 fr-FR에 대한 리소스를 fr에 저장했다면 리소스 탐색이 더욱 빨라지고 예측가능하도록 할 수 있다.

7.0이상에서의 Locale 찾는 방법

 

선택가능한 언어를 더 많이 제공하기 때문에 아래처럼 사용자가 선택한 다른 언어의 리소스도 찾아올 수 있다.

사용자 설정 언어가 복수일 경우도 고려하여 Locale을 불러온다

 

 

추가 Locale 지원을 위한 앱 설계

 

LocaleList API

  Android 7.0 이상부터는 사용자가 지정한 언어 목록을 알 수 있는 LocaleList API 를 제공한다.

LocaleList.getDefault()

 

 

포맷터

  날짜, 시간, 통화 등은 하드코딩하지 않고 포맷터를 사용하는 것이 좋다. Locale의 종류가 다양해지면서 같은 대분류의 Locale안에서도 위의 정보가 달라질 수 있기 때문이다.

반응형

댓글 영역