Android
Internacionalización y localización (I18N y L10N)
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:
- Ejecuta adb usando el comando:
adb shell
- 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:
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