75 lines
2.4 KiB
Java
75 lines
2.4 KiB
Java
package com.example.yink.amadeus;
|
|
|
|
/* Solution: http://stackoverflow.com/a/40704077 */
|
|
|
|
import android.annotation.TargetApi;
|
|
import android.content.Context;
|
|
import android.content.ContextWrapper;
|
|
import android.content.SharedPreferences;
|
|
import android.content.res.Configuration;
|
|
import android.os.Build;
|
|
import android.preference.PreferenceManager;
|
|
|
|
import java.util.Locale;
|
|
|
|
public class LangContext extends ContextWrapper {
|
|
public LangContext(Context base) {
|
|
super(base);
|
|
}
|
|
|
|
@SuppressWarnings("deprecation")
|
|
public static ContextWrapper wrap(Context context) {
|
|
Configuration config = context.getResources().getConfiguration();
|
|
|
|
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
|
|
|
|
String lang = settings.getString("lang", "en");
|
|
|
|
Locale locale = new Locale(lang);
|
|
Locale.setDefault(locale);
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
|
setSystemLocale(config, locale);
|
|
} else {
|
|
setSystemLocaleLegacy(config, locale);
|
|
}
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
|
context = context.createConfigurationContext(config);
|
|
} else {
|
|
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
|
|
}
|
|
return new LangContext(context);
|
|
}
|
|
|
|
@SuppressWarnings("deprecation")
|
|
public static Context load(Context context, String lang) {
|
|
Configuration config = context.getResources().getConfiguration();
|
|
|
|
Locale locale = new Locale(lang);
|
|
Locale.setDefault(locale);
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
|
setSystemLocale(config, locale);
|
|
} else {
|
|
setSystemLocaleLegacy(config, locale);
|
|
}
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
|
context = context.createConfigurationContext(config);
|
|
} else {
|
|
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
|
|
}
|
|
|
|
return context;
|
|
}
|
|
|
|
@SuppressWarnings("deprecation")
|
|
public static void setSystemLocaleLegacy(Configuration config, Locale locale){
|
|
config.locale = locale;
|
|
}
|
|
|
|
@TargetApi(Build.VERSION_CODES.N)
|
|
public static void setSystemLocale(Configuration config, Locale locale){
|
|
config.setLocale(locale);
|
|
}
|
|
}
|