Часть функций перенесена во вспомогательный класс LanguageUtils.java:
Код: Выделить всё
class LanguageUtils {
static String getCurrentLanguage(Context context) {
SharedPreferences prefs = context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE);
return prefs.getString("lang", "en");
}
static void saveLanguage(Context context, String language) {
SharedPreferences prefs = context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE);
prefs.edit().putString("lang", language).apply();
Log.e("MyApplication", "getCurrentLanguage: " + getCurrentLanguage(context));
}
static Context setLocale(Context context, String lang) {
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Resources resources = context.getResources();
Configuration resConfig = resources.getConfiguration();
Configuration config = new Configuration(resConfig);
config.setLocale(locale);
return context.createConfigurationContext(config);
}
}
Код: Выделить всё
class MyApplication : Application() {
override fun attachBaseContext(base: Context) {
val currentLang = LanguageUtils.getCurrentLanguage(base)
val newContext = LanguageUtils.setLocale(base, currentLang)
super.attachBaseContext(newContext)
}
fun setAppLanguage(activity: Activity, language: String) {
LanguageUtils.saveLanguage(activity, language)
val intent = activity.intent
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
activity.startActivity(intent)
activity.finish()
}
}
(я использую ресурсы XML, расположенные в папках res/values для английского и res/values-** для других языков и используйте их с stringResource(R.string.someString)). Как это сделать на Android?
Я использовал кнопку внутри своей активности следующим образом:
Код: Выделить всё
val context = LocalContext.current
Button(
modifier = Modifier.padding(8.dp),
onClick = {
val app = context.applicationContext as MyApplication
val activity = context as Activity
app.setAppLanguage(activity, "pl")
}
) { Text("Change to Polish") }
Также стоит отметить, что updateConfiguration() помечен Android Studio как устаревший из API 25 (Android 7), поэтому я не хочу его использовать
Подробнее здесь: https://stackoverflow.com/questions/792 ... new-locale
Мобильная версия