태그:         

안드로이드로 다국어를 지원하는 앱을 만드는 방법은 아주 간단하다.
프로그램 코드는 언어에 따라 변경할 것이 거의 없고, 문자열과 화면에 출력할 아이콘이나 그림 파일만 해당 언어에 맞게 작성해서 별도의 폴더에 넣으면 된다.
프로그램 코드에서는 리소스를 직접 지정하지 말고, xml에서 불러오는 형태로 간접 지정한다.

예를 들어 한국어, 영어, 일본어, 중국어를 지원하려 한다면…
values 폴더에 기본 언어의 리소스를 넣고, values-xx에 지원하려는 언어의 리소스를 넣으면 된다.
이 때 기본 언어를 영어로 하고, 한국어, 일본어, 중국어를 별도의 폴더에 넣는 것이 좋다.
이렇게 하면 혹시라도 빼먹은 항목이 있더라도 적어도 영어는 정상적으로 출력되니까 이해를 하는데 거의 문제가 없기 때문이다.
즉 values에는 영어 리소스를 넣고, values-ko(한국어), values-ja(일본어), values-cn(중국어) 폴더에 해당 언어의 리소스를 넣으면 된다.

그런데 모든 언어 리소스에 같은 문자열을 넣으려면 어떻게 할까?
values의 strings.xml에도 넣고, 한국어에도 넣고, 일본어에도 넣고, 중국어에도 넣고??????

— values/strings.xml —

[code xml]
<string name=”versionstring”>1.1.1</string>
[/code]

— values-ko/strings.xml —

[code xml]
<string name=”versionstring”>1.1.1</string>
[/code]

— values-ja/strings.xml —

[code xml]
<string name=”versionstring”>1.1.1</string>
[/code]

— values-cn/strings.xml —

[code xml]
<string name=”versionstring”>1.1.1</string>
[/code]

위와 같이 언어마다 똑같은 문자열을 넣었는데…앱을 업그레이드 하면서 버전 문자열을 바꾸려 한다.
언어마다 같은 문자열을 다 바꿔야 한다.
버전 한 번 바뀔 때마다 4개의 파일을 모두 바꿔야 한다.
혹시나 한 언어에서 바꾸는 걸 잊어먹으면?
그 언어는 이전 버전을 쓰고 있는게 되는건가?

이런 때는 values에 대표로 한 번만 넣고, 나머지 언어에서는 해당하는 문자열을 아예 넣지 않으면 된다.
이렇게 하면 안드로이드는 시스템에 설정된 언어의 해당 values 폴더의 strings.xml 파일에서 찾다가 원하는 문자열이 없으면 기본 언어(여기서는 영어)의 strings.xml 파일에서 해당 문자열을 불러와서 이용한다.
이클립스에서 해보면 이상없이 잘 동작한다.
하지만…앱을 구글 플레이 스토어에 올리려고 signed package로 export를 했더니 언어별로 문자열이 지정된게 없다는 Lint 에러 메시지가 쭉~~~나온다.

이 에러를 해결하는 방법은 두 가지가 있다.
하나는 이클립스에서 다국어 번역에 대한 Lint 에러를 경고 또는 무시하는 것으로 바꾸는 것이고, 또 하나는 기본 언어의 strings.xml 파일에서 해당 문자열에 대해서는 번역을 하지 않게 하는 것이다.

첫 번째는 아래 그림처럼 이클립스의 Window 메뉴에서 Preferences를 선택한 다음, 나오는 설정창의 Android -> Lint Error Checking을 선택하고, 아래의 콤보박스에서 Warning 또는 Ignore를 선택하면 된다.

사용자 삽입 이미지

그런데 이렇게 하면 무슨 이유인지는 모르겠지만…다른 곳에서 에러가 많이 검출되었고, 결국 signed package로 추출하기 위해 몇 가지 수정을 해야만 했다.

두 번째 방법은 아래 그림과 같이 기본 언어의 strings.xml 파일에서 다른 언어로 번역을 원하지 않는 항목에 대해 translatable=”false”라고 지정하는 것이다.

사용자 삽입 이미지

두 번째 방법으로 하면 이상없이 signed package로 추출이 되었으며, 정상적으로 동작도 된다.

관련글

안드로이드 다국어 지원 앱 작성시…

안드로이드 다국어 지원 앱 작성시…”에 대한 1개의 생각

  • 2014년 1월 9일 4:44 오전
    고유주소

    와우 굳 도움!!
    정말 좋은 글이에요..정말이지..정말로…정말로….정말….

    응답

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다