I'm trying to implement multi-language in my app (English & Hebrew). I've created 2 string files and implemented all the methods that should support the multi-language feature. However, when I run the app and select "Hebrew" in the dialog, the layout changes from left-to-right to right-to-left (as it should be in Hebrew), but the language isn't changing. Could anyone help me figure this out?
import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Bundle; import android.os.Vibrator; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import java.util.Locale; public class MainActivity extends AppCompatActivity { private Button btn_chooseBoard; private Button btn_store; private Button btn_language; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); loadLocale(); setContentView(R.layout.lay_main); Constants instance = Constants.getInstance(); instance.getAllPlayers(); instance.getAllBoards(); btn_chooseBoard = (Button) findViewById(R.id.btn_startGame); btn_store = (Button) findViewById(R.id.btn_popup_store); btn_language = (Button) findViewById(R.id.btn_language); btn_chooseBoard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, ChooseBoard.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); ((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)).vibrate(20); } }); btn_store.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, Store.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); ((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)).vibrate(20); } }); btn_language.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showChangeLanguageDialog(); } }); } /** * Reset game on resume main activity */ @Override public void onResume() { super.onResume(); GameLogic.getGameLogic().resetGame(); } private void showChangeLanguageDialog() { // Array of language to display in alert dialog final String[] listItems = {"English", "עברית"}; AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Choose Language..."); builder.setSingleChoiceItems(listItems, -1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if (i == 0) { // English setLocale("en"); recreate(); } else if (i == 1) { // Hebrew setLocale("iw"); recreate(); } // Dismiss alert dialog when language stored dialogInterface.dismiss(); } }); AlertDialog alertDialog = builder.create(); // Show alert dialog alertDialog.show(); } private void setLocale(String lang) { Locale locale = new Locale(lang); Locale.setDefault(locale); Configuration configuration = new Configuration(); configuration.locale = locale; getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics()); // Save data to shared preference SharedPreferences.Editor editor = getSharedPreferences("Settings", MODE_PRIVATE).edit(); editor.putString("language", lang); editor.apply(); } // Load language saved in shared preference public void loadLocale() { SharedPreferences pref = getSharedPreferences("Settings", Activity.MODE_PRIVATE); String language = pref.getString("language", ""); setLocale(language); } }