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);
}
}