如何更改android app语言programmaticallly

时间:2017-12-07 06:08:24

标签: android localization

我是这个社区的新成员。首先我要对每个人说 “你好”..... 这是我的第一个问题。这是基于Android应用程序开发。 所以这是我的问题。 我还在开发一个android应用程序。在该应用程序中,我需要开发3种多种语言。

1.English - “en” 2.Chinese(简体) - “zh_” 3.Chinese(繁体) - “zh_TW”

所以我为这些语言添加了字符串资源,并为此实现了代码部分。但不幸的是,它没有工作一段时间。但它正在工作一段时间。我无法识别我的代码的错误。它似乎没有任何错误。

这些是我的测试字符串名称(所有语言)

  • “en” - 登录
  • “ZH _” - 登录
  • “zh_TW的” - 登录

这是我的代码部分

public class MainActivity extends AppCompatActivity {  

private Spinner spinnerctrl;
private Locale myLocale;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

  spinnerctrl=(Spinner)findViewById(R.id.spinner1);

    spinnerctrl.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        public void onItemSelected(AdapterView<?> parent, View view,
                                   int pos, long id) {

            if (pos == 1) {

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

                Toast.makeText(parent.getContext(),
                        "You have selected Chinese(Traditional)", Toast.LENGTH_SHORT)
                        .show();
                saveLocale("zh_TW");

            }
            else if (pos == 3)
            {
                Toast.makeText(parent.getContext(),
                        "You have select English",Toast.LENGTH_SHORT)
                        .show();
                saveLocale("en");
            }

        }

        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }

    });

    loadLocale(); 

@Override
public void onBackPressed()
{
    Intent MyProfile = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(MyProfile);
    finish();
}

public void loadLocale() {
    String langPref = "Language";
    SharedPreferences prefs = getSharedPreferences("CommonPrefs",
            Activity.MODE_PRIVATE);
    String language = prefs.getString(langPref, "");
    changeLang(language);
}

public void changeLang(String lang) {
    if (lang.equals(""))
        return;
    myLocale = new Locale(lang);
    saveLocale(lang);
    Locale.setDefault(myLocale);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);
}

public void saveLocale(String lang) {
    String langPref = "Language";
    SharedPreferences prefs = getSharedPreferences("CommonPrefs",
            Activity.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(langPref, lang);
    editor.commit();

}}

所以这是我的问题。这个代码部分运行时没有任何运行时错误,等等。但是没有工作一段时间。我不知道为什么会这样。所以如果有人可以帮助我解决这个问题,那将是非常大的帮助我。 谢谢。

1 个答案:

答案 0 :(得分:0)

public static void changeLocale(Context context, String localeString) {

String locale = "en";
if (localeString != null) {
    if (localeString.equals("Malay")) {
        locale = "ms";
    } else if (localeString.equals("Myanmar")) {
        locale = "my";
    } else if (localeString.equals("Tamil")) {
        locale = "ta";
    }
}

Locale myLocale = new Locale(locale);
Resources res = context.getResources();
DisplayMetrics dm = res.getDisplayMetrics();

Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);

}