WebView打开后,Android默认语言环境更改

时间:2018-07-11 14:05:56

标签: android webview locale multilingual

我被webview和Locale困扰。在我的多语言应用程序中,当用户从应用程序设置更改应用程序语言,然后用户导航至应用程序内的webview,然后将应用程序区域设置更改为英语(这是设备默认语言)。

下面是我的代码,用于更改设置-

private String Locale_English = "en";
private String Locale_RU = "ru";
private void setLanguage(String type){
    Locale locale = new Locale(type);
    Locale.setDefault(locale);
    finish();
}

假设用户选择了俄语,并且该用户导航到应用程序仪表板并且所有屏幕上的语言都发生了变化,但是如果用户从左侧菜单打开了静态页面,从而在应用程序中打开了Webview,则设备区域设置会发生变化,并且仪表板上的所有标签都会变为英语

下面是我的基本活动中的代码,它是dashboardactivity的父项

 @Override
protected void onStart() {
    super.onStart();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
        mCurrentLocale = getResources().getConfiguration().getLocales().get(0);
    } else{
        //noinspection deprecation
        mCurrentLocale = getResources().getConfiguration().locale;
    }
}

@Override
protected void onRestart() {
    super.onRestart();
    Locale locale = getLocale(this);
    if (!locale.equals(mCurrentLocale)) {
        mCurrentLocale = locale;
        setLocale();
        recreate();
    }
}

private void setLocale() {
    final Resources resources = getResources();
    final Configuration configuration = resources.getConfiguration();
    final Locale locale = getLocale(this);
    if (!configuration.locale.equals(locale)) {
        configuration.setLocale(locale);
        resources.updateConfiguration(configuration, null);
    }
   // Locale locale1 = getLocale(this);;

    Locale locale1= new Locale(getLocaleStr(this));
    Locale.setDefault(locale1);
}

public Locale getLocale(Context context){
    int language = SessionParam.getPrefDataInt(context,"Current_Language");
    String lang = "en";
    switch (language) {
        case 0:
            lang = "en";
            break;
        case 1:
            lang = "ru";
            break;
    }
    return new Locale(lang);
}

我调试了整个流程,问题是在加载Webview之后,用户导航到任何屏幕,然后将语言更改为英语。

1 个答案:

答案 0 :(得分:0)

尝试使用dashboardactivity本身进行编码。 首先:采用一个局部变量mAlreadySelectedLang

private String mAlreadySelectedLang;

并通过onCreate的{​​{1}}方法为该变量赋值

dashboardactivity

,在 @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dash_board); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ mAlreadySelectedLang = getResources().getConfiguration().getLocales().get(0); } else{ //noinspection deprecation mAlreadySelectedLang = getResources().getConfiguration().locale; } } 的{​​{1}}方法中,将lang保存到onDestroy()

dashboardactivity
  

我不认为这是解决方案,实际上更可能是补丁,但是   现在,您可以执行此操作,希望对您有所帮助。