2

无论手机中设置了什么,我都试图覆盖语言环境以使用捷克语言环境。但是,虽然当我尝试获取当前语言环境时,它返回捷克语,但对于复数,它的行为就像它仍然需要真正的电话语言环境。

这是我的代码:

<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());
4

2 回答 2

0

我在 GitHub 上发布了一个简单的LocaleAssistant类,我刚刚测试了斯洛伐克语和捷克语的复数形式,它在default locale设置为EN. 只需从您的自定义 Application 的成员实例上调用这两个方法LocaleAssistant

于 2014-04-24T13:08:27.443 回答
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());
    }
}
}
于 2014-05-09T08:46:19.780 回答