2014-04-22 6 views
1

전화기에 설정되어있는 것과 관계없이 체코 어 로케일을 사용하도록 로켈을 무시하려고합니다. 그러나 현재 로캘을 가져 오려고하면 체코를 반환하지만 복수형의 경우 실제 전화 로캘을 사용하는 것처럼 작동합니다. 응용 프로그램에서복수로 사용자 정의 로케일 사용

<application 
    android:name=".xxx" 
    android:allowBackup="true" 
    android:icon="@drawable/logo" 
    android:label="@string/app_name" 
    android:theme="@style/Theme.mystyle" 
    android:configChanges="locale" 
    > 

: 여기

내 코드입니다

String lang = settings.getString("cs", ""); 
locale = new Locale(lang); 
     Locale.setDefault(locale); 
     config.locale = locale; 
     getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 

답변

0

결국 올바른 해결책을 발견했습니다. 회색 늑대의 해결책이 나에게 어떤 이유로 작용하지 않았습니다. 어쩌면 앱을 개발하는 API 수준에 관한 것일 수도 있습니다.

이것은 작동 코드입니다. 그 외에도 AndroidManifest에 configChanges : locale을 추가해야합니다. 이것은 Android 4.0.1 이상에서 작동합니다.

public class MyApplication extends Application 
{ 
private Locale locale = null; 

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
    if (locale != null) 
    { 
     newConfig.locale = locale; 
     Locale.setDefault(locale); 
     getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics()); 
    } 
} 

@Override 
public void onCreate() 
{ 
    super.onCreate(); 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
    Configuration config = getBaseContext().getResources().getConfiguration(); 

    String lang = "cs"; 
    if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) 
    { 
     locale = new Locale(lang); 
     Locale.setDefault(locale); 
     config.locale = locale; 
     getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
    } 
} 
} 
0
난 그냥 슬로바키아어에 대한 복수형도 체코 어 테스트 GitHub의 간단한 LocaleAssistant 클래스에 게시하고,이에 근무

장치는 default locale으로 EN으로 설정합니다. LocaleAssistant의 멤버 인스턴스에서 사용자 지정 응용 프로그램 내에서 두 메서드를 호출하기 만하면됩니다.

+0

LocaleAssistant를 찾을 수 없습니다. – vandus

+0

죄송합니다. 링크가 어떻게 든 부러졌습니다. 이제는 효과가있다. –

+0

이런 뜻이야? 나는 틀린 일을해야만한다 :/ Configuration configuration = getBaseContext(). getResources(). getConfiguration(); configuration.locale = new 로켈 ("cs"); 로캘 지원 로캘 지원 = 새 LocaleAssistant(); localeAssistant.dispatchApplicationCreated (getBaseContext(). getResources()); localeAssistant.dispatchConfigurationChanged (configuration, getBaseContext(). getResources()); – vandus