运行时多语言Android应用程序?

时间:2017-07-26 14:32:21

标签: android localization runtime

我的目标是在运行时将应用程序语言从英语更改为中文,有什么建议吗?

 language_spinner = (Spinner)findViewById(R.id.settings_language_spinner);
 language_spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                if (pos == 1){
                    Toast.makeText(parent.getContext(),"You have selected English",Toast.LENGTH_SHORT).show();
                    setLocale("en");

                }else if (pos == 2){
                    Toast.makeText(parent.getContext(),"You have selected Chinese",Toast.LENGTH_SHORT).show();
                    setLocale("zh");
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });


    }

    public void setLocale(String lang) {

        myLocale = new Locale(lang);
        Resources res = getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        if (!conf.locale.getLanguage().equals(lang)) {
            conf.locale = myLocale;
            res.updateConfiguration(conf, dm);
            Intent refresh = new Intent(this, SettingsActivity.class);
            startActivity(refresh);
            finish();
        }
    }

此代码适用于英语,但不适用于中文 请帮我找到解决方案..

2 个答案:

答案 0 :(得分:0)

我可以告诉你如何实现这个:

第1步:为值目录中的所有文本生成字符串文件为string-ch,ch是中文的代码。并在代码中获取getResources.getString(R.string.text_name);的每个字符串,以便它可以在运行时使用英语或中文字符串值。

第2步:现在创建方法:

void changeLanguage(String language) {
        Locale locale = new Locale(language);
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config,
                getBaseContext().getResources().getDisplayMetrics());
    }

第3步:如果您想根据设备语言更改应用程序的语言,请调用此方法来更改语言,然后您可以调用:

changeLanguage(Locale.getDefault().getLanguage());

答案 1 :(得分:0)

在Util类中创建下面的函数

public static void setLocale(Activity activity, String languageCode) {
    Locale locale = new Locale(languageCode);
    Locale.setDefault(locale);
    Resources resources = activity.getResources();
    Configuration config = resources.getConfiguration();
    config.setLocale(locale);
    resources.updateConfiguration(config, resources.getDisplayMetrics());
}

在开始时从活动中调用此函数。可以在 Change app language programmatically in Android 页找到包含此代码段的原始帖子。