¿Cómo cambiar el idioma completo de la aplicación en Android mediante programación?

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));
            }
        });
  
    }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por ankur035 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *