强制语言环境和刷新新语言的应用程序

时间:2012-12-07 21:40:54

标签: android localization resources

我在选项更改后强制使用语言环境:

public void forceLocale(Context ctx) {
    Locale.setDefault(getCurrentLocale());
    Configuration config = new Configuration();
    config.locale = getCurrentLocale();
    ctx.getResources().updateConfiguration(config, ctx.getResources().getDisplayMetrics());   
}

我希望当前活动显示在新的Locale中,但它不会发生。其他活动也是如此。

我在onResume()上尝试了无效的所有活动:

protected void onResume() {
    //if no custom locale, restore default
    if (StaticClass.locale.getCurrentLocale() == null)
        StaticClass.locale.restoreDefaultLocale();

    //force curretnt locale
    StaticClass.locale.forceLocale(this);

    //reload the view
    ViewGroup vg = (ViewGroup) findViewById(android.R.id.content);
    vg.invalidate();

    super.onResume();
}

没效果。应用程序在从内存中消失并重新启动后会被翻译

1 个答案:

答案 0 :(得分:0)

您是否在清单android:configChanges="locale"中设置了区域设置属性?我还在每个活动的onCreate()中添加了此内容

if (Globals.langConfig != null) this.onConfigurationChanged(Globals.langConfig);

然后我覆盖每个活动中的onConfigurationChanged()

  @Override
        public void onConfigurationChanged(Configuration newConfig) {
         newConfig = Globals.getUserLanguage(this);

super.onConfigurationChanged(newConfig);

这可能不是最好的方式,但现在对我有用。如果你还没有,我认为覆盖onConfigurationChanged()方法可能是你最大的问题