Android How to change language programaticaly
Hello Friends
This My new blog . Here i am simply explain you how to change language programaticaly in you app .
just simple step are below
1. prepair a string resource for the four language (English , hindi , marathi , russian)
- <resources>
- <string name="app_name">ChangeLocaleExample</string>
- <string name="hello_world">Hello World</string>
- <string name="btn_en">English</string>
- <string name="btn_ru">Russian</string>
- <string name="btn_de">German</string>
- <string name="btn_fr">French</string>
- </resources>
Source code values-ru/strings.xml (Russian)
- <resources>
- <string name="hello_world">Привет, Мир</string>
- <string name="btn_en">Английский</string>
- <string name="btn_ru">Русский</string>
- <string name="btn_de">Немецкий</string>
- <string name="btn_fr">Французский</string>
- </resources>
- Source code values-hi/strings.xml (Hindi)
- <resources>
- <string name="hello_world">नमस्ते दुनिया</string>
<string name="btn_en">अंग्रेज़ी</string> <string name="btn_ru">Russisch</string> <string name="btn_de">हिंदी</string> <string name="btn_fr">मराठी</string>
- </resources>
- Source code values-de/strings.xml (marathi)
- <resources>
- <string name="hello_world">हॅलो जग</string>
<string name="btn_en">इंग्रजी</string> <string name="btn_ru">Russisch</string> <string name="btn_de">हिंदी</string> <string name="btn_fr">मराठी</string>
- </resources>
step 2 :
Creat resource file with 4 button and 1 textview
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/txt_hello"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:gravity="center"
- android:text="@string/hello_world" />
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:orientation="horizontal"
- android:gravity="center">
- <Button
- android:id="@+id/btn_en"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@string/btn_en" />
- <Button
- android:id="@+id/btn_ru"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@string/btn_ru" />
- <Button
- android:id="@+id/btn_de"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@string/btn_de" />
- <Button
- android:id="@+id/btn_fr"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@string/btn_fr" />
- </LinearLayout>
- </LinearLayout>
Step 3 -
main activity code
(MainActivity.java)
- public class MainActivity extends AppCompatActivity implements View.OnClickListener{
- private TextView txt_hello;
- private Button btn_en, btn_ru, btn_fr, btn_de;
- private Locale myLocale;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- this.txt_hello = (TextView)findViewById(R.id.txt_hello);
- this.btn_en = (Button) findViewById(R.id.btn_en);
- this.btn_ru = (Button) findViewById(R.id.btn_ru);
- this.btn_fr = (Button)findViewById(R.id.btn_fr);
- this.btn_de = (Button)findViewById(R.id.btn_de);
- this.btn_en.setOnClickListener(this);
- this.btn_ru.setOnClickListener(this);
- this.btn_fr.setOnClickListener(this);
- this.btn_de.setOnClickListener(this);
- loadLocale();
- }
- public void loadLocale()
- {
- String langPref = "Language";
- SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
- String language = prefs.getString(langPref, "");
- changeLang(language);
- }
- public void saveLocale(String lang)
- {
- String langPref = "Language";
- SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
- SharedPreferences.Editor editor = prefs.edit();
- editor.putString(langPref, lang);
- editor.commit();
- }
- public void changeLang(String lang)
- {
- if (lang.equalsIgnoreCase(""))
- return;
- myLocale = new Locale(lang);
- saveLocale(lang);
- Locale.setDefault(myLocale);
- android.content.res.Configuration config = new android.content.res.Configuration();
- config.locale = myLocale;
- getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
- updateTexts();
- }
- private void updateTexts()
- {
- txt_hello.setText(R.string.hello_world);
- btn_en.setText(R.string.btn_en);
- btn_ru.setText(R.string.btn_ru);
- btn_fr.setText(R.string.btn_fr);
- btn_de.setText(R.string.btn_de);
- }
- @Override
- public void onClick(View v) {
- String lang = "en";
- switch (v.getId()) {
- case R.id.btn_en:
- lang = "en";
- break;
- case R.id.btn_ru:
- lang = "ru";
- break;
- case R.id.btn_de:
- lang = "de";
- break;
- case R.id.btn_fr:
- lang = "fr";
- break;
- default:
- break;
- }
- changeLang(lang);
- }
- @Override
- public void onConfigurationChanged(android.content.res.Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- if (myLocale != null){
- newConfig.locale = myLocale;
- Locale.setDefault(myLocale);
- getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
- }
- }
- }
this is simple code for language change programaticaly. u can change multiple language .
- Mahesh Kailash Saraswat













