用户选择语言时如何更改应用程序的语言?

新手上路,请多包涵

我希望我的应用程序支持西班牙语、葡萄牙语和英语三种语言。并提供在应用程序中选择语言的选项。我已经做了

1)3个可绘制文件夹drawable-es,drawable-pt,drawable。

  1. 3 个值文件夹 values-es,values-pt,values. 根据语言更改 String.xml 值。

我有 imageView 来选择语言。单击它时打开菜单,其中包含选项英语、西班牙语、葡萄牙语。

我通过此代码在应用程序内设置区域设置选项选择

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.en:
             Locale locale = new Locale("en");
             Locale.setDefault(locale);
             Configuration config = new Configuration();
             config.locale = locale;
             getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
             Toast.makeText(this, "Locale in English !", Toast.LENGTH_LONG).show();
             break;

        case R.id.pt:
             Locale locale2 = new Locale("pt");
             Locale.setDefault(locale2);
             Configuration config2 = new Configuration();
             config2.locale = locale2;
             getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());

             Toast.makeText(this, "Locale in Portugal !", Toast.LENGTH_LONG).show();
             break;

        case R.id.es:
             Locale locale3 = new Locale("es");
             Locale.setDefault(locale3);
             Configuration config3 = new Configuration();
             config3.locale = locale3;
             getBaseContext().getResources().updateConfiguration(config3, getBaseContext().getResources().getDisplayMetrics());

             Toast.makeText(this, "Locale in Spain !", Toast.LENGTH_LONG).show();
             break;
    }
    return super.onOptionsItemSelected(item);
}

我已在 Manifest- android:configChanges=“locale” 中声明

它工作,但它有一些问题。

问题:-

1)When language selected, screen that consists image of language selection not change but other screens are change.

2)根据手机的语言环境更改应用程序的方向后恢复语言。

原文由 mukesh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

这是网页的摘录: http ://android.programmerguru.com/android-localization-at-runtime/

用户从语言列表中选择应用程序时,更改应用程序的语言很简单。有一个像下面这样接受语言环境作为字符串的方法(比如英语的“en”,印地语的“hi”),为您的应用程序配置语言环境并刷新您当前的活动以反映语言的变化。在您再次手动更改之前,您应用的语言环境不会更改。

 public void setLocale(String lang) {
    Locale myLocale = new Locale(lang);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);
    Intent refresh = new Intent(this, AndroidLocalize.class);
    finish();
    startActivity(refresh);
}

确保您导入了以下软件包:

 import java.util.Locale;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.util.DisplayMetrics;

将清单添加到活动 android:configChanges=“locale|orientation”

原文由 Udhay 发布,翻译遵循 CC BY-SA 4.0 许可协议

Appcompat 1.6.0-alpha04 及更高版本以来,应用内语言选择器有一个新的(更好的)实现: https ://developer.android.com/about/versions/13/features/app-languages#androidx-impl

其他人建议的自定义实现中使用的方法在 API 级别 25 中已弃用。

原文由 Roozbeh Zarei 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题