Sunday, 11 December 2016

Android How to change language programaticaly



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)

  1. <resources>
  2. <string name="app_name">ChangeLocaleExample</string>
  3. <string name="hello_world">Hello World</string>
  4. <string name="btn_en">English</string>
  5. <string name="btn_ru">Russian</string>
  6. <string name="btn_de">German</string>
  7. <string name="btn_fr">French</string>
  8. </resources>



Source code values-ru/strings.xml (Russian)

  1. <resources>
  2. <string name="hello_world">Привет, Мир</string>
  3. <string name="btn_en">Английский</string>
  4. <string name="btn_ru">Русский</string>
  5. <string name="btn_de">Немецкий</string>
  6. <string name="btn_fr">Французский</string>
  7. </resources>



  1. Source code values-hi/strings.xml (Hindi)

  2. <resources>
  3. <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>
  4. </resources>
  5. Source code values-de/strings.xml (marathi)
  6. <resources>
  7. <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>
  8. </resources>




step 2 :

Creat resource file with 4 button and 1 textview


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <TextView
  7. android:id="@+id/txt_hello"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:layout_weight="1"
  11. android:gravity="center"
  12. android:text="@string/hello_world" />
  13. <LinearLayout
  14. android:layout_width="match_parent"
  15. android:layout_height="wrap_content"
  16. android:layout_weight="1"
  17. android:orientation="horizontal"
  18. android:gravity="center">
  19. <Button
  20. android:id="@+id/btn_en"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:layout_weight="1"
  24. android:text="@string/btn_en" />
  25. <Button
  26. android:id="@+id/btn_ru"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:layout_weight="1"
  30. android:text="@string/btn_ru" />
  31. <Button
  32. android:id="@+id/btn_de"
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:layout_weight="1"
  36. android:text="@string/btn_de" />
  37. <Button
  38. android:id="@+id/btn_fr"
  39. android:layout_width="wrap_content"
  40. android:layout_height="wrap_content"
  41. android:layout_weight="1"
  42. android:text="@string/btn_fr" />
  43. </LinearLayout>
  44. </LinearLayout>





Step 3 -

main activity code
(MainActivity.java)

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  2. private TextView txt_hello;
  3. private Button btn_en, btn_ru, btn_fr, btn_de;
  4. private Locale myLocale;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. this.txt_hello = (TextView)findViewById(R.id.txt_hello);
  10. this.btn_en = (Button) findViewById(R.id.btn_en);
  11. this.btn_ru = (Button) findViewById(R.id.btn_ru);
  12. this.btn_fr = (Button)findViewById(R.id.btn_fr);
  13. this.btn_de = (Button)findViewById(R.id.btn_de);
  14. this.btn_en.setOnClickListener(this);
  15. this.btn_ru.setOnClickListener(this);
  16. this.btn_fr.setOnClickListener(this);
  17. this.btn_de.setOnClickListener(this);
  18. loadLocale();
  19. }
  20. public void loadLocale()
  21. {
  22. String langPref = "Language";
  23. SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
  24. String language = prefs.getString(langPref, "");
  25. changeLang(language);
  26. }
  27. public void saveLocale(String lang)
  28. {
  29. String langPref = "Language";
  30. SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
  31. SharedPreferences.Editor editor = prefs.edit();
  32. editor.putString(langPref, lang);
  33. editor.commit();
  34. }
  35. public void changeLang(String lang)
  36. {
  37. if (lang.equalsIgnoreCase(""))
  38. return;
  39. myLocale = new Locale(lang);
  40. saveLocale(lang);
  41. Locale.setDefault(myLocale);
  42. android.content.res.Configuration config = new android.content.res.Configuration();
  43. config.locale = myLocale;
  44. getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
  45. updateTexts();
  46. }
  47. private void updateTexts()
  48. {
  49. txt_hello.setText(R.string.hello_world);
  50. btn_en.setText(R.string.btn_en);
  51. btn_ru.setText(R.string.btn_ru);
  52. btn_fr.setText(R.string.btn_fr);
  53. btn_de.setText(R.string.btn_de);
  54. }
  55. @Override
  56. public void onClick(View v) {
  57. String lang = "en";
  58. switch (v.getId()) {
  59. case R.id.btn_en:
  60. lang = "en";
  61. break;
  62. case R.id.btn_ru:
  63. lang = "ru";
  64. break;
  65. case R.id.btn_de:
  66. lang = "de";
  67. break;
  68. case R.id.btn_fr:
  69. lang = "fr";
  70. break;
  71. default:
  72. break;
  73. }
  74. changeLang(lang);
  75. }
  76. @Override
  77. public void onConfigurationChanged(android.content.res.Configuration newConfig) {
  78. super.onConfigurationChanged(newConfig);
  79. if (myLocale != null){
  80. newConfig.locale = myLocale;
  81. Locale.setDefault(myLocale);
  82. getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
  83. }
  84. }
  85. }





this is simple code for language change programaticaly. u can change multiple language .


- Mahesh Kailash Saraswat

No comments:

Post a Comment