안드로이드 7.0(API 24)부터 안드로이드는 다국어 사용자에게 더 다양한 언어를 선택할 수 있게 하여 더 좋은 환경을 제공한다. 안드로이드는 선택 가능한 언어를 대폭 늘리고 리소스를 결정하는 형식을 변경하였다.
7.0 미만 리소스 결정 전략과 7.0 이상 버전에서의 향상된 결정 전략을 알아본다.
안드로이드 7.0 미만에서는 앱과 시스템 언어를 매칭하지 못하는 경우가 있었다. 아래와 같은 예시를 보면,
Java 코드에서 문자열을 참조할 때 7.0미만에서는 en_US에서 문자열을 가져온다. 시스템이 정확한 일치하는 언어를 찾을 수 없을 때 해당 Locale에서 국가 코드를 제거한 리소스를 찾기 때문이다. 여기서 Locale에서 국가 코드를 제거한 리소스가 없으면 기본 리소스인 en_US 리소스를 불러온다. 위의 환경에서 strings-es 파일이 존재하면 아래처럼 es 리소스를 잘 불러오지만 strings-es가 없는 경우 strings-es-rES 를 불러오지 못한다.
프랑스어를 예시로 한 예제를 보면 이해가 쉽다
안드로이드 7.0 이상에서는 위와 같은 문제점이 개선되었다. 아래 표를 보면 국가 코드를 제거하여 리소스를 찾고, 없다면 같은 언어의 다른 국가 코드까지 찾아 매칭하는 것을 알 수 있다.
위의 예제에서 fr-FR에 대한 리소스를 fr에 저장했다면 리소스 탐색이 더욱 빨라지고 예측가능하도록 할 수 있다.
선택가능한 언어를 더 많이 제공하기 때문에 아래처럼 사용자가 선택한 다른 언어의 리소스도 찾아올 수 있다.
LocaleList API
Android 7.0 이상부터는 사용자가 지정한 언어 목록을 알 수 있는 LocaleList API 를 제공한다.
LocaleList.getDefault()
포맷터
날짜, 시간, 통화 등은 하드코딩하지 않고 포맷터를 사용하는 것이 좋다. Locale의 종류가 다양해지면서 같은 대분류의 Locale안에서도 위의 정보가 달라질 수 있기 때문이다.
댓글 영역