Android APP 中英文切換


 

實習期間,師父要求做app的中英文切換,就順便記錄了下。

 

一、AndroidManifest.xml文件(清單文件)

在每個要切換語言的Activity下面添加:

android:configChanges="locale"

1 <activity
2             android:name="com.activity.RepairActivity"
3             android:configChanges="locale"
4             android:launchMode="singleTop"
5             android:screenOrientation="portrait"
6             android:windowSoftInputMode="adjustPan" >
7         </activity>

 百度上都是這么寫的,然而我並沒有用到。

 

二、創建一個英文的strings.xml文件,目錄名為values-en

or

 

values/strings.xml這個為默認語言,如果values-en目錄下的strings.xml不存在,那英文就會選取默認語言。

1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3     <string name="app_name">language</string>
4     <string name="action_settings">Settings</string>
5     <string name="alert_data_init">updating..</string>
6 </resources>

 

三、核心代碼

 1 /**
 2      * 刷新語言
 3      */
 4     public void updateActivity(String sta) {
 5 
 6         // 本地語言設置
 7         Locale myLocale = new Locale(sta);
 8         Resources res = getResources();// 獲得res資源對象
 9         DisplayMetrics dm = res.getDisplayMetrics();// 獲得屏幕參數:主要是分辨率,像素等。
10         Configuration conf = res.getConfiguration();// 獲得設置對象
11         conf.locale = myLocale;// 簡體中文
12         res.updateConfiguration(conf, dm);
13         // startActivity((new Intent(this, TabActivity.class)));
14         // this.finish();
15     }

String sta= getResources().getConfiguration().locale.getCountry()  //用於判斷當前的語言

Locale.getDefault().getLanguage() //語言:取到的比如中文為zh,英文為en,日文為ko;

Locale.getDefault().toString() //具體的類別:比如繁體為zh_TW,簡體為zh_CN。英文中有en_GB;日文有ko_KR。
把需要切換的Strings.xml對應的語言,傳入到 updateActivity(String sta)  方法.....
 

也可以調用此類

 

public class LanguageSettings {

    private static LanguageSettings language = null;

    private String currentLanguage = "zh";

    private LanguageSettings() {
    }

    public static LanguageSettings getInstance() {
        if (language == null) {
            language = new LanguageSettings();
        } else {

        }
        return language;
    }

    public String getCurrentLanguage() {
        return currentLanguage;
    }

    public void switchCurrentLanguage() {
        if (currentLanguage.equals("zh")) {
            currentLanguage = "en";
        } else {
            currentLanguage = "zh";
        }
    }
}
LanguageSettings

 

 1 // 切換成英文
 2                 if (LanguageSettings.getInstance().getCurrentLanguage()
 3                         .equals("zh")) {
 4                     updateActivity("en");
 5                     LanguageSettings.getInstance().switchCurrentLanguage();
 6                 } else {
 7                     // 切換成中文
 8                     updateActivity("zh");
 9                     LanguageSettings.getInstance().switchCurrentLanguage();
10                 }

LanguageSettings.getInstance().getCurrentLanguage() 給變量動態賦值的標識列,用於判斷!(采用單例模式)

 

 

我自己寫的是這樣的:

private void checkLanguage() {
        // 界面出來前判斷好
        String aString = SystemArgs.LANGUAGE;
        System.out.print(aString);
        System.out.print(SystemArgs.LANGUAGE);
        String language = pref.getString(SystemArgs.LANGUAGE, "Chinese");
        System.out.print(language);
        Log.i("a", language);
        try {
            if (language.equalsIgnoreCase("Chinese") || language.equals("中文"))
                chooseLanguage(Locale.CHINA);
            else if (language.equalsIgnoreCase("English")
                    || language.equals("英文"))
                chooseLanguage(Locale.US);
        } catch (Exception e) {
            // Log.i("error", "語言選擇出錯");
        }

    }

 

private void chooseLanguage(Locale locale) {
        Resources resources = getResources();// 獲得res資源對象

        Configuration config = resources.getConfiguration();// 獲得設置對象

        DisplayMetrics dm = resources.getDisplayMetrics();// 獲得屏幕參數:主要是分辨率,像素等。

        config.locale = locale; // 語言

        resources.updateConfiguration(config, dm);
    }

 對於圖片的更改,需要自己在oncreate里判斷語言,然后顯示什么圖片

 

四、其他的記錄

對ListPreference的語言選項設置默認值

try {
            if (language.equalsIgnoreCase("Chinese") || language.equals("中文"))
                CLanguage_ListPreference.setValueIndex(0);
            else if (language.equalsIgnoreCase("English")
                    || language.equals("英文"))
                CLanguage_ListPreference.setValueIndex(1);
        } catch (Exception e) {
            // Log.i("error", "語言選擇出錯");
        }

 

String language = defaultSharedPreferences.getString(
                SystemArgs.LANGUAGE, "中文");
        ImageView button = null;
        // 圖片要自己去判斷語言選擇
        if (language.equalsIgnoreCase("Chinese") || language.equals("中文"))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM