안드로이드 시스템 언어 변경에 따라 앱에서도 자동으로 언어 변경하기
안드로이드 시스템 언어설정을 변경하면 앱도 같이 변경하게 하고 싶었다.
프로젝트 폴더를 보면
values 라는 폴더가 있는데 이 폴더가 기본 폴더이다.
내가 필요한 건 영어였기 때문에
values-en 폴더를 만들었다.
국가별 코드는 아래 링크에서 확인할 수 있다
http://developer.android.com/reference/java/util/Locale.html
위 링크에서 Field 항목에서 확인할 수 있다.
영어는 이렇게 나온다
public static final Locale ENGLISH
Locale constant for en.
values-en 폴더를 만들었다면 이제 string,xml 을 영어로 바꿔줘야 한다.
즉
values 폴더 내 string.xml 은 한글로
values-en 폴더 내 string.xml 은 영어로 작성한다.
이렇게 해주면 시스템 언어가 한글이면 values 폴더를 따르게 되어 한글로 나타나고
영어면 values-en 폴더를 따르게 되어 영어로 나타난다.
예를 들면
values 폴더 내 string.xml |
values-en 폴더 내 string.xml |
<string name="app_name">안드로이드 앱</string> |
<string name="app_name">AndroidApp</string> |
이렇게 작성해준다면 그림과 같이 알아서 영어로 나타난다.
그래서 layout 폴더에 각 액티비티에 해당하는 xml 파일에 다음과 같은 코드를 추가해준다.
android:text="@string/app_name"
<TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name" /> |
이런 식으로 "@string/해당 string name" 을 지정해주면
values, values-en 폴더를 생성해 두었기 대문에 자동으로 분기가 되어
한글이면 한글, 영어면 영어로 변경된다.
하지만 xml이 아닌 JAVA 로 언어셋팅을 해주었다면 어떻게 해주어야 할까
아래 코드를 통해 JAVA에서도 분기가 가능하다
Locale locale = getResources().getConfiguration().locale; String language = locale.getLanguage();
위 코드로 현재 시스템 언어가 어떤건지 값을 알아낼 수 있다.
만약 영어로 변경했다면 language 에는 "en" 스트링 값이 저장될 것이다.
그렇다면 이 값으로 분기를 해준다.
EditText et_star = (EditText)findViewById(R.id.edit); if(language.equals("en")) et_star.setText("Hello!"); else et_star.setText("안녕하세요");
이렇게 language.equals("en") 영어라면
et_star.setText("Hello!");
Hello! 를 셋팅
그게 아니라면
et_star.setText("안녕하세요");
안녕하세요 를 셋팅
할 수 있다.
이렇게 해서 다른 언어도 분기 가능하다.
자유로운 언어 변경을 위해서는 xml 파일에서 string.xml 을 통해 문구를 설정 하는게 편하다는 것을 배울 수 있었다.
그런데 한가지 문제가 있었는데 영어로 언어변경을 하면 앱 테마가 진저브레드? 시절로 바뀌는 문제가 있었다.
앱 사용에는 문제가 없었지만 이 부분도 한번 찾아봐야겠다.