android多语言国际化

来源:互联网 发布:网络阅读媒介有哪些 编辑:程序博客网 时间:2024/06/02 03:18

在很多app中都涉及到中英文切换 繁体简体切换,再此简单的记录一下


   1,首先大家要清楚,默认情况下,Android会根据系统的语言地区设置,自动选择对应的资源。也就是说会首先尝试语言地区全匹配,如果没有权匹配的资源包,则会尝试匹配语言,最后则会取默认的。比如如果Android系统的语言地区是中文简体,则首先会尝试从/values-zh-rCN中获取资源,如果没有此文件夹或者文件夹中没有响应的资源,则会尝试/values-zh,都获取不到的情况下即从/values中获取。
/values是必须存在的,否则不能通过编译

     2,在命名values文件时是有要求的,下面是地区的命名连接:点击打开链接  ,接下来就是在不同的values中鲁相关语言的string代码


      3,书写相关代码,效果图

public class MainActivity extends AppCompatActivity {    ImageButton btn_settings;    AlertDialog dialog;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //读取SharedPreferences数据,初始化语言设置        setLanguage();        getSupportActionBar().hide();        setContentView(R.layout.activity_main);        btn_settings = (ImageButton) findViewById(R.id.btn_settings);        //点击设置按钮进入语言设置        btn_settings.setOnClickListener(new View.OnClickListener() {            public void onClick(View view) {                //创建单选框                final AlertDialog.Builder builder = new                        AlertDialog.Builder(MainActivity.this);                builder.setSingleChoiceItems(new String[]{"Auto", "简体中文"},                        getSharedPreferences("language", Context.MODE_PRIVATE).getInt("language",0),                        new DialogInterface.OnClickListener() {                            //点击单选框某一项以后                            public void onClick(DialogInterface dialogInterface, int i) {                                //将选中项存入SharedPreferences,以便重启应用后读取设置                                SharedPreferences preferences = getSharedPreferences("language", Context.MODE_PRIVATE);                                SharedPreferences.Editor editor = preferences.edit();                                editor.putInt("language",i);                                editor.apply();
setLanguage();
dialog.dismiss(); Intent intent = new Intent(MainActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); /* 重新在新的任务栈开启新应用 Intent intent = new Intent(MainActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); android.os.Process.killProcess(android.os.Process.myPid()); */ } }); dialog = builder.create(); dialog.show(); } }); }/*

重要的代码其实就是这里
*/    private void setLanguage() {        //读取SharedPreferences数据,默认选中第一项        SharedPreferences preferences = getSharedPreferences("language", Context.MODE_PRIVATE);        int language = preferences.getInt("language", 0);        //根据读取到的数据,进行设置        Resources resources = getResources();//获得资源对象        DisplayMetrics displayMetrics = resources.getDisplayMetrics(); //获取手机屏幕参数        Configuration configuration = resources.getConfiguration(); //Configuration类是专门用来描述手机设备上的配置信息。
这些配置信息包括用户特定的配置项,也包括系统的动态设备配置。        switch (language){            case 0:                configuration.setLocale(Locale.getDefault());//设置为手机系统默认的语言                break;            case 1:                configuration.setLocale( Locale.CHINESE);   //设置为英文,系统会检测values_en的资源文件,如果没有会执行values中的文件                break;            default:                break;        }        resources.updateConfiguration(configuration,displayMetrics);//更新修改后的资源配置    }


         

原创粉丝点击