Как Android определяет из какого файла нужно достать строку в зависимости от локали?
Проблема такая, в приложении есть экран со сменой языка на нем списком языков и кнопка сохранить, нужно чтобы при нажатии на язык надпись на кнопке менялась в соответствии с локалью выбранного языка. Например выбрали English на кнопке надпись должна поменяться, вместо "сохранить" должно быть "save". Вопрос в том как андроид определяет к какому файлу со строками обратиться и как этот момент перехватить и переопределить чтобы менять локаль строки
РЕШЕНИЕ
val context = LocalContext.current
val conf = context.resources.configuration`conf.setLocale(Locale1(locale ?: "ru"))
val resources = context.createConfigurationContext(conf)
val textRes = R.string.your_string
localizedString.value = resources.getString(textRes)`
метод createConfigurationContext нужно использовать вместо устаревшего конструктора класса Resources, метод создает новый контекст с новой конфигурацей который не является общим (не поменяет язык во всем приложении) подробнее: https://developer.android.com/reference/android/content/Context#createConfigurationContext(android.content.res.Configuration)
Ответы (1 шт):
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String languageToLoad = "fa"; // код языка, который вы хотите сделать
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
this.setContentView(R.layout.main);
}
}
Подробнее здесь https://stackoverflow.com/questions/2900023/change-app-language-programmatically-in-android