이전에 말했던 안드로이드 string.xml 기본사용법 외에 간혹 유동적인 값을 string.xml 에 포함 시켜야 할 때가 있다.
그냥 클래스 단에서 작업하여 문자열을 하드 코딩으로 넣어도 되긴하지만, 만약 그 문자열이 다국어 에도 적용이 되야 한다면, 국가별로 하나하나 나눠서 작업을 해야 하기 때문에 시간과 코드 낭비가 심해지게 된다. 이때 기존의 string.xml 을 사용하면 다국어는 해결이 된다. 하지만 다국어에는 고정값이기 때문에 이 값을 변경 하려면 또 많은 코드를 넣어야 된다. 이때 좀 더 쉽게 적용하는 방법을 아래에 설명하겠다.
기본 사용법은 생략하고,
Ex) tv_a 라는 TextView 에 상황에 따라 변경되는 값을 다국어로 하고싶다라고, 가정한다면
1. string key 값안에 유동적인 값을 추가할 부분에(int 형태를 예로들면) %d 넣어준다.
<string name="keyA">"Give me the %d dollar"</string>
2. 텍스트 set을 하기전에 섞어주는 작업을 아래와같이해준다. 키값을 앞에 놓고, 뒤에 유동적으로 넣어줄 값을 넣어준다.
int number = 4;
String content = String.format(getResources().getString(R.string.keyA), number);
3. 텍스트에 위에서 섞은 값을 적용시킨다.
tv_a.setText(content);
이렇게 하면 tv_a 에 "Give me the 4 dollar" 가 뜨게 된다. 위의 4 되는 값을 조건에 따라 바꿔주기만 하면 계속 변환하여 적용 시킬 수 있게 된다.
한가지 더 가정을 해보자.
Ex) tv_a 라는 TextView 에 상황에 따라 변경되는 두개의 값을 다국어로 하고싶다라고, 가정한다면
위에서 했던것과 같은 방법으로 하면된다.
<string name="keyA">"give me %d dollar and Tommorow give me %d dollar"</string>
int number = 4;
int number_second = 100;
String content = String.format(getResources().getString(R.string.keyA), number, number_second);
위와같이 왼쪽에서 오른쪽 순서로 값을 넣어주면, 이론상 give me 4 dollar and Tommorow give me 100 dollar
가 나와야 하지만, 실행 시키면 아래와 같은 에러가 뜨게 된다.
...Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?...
위와 같은 에러의 이유는 순서대로 넣긴 했지만 포맷 순서를 정하는 방법(추후에 적어보도록 노력할예정)이나 또는 그냥 순서대로 적용시켜라 라는 명령을 해주면 간단하게 해결된다.
이제 위에 해당하는 string key 값에 코드하나 추가하자.
기존 : <string name="keyA">"give me %d dollar and Tommorow give me %d dollar"</string>
수정 : <string name="keyA" formatted="false">"give me %d dollar and Tommorow give me %d dollar"</string>
위와같이 formmated 추가해주면 해결된다.
추후에 구글드라이브에 있는 구글 시트를 이용한 다국어 처리하는 방법과 해당 string 을 안드로이드 와 IOS 코드로 자동으로 뽑아내는 구글 스크립트 소스도 추가로 올릴 예정이다.
-끝-
'Android Study' 카테고리의 다른 글
안드로이드의 디자인 적용 원리 (0) | 2019.05.09 |
---|---|
구글 드라이브를 이용한 다국어관리 하기! (0) | 2019.04.25 |
안드로이드 string.xml 기본 사용법 및 다국어 적용방법 (0) | 2019.04.25 |
안드로이드 앱 삭제는 확실하게!! (0) | 2019.04.02 |
JSON 을 SharedPreference 에 저장하여 사용하기 (0) | 2019.04.02 |