Как перезапустить действия Android с новой локалью?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как перезапустить действия Android с новой локалью?

Сообщение Anonymous »

Я создал приложение Android Studio, целью которого является обновление языка нескольких классов Jetpack Compose Activity.
Часть функций перенесена во вспомогательный класс 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»