咱們知道,建好一個android 的項目後,默認的res下面 有layout、values、drawable等目錄。這些都是程序默認的資源文件目錄,若是要實現多語言版本的話,咱們就要添加要實現語言的對應的資源文件。步驟以下:android
1)建立本地文件夾和字符串文件app
爲了支持更多語言,在res/中建立其餘的values擴展的文件夾,並在文件夾名後加上一個橫線和國家的ISO碼。例如,values-es/就是包含代碼爲"es"的資源文件夾。Android在運行時根據設置加載合適的資源。一旦你以爲了須要支持的語言,就能夠建立資源的子文件夾和字符串文件了。例如:ide
MyProject/函數
res/ui
values/this
strings.xmlspa
values-es/code
string.xmlxml
values-fr/blog
string.xml
把字符串值添加到合適的文件中,在運行時,Android根據本地用戶的設置來使用合適的字符串資源。例如,下面是不一樣語言對應的不一樣的字符串:
英語(默認),/values/string.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <string name="title">My Application</string> 4 <string name="hello_world">Hello World!</string> 5 </resources>
西班牙語, /values-es/strings.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <string name="title">Mi Aplicación</string> 4 <string name="hello_world">Hola Mundo!</string> 5 </resources>
法語,/values-fr/strings.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <string name="title">Mon Application</string> 4 <string name="hello_world">Bonjour le monde !</string> 5 </resources>
android多國語言文件夾文件彙總以下:
Arabic, Egypt (ar_EG) -----------------------------阿拉伯語,埃及
Arabic, Israel (ar_IL) -------------------------------阿拉伯語,以色列
Bulgarian, Bulgaria (bg_BG) ---------------------保加利亞語,保加利亞
Catalan, Spain (ca_ES) ---------------------------加泰隆語,西班牙
Czech, Czech Republic (cs_CZ) -----------------捷克語,捷克共和國
Danish, Denmark(da_DK) ------------------------丹麥語,丹麥
German, Austria (de_AT) -------------------------德語,奧地利
German, Switzerland (de_CH) -------------------德語,瑞士
German, Germany (de_DE) ----------------------德語,德國
German, Liechtenstein (de_LI) ------------------德語,列支敦士登的
Greek, Greece (el_GR) ----------------------------希臘語,希臘
English, Australia (en_AU) -------------------------英語,澳大利亞
English, Canada (en_CA) --------------------------英語,加拿大
English, Britain (en_GB) ----------------------------英語,英國
English, Ireland (en_IE) -----------------------------英語,愛爾蘭
English, India (en_IN) --------------------------------英語,印度
English, New Zealand (en_NZ) ---------------------英語,新西蘭
English, Singapore(en_SG) --------------------------英語,新加坡
English, US (en_US) -----------------------------------英語,美國
English, Zimbabwe (en_ZA) --------------------------英語,津巴布韋
Spanish (es_ES) ----------------------------------------西班牙
Spanish, US (es_US) -----------------------------------西班牙語,美國
Finnish, Finland (fi_FI) ---------------------------------芬蘭語,芬蘭
French, Belgium (fr_BE) -------------------------------法語,比利時
French, Canada (fr_CA) -------------------------------法語,加拿大
French, Switzerland (fr_CH) --------------------------法語,瑞士
French, France (fr_FR) --------------------------------法語,法國
Hebrew, Israel (he_IL) ---------------------------------希伯來語,以色列
Hindi, India (hi_IN) -------------------------------------印地語,印度
Croatian, Croatia (hr_HR) ----------------------------克羅地亞語,克羅地亞
Hungarian, Hungary (hu_HU) ------------------------匈牙利語,匈牙利
Indonesian, Indonesia (id_ID) ------------------------印尼語,印尼
Italian, Switzerland (it_CH) ----------------------------意大利語,瑞士
Italian, Italy (it_IT) ---------------------------------------意大利語,意大利
Japanese (ja_JP) ----------------------------------------日語
Korean (ko_KR) ------------------------------------------朝鮮語
Lithuanian, Lithuania (lt_LT) --------------------------立陶宛語,立陶宛
Latvian, Latvia (lv_LV) ---------------------------------拉托維亞語,拉托維亞
Norwegian-Bokmol, Norway(nb_NO) ---------------挪威語,挪威
Dutch, Belgium (nl_BE) --------------------------------荷蘭語,比利時
Dutch, Netherlands (nl_NL) ---------------------------荷蘭語,荷蘭
Polish (pl_PL) -------------------------------------------波蘭
Portuguese, Brazil (pt_BR) ---------------------------葡萄牙語,巴西
Portuguese, Portugal (pt_PT) ------------------------葡萄牙語,葡萄牙
Romanian, Romania (ro_RO) ------------------------羅馬尼亞語,羅馬尼亞
Russian (ru_RU) ----------------------------------------俄語
Slovak, Slovakia (sk_SK) ------------------------------斯洛伐克語,斯洛伐克
Slovenian, Slovenia (sl_SI) ---------------------------斯洛文尼亞語,斯洛文尼亞
Serbian (sr_RS) ----------------------------------------塞爾維亞語
Swedish, Sweden (sv_SE) ----------------------------瑞典語,瑞典
Thai, Thailand (th_TH) --------------------------------泰語,泰國
Tagalog, Philippines (tl_PH) --------------------------菲律賓語,菲律賓
Turkish, Turkey (tr_TR) -------------------------------土耳其語,土耳其
Ukrainian, Ukraine (uk_UA) --------------------------聯合王國
Vietnamese, Vietnam (vi_VN) -----------------------越南語,越南
Chinese, PRC (zh_CN)--------------------------------中文,中國
Chinese, Taiwan (zh_TW)-----------------------------中文,臺灣
2)使用字符串資源
使用字符資源有如下兩種方法:
一、在xml文件中,採用@string/<string_name>來引用字符串屬性,例如:
1 <TextView 2 android:layout_width="wrap_content" 3 android:layout_height="wrap_content" 4 android:text="@string/hello_world" />
二、在源代碼中,可使用語句R.string.<string_name>來引用字符串資源,例如:
1 // Get a string resource from your app's Resources 2 String hello = getResources().getString(R.string.hello_world); 3 4 // Or supply a string resource to a method that requires a string 5 TextView textView = new TextView(this); 6 textView.setText(R.string.hello_world);
自定義語言選擇列表,並實現語言切換的實例以下:
一、自定義語言列表
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="language_choice"> <item>@string/language_CN</item> <item>@string/language_EN</item> <item>@string/language_ES</item> <item>@string/language_FR</item> </string-array> </resources>
二、定義語言選擇對話框,並監聽點擊事件
case R.id.title_setting: final String[] language = mContext.getResources().getStringArray(R.array .language_choice); final SharedPreferences sharedPreferences = mContext.getSharedPreferences ("language_choice", mContext.MODE_PRIVATE); final int id = sharedPreferences.getInt("id", 0); final AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(R.string.language_chioce_title); builder.setSingleChoiceItems(language, id, new DialogInterface .OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: // default language_id = 0; break; case 1: language_id = 1; // english break; case 2: language_id = 2; // spanish break; case 3: // french language_id = 3; break; default: //default language_id = 0; break; } sharedPreferences.edit().putInt("id", language_id).commit(); } }); builder.setPositiveButton(R.string.language_save, new DialogInterface .OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ((Activity)mContext).finish(); Intent intent=new Intent(); intent.setClass(mContext,ClientActivity.class); mContext.startActivity(intent);
setLanguage();// 必須加上,否者不會更新語言
} });
builder.show();
break;
其中,setLanguage()的代碼爲:
private void setLanguage() {
Resources resources=getResources();
final SharedPreferences sharedPreferences=getSharedPreferences("language_choice", mContext
.MODE_PRIVATE);
language_id = sharedPreferences.getInt("id", 0);
Log.e(TAG,"id=="+language_id);
// 獲取應用內語言
final Configuration configuration=resources.getConfiguration();
// Locale locale=configuration.locale;
DisplayMetrics displayMetrics=resources.getDisplayMetrics();
switch (language_id){
case 0:
configuration.locale=Locale.getDefault();
break;
case 1:
configuration.locale=Locale.SIMPLIFIED_CHINESE;
break;
case 2:
configuration.locale=Locale.ENGLISH;
break;
case 3:
configuration.locale=new Locale("es");
break;
case 4:
configuration.locale=Locale.FRENCH;
break;
default:
configuration.locale=Locale.getDefault();
break;
}
Log.e(TAG,"configuration=="+configuration.locale);
mContext.getResources().updateConfiguration(configuration,displayMetrics);
}
三、在MainActivity中實現語言切換
調用setLanguage() 便可。
注:在該部分代碼中,出現一種很奇怪的問題,就是保存的數據在下次應用程序啓動時,該app的語言仍然是系統默認的而不是本身上次設置的,查看代碼發如今調用mContext.getResources().updateConfiguration(configuration,displayMetrics);後,系統中
updateConfiguration(Configuration config,
DisplayMetrics metrics, CompatibilityInfo compat)函數的int density = config.densityDpi;處出現「can not find the local variable 'config' 」,
這個問題困擾很久,至今仍在尋找問題所在???
出現該問題的緣由是:我在重啓應用時,在mainActivity中經過SharedPreferences 讀取配置信息,此時應用程序已經啓動,雖然調用了setLanguage()可是並未實現語言的更改。
解決辦法是:建立一個應用程序myApplication,並繼承Application。而後在onCreate()方法中調用setLanguage();同時須要在AndroidManifest.xml中加上android:configChanges="locale",並添加權限<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>。具體代碼以下:
(1)建立myApplication
public class myApplication extends Application {
private String TAG=myApplication.class.getSimpleName();
private Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext=this;
setLanguage();
}
(2) 修改AndroidManifest.xml文件
<application android:allowBackup="true" android:name="com.snow.myApplication.myApplication" android:icon="@drawable/logo" android:label="@string/app_name" android:configChanges="locale" android:theme="@android:style/Theme.NoTitleBar"> <activity
android:name="com.snow.activitys.***Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
(3) 添加權限
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
至此修改應用的語言完美實現。