Como añadir varios idiomas en una app

Si queremos que nuestra app pueda llegar a todo el mundo un paso fundamental es añadir las correspondientes traducciones de los textos de la app a cualquier idioma, para que cualquier persona pueda entender la app sin problema alguno.

Para ello Android nos pide que generemos un archivo para cada idioma diferente que queramos añadir. Una de las buenas prácticas con los textos o variables tipo ‘String’ es almacenar el contenido en un archivo xml en lugar de cargar el texto directamente desde el código.

-Tal que :

TextView.setText("Hola Mundo!");

esto? Malo malo.

 

En este post crearemos una app de ejemplo («-si es que podemos llamarla app…») con un funcionamiento e interfaz muy sencillos, creamos un elemento TextView para mostrar un texto, y más abajo un Button que nos permitirá ir a los ajustes de idioma rápidamente para cambiar el idioma del dispositivo, para luego volver a nuestra app y ver los cambios que se han producido.

 

 

Trabajando con el archivo Strings

Empezando con Android Studio a partir de una plantilla «Empty Activity» abrimos el archivo activity_main.xml (layout del activity principal) situado dentro de la carpeta res > layout. Borramos su contenido y pegamos el siguiente :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="es.mscdroidlabs.idiomas.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/texto_bienvenida"
        android:gravity="center"
        android:textSize="20dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/textView"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/cambiar_idioma"
        android:id="@+id/button"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="44dp"/>
</RelativeLayout>

 

Dando como resultado algo así :

Como añadir diferentes idiomas en tu app android

 

Si nos fijamos en la líneas 16 y 28 vemos que la referencia al texto apunta al archivo @string/[identificador String], esto actualmente nos está generando un error, debido a que no existe ningún elemento con ese nombre. Para corregirlo vamos a editar el archivo strings.xml situado en el directorio res > values. Modificamos su contenido para dejarlo así :

<resources>
    <string name="app_name">Idiomas</string>
    <string name="texto_bienvenida">Bienvenido a la APP!</string>
    <string name="cambiar_idioma">Cambiar idioma del dispositivo</string>
</resources>

 

Con esto solucionamos el error de antes y si ejecutamos la app veremos que aparecen estos textos independientemente del idioma del dispositivo.

 

 

Como añadir más idiomas?

Con los pasos realizados anteriormente, hemos añadido unos valores de texto identificados con un nombre en el archivo strings.xml dentro del directorio values. Por decirlo de alguna manera esos serán los textos que se aplicarán cuando el dispositivo este en un idioma que la app no soporta.

Para dar soporte a otro idiomas tenemos que crear un nuevo directorio dentro de res, con el nombre «values-[código ISO 639-1del idioma]«. Ejemplos:

  • values-en (para el Inglés)
  • values-fr (para el francés)
  • values-es (para el castellano)

 

Podéis consultar todos los códigos ISO 639-1 de cada idioma en assemblysys.com

 

Para nuestro ejemplo vamos a crear los recursos de texto en castellano (valor por defecto), inglés y francés:

estructura-proyecto-android-studio-values1 – Creamos los directorios correspondientes a los idiomas que queramos implementar.

2 – Dentro de cada carpeta creada, generamos un archivo xml con nombre strings.xml. Para hacerlo más rápido podemos copiar y pegar el archivo ya existente en la carpeta values.

3 – Ahora toca editar cada uno de esos archivos y traducir los textos a su correspondiente idioma.

 

 

 

Quedando así :

 

  • res / values / strings.xml
<resources>
    <string name="app_name">Idiomas</string>
    <string name="texto_bienvenida">Bienvenido a la APP!</string>
    <string name="cambiar_idioma">Cambiar idioma del dispositivo</string>
</resources>

 

  • res / values-en / strings.xml
<resources>
    <string name="app_name">Languages</string>
    <string name="texto_bienvenida">Welcome to the APP!</string>
    <string name="cambiar_idioma">Change device language</string>
</resources>

 

  • res / values-fr / strings.xml
<resources>
    <string name="app_name">Langages</string>
    <string name="texto_bienvenida">Bienvenu à l\'application</string>
    <string name="cambiar_idioma">Changer la langue du téléphone</string>
</resources>

 

 

Hasta aquí ya tenemos todos los recursos de idiomas creados, ahora vamos a editar nuestro MainActivity.java para darle función al botón. Para ello vamos a crear un intent que nos lleve a la página de «Preferencias de Idioma» de los ajustes de Android. Este Intent lo lanzaremos al pulsar el  botón. Al cambiar de idioma y volver a la app veremos que nuestros textos se han actualizado en función del idioma que hayamos escogido. Si hemos elegido un idioma el cual no soporta la app, los textos se mostrarán en Castellano, ya que ese es el idioma en el que hemos escrito en el archivo por defecto en values > strings.xml

 

public class MainActivity extends AppCompatActivity {

    private TextView txt_bienvenida;
    private Button btn_cambiar_idioma;
    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txt_bienvenida = (TextView) findViewById(R.id.textView);
        btn_cambiar_idioma = (Button) findViewById(R.id.button);

        intent = new Intent(Intent.ACTION_MAIN);
        intent.setClassName("com.android.settings", "com.android.settings.LanguageSettings");

        btn_cambiar_idioma.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                startActivity(intent);
            }
        });
    }
}

 

Como dicen, un vídeo vale más que mil palabras.

También te podría gustar...

Ads Blocker Image Powered by Code Help Pro

Bloqueador de anuncios detectado

Por favor, desactiva tu bloqueador de anuncios para este sitio web. Sabemos que la publicidad puede resultarte molesta, pero esta es la única manera de mantener la web de forma gratuita y accesible para todo el mundo.