Android is multilingual

Here, take Chinese, English and Indonesian as an example to record the implementation process

1.1. Add string. XML files in different languages to value folder, respectively

Values of the default

<resources> <string name="app_name"> Multi-language example </string> <string name=" lan_Chinese "> Chinese </string> <string Name ="lan_en"> English </string> <string name="lan_in"> Indonesian </string> <string name="text_content"> This is the content display area </string> <string Name ="select_language"> Select a language </string> </resources>Copy the code

Values – en English

<resources> <string name="app_name">mulitiLanguage</string> <string name="lan_chinese">Chinese</string> <string name="lan_en">English</string> <string name="lan_in">Bahasa Indonesia</string> <string name="text_content">Hello World! </string> <string name="select_language">Choose a language</string> </resources>Copy the code

Values – in Indonesian

<resources> <string name="app_name">Multi-bahasa</string> <string name="lan_chinese">Cina</string> <string name="lan_en">Inggris</string> <string name="lan_in">Indonesia</string> <string name="text_content">Hello dunia! </string> <string name="select_language">Pilih bahasa</string> </resources>Copy the code

1.2. Create the BaseActivity class and put multilingual switching here. The reason is that we can switch languages by calling the Recreate () method inside the parent class (we can also restart the application by killProcess)

Here we deal with the method is to store the user’s language choice in Sharepreference, and then look up the value in Sharepreference when the application is started, select the corresponding language, and then here is the multi-language core code

Configuration config = getResources().getConfiguration();
config.locale = new Locale(sta);
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
Copy the code

All the code for BaseActivity is also posted

public class BaseActivity extends Activity{ @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); EventBus.getDefault().register(this); changeAppLanguage(); } @Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(String str) { switch (str) { case "EVENT_REFRESH_LANGUAGE": changeAppLanguage(); recreate(); // Refresh the interface break; } } public void changeAppLanguage() { String sta = getLanguageLocal(this); if(sta ! = null && !" ".equals(sta)){// Local language set Configuration config = getResources().getConfiguration(); config.locale = new Locale(sta); * config.locale = locale.traditional_Chinese; * config.locale = locale.traditional_Chinese; config.locale = Locale.ENGLISH; config.locale = Locale.SIMPLIFIED_CHINESE; config.locale = Locale.TRADITIONAL_CHINESE; * */ getResources().updateConfiguration(config, getResources().getDisplayMetrics()); } } public static void setLanguageLocal(Context context, String language){ SharedPreferences preferences; SharedPreferences.Editor editor; preferences = PreferenceManager.getDefaultSharedPreferences(context); editor = preferences.edit(); editor.putString("language", language); editor.commit(); } public static String getLanguageLocal(Context context){ SharedPreferences preferences; preferences = PreferenceManager.getDefaultSharedPreferences(context); String language = preferences.getString("language", ""); return language; } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }}Copy the code

1.3. When called, send the event directly using EventBus

public class SettingActivity extends BaseActivity{ @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SetTitle (" set the Activity "); final String[] cities = {getString(R.string.lan_chinese), getString(R.string.lan_en),getString(R.string.lan_in)}; Final String[] locals = {"zh_CN", "en","in"}; Button Button = findViewById(r.i.b.tn_setting); button.setText("Language"); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(SettingActivity.this); builder.setIcon(R.mipmap.ic_launcher); builder.setTitle(R.string.select_language); builder.setItems(cities, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setLanguageLocal(SettingActivity.this, locals[which]); EventBus.getDefault().post("EVENT_REFRESH_LANGUAGE"); }}); builder.show(); }}); }}Copy the code

1.4, and then paste the commonly used multilingual folder files here

Arabic, inform (ar_EG) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Arabic, Egyptian Arabic, Israel (ar_IL) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Arabic, Bulgarian Israel, Bulgaria (bg_BG) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Bulgarian, Bulgaria Catalan, - (ca_ES) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- add tyrone, Spain, Czech, Czech Republic (cs_CZ) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Czech, Danish the Czech Republic, Denmark (da_DK) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Danish, Danish, German, Austria (de_AT) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- German, German, Austria, Switzerland (de_CH) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - German. German, Switzerland, Germany (de_DE) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - German, German German, Liechtenstein (de_LI) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- German. Liechtenstein Greek, Greece (el_GR) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Greek, Greek English, Australia (en_AU) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- English, Australian English, Canada (en_CA) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - English, Canadian English, Britain (en_GB) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- English, British English, Ireland (en_IE) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- English, English, Ireland, India (en_IN) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - English, Indian English, New Zealand (en_NZ) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - English, New Zealand English, Singapore (en_SG) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - English, English in Singapore, US (en_US) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- English, American English, Zimbabwe (en_ZA) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - English, The Spanish (es_ES) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Spanish in Spain, US (es_US) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Spanish, the Finnish, Finland (fi_FI) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Finnish, French Finland, Belgium (fr_BE) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- French, French, Belgium, Canada (fr_CA) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- French, French Canada, Switzerland (fr_CH) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - French, French, Switzerland, France (fr_FR) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- French, Hebrew, France, Israel (he_IL) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Hebrew, Hindi, Israel, India (hi_IN) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Hindi, India Croatian, Croatia (hr_HR) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Croatian, Hungarian Croatia, Hungary (hu_HU) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- hun, Hungarian Indonesian, Indonesia or (id_ID) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Indonesian, Indonesia's Italian, Switzerland (it_CH) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Italian, Italian, Switzerland, Italy (the it_IT) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Italian, Italy Japanese (ja_JP) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Japanese Korean (ko_KR) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Korean Lithuanian, Lithuania (lt_LT) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Lithuanian, Latvian in Lithuania, Latvia (lv_LV) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Latvia, Latvia Norwegian - Bokmol, Norway (nb_NO) -- -- -- -- -- -- -- -- -- -- -- -- -- -- --, Norwegian, Dutch Norway, Belgium (nl_BE) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Dutch, Dutch in Belgium, the Netherlands (nl_NL) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Dutch, The Netherlands Polish (pl_PL) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Portuguese in Poland, Brazil (pt_BR) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Portuguese, Brazilian Portuguese, podcast (pt_PT) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Portuguese, Romanian, Portugal, Romania (ro_RO) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Romanian, Romania, the Russian (ru_RU) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Russian Slovak, Slovakia (sk_SK) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --, slovak, Slovenian Slovakia, Slovenia (sl_SI) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Slovenian, Slovenia's observer (sr_RS) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- the Serbian Swedish, Sweden (sv_SE) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Swedish, Thai, Sweden, Thailand (th_TH) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Thai, Tagalog in Thailand, the Philippines (tl_PH) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- pilipino, Turkish in the Philippines, Turkey (tr_TR) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Turkish, Ukrainian, Turkey, Ukraine (uk_UA) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - the United Kingdom Vietnamese, one (vi_VN) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Vietnamese, Chinese in Vietnam, the PRC (zh_CN) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - Chinese, Chinese in China, Taiwan (zh_TW) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Chinese, TaiwanCopy the code

Load custom fonts

Pull the TTF font file into the SRC ->main-> Assets -> Fronts folder and pull a Typeface object user font and call the setTypeface method of the TextView

Private void setTextFont(){// Load a custom font try{TEXT_TYPE = Typeface.createFromAsset(getAssets(),"fronts/black_simplified.TTF"); }catch(Exception e){log. I ("MainActivity"," Failed to load third-party fonts." ); TEXT_TYPE = null ; } if(TEXT_TYPE ! = null){ textView.setTypeface(TEXT_TYPE) ; }}Copy the code

Click here to download demo

\