References : https://android-developers.googleblog.com/2019/03/android-jetpack-navigation-stable.html

Android Multilanguage Feature

Reja Luo

--

Android default language loads the string resources from res > values > strings.xml.

If you want to add multilanguage support for your android application, you must create a value folder named values-[code]and keep a strings.xml file in it with all the strings translated into your language.

For Example :

How to configure it:

If you application support multilanguage, you should define every string in strings.xml.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:text="@string/app_greeting"

android:textSize="30dp"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toTopOf="parent" />

<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical">

<RadioButton

android:id="@+id/radio_english"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="onRadioButtonClicked"

android:text="@string/english" />
<RadioButton

android:id="@+id/radio_indonesian"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="onRadioButtonClicked"

android:text="@string/indonesian" />

<RadioButton

android:id="@+id/radio_malay"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="onRadioButtonClicked"

android:text="@string/malay" />

<RadioButton

android:id="@+id/radio_german"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="onRadioButtonClicked"

android:text="@string/german" />

</RadioGroup>

</LinearLayout

LocaleHelper.java

import android.content.Context;

import android.content.SharedPreferences;

import android.content.res.Configuration;

import android.content.res.Resources;

import android.preference.PreferenceManager;


import java.util.Locale;


public class LocaleHelper {

private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language";


public static Context onAttach(Context context) {

String lang = getPersistedData(context, Locale.getDefault().getLanguage());

return setLocale(context, lang);

}

public static Context onAttach(Context context, String defaultLanguage) {

String lang = getPersistedData(context, defaultLanguage);

return setLocale(context, lang);
}


public static String getLanguage(Context context) {

return getPersistedData(context, Locale.getDefault().getLanguage());

}

public static Context setLocale(Context context, String language) {

persist(context, language);

return updateResourcesLegacy(context, language);

}

private static String getPersistedData(Context context, String defaultLanguage) {

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

return preferences.getString(SELECTED_LANGUAGE, defaultLanguage);

}

private static void persist(Context context, String language) {

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

SharedPreferences.Editor editor = preferences.edit();

editor.putString(SELECTED_LANGUAGE, language);

editor.apply();

}

@SuppressWarnings("deprecation")

private static Context updateResourcesLegacy(Context context, String language) {

Locale locale = new Locale(language);

Locale.setDefault(locale);

Resources resources = context.getResources();

Configuration configuration = resources.getConfiguration();

configuration.locale = locale;

resources.updateConfiguration(configuration, resources.getDisplayMetrics());

return context;

}

}

MainActivity.java

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.RadioButton;
public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public void onRadioButtonClicked(View view) {

boolean checked = ((RadioButton) view).isChecked();

String languagePref="en";

switch(view.getId()) {

case R.id.radio_english:

if (checked)

languagePref = "en";

break;

case R.id.radio_indonesian:

if (checked)

languagePref = "ind";

break;

case R.id.radio_malay:

if (checked)

languagePref = "ml";

break;

case R.id.radio_german:

if (checked)

languagePref = "gr";

break;
}

if (!languagePref.isEmpty()) {

LocaleHelper.setLocale(MainActivity.this, languagePref);

recreate();
}
}
}

Here’s the result

Run you android application, then you can switch you preferred language and your textview string content will changed according to your preferred language.

You can download source code from here:

Here are references about this application:

--

--