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);//更新修改後的資源配置

    }


         

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章