Localización de Android
En este documento se presentan las características de localización de Android SDK y cómo acceder a ellas con Xamarin.
Características de la plataforma Android
En esta sección se describen las principales características de localización de Android. Vaya a la sección siguiente para ver ejemplos y código específicos.
Configuración regional
Los usuarios eligen su idioma en Configuración Entrada de & idioma. Esta selección controla tanto el idioma mostrado como la configuración regional utilizada (por ejemplo, para el formato de fecha y número).
La configuración regional actual se puede consultar a través de : Resources
var lang = Resources.Configuration.Locale; // eg. "es_ES"
Este valor será un identificador de configuración regional que contiene un código de idioma y un código de configuración regional, separados por un carácter de subrayado. Como referencia, esta es una lista de configuraciones regionales de Java y configuraciones regionales compatibles con Android a través de StackOverflow.
Algunos ejemplos frecuentes son:
en_USpara inglés (Estados Unidos)es_ESpara español (España)ja_JPpara japonés (Japón)zh_CNpara chino (China)zh_TWpara chino (Taiwán)pt_PTpara portugués (Portugal)pt_BRpara portugués (Brasil)
LOCALE_CHANGED
Android genera cuando android.intent.action.LOCALE_CHANGED el usuario cambia su selección de idioma.
Las actividades pueden optar por controlar esto estableciendo android:configChanges el atributo en la actividad, de la siguiente manera:
[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
ConfigurationChanges = ConfigChanges.Locale | ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
Conceptos básicos de internacionalización en Android
La estrategia de localización de Android tiene las siguientes partes clave:
Carpetas de recursos que contienen cadenas localizadas, imágenes y otros recursos.
GetTextmétodo , que se usa para recuperar cadenas localizadas en el código@string/iden archivos AXML, para colocar automáticamente cadenas localizadas en diseños.
Carpetas de recursos
Las aplicaciones Android administran la mayoría del contenido de las carpetas de recursos, como:
- layout: contiene archivos de diseño de AXML.
- drawable: contiene imágenes y otros recursos drawable.
- values: contiene cadenas.
- raw: contiene archivos de datos.
La mayoría de los desarrolladores ya están familiarizados con el uso de sufijos ppp en el directorio drawable para proporcionar varias versiones de una imagen, lo que permite a Android elegir la versión correcta para cada dispositivo. El mismo mecanismo se usa para proporcionar varias traducciones de idioma mediante el sufijo de directorios de recursos con identificadores de idioma y referencia cultural.

Nota:
Al especificar un idioma de nivel superior como solo se requieren dos caracteres; sin embargo, al especificar una configuración regional completa, el formato de nombre de directorio requiere un guión y una r minúscula para separar las dos partes, por ejemplo espt-rBR o zh-rCN.es Compare esto con el valor devuelto en el código, que tiene un carácter de subrayado (por ejemplo, pt_BR). Ambos son diferentes al valor que usa la clase CultureInfo .NET, que solo tiene un guión (por ejemplo, pt-BR). Tenga en cuenta estas diferencias al trabajar en plataformas Xamarin.
Strings.xml formato de archivo
Un directorio de valores localizados (por ejemplo, values-es o values-pt-rBR) debe contener un archivo denominado Strings.xml que contendrá el texto traducido para esa configuración regional.
Cada cadena traducible es un elemento XML con el identificador de recurso especificado como atributo y la name cadena traducida como valor:
<string name="app_name">TaskyL10n</string>
Debe usar el escape según las reglas XML normales y debe ser un identificador de recurso de name Android válido (sin espacios ni guiones). Este es un ejemplo del archivo de cadenas (inglés) predeterminado para el ejemplo:
values/Strings.xml
<resources>
<string name="app_name">TaskyL10n</string>
<string name="taskadd">Add Task</string>
<string name="taskname">Name</string>
<string name="tasknotes">Notes</string>
<string name="taskdone">Done</string>
<string name="taskcancel">Cancel</string>
</resources>
El directorio español values-es contiene un archivo con el mismo nombre (Strings.xml) que contiene las traducciones:
values-es/Strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">TaskyLeon</string>
<string name="taskadd">agregar tarea</string>
<string name="taskname">Nombre</string>
<string name="tasknotes">Notas</string>
<string name="taskdone">Completo</string>
<string name="taskcancel">Cancelar</string>
</resources>

Con los archivos de cadena configurados, se puede hacer referencia a los valores traducidos en diseños y código.
Archivos de diseño de AXML
Para hacer referencia a cadenas localizadas en archivos de diseño, use la @string/id sintaxis . Este fragmento XML del ejemplo muestra las propiedades que se establecen con identificadores de recursos localizados (se han omitido algunos text otros atributos):
<TextView
android:id="@+id/NameLabel"
android:text="@string/taskname"
... />
<CheckBox
android:id="@+id/chkDone"
android:text="@string/taskdone"
... />
GetText (método)
Para recuperar cadenas traducidas en código, use el GetText método y pase el identificador de recurso:
var cancelText = Resources.GetText (Resource.String.taskcancel);
Cadenas de cantidad
Los recursos de cadena de Android también permiten crear cadenas de cantidad que permiten a los traductores proporcionar traducciones diferentes para diferentes cantidades, como:
- "Queda una tarea".
- "Todavía hay dos tareas por hacer".
(en lugar de un genérico "Quedan n tareas").
En el Strings.xml
<plurals name="numberOfTasks">
<!--
As a developer, you should always supply "one" and "other"
strings. Your translators will know which strings are actually
needed for their language.
-->
<item quantity="one">There is %d task left.</item>
<item quantity="other">There are %d tasks still to do.</item>
</plurals>
Para representar la cadena completa, use el método , pasando el identificador de recurso y el valor que se va a GetQuantityString mostrar (que se pasa dos veces). Android usa el segundo parámetro para determinar qué cadena se va a usar; el tercer parámetro es el valor que se sustituye realmente en la cadena (ambos son necesarios).
var translated = Resources.GetQuantityString (
Resource.Plurals.numberOfTasks, taskcount, taskcount);`
Los quantity modificadores válidos son:
- cero
- one
- two
- few
- many
- otro
Se describen con más detalle en la documentación de Android. Si un idioma determinado no requiere un control "especial", esas cadenas se omitirán (por ejemplo, el inglés solo usa y ; si se especifica una cadena no tendrá ningún efecto, no se oneotherzero usará).
Imágenes
Las imágenes localizadas siguen las mismas reglas que los archivos de cadena: todas las imágenes a las que se hace referencia en la aplicación deben colocarse en directorios drawables para que haya una reserva.
A continuación, las imágenes específicas de la configuración regional se deben colocar en carpetas dibujables calificados, como drawable-es o drawable-ja (también se pueden agregar especificadores de ppp).
En esta captura de pantalla, se guardan cuatro imágenes en el directorio drawable, pero solo una, flag.png, tiene copias localizadas en otros directorios.

Otros tipos de recursos
También puede proporcionar otros tipos de recursos alternativos específicos del lenguaje, como diseños, animaciones y archivos sin formato. Esto significa que podría proporcionar un diseño de pantalla específico para uno o varios de los idiomas de destino, por ejemplo, podría crear un diseño específicamente para alemán que permita etiquetas de texto muy largas.
Android 4.2 introdujo compatibilidad con los idiomas de derecha a izquierda (RTL) si establece la configuración de la aplicación . El calificador "ldrtl" de recursos se puede incluir en un nombre de directorio para contener diseños personalizados diseñados para la presentación rtl.
Para obtener más información sobre la reserva y la nomenclatura de directorios de recursos, consulte la documentación de Android para proporcionar recursos alternativos.
Nombre de la aplicación
El nombre de la aplicación es fácil de encontrar mediante un @string/id en para la MainLauncher actividad:
[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Locale)]
Idiomas de derecha a izquierda (RTL)
Android 4.2 y versiones más recientes proporciona compatibilidad completa con los diseños RTL, que se describen en detalle en el blog de compatibilidad nativa de RTL.
Cuando se usa Android 4.2 (nivel de API 17) y versiones más recientes, se pueden especificar valores de alineación con y en lugar de startend y leftright (por android:paddingStart ejemplo, ). También hay nuevas API como , y para ayudar a crear LayoutDirectionTextDirectionTextAlignment pantallas que se adapten a los lectores RTL.
En la captura de pantalla siguiente se muestra el ejemplo tasky localizado en árabe:
En la captura de pantalla siguiente se muestra el ejemplo tasky localizado en hebreo:
El texto RTL se localiza Strings.xml archivos de la misma manera que el texto LTR.
Pruebas
Asegúrese de probar exhaustivamente la configuración regional predeterminada. La aplicación se bloqueará si los recursos predeterminados no se pueden cargar por algún motivo (es decir, faltan).
Emulator Testing
Consulte la sección Testing on an Android Emulator de Google para obtener instrucciones sobre cómo establecer un emulador en una configuración regional específica mediante el shell de ADB.
adb shell setprop persist.sys.locale fr-CA;stop;sleep 5;start
Pruebas de dispositivos
Para realizar pruebas en un dispositivo, cambie el idioma de la Configuración aplicación.
Sugerencia
Anote los iconos y la ubicación de los elementos de menú para poder revertir el idioma a la configuración original.
Resumen
En este artículo se tratan los conceptos básicos de la localización de aplicaciones Android mediante el control de recursos integrado. Puede obtener más información sobre las aplicaciones i18n y L10n para iOS, Android y multiplataforma (incluido Xamarin.Forms) en esta guía multiplataforma.

