Created
February 11, 2019 13:13
-
-
Save ahmedyehya92/c3f0e901b1f890a9a1192e642cb09ada to your computer and use it in GitHub Desktop.
LocalizationHelper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { | |
persist(context, 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); | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { | |
return updateResources(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(); | |
} | |
@TargetApi(Build.VERSION_CODES.N) | |
private static Context updateResources(Context context, String language) { | |
Locale locale = new Locale(language); | |
Locale.setDefault(locale); | |
Configuration configuration = context.getResources().getConfiguration(); | |
configuration.setLocale(locale); | |
configuration.setLayoutDirection(locale); | |
return context.createConfigurationContext(configuration); | |
} | |
@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; | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { | |
configuration.setLayoutDirection(locale); | |
} | |
resources.updateConfiguration(configuration, resources.getDisplayMetrics()); | |
return context; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment