In questo articolo vedremo come poter selezionare la lingua all'interno della nostra app.
Nel precedente articolo in cui si parlava del file string.xml, la lingua dell'app veniva selezionata automaticamente in base alle impostazioni del dispositivo, mentre qui vedremo come poter selezionare a proprio piacimento la lingua che dovrà avere la nostra app indipendentemente dall'impostazione del dispositivo.
Per prima cosa creare il layout
Ecco un esempio do come può essere il file activity_main.xml
Ora creare le stringhe di testo all'interno del file string.xml
Ora creare la traduzione del file string.xml nelle varie lingua come descritto in questo articolo
Il risultato sarà una serie di file string.xml delle varie lingue impostate.
Ora queste di seguito sono tre funzioni che servono per:
Ecco come si presenta il file MainActivity.kt
N.B. Per tradurre anche il nome dell'app basta che all'interno del file string.xml venga tradotta la stringa con il nome app_name.
Nel precedente articolo in cui si parlava del file string.xml, la lingua dell'app veniva selezionata automaticamente in base alle impostazioni del dispositivo, mentre qui vedremo come poter selezionare a proprio piacimento la lingua che dovrà avere la nostra app indipendentemente dall'impostazione del dispositivo.
Per prima cosa creare il layout
Ecco un esempio do come può essere il file activity_main.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<androidx.constraintlayout.widget.ConstraintLayout | |
xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context=".MainActivity"> | |
<TextView | |
android:id="@+id/textView" | |
android:layout_width="0dp" | |
android:layout_height="wrap_content" | |
android:gravity="center_horizontal" | |
android:text="@string/welcome" | |
android:textColor="#000000" | |
android:textSize="20dp" | |
app:layout_constraintBottom_toBottomOf="parent" | |
app:layout_constraintHorizontal_bias="0.0" | |
app:layout_constraintLeft_toLeftOf="parent" | |
app:layout_constraintRight_toRightOf="parent" | |
app:layout_constraintTop_toTopOf="parent" | |
app:layout_constraintVertical_bias="0.062" /> | |
<Button | |
android:id="@+id/bnLang" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="100dp" | |
android:text="@string/bn_name" | |
app:layout_constraintBottom_toBottomOf="parent" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/editText2" | |
app:layout_constraintVertical_bias="0.0" /> | |
<EditText | |
android:id="@+id/editText" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="92dp" | |
android:ems="10" | |
android:hint="@string/name" | |
android:inputType="textPersonName" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/textView" /> | |
<EditText | |
android:id="@+id/editText2" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="24dp" | |
android:ems="10" | |
android:hint="@string/age" | |
android:inputType="textPersonName" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/editText" /> | |
</androidx.constraintlayout.widget.ConstraintLayout> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<resources> | |
<string name="app_name">Tutorial imposta lingua</string> | |
<string name="welcome">Benvenuto</string> | |
<string name="name">Nome</string> | |
<string name="age">Età</string> | |
<string name="bn_name">Imposta lingua</string> | |
<string name="ad_title">Seleziona la lingua</string> | |
</resources> |
Il risultato sarà una serie di file string.xml delle varie lingue impostate.
Ora queste di seguito sono tre funzioni che servono per:
- selezione della lingua
- salvataggio della selezione nelle preferenze dell'app
- caricamento della lingua quando si avvia l'app
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//funzione che permette di aprire un DialogAlert con l'elenco delle lingue selezionabili | |
private fun showChangeLang() { | |
//crea un arraycon le lingue | |
val listItmes = arrayOf("English", "Español", "Français", "Italiano") | |
//crea un AlertDialog | |
val mBuilder = AlertDialog.Builder(this@MainActivity) | |
mBuilder.setTitle(R.string.ad_title) | |
mBuilder.setSingleChoiceItems(listItmes, -1) { dialog, which -> | |
when (which) { | |
0 -> { | |
setLocate("en") //English | |
recreate() | |
} | |
1 -> { | |
setLocate("es") //Español | |
recreate() | |
} | |
2 -> { | |
setLocate("fr") //Français | |
recreate() | |
} | |
3 -> { | |
setLocate("it") //Italiano | |
recreate() | |
} | |
} | |
dialog.dismiss() | |
} | |
val mDialog = mBuilder.create() | |
mDialog.show() | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//funzione che imposta nelle preferenze dell'app, la lingua selezionata | |
private fun setLocate(Lang: String) { | |
val locale = Locale(Lang) | |
Locale.setDefault(locale) | |
val config = Configuration() | |
config.locale = locale | |
baseContext.resources.updateConfiguration(config, baseContext.resources.displayMetrics) | |
val editor = getSharedPreferences("Settings", Context.MODE_PRIVATE).edit() | |
editor.putString("My_Lang", Lang) | |
editor.apply() | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//funzione che esegue l'impostazione della lingua | |
private fun loadLocate() { | |
val sharedPreferences = getSharedPreferences("Settings", Activity.MODE_PRIVATE) | |
val language = sharedPreferences.getString("My_Lang", "") | |
//questa condizione serve se non si imposta alcuna lingua all'interno dell'app | |
//e quindi viene utilizzata quella selezionata nelle impostazioni del dispositivo | |
if(language != "") { | |
setLocate(language) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.dm.tutorialimpostalingua | |
import android.app.Activity | |
import android.content.Context //importazione della Classe: Context | |
import android.content.res.Configuration //importazione della Classe: Configuration | |
import androidx.appcompat.app.AppCompatActivity | |
import android.os.Bundle | |
import android.widget.Button | |
import androidx.appcompat.app.AlertDialog //importazione della Classe: AlertDialog | |
import java.util.* | |
class MainActivity : AppCompatActivity() { | |
private var lBtn: Button? = null | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
loadLocate() | |
setContentView(R.layout.activity_main) | |
//associazione del pulsante con ID bnLang alla variabile lBtn | |
lBtn = findViewById(R.id.bnLang) | |
lBtn!!.setOnClickListener { | |
//chiama la funzione per poter selezionare la lingua | |
showChangeLang() | |
} | |
} | |
//funzione che permette di aprire un DialogAlert con l'elenco delle lingue selezionabili | |
private fun showChangeLang() { | |
//crea un arraycon le lingue | |
val listItmes = arrayOf("English", "Español", "Français", "Italiano") | |
//crea un AlertDialog | |
val mBuilder = AlertDialog.Builder(this@MainActivity) | |
mBuilder.setTitle(R.string.ad_title) | |
mBuilder.setSingleChoiceItems(listItmes, -1) { dialog, which -> | |
when (which) { | |
0 -> { | |
setLocate("en") //English | |
recreate() | |
} | |
1 -> { | |
setLocate("es") //Español | |
recreate() | |
} | |
2 -> { | |
setLocate("fr") //Français | |
recreate() | |
} | |
3 -> { | |
setLocate("it") //Italiano | |
recreate() | |
} | |
} | |
dialog.dismiss() | |
} | |
val mDialog = mBuilder.create() | |
mDialog.show() | |
} | |
//funzione che imposta nelle preferenze dell'app, la lingua selezionata | |
private fun setLocate(Lang: String) { | |
val locale = Locale(Lang) | |
Locale.setDefault(locale) | |
val config = Configuration() | |
config.locale = locale | |
baseContext.resources.updateConfiguration(config, baseContext.resources.displayMetrics) | |
val editor = getSharedPreferences("Settings", Context.MODE_PRIVATE).edit() | |
editor.putString("My_Lang", Lang) | |
editor.apply() | |
} | |
//funzione che esegue l'impostazione della lingua | |
private fun loadLocate() { | |
val sharedPreferences = getSharedPreferences("Settings", Activity.MODE_PRIVATE) | |
val language = sharedPreferences.getString("My_Lang", "") | |
//questa condizione serve se non si imposta alcuna lingua all'interno dell'app | |
//e quindi viene utilizzata quella selezionata nelle impostazioni del dispositivo | |
if(language != "") { | |
setLocate(language) | |
} | |
} | |
} |
N.B. Per tradurre anche il nome dell'app basta che all'interno del file string.xml venga tradotta la stringa con il nome app_name.
Download Project | ![]() |
Download file APK | ![]() |
Commenti
Posta un commento