사용자 언어에 맞게 텍스트, 오디오 파일, 숫자, 통화 및 그래픽을 처리할 수 있어야 한다.
안드로이드는 지역이 정해진 string(values-en/strings.xml 등)을 제공하지 않으면 기본 리소스(res/values/strings.xml)를 로드한다. 예를 들어 title이라는 string이 [res/values/strings.xml]에만 선언되어 있고, [values-ja/string.xml]에 선언되어 있지 않은 경우 기기 언어 설정이 일본어로 되어있는 경우 안드로이드는 title을 [res/values/strings.xml]에서 불러온다.
만약 [res/values/strings.xml]과 같은 기본 파일이 없거나 앱에서 필요한 string이 없을 경우 아래와 같은 오류가 뜨면서 빌드에 실패한다.
string 리소스 파일 뿐만 아니라 모든 리소스 파일에 해당한다.
지역별로 다른 리소스를 제공하기 위해서는 언어를 나타내는 한정자와 지역을 나타내는 한정자를 사용할 수 있다.
values-en[언어를 나타내는 한정자]-rUS[지역을 나타내는 한정자]
이 한정자들에 대해서 더 자세히는 [링크]를 참고할 수 있다.
여러 개의 리소스 파일이 기기 configuration과 일치하는 경우 Android는 규칙에 따라 사용할 파일을 결정한다.
정확한 방법과 예제는 [링크]의 하단을 참고할 수 있다.
string 하드코딩 금지. 하드코딩하지 않고 strings.xml을 이용하면 앱 업데이트와 현지화를 더욱 쉽게 할 수 있게 된다. Image를 텍스트로 부터 만들고 있는 경우에도 텍스트는 strings.xml에 두고 안드로이드에서 로드된(번역된) string을 통해 Image를 만들어야 한다.
Material Design에는 텍스트 관련된 내용도 있다. 이를 따르도록 한다.
Notification, System Bar, Action Bar 등등
아래에 나오는 예시처럼 주석은 번역가에게 중요한 정보를 전달하여 번역의 품질을 높일 수 있다. 사용자들에게 언제, 어디에서 또 어떤 View 위에서 표시되는지 적어두면 좋다.
<!-- The action for submitting a form. This text is on a button that can fit 30 chars -->
<string name="login_submit_button">Sign in</string>
이 역시 번역가에게 중요한 정보를 줄 수 있다. 예를 들면 아래와 같이 언어가 바뀌어도 바뀌지 않아야 할 부분을 표시할 수 있다.
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- 특수문자를 위한 placeholder -->
<string name="star_rating">5개의 <xliff:g id="star">⭐️</xliff:g>을 주세요!</string>
<!-- Url을 위한 placeholder -->
<string name="app_homeurl">
<xliff:g id="application_homepage">http://my/app/home.html</xliff:g> 에서 확인할 수 있습니다.
</string>
<!-- 이름을 위한 placeholder -->
<string name="prod_name">
<xliff:g id="prod_gamegroup">Game Group</xliff:g>에서 더 자세히 확인할 수 있습니다.
</string>
</resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Example placeholder for a special unicode symbol -->
<string name="star_rating">Check out our 5
<xliff:g id="star">⭐️</xliff:g>
</string>
<!-- Example placeholder for a for a URL -->
<string name="app_homeurl">
Visit us at <xliff:g
id="application_homepage">http://my/app/home.html</xliff:g>
</string>
<!-- Example placeholder for a name -->
<string name="prod_name">
Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g>
</string>
</resources>
한정자가 없는 [res/drawable/]과 [res/values]에는 앱에 필요한 모든 이미지와 텍스트가 포함되도록 한다.
특정 언어에 맞도록 레이아웃을 수정해야한다면 [res/layout-[locale qualifier]]를 사용할 수 있다. 예를 들어 긴 독일어를 위해서 [res/layout-[locale-qualifier]]를 추가할 수 있다.
-> 하지만 이는 유지를 어렵게 만듦으로 하나의 유연한 레이아웃을 설계하는 것이 좋다.
또 전형적인 상황은 이름을 입력하는 레이아웃이다. 예를 들어 한국에서는 이름 입력 EditText가 2개 이면 되지만 다른 나라에서는 3개가 필요할 수 있다. 이럴 때, 2가지 방법으로 대응할 수 있다.
main_layout.xml이 언어에 따라 달라지지 않는다면 굳이 언어별 레이아웃 파일을 만들 필요가 없다.
string에 대해서도 마찬가지이다. 앱에 대부분의 미국식 영어와 약간의 영국식 영어가 필요할 경우에는 대부분의 string을 [res/values/en-rUS]에 선언하고 필요한 영국식 영어 string만 따로 [res/values/en-rGB]파일을 만들어 대체할 수 있다.
val primaryLocale: Locale = context.resources.configuration.locales[0]
val locale: String = primaryLocale.displayName
번역 회사로부터 즉시 견적을 받고 번역을 요청할 수 있는 빠르고 간단한 방법이다. [링크]에서 확인할 수 있다.
[res/values/fr-CA] 와 같은 locale을 에뮬레이터에서 테스트하기 위한 방법이 있다. (실제 기기에서는 동작하지 않는다)
안드로이드 문서 정리 - 앱 리소스 (0) | 2021.04.15 |
---|---|
안드로이드 문서 정리 - 앱 기본 요소 (2) | 2021.03.30 |
댓글 영역