마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

어플 언어 설정 질문입니다. (updateConfiguration , Locale.setDefault )

0 추천

Facebook 어플처럼, 어플 내에서 언어를 설정하는 기능을 넣으려고 합니다.

영어나 일본어를 선택하면 그 언어로 나오고, 기기언어를 선택하면 폰에서 사용중인 언어로 나오게 하려는데요,

구글링해보니,

Configuration config = new Configuration();
  Locale locale = new Locale("en");
  Locale.setDefault(locale);
  config.locale = locale;
  getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

보통 이렇게 사용하는 것 같은데요.

Configuration 으로 updateConfiguration 해주는 것과

Locale 을 setDefault 해주는 것은 다른 것 같던데요

(updateConfiguration 은 "en" 해주고 setDefault 안하면 둘이 다르게 나옵니다.)

updateConfiguration 과 Locale.setDefault 의 차이점은 무엇인가요? (보통 둘다 같이 해주는 듯 한데요.)

 

그리고 둘다 설정을 해 주어도, 안드로이드 os의 언어는 바뀌지 않는데,

그럼 둘다 어플 언어설정을 변경하는거라고 하면, os 에서 현재 어떤 언어를 사용하고 있는지는 어떻게 확인하는건가요?

앱 설정은 updateConfiguration 로 계속 바꿔주고 Locale 은 바꾸지 않고 os의 언어로 보고 구현한다면 잘못된건가요?

 

레이아웃만 나누면 될 줄 알았는데 꽤 어렵네요;

Naught (370 포인트) 님이 2014년 9월 1일 질문

3개의 답변

0 추천
그 어플 실행했더니 계속 설정이 바뀌면 사용자들은 짱나겠죠?

또 대부분 언어변경을 어떻게 하는지도 모를테고... 아랍어로 OS설정을 바꿔버리면 대부분 서비스 센터가서 언어 변경해야 할듯하네요. ㅎ

그래서 안드로이드 OS의 언어를 바꾸는것은 하면 안되고요.

getResources().getConfiguration().locale.getDisplayLanguage()를 호출하면 현재 사용중인 OS의 언어 이름을 리턴합니다.

위에 본문에 적으신 코드는 현재 Activity에서 다른 언어를 사용하는것이고요.

그럼 이제 영어든 일어든 OS설정값이든 모두 적용이 가능하겠죠?

 

 마지막으로 en을 넣든 ja를 넣든 알아서 자동으로 번역되는거라고 생각하시는것은 아니죠?
q1212 (26,020 포인트) 님이 2014년 9월 1일 답변
넵, layout-en 과 values-en 같은건 준비되어있습니다!
알려주신대로 테스트 해봐야겠네요. 감사합니다.
0 추천

getResources().getConfiguration().locale.getDisplayLanguage() 도 결국

getResources().updateConfiguration 으로 적용한 어플의 언어가 나오는 것 같은데요...

 

과정이 잘못된건지 결과가 잘못된건지 모르겠네요 음...

Naught (370 포인트) 님이 2014년 9월 1일 답변
updateConfiguration 적용하면 당연히 바뀌죠.
어플 시작할때 원래 설정된 OS언어를 미리 저장해 놓으셔야죠 -_-a
하고싶으신게 en이나 ja 그리고 설정되어있는 언어 이렇게 바꾸고 싶으신거 아닌가요?

현재 OS설정 언어도 알고 있고 en, ja, ko등 다른 언어로 설정하는 법도 알있으면 해당 기능 만드는데 어려움이 있으면...
아.. 저는 런타임중에 실시간으로 현재의 OS 언어설정을 가져오는법 있는 줄 알았는데, 처음에 저장하는 방법밖에 없는거였군요.
미처 몰랐습니다.
0 추천

제가 OS의 언어를 바꾸는것은 하면 안된다고 한것은 변경할 수 있다는 반증이 됩니다.

OS언어도 변경이 가능한데 OS언어설정읽는것을 못할리는 없지요.

Class amnClass = Class.forName("android.app.ActivityManagerNative");
Method method_Default = amnClass.getMethod("getDefault");
Object o = method_Default.invoke(amnClass);

Method method_Configuration = amnClass.getMethod("getConfiguration");
Configuration config = (Configuration) method_Configuration.invoke(o);
		    
Log.e("확인os 언어",config.locale.getDisplayLanguage());

 

처음에 저장하는것으로 안내한 이유는

앱 시작 할 때 강제로 사용자가 한글로 설정한것을 무시하고 영어로 바꾸고 실행하지 않을거라 생각했고 이게 맞는거라 생각했죠. 

어짜피 앱 실행 할때마다 언어 확인 후 언어 변경해줘야 하는거니까 그전에 저장해두는게 효율적이지 않겠어요?

 

q1212 (26,020 포인트) 님이 2014년 9월 2일 답변
...