android多语言国际化

在很多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);//更新修改后的资源配置

    }


         

猜你喜欢

转载自blog.csdn.net/qq_35893839/article/details/76633932