Android 7.0 (nivel de API 24) brinda soporte para usuarios multilingües, lo que les permite seleccionar varias configuraciones regionales en la configuración. Un objeto Locale representa una región geográfica, política o cultural específica. Las operaciones que requieren esta configuración regional para realizar una tarea se denominan sensibles a la configuración regional y utilizan la configuración regional para personalizar la información para el usuario. Por ejemplo, mostrar un número es una operación sensible a la configuración regional, por lo que el número debe formatearse de acuerdo con las convenciones de la región, la cultura o el país de origen del usuario.
Ejemplo
En este ejemplo, vamos a crear una aplicación simple en la que el usuario tiene la opción de seleccionar el idioma deseado : inglés o hindi . Esto cambiará el idioma de toda la aplicación. qué
Implementación paso a paso
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.
Paso 2: crear archivos de recursos
Referencia: Carpeta sin procesar de recursos en Android Studio
En este paso, debemos crear un archivo de recursos de string para el idioma hindi. Vaya a aplicación > res > valores > haga clic con el botón derecho en > Nuevo > Archivo de recursos de valores y nómbrelo como strings. Ahora, tenemos que elegir calificadores como Configuración regional de la lista disponible y seleccionar el idioma como Hindi de la lista desplegable. A continuación se muestra la imagen de los pasos a realizar.
Ahora, en este archivo de recursos string.xml(hi) agregue el código que se proporciona a continuación en el fragmento.
XML
<resources> <string name="app_name">GFG | Change App Language</string> <string name="selected_language">हिन्दी</string> <string name="language">नमस्ते, जी यफ जी</string> </resources>
Y en el archivo string.xml , que es el predeterminado para inglés, agregue estas líneas.
XML
<resources> <string name="app_name">GFG | Change App Language</string> <string name="selected_language">English</string> <string name="language">Hi, GFG</string> </resources>
Antes de continuar, agreguemos algunos atributos de color para mejorar la barra de la aplicación. Vaya a aplicación > res > valores > colores.xml y agregue los siguientes atributos de color.
XML
<resources> <color name="colorPrimary">#0F9D58</color> <color name="colorPrimaryDark">#16E37F</color> <color name="colorAccent">#03DAC5</color> </resources>
Paso 3: cree el archivo de diseño para la aplicación
En este paso, crearemos un diseño para nuestra aplicación. Vaya a app > res > layout > activity_main.xml y agregue dos TextView , uno para el mensaje y otro para el idioma seleccionado, y un ImageView para el icono desplegable. A continuación se muestra el fragmento de código para el archivo activity_main.xml.
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" tools:context=".MainActivity"> <!--text view for the message to display--> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="48dp" android:text="Welcome To GeeksForGeeks" android:textAlignment="center" /> <!--button view for hindi language--> <Button android:id="@+id/btnHindi" android:layout_margin="16dp" android:background="@color/colorPrimary" android:textColor="#ffffff" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hindi"/> <!--button view for english language--> <Button android:id="@+id/btnEnglish" android:layout_margin="16dp" android:background="@color/colorPrimary" android:textColor="#ffffff" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="English"/> </LinearLayout>
Paso 4: Crear Clase LocaleHelper
Ahora, crearemos una clase Locale Helper. Esta clase contiene todas las funciones que ayudarán en el cambio de idioma en tiempo de ejecución. Vaya a aplicación > java > paquete > haga clic con el botón derecho y cree una nueva clase java y asígnele el nombre LocaleHelper . A continuación se muestra el fragmento de código para la clase LocaleHelper.
Java
import android.annotation.TargetApi; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.preference.PreferenceManager; import java.util.Locale; public class LocaleHelper { private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language"; // the method is used to set the language at runtime public static Context setLocale(Context context, String language) { persist(context, language); // updating the language for devices above android nougat if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return updateResources(context, language); } // for devices having lower version of android os return updateResourcesLegacy(context, language); } private static void persist(Context context, String language) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = preferences.edit(); editor.putString(SELECTED_LANGUAGE, language); editor.apply(); } // the method is used update the language of application by creating // object of inbuilt Locale class and passing language argument to it @TargetApi(Build.VERSION_CODES.N) private static Context updateResources(Context context, String language) { Locale locale = new Locale(language); Locale.setDefault(locale); Configuration configuration = context.getResources().getConfiguration(); configuration.setLocale(locale); configuration.setLayoutDirection(locale); return context.createConfigurationContext(configuration); } @SuppressWarnings("deprecation") private static Context updateResourcesLegacy(Context context, String language) { Locale locale = new Locale(language); Locale.setDefault(locale); Resources resources = context.getResources(); Configuration configuration = resources.getConfiguration(); configuration.locale = locale; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { configuration.setLayoutDirection(locale); } resources.updateConfiguration(configuration, resources.getDisplayMetrics()); return context; } }
Paso 5: trabajar con el archivo MainActivity.java
En este paso, implementaremos el código Java para cambiar entre el archivo string.xml para usar varios idiomas. Primero, inicializaremos todas las vistas y estableceremos el comportamiento de clic en un cuadro de diálogo de alerta para elegir el idioma deseado con la ayuda de la clase LocalHelper . A continuación se muestra el fragmento de código para la clase MainActivity.java .
Java
import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.content.res.Resources; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { TextView messageView; Button btnHindi, btnEnglish; Context context; Resources resources; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // referencing the text and button views messageView = (TextView) findViewById(R.id.textView); btnHindi = findViewById(R.id.btnHindi); btnEnglish = findViewById(R.id.btnEnglish); // setting up on click listener event over the button // in order to change the language with the help of // LocaleHelper class btnEnglish.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { context = LocaleHelper.setLocale(MainActivity.this, "en"); resources = context.getResources(); messageView.setText(resources.getString(R.string.language)); } }); btnHindi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { context = LocaleHelper.setLocale(MainActivity.this, "hi"); resources = context.getResources(); messageView.setText(resources.getString(R.string.language)); } }); } }