Gracias! pero redirigiendo mi pregunta en todo caso... La intención no sería cambiar el idioma por defecto sino poder configurar un idioma (recuperado de un archivo de configuración) al iniciar la aplicación.
Cuando en un menú elijo un idioma, se cambia a ese idioma y se guarda aquí:
when (item.itemId) {
R.id.espanhol -> {
setLocale("es")
try{
val archivo = OutputStreamWriter(openFileOutput("idioma.txt", MODE_PRIVATE))
archivo.write("es")
archivo.flush()
archivo.close()}
catch (e: IOException){}
Toast.makeText(this, "Español",Toast.LENGTH_SHORT).show()
finish()
return true
}
R.id.ingles -> {
setLocale("en")
try{
val archivo = OutputStreamWriter(openFileOutput("idioma.txt", MODE_PRIVATE))
archivo.write("en")
archivo.flush()
archivo.close()}
catch (e: IOException){}
Toast.makeText(this, "English",Toast.LENGTH_SHORT).show()
finish()
return true
}
R.id.portugues -> {
setLocale("pt")
try{val archivo = OutputStreamWriter(openFileOutput("idioma.txt", MODE_PRIVATE))
archivo.write("pt")
archivo.flush()
archivo.close()}
catch (e: IOException){}
Toast.makeText(this, "Português",Toast.LENGTH_SHORT).show()
finish()
return true
}
}
fun setLocale(localeName: String) {
val myLocale = Locale(localeName)
val res: Resources = resources
val dm: DisplayMetrics = res.getDisplayMetrics()
val conf: Configuration = res.getConfiguration()
conf.locale = myLocale
res.updateConfiguration(conf, dm)
val refresh = Intent(this, MainActivity::class.java)
refresh.putExtra(localeName ,localeName)
finish()
startActivity(refresh)
}
y al iniciar el activity carga esa configuración y trata de adaptar los textos:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (fileList().contains("idioma.txt")) {
try {
val archivo = InputStreamReader(openFileInput("idioma.txt"))
val br = BufferedReader(archivo)
var linea = br.readLine()
br.close()
archivo.close()
setLocale(linea)
} catch (e: IOException) {
}
}
El problema es que me crea un loop infinito al hacer el refresh al iniciar la aplicación... Alguna idea?