Buscar..


Introducción

La internacionalización (i18n) y la localización (L10n) se utilizan para adaptar el software de acuerdo con las diferencias de idiomas, diferencias regionales y público objetivo.

Internacionalización: el proceso de planificación para la futura localización, es decir, hacer que el diseño del software sea flexible en la medida en que pueda adaptarse y adaptarse a los futuros esfuerzos de localización.

Localización: el proceso de adaptación del software a una región / país / mercado en particular (configuración regional).

Observaciones

Para probar la localización de un dispositivo, se puede reiniciar el dispositivo o el emulador en una configuración regional particular utilizando adb siguiente manera:

  1. Ejecuta adb usando el comando: adb shell
  2. Ejecute el siguiente comando en el símbolo del sistema adb: setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start donde [etiqueta de idioma BCP-47] es el código específico del idioma como se describe aquí: códigos BCP47

por ejemplo, para verificar la localización japonesa en la aplicación, use el comando: setprop persist.sys.locale ja-JP;stop;sleep 5;start

Planificación para la localización: habilitar el soporte RTL en Manifiesto

El soporte RTL (de derecha a izquierda) es una parte esencial en la planificación de i18n y L10n. A diferencia del idioma inglés, que está escrito de izquierda a derecha, muchos idiomas como el árabe, el japonés, el hebreo, etc. están escritos de derecha a izquierda. Para atraer a una audiencia más global, es una buena idea planificar sus diseños para que sean compatibles con este idioma desde el principio del proyecto, para que luego sea más fácil agregar localización.

RTL apoyo se puede activar en una aplicación para Android añadiendo la supportsRtl etiqueta en el AndroidManifest , así:

<application
    ...
    android:supportsRtl="true"
    ...>
...
</application>

Planificación para la localización: Añadir soporte RTL en diseños

A partir del SDK 17 (Android 4.2), se agregó soporte RTL en diseños de Android y es una parte esencial de la localización. En el futuro, la notación left/right en los diseños debe reemplazarse por la notación start/end . Sin embargo, si su proyecto tiene un valor de minSdk menor que 17 , entonces se debe usar la notación de left/right y de start/end en los diseños.

Para diseños relativos, alignParentStart y alignParentEnd deben usarse, así:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>
</RelativeLayout>

Para especificar la gravedad y la gravedad de la disposición, se debe utilizar una notación similar, como así:

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left|start"
        android:gravity="left|start"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|end"
        android:gravity="right|end"/>

Los rellenos y márgenes también deben especificarse en consecuencia, así:

<include layout="@layout/notification"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="12dp"
    android:layout_marginStart="12dp"
    android:paddingLeft="128dp"
    android:paddingStart="128dp"
    android:layout_toLeftOf="@id/cancel_action"
    android:layout_toStartOf="@id/cancel_action"/>
<include layout="@layout/notification2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="12dp"
    android:layout_marginEnd="12dp"
    android:paddingRight="128dp"
    android:paddingEnd="128dp"
    android:layout_toRightOf="@id/cancel_action"
    android:layout_toEndOf="@id/cancel_action"/>

Planificación para la localización: diseños de prueba para RTL

Para probar si los diseños que se han creado son compatibles con RTL, haga lo siguiente:

Vaya a Configuración -> Opciones de desarrollador -> Dibujo -> Forzar dirección de diseño RTL

Habilitar esta opción obligaría al dispositivo a utilizar las configuraciones regionales de RTL y puede verificar fácilmente todas las partes de la aplicación para el soporte de RTL. Tenga en cuenta que no es necesario que agregue ninguna nueva configuración regional / idioma hasta este punto.

Codificación para localización: creación de cadenas y recursos predeterminados

El primer paso para la codificación de la localización es crear recursos predeterminados. Este paso es tan implícito que muchos desarrolladores ni siquiera lo piensan. Sin embargo, crear recursos predeterminados es importante porque si el dispositivo se ejecuta en una configuración regional no compatible, cargaría todos sus recursos desde las carpetas predeterminadas. Si incluso falta uno de los recursos de las carpetas predeterminadas, la aplicación simplemente se bloquearía.

El conjunto predeterminado de cadenas se debe colocar en la siguiente carpeta en la ubicación especificada:

res/values/strings.xml 

Este archivo debe contener las cadenas en el idioma en el que se espera que hablen la mayoría de los usuarios de la aplicación.

Además, los recursos predeterminados para la aplicación se deben colocar en las siguientes carpetas y ubicaciones:

res/drawable/
res/layout/

Si su aplicación requiere carpetas como anim o xml , los recursos predeterminados deben agregarse a las siguientes carpetas y ubicaciones:

res/anim/
res/xml/
res/raw/

Codificación para localización: Proporcionar cadenas alternativas.

Para proporcionar traducciones en otros idiomas (locales), debemos crear un strings.xml en una carpeta separada según la siguiente convención:

res/values-<locale>/strings.xml

Un ejemplo para el mismo se da a continuación:

Ejemplo para locales

En este ejemplo, tenemos cadenas en inglés predeterminadas en el archivo res/values/strings.xml , las traducciones en francés se proporcionan en la carpeta res/values-fr/strings.xml y las traducciones en japonés en la carpeta res/values-ja/strings.xml

Otras traducciones para otras configuraciones regionales se pueden agregar de manera similar a la aplicación.

Una lista completa de códigos de configuración regional se puede encontrar aquí: códigos ISO 639

Cuerdas no traducibles:

Su proyecto puede tener ciertas cadenas que no deben ser traducidas. Las cadenas que se utilizan como claves para SharedPreferences o las cadenas que se utilizan como símbolos, entran en esta categoría. Estas cadenas deben almacenarse solo en las strings.xml predeterminadas.xml y deben marcarse con un atributo translatable="false" . p.ej

<string name="pref_widget_display_label_hot">Hot News</string>
<string name="pref_widget_display_key" translatable="false">widget_display</string>
<string name="pref_widget_display_hot" translatable="false">0</string>

Este atributo es importante porque las traducciones suelen ser realizadas por profesionales que son bilingües. Esto permitiría a estas personas involucradas en las traducciones identificar cadenas que no se traducirán, ahorrando así tiempo y dinero.

Codificación para localización: Proporcionar diseños alternativos

La creación de diseños específicos del idioma a menudo es innecesaria si ha especificado la notación correcta de start/end , como se describe en el ejemplo anterior. Sin embargo, puede haber situaciones en las que los diseños predeterminados no funcionen correctamente para ciertos idiomas. A veces, los diseños de izquierda a derecha pueden no traducirse para los idiomas RTL. Es necesario proporcionar los diseños correctos en tales casos.

Para proporcionar una optimización completa para los diseños de RTL, podemos usar archivos de diseño completamente separados utilizando el ldrtl recursos ldrtl ( ldrtl significa layout-direction-direction-right-left}). Por ejemplo, podemos guardar sus archivos de diseño predeterminados en res/layout/ y nuestros diseños RTL optimizados en res/layout-ldrtl/ .

El calificador ldrtl es ideal para recursos ldrtl , por lo que puede proporcionar gráficos orientados en la dirección correspondiente a la dirección de lectura.

Aquí hay una gran publicación que describe la precedencia de los diseños de ldrtl : Diseños específicos de idioma



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow