2014-12-24 2 views
2

하나 또는 두 번의 클릭만으로 "공식적인"언어 목록 (즉, 빠른 언어에 표시되는 언어)에서 선 택된 2 개, 3 개 또는 그 이상의 언어 사이에서 시스템 언어를 전환 할 수있는 작은 응용 프로그램을 만들고 싶습니다. 설정> 설정> 언어 & 입력> 언어.Android에 설치된 언어를 나열/선택하는 방법은 무엇입니까?

이 목록은 프로그래밍 방식으로 어떻게 구할 수 있습니까? Locale.getAvailableLocales()에서 사용할 수있는 로케일 목록입니까? 로케일의 언어로 가야합니까? 고맙습니다!

enter image description here

편집 - 이것은 내가 지금까지 한 일이다

private List<Model> getModel() { 
    Locale[] locales = Locale.getAvailableLocales(); 
    List<Model> list = new ArrayList<Model>(); 
    for (int i=0; i<locales.length; i++) { 
     list.add(get(locales[i].getDisplayLanguage())); 
    } 
    return list; 
    } 

    private Model get(String s) { 
    return new Model(s); 
    } 

것은 지금 그 옵션을 찾고 있어요 : here에서

Locale.getDefault().getLanguage()  ---> en  
Locale.getDefault().getISO3Language() ---> eng 
Locale.getDefault().getCountry()   ---> US 
Locale.getDefault().getISO3Country()  ---> USA 
Locale.getDefault().toString()   ---> en_US 
Locale.getDefault().getDisplayLanguage() ---> English 
Locale.getDefault().getDisplayCountry() ---> United States 
Locale.getDefault().getDisplayName()  ---> English (United States) 

.

EDIT 2 - 2 개 더 많은 이미지가 표시되어 언어 목록의 끝 부분을 보여줍니다. 여기에는 중국어 옵션이 있습니다.

enter image description here

시스템의 목록입니다.

enter image description here

이 목록

다음 코드로 이루어졌다 :

Locale[] locales = Locale.getAvailableLocales(); 
List<Model> list = new ArrayList<Model>(); 
for (int i=0; i<locales.length; i++) { 
    list.add(get(locales[i].getDisplayLanguage()+"|"+ 
      locales[i].toString()+"|"+ 
      locales[i].getDisplayName() 
      )); 
} 
return list; 

는 이제 방법은 두 번째 목록에서 첫 번째 목록에 도착이 있어야한다, 아마도 일부 시스템 숨겨진 파일에 액세스?

편집 3 - 나는 다음과 같은 코드를 추가 그것은 문제없이, 중국어 포르투갈어 및 스페인어 특수 문자 (UTF-8)을 보여줍니다

list.add(get("Português (Brasil)")); 
list.add(get("English (US)")); 
list.add(get("中国(简体)")); 
list.add(get("Español (Venezuela)")); 

지금 내가 어떻게 실제로 시스템을 변경하려면 여기에서받을 수 있나요을 아래와 같은 목적/활동을 열지 않고 언어 (여기에

Intent intent = new Intent(Settings.ACTION_LOCALE_SETTINGS); 
startActivity(intent); 
+1

무엇을하려고합니까? 응용 프로그램 내에서 언어를 변경 하시겠습니까? – ChuongPham

+0

예. 필요한 클릭 수를 줄이고 싶습니다. – Rodrigo

+0

클릭 수는 문제가되지 않습니다. 그러나 문제는 앱에서 지원하는 언어입니다. 사용자가 선택할 수있는 언어 목록이있는 경우 Android 프로젝트에서 지원하려는 언어의 번역 된 텍스트가 들어있는 필요한'values' 디렉토리를 만들어야합니다. 'Locale.getAvailableLocales()'에서 언어를 가져 오면 특정 언어가 번역되지 않았거나 Android 응용 프로그램에서 누락 된 경우 오류가 발생합니다. 그러므로 게시물을 편집하고 원하는 것을 요약하십시오. – ChuongPham

답변

2

은 장치의 사용 가능한 모든 로케일을 얻을 수있는 API입니다.

public static Locale[] getAvailableLocales() 

자세한 내용이 공개 링크를 확인하십시오 : 당신이 거기에, 다음 Locale.getAvailableLocales() 당신을 위해 작동하지 않을 수 있습니다 언어의 모든 가능한 조합을 지원하기 위해 계획하는 경우 http://developer.android.com/reference/java/util/Locale.html#getAvailableLocales()

+0

감사합니다. 제발 내 편집을보세요. – Rodrigo

1

합니다.

그렇지 않은 경우 Android 애플리케이션에서 직접 언어 목록을 제공해야합니다.앱이 덴마크어, 독일어 카탈로니아 어, 체코 어, (또는 말한 독일어의 다양한 맛)를 지원하는 경우 예를 들어, 채우기 더 나을 것이다 당신의 ListView 정적 문자열 목록 :

public static final String[] LANGS = new String[] {"English (Australia)", "Català (Espanya)","Čeština (Česká Republika)","Dansk (Danmark)","Deutsch (Österreich)","Deutsch (Belgien)","Deutsch (Schweiz)","Deutsch (Deutschland)","Deutsch (Liechtenstein)","Deutsch (Luxemburg)"}; 

public static final String[] LANG_CODES = new String[] {"en_au", "ca_ES","cs_CZ","da_DK","de_AT","de_BE","de_CH","de_DE","de_LI","de_LU"}; 

그리고, 당신의 안드로이드 프로젝트의 경우 위 언어를 지원하는 다음 values 디렉토리가 있어야합니다.

/res/values (English) 
/res/values-ca (Catalan) 
/res/values-cs (Czech) 
/res/values-da (Danish) 
/res/values-de (German) 
+0

정적 목록이 필요하지 않습니다. 언어 이름을 프로그래밍 방식으로 이미지에 표시된대로 가져오고 싶습니다. 예 : 빠른 설정> 설정> 언어 및 입력> 언어에 액세스하고 싶습니다. 따라서 사용자는 전환 할 목록에 넣을 언어를 선택합니다. – Rodrigo

+0

내가 전에 말했듯이, 가능한 모든 언어 조합 (260 개 이상의 언어가 있음)을 지원할 예정입니까? 그렇지 않다면, ** 빠른 설정> 설정> 언어 & 입력> 언어 **에서 언어를 가져 오는 것과 동일한'Locale.getAvailableLocales()'메소드를 사용하면 도움이되지 않습니다. 사용자가 Android 프로젝트에 번역 파일 ('strings.xml')이없는 언어를 선택하면 앱이 중단됩니다. – ChuongPham

+0

소니 Xperia 메뉴에는 약 60 개 언어가 있으며, 그 중 하나를 선택할 수 있으며 시스템 언어가 변경 될 수 있습니다. 그게 내가 원하는 전부 야. 언어 목록은 전화 안의 일부 파일에서 제공됩니다. 오픈 소스가 아닌가요? 목록을 찾아서 복사 할 수 없습니까? 내 프로젝트에 적절한 파일이 없다면 무엇이든지 XXXX 또는 ____을 전시하도록 수락합니다. 그러나 "English (US)", "Bahasa Indonesia"? 나는 이것을 보여줄 수 있다고 생각한다. – Rodrigo

관련 문제