无论手机中设置了什么,我都试图覆盖语言环境以使用捷克语语言环境。但是,虽然当我尝试获取当前语言环境时,它会返回捷克语,但对于复数形式,它的行为就像它仍然需要真正的手机语言环境。
这是我的代码:
<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 :(得分:0)
我发布了GitHub简单的LocaleAssistant
课程,我刚用斯洛伐克语和捷克语的复数形式进行了测试,并且它在default locale
设置为EN
的设备上工作。只需在LocaleAssistant
的成员实例上的自定义应用程序中调用这两个方法。
答案 1 :(得分:0)
最后我找到了正确的解决方案。由于某些原因,灰太狼的解决方案对我不起作用。也许这是关于为您开发应用程序的API级别。
这是工作代码。除此之外,还需要将configChanges:locale添加到AndroidManifest。这适用于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());
}
}
}