Passa ai contenuti principali

Android Studio - Impostare lingua app

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
<?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>
Ora creare le stringhe di testo all'interno del file string.xml
<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>
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:
  • selezione della lingua
  • salvataggio della selezione nelle preferenze dell'app
  • caricamento della lingua quando si avvia l'app
//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()
}
view raw 2_setLocate.kt hosted with ❤ by GitHub
//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)
}
}
view raw 3_loadLocate.kt hosted with ❤ by GitHub
Ecco come si presenta il file MainActivity.kt
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

Post popolari in questo blog

Android Studio - Rinominare il progetto

Rinominare il progetto Android Studio ATTENZIONE!: non eseguire questa procedura se l'app è stata pubblicata su Google Play Store Quando si vuole cambiare nome al progetto: nome cartella in cui è contenuto il progetto package name bisogna eseguire questi passaggi: Andare nella cartella dove è contenuto il progetto Creare una copia del progetto in questione Rinominare la cartella copiata con il nome dell'app (non usare spazi tra le parole) Ora è necessario dire ad Android Studio il nome del nuovo progetto  Aprire Android Studio Aprire il progetto creato in precedenza Una volta caricato il progetto cliccare Build Cliccare Clean Project Attendere che venga eseguito il processo di "pulitura" Cliccare ancora su Build Cliccare su Rebuild Project Attendere che venga ricostruito il progetto Ora aprire la cartella app fino a visualizzare la cartella java Cliccare sull'ingranaggio  Deselezionare la voce Compact Middle Packa...

Arduino - Lettura tensione potenziometro e display LCD

Leggere il valore di un poteziometro (parte 2) Oggi vedremo come leggere il valore in tensione di un potenziometro collegato al pin Analogico A0 di Arduino.