There is a way to create a multiple language application in Android and let the user choose which language to use on application level. This is very positive because not everybody wants to use the application on the system level language or they do not have a phone in their language. So the following is a way to implement application level language settings. This excerpt is used in the application when the Menu button is pressed, it will show all the options you need plus the language selection. After the language is selected, the application will restart itself in the new language.

Code snippet:

case 112: //Language Select
dialog = new Dialog(MainActivity.this);


     Button butBack = (Button) dialog.findViewById(;

     butBack.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {

 hmLocales = new HashMap<String, String>();
 hmLocales.put(getString(R.string.sMacedonian), "mk"); // Macedonian
 hmLocales.put(getString(R.string.sAlbanian), "sq"); // Albanian
 hmLocales.put(getString(R.string.sEnglish), "en"); // English
 hmLocales.put(getString(R.string.sSerbian), "sr"); // Serbian
 hmLocales.put(getString(R.string.sFrench), "fr"); // French

 lvLangs = (ListView) dialog.findViewById(;
 String sLanguages[] = this.getResources().getStringArray(R.array.saLanguages);
 lvLangs.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , sLanguages));                 ;

 lvLangs.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
        String t = (String) lvLangs.getItemAtPosition(position);
        String sLocale = hmLocales.get(t);

        MyApplication.updateLanguage(getApplicationContext(), sLocale);


After you have finished coding, you will need to create new folders for the translated strings based on the country/language codes that you have in your application. Based on the example above there should be  res/values, res/values-en, res/values-sq, res/values-fr and res/values-sr folders. There is no res/values-mk because the Macedonian translation would be the default and therefore it is stored in res/values. Note that the country/language codes on the folders need to match the ones in the code.

You are all set! Now get busy and translate the strings 🙂

In another post I will talk how to store the language value permanently (unless the user changes it) so that it will not reset to default on every restart of the application.