티스토리 뷰

안드로이드로 다양한 언어들 적용을 해보자.


구글에 치면 다 나온다. 근데 여기엔 함정이 있다. 바로 updateConfiguration() 이란 함수를 사용해서 바꾸라는 것인디.


얘는 이미 API 17 에서 deprecated 되었단다.


그래서 createConfigurationContext()라는 놈을 쓰는데, 얘를 어떻게 적용하는지 잘 안 나와있기 때문이다.


솔직히 이제 API level이 27까지 나온 시점에 최소 레벨도 17 이상일 가능성이 높아서 createConfigurationContext()를 어떻게 쓰느냐가 정말 관건인데, 이거에 대한 설명이 부족하니 내가 써야지.


근데 왜 포스팅을 열심히해도 구글 검색에 잘 안나오는지 참 답답허네.


일단 언어 추가하는 것 부터 해보자 대박 쉬움.




요렇게 해서 필요한 언어에 대한 xml 파일을 정해주면 된단다.


그럼 지금부터 Context에 Locale 속성을 적용시키는 법을 알아보자.


Step은 이렇게 하자.


1. 원하는 국가 선택

2. 국가에 맞는 Locale 생성

3. createConfigurationContext(Locale 적용된 configuration);

4. 3에서 생성된 context를 액티비티에 적용.


1. 원하는 국가 선택


이런식으로 버튼에다가 tag를 추가해줘서 tag에는 'ko', 'ja', 'ii', 'en'과 같이 국가를 나타내는 string이 들어가 있다.

그리고 이것을 locale에 적용해주고 recreate() 한다. recreate를 해야 activity가 다시 생성되서 변경된 context를 적용시킨다.

public void changeLanguage(View view) {
String lang = (String) view.getTag();
LocaleWrapper.setLocale(lang);
recreate();
}


2. 국가에 맞는 Locale 생성


new Locale(위에서 받아온 string (ex. 'ko', 'en', 'ja', 'ii')) 요렇게 하면 됨.

public static void setLocale(String lang) {
sLocale = new Locale(lang);
}


3. createConfigurationContext(Locale 적용된 configuration);

 
그래 이렇게 하면 됨. 랩싸가지고 context를 적용시킬꺼임.
public static Context wrap(Context base) {
if (sLocale == null) {
return base;
}

final Resources res = base.getResources();
final Configuration config = res.getConfiguration();
config.setLocale(sLocale);
return base.createConfigurationContext(config);
}


4. 3에서 생성된 context를 액티비티에 적용.


사실 이거 땜에 글쓴거임. 요거 모르면 안됨. 요게 stack overflow에 누가 안달아놨더라고... 내가 못찾았던가...
어쨌든 이걸 이렇게 적용해주어야 1번에서 recreate() 할 때 언어가 잘 변경된다. 이상 전달 끝.
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LocaleWrapper.wrap(newBase));
}



완성된 프로젝트는 밑 참조.


https://github.com/rimduhui/android-different-languages.git

'개발 > 안드로이드' 카테고리의 다른 글

Android Dagger2 ContributesAndroidInjector  (2) 2017.11.29
Android Context!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  (0) 2017.11.16
Android Custom Content Provider  (0) 2017.11.01
Android SQLite Database  (3) 2017.10.27
Android Content Provider  (0) 2017.10.26
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31