Step 1: add library.
dependencies {
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
}
Step 2: add below class in your project.
package com.example.language.utils;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.preference.PreferenceManager;
import android.util.DisplayMetrics;
import java.util.Locale;
public class LocaleHelper {
private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language";
/**
* the method is used to set the language at runtime
**/
public static Context setLocale(Context context, String language) {
if (!LocaleHelper.getLanguage(context).equalsIgnoreCase(language)) {
persist(context, language);
}
/**updating the language for devices above android nougat **/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return updateResources(context, language);
}
/** for devices having lower version of android os **/
return updateResourcesLegacy(context, language);
}
protected static void persist(Context context, String language) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(SELECTED_LANGUAGE, language);
editor.apply();
}
/**
* get Language Code which you selected even if return your system language
**/
public static String getLanguage(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(SELECTED_LANGUAGE, Locale.getDefault().getLanguage().toLowerCase());
}
/**
* the method is used update the language of application by creating
* object of inbuilt Locale class and passing language argument to it
**/
@TargetApi(Build.VERSION_CODES.N)
protected static Context updateResources(Context context, String language) {
Resources res = context.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.setLocale(new Locale(language.toLowerCase())); // API 17+ only.
res.updateConfiguration(conf, dm);
return context.createConfigurationContext(conf);
}
@SuppressWarnings("deprecation")
protected 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;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLayoutDirection(locale);
}
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
return context;
}
}
Step 3: implements below line in your application class.
Application.ActivityLifecycleCallbacks, LifecycleObserver
Step 4: add below line in onCreate method in Application Class.
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
Step 5: add this line your activity.
LocaleHelper.setLocale(CONTEXT, LocaleHelper.getLanguage(CONTEXT));
//here LocaleHelper.getLanguage(CONTEXT) is return default language of device.
//if you want change the language in to ENGLISH then write this line..
LocaleHelper.setLocale(CONTEXT, "en");
Recent Comments
Recent Post
8 Financial Considerations of E-Commerce
- August 9, 2024
- 2 min read
Google announces 5 changes to for Mobile
- July 18, 2024
- 0 min read
Top 5 Ecommerce Platforms for Boosting Your
- July 16, 2024
- 2 min read