2016-12-12 1 views
-3

오늘 나는 언어 스와핑에 붙어 있습니다. 버튼을 클릭 할 때 앱의 언어를 즉시 변경하고 싶습니다.안드로이드 애플 리케이션에서 buttonclick 언어 변경

나는 두 개의 버튼이 있는데, 하나는 FR 용이고 다른 하나는 ENG 용이다. 클릭 할 때 다른 strings.xml을 사용할 수 있다고 생각했지만 일부 연구를 한 후에는 위치 정보와 물건에 대해 모두 알고 있으며 언어 휴대 전화에 따라 올바른 언어를 선택했다는 것을 이해했습니다.

그냥 다른 strings.xml 파일을 사용하여 버튼을 클릭하면 언어를 바꿀 수있는 해결책이 있습니까? 그런 다음, 언어를 변경하려면 values-fr 프랑스어와 같은 별도의 values 폴더가 있는지 확인이

LocaleHelper.setLocale(this,"fr") //for french; 

LocaleHelper.setLocale(this,"en") //for english; 

처럼 변경하려는 경우

+1

가능한 중복 http://stackoverflow.com/questions/2900023/change-language-programmatically- in-android) – Zelldon

+1

나는 알고있다. 그러나 나는 다른 사람에게 질문했다. 그리고 그것은 정말로 나를 도왔다. –

답변

1

public class LocaleHelper { 

    private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language"; 

    public static void onCreate(Context context) { 

     String lang; 
     if(getLanguage(context).isEmpty()){ 
      lang = getPersistedData(context, Locale.getDefault().getLanguage()); 
     }else { 
      lang = getLanguage(context); 
     } 

     setLocale(context, lang); 
    } 

    public static void onCreate(Context context, String defaultLanguage) { 
     String lang = getPersistedData(context, defaultLanguage); 
     setLocale(context, lang); 
    } 

    public static String getLanguage(Context context) { 
     return getPersistedData(context, Locale.getDefault().getLanguage()); 
    } 

    public static void setLocale(Context context, String language) { 
     persist(context, language); 
     updateResources(context, language); 
    } 

    private static String getPersistedData(Context context, String defaultLanguage) { 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
     return preferences.getString(SELECTED_LANGUAGE, defaultLanguage); 
    } 

    private static void persist(Context context, String language) { 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
     SharedPreferences.Editor editor = preferences.edit(); 

     editor.putString(SELECTED_LANGUAGE, language); 
     editor.apply(); 
    } 

    private static void updateResources(Context context, String language) { 
     Locale locale = new Locale(language); 
     Locale.setDefault(locale); 

     Resources resources = context.getResources(); 

     Configuration configuration = resources.getConfiguration(); 
     configuration.locale = locale; 

     resources.updateConfiguration(configuration, resources.getDisplayMetrics()); 


    } 
} 

그런 다음 응용 프로그램에 다음 클래스를 복사 두 언어에 대해 별도의 문자열 리소스가 있습니다.

+0

서로 다른 strings.xml 값을 가지고 있습니다. 다른 폴더를 만들거나 다른 strings.xml을 만들어야하나요? –

+0

당신의 디렉토리 구조가 Rohit sharma에 의해 언급 된 것과 동일하다면 ok –

+0

좋아, 내가 이것을 시도 할 것이다, 나는 버튼을 클릭 할 때 다른 strings.xml을 사용하는 것과 같은 쉬운 방법이 있다고 생각했다. –

0

사용 버튼을 클릭 할 때이 코드 :

String languageToLoad = "fr"; 
     Locale locale = new Locale(languageToLoad); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     context.getResources().updateConfiguration(config,context.getResources().getDisplayMetrics()); 

    Intent intent = new Intent(XYZ.this, XYZ.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
0

다국어 안드로이드 애플 리케이션을 구축하려면 당신은 리소스 파일에 텍스트를 수집하고이를 번역해야합니다.

번역을 제공하면 Android OS가 사용자의 로케일과 일치하는 리소스를 선택합니다. 애플리케이션이 여러 언어로 제공되는 경우 Android는 기기가 사용하는 언어를 선택합니다. 프로젝트의 '입술'디렉토리에서

응용 프로그램의 현지화 프로세스

안드로이드로드 텍스트 및 미디어 리소스를 제공합니다. 또한 Android는 현재 장치 구성 및 로캘에 따라 다른 디렉토리에서 리소스를 선택하고로드 할 수 있습니다. 코드가 'R.string.title'라는 문자열을로드하는 경우

예를 들어, 안드로이드는 고해상도/값 '일치에서 해당 strings.xml의 파일을로드하여 실행시 해당 문자열에 대한 올바른 값을 선택합니다 '디렉토리에 있습니다.

다국어 Android 앱을 사용하려면 Android에 현지화 된 리소스 파일을 제공해야합니다.

‘res/values-en-rUS/strings.xml’ 
‘res/values-en/strings.xml’ 
‘res/values/strings.xml’ 

가에 관리 : 로케일은 'en-US입니다'이면

, 안드로이드는 다음과 같은 순서로 파일을 검색하여 "R.string.title"의 값을 찾습니다 리소스 파일에서 문자열을 찾으면 해당 값을 사용하고 검색을 중지합니다. 즉, 기본 언어는 폴백 옵션으로 사용되며 번역이있을 때 대신 사용됩니다. 또한 번역 된 절반의 응용 프로그램이 전혀 번역되지 않은 응용 프로그램보다 일반적으로 더 좋으므로 모든 항목을 현지화하거나 아무것도 지정하지 않아야 함을 의미합니다.

그것을 더 얻을이 링크를 따라

https://www.icanlocalize.com/site/tutorials/android-application-localization-tutorial/

[프로그램 안드로이드의 언어 변경] (의
관련 문제