지식메모/안드로이드 Android

안드로이드 시스템 언어 변경에 따라 앱에서도 자동으로 언어 변경하기

yonoo 2015. 8. 20. 23:30
반응형




안드로이드 시스템 언어설정을 변경하면 앱도 같이 변경하게 하고 싶었다.


프로젝트 폴더를 보면 


values 라는 폴더가 있는데 이 폴더가 기본 폴더이다.


내가 필요한 건 영어였기 때문에


values-en 폴더를 만들었다.





국가별 코드는 아래 링크에서 확인할 수 있다


http://developer.android.com/reference/java/util/Locale.html


위 링크에서 Field 항목에서 확인할 수 있다.


영어는 이렇게 나온다


public static final Locale ENGLISH

Added in API level 1

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 을 통해 문구를 설정 하는게 편하다는 것을 배울 수 있었다.



그런데 한가지 문제가 있었는데 영어로 언어변경을 하면 앱 테마가 진저브레드? 시절로 바뀌는 문제가 있었다.


앱 사용에는 문제가 없었지만 이 부분도 한번 찾아봐야겠다.





반응형