Skils/Android

[Android] - 다국어 지원, String.xml 이용하기

재한 2023. 10. 19. 01:37

앱을 만들면서 한국인만이 사용한다면 String.xml을 이용하지 않고 문자열을 하드 코딩해서 사용하면 될 것이다.

하지만 만약 한국인이 아닌 다른 나라의 사람이 앱을 이용할 경우 문자열을 하드 코딩한다면 접근성이 매우 떨어질 것이다.

android:text="아이디를 입력해주세요"

예를 들어서 이러한 텍스트가 텍스트뷰에 하드코딩으로 연결된다면, 한국인은  아이디를 입력하라는 것이구나~라고 이해를 하겠지만,

다른 나라의 사람은 다른 나라의 언어로 휴대폰을 설정해도 "아이디를 입력해 주세요"라는 문구를 만나게 될 것이다.

 

다국어 지원

이렇게 string.xml에 value값으로 문자열을 추가해 주는 것이다.

android:text="안전한 아이디입니다"
android:text="@string/correct_id"

두 개는 동일한 결과를 보여준다.

하지만 왜 굳이 string.xml에 문자열을 추가해서 연결해줘야 할까?

답은 다국어 지원에 있다.

안드로이드 스튜디오는 Translations Editor를 통해서 다국어를 지원할 수 있는데,

string.xml에 선언된 값들을 번역기를 통해서 번역할 수 있다.

string.xml을 보면 해당 문구가 있다.

Open editor를 클릭하면 

해당 화면을 볼 수 있다.

화면에서 지구를 클릭한다면,

나라를 고를 수 있다.

영어를 고른다면,

이렇게 value-en 폴더에 string.xml 파일이 추가된다.

Translations Editor에서

이렇게 값들을 입력해 준다면,

자동으로 추가된다.

 

써보고 느낀 점은 String.xml에 있는 key와 value에 대해서 나라를 선택하면 모든 값들을 번역해 주는 줄 알았는데 

그렇게 까지는 해주지 않았다.

하지만 해당 values-en이 생성되면 언어가 영어일 경우 correct_id가 It is a safe Id가 출력될 것이다.

 

String.xml 값 이용하기

데이터바인딩을 사용해서 텍스트의 문자를 설정할 경우 기존에는 하드 코딩을 통해서 했었다.

 textView.text = "아이디가 틀렸습니다"

왜냐면 스트링 벨류의 id 값을 들고 와야 할 방법을 몰랐다.

액티비티나 프래그먼트에서는 getString()을 지원했지만, 바인딩 어뎁터는 사용이 안된 것이었다.

하지만 textView의 context를 이용해서 접근할 수 있다.

 

예를 들어

fun TextView.bindIdText(~~~~){
	this.text = context.getString(R.string.corret_id)
}

이렇게 접근해서 하드코딩을 제거할 수 있다.

 

 

느낀 점

string.xml에 앱에서 사용되는 모든 문자열을 key와 value 형태로 저장하는 것은 습관이 되지 않으면 힘들 거라고 생각했다.

하지만 string.xml에 정의하고 계속해서 재사용할 수 있고, 다국어를 지원할 수 있다는 점에서

다른 나라의 앱 사용자들의 접근성을 높일 수 있다는 장점이 있다.

그리고 만약 앱의 요구사항으로 title과 같은 문자열들이 바뀐다면 하드코딩할 경우 해당 title이 사용되는 모든 곳의 코드를 바꿔야 하지만,

string.xml에 정의해서 그 값을 사용한다면 string.xml의 해당 key의 value를 바꾸면 되기 때문에 효율적으로 유지﹒ 보수할 수 있을 것이다.