반응형

안녕하세요. Simple& Happy Dev입니다.

 

다국어 적용을 고려 중이신 분들께서는 기본 언어로 values 디렉터리와 values-"language" 또는 values-"language"-"country" 디렉터리에 다국어를 넣는다는 것은 알고 계실 겁니다.

 

이전에 "안드로이드 다국어 지원"에 관해서 다룬 적이 있었습니다. 혹시 잘 모르시는 분은 아랫글 참고하시길 바랍니다.

 

2018/09/19 - 안드로이드 다국어 지원 (support multiple language in android) - Translations Editor 사용법 포함

 

그런데, 다국어 지원되는 안드로이드 플랫폼 스트링으로 일부 문구를 대체할 수도 있습니다.

 

안드로이드 스튜디오에서 레이아웃 작업을 하면서 한 번쯤 본 적은 있어도 "내가 넣어준 적도 없는데, 이게 뭐지?" 하면서 그냥 넘어갔을 수도 있습니다.

 


 

안드로이드는 왜 플랫폼 스트링이 존재하는 걸까요?.

 

이는 "ooo 이(가) 응답하지 않습니다. 닫으시겠습니까?"라는 ANR 문구처럼 안드로이드 시스템에서 사용되는 UI를 지원하기 위함입니다.

 

그리고, 여러 언어 지원을 위해서 이미 번역된 스트링이 반영되어 있습니다.

 

안드로이드 스튜디오의 Device File Explorer를 실행해서 /system/framework/ 디렉터리에 가보면 framework-res.apk가 존재합니다. 이 apk를 PC로 꺼내어서 dex2jar나 apktool로 열어보면, 우측에 있는 것처럼 다국어 스트링 디렉터리가 나옵니다.

 

 

 

values에 있는 기본 언어(영어) strings.xml과 values-ko에 있는 한국어 strings.xml를 비교해보면 아래처럼 나옵니다.

타 언어들도 번역되어 있습니다. 약 1400개 이상의 스트링들입니다.

 

 

하지만, 이것들은 다 사용할 수 있는 것은 아닙니다.

접근이 허용되지 않는 리소스를 사용할 경우에 아래와 같은 빌드 에러가 나옵니다.

Android resource linking failed
Output:  \app\src\main\res\layout\activity_main.xml:10: error: resource android:string/Midnight is private.
error: failed linking file resources.

 

안드로이드 SDK를 통해서 접근할 수 있는 스트링들은 생각보다 그렇게 많지는 않습니다.

 

"yes, no, ok, cancel, copy, cut, paste, selectAll, untitled" 포함해서 27개 정도 됩니다. 

 

예를 들어서 보겠습니다. 아래 레이아웃 가운데 "확인"이라는 텍스트를 넣었고, 이것을 다국어 적용하려고 합니다.

 

TextView 속성에서 text 항목의 우측에 있는 "..." 부분을 눌러주면, 목록에서 해당 앱에서 추가해준 스트링이 나오고 그 아래에 사용할 수 있는 내장 스트링이 나옵니다. 아래 노란색 사각형에 있는 것처럼 앞에 @android가 추가되어서 @android:string/"string_name" 형식으로 레이아웃 xml에 저장됩니다.

 

 

Java로 TextView를 처리할 경우는 아래처럼 "android.R.string.ok"로 지정해주면 됩니다.

 

 

빌드해서 확인한 결과 아래처럼 "한국어", "영어", "스페인어"로 언어 변경 시 해당 언어에 맞는 스트링이 출력되고 있습니다.

  

  

 

결론

안드로이드 프레임워크에 내장된 스트링이 많이 있지만, 실제 앱 개발 시 SDK를 통해서 접근할 수 있는 플랫폼 스트링은 많지는 않습니다. 다이얼로그 등에 자주 사용되는 문구라서 이런 것에 다국어 적용 시 별도 번역 없이 바로 사용할 수 있습니다.

 

스트링 외에 이미지, 레이아웃, 사운드 등의 플랫폼 리소스도 존재하니 한 번쯤 어떤 것이 있는지 확인해보고 차후 적용도 해보시길 바랍니다.

 

아래 손전등 앱에서는 플랫폼 리소스중에 이미지(android.R.drawable.btn_star_big_on)를 사용하고 있습니다.

 

2018/10/15 - 손전등 앱 만들기 #3 - Flashlight API 이용방법 (Flashlight app using Flashlight API)

2018/10/13 - 손전등 앱 만들기 #2 - Camera2 API 이용방법 (Flashlight app using Camera2 API)

2018/10/04 - 손전등 앱 만들기 #1 - 개요 및 Camera API 이용방법 (Flashlight app using Camera API)

+ Recent posts