Cómo localizar una aplicación de Android

La localización es más que solo la traducción de las cadenas en su aplicación en otros idiomas. También implica mostrar datos, como fechas y horas, en el formato adecuado para sus usuarios. Incluso si solo desea una versión en inglés de su aplicación, es bueno saber qué implica la localización. De esa manera, estará listo si decide agregar soporte para configuraciones regionales adicionales y no tendrá que buscar cadenas y valores en toda la base de código de su aplicación.

Con el SDK de Android, el idioma de las cadenas localizadas y el formato utilizado para mostrar los valores dependen de la configuración regional del dispositivo. La configuración regional es una combinación del idioma y el país. El lenguaje está definido por la ISO 639-1 estándar, mientras que el país está definido por el ISO 3166-1 estándar. Esto significa que la configuración regional de Android es compatible con la cultura o configuración regional utilizada por la mayoría de los otros lenguajes de programación y marcos..

La única configuración regional que se garantiza que esté presente en todos los dispositivos Android es Inglés como se habla en el Estados Unidos. Está representado por la en_US código, con ensiendo el código de idioma para inglés y NOSOTROS siendo el código de país para los Estados Unidos. También puedes usar el ensolo código de idiomacomo el lugar para representar a todos los países y regiones de habla inglesa.

Para localizar una aplicación para un idioma o para un país e idioma específicos, debe incluir los recursos para esa ubicación en el / res Carpeta de su aplicación. Esto generalmente incluye recursos de cadena en el / res / valores carpeta, pero también puede incluir otros tipos de recursos, como imágenes y diseños. El SDK de Android identifica los diversos recursos alternativos con calificadores de configuración, que luego se usan para nombrar la carpeta que contiene esos recursos. El calificador de configuración para la configuración regional es el código de idioma, seguido opcionalmente por el código de país.Por lo tanto, los recursos de cadena localizados para su aplicación deben estar en el/res / valores- /res / valores--r carpeta.

Debe tener en cuenta que los recursos identificados con un calificador de configuración para una configuración regional específica tienen prioridad sobre la mayoría de los otros recursos. Otros calificadores de configuración comunes para recursos con menor prioridad incluyen el tamaño de la pantalla y la densidad de píxeles de la pantalla para describir diferentes diseños según el tamaño de la pantalla. Solo los recursos identificados con un calificador de configuración de código de país móvil (MCC) tienen una mayor prioridad que los recursos de cadena identificados con un calificador de configuración regional. El código de país móvil se usa para definir recursos para un país, que opcionalmente se puede seguir con el código de red móvil (MNC) de una tarjeta SIM para apuntar a un proveedor móvil específico en ese país. Se utiliza para proporcionar contenido específico para un país como un contrato o una política de privacidad.

1. Localizando Cuerdas

Cada aplicación de Android debe tener todos sus recursos de cadena en el /res/valores/strings.xml expediente. Esto permite la reutilización de cadenas en su aplicación incluso si no se necesita localización. Además, si no hay ningún archivo disponible para la configuración regional actual del dispositivo, esto archivo se utiliza. Si no tiene uno y su aplicación intenta acceder a un recurso de cadena que solo está disponible en una strings.xml archivo específico para una configuración regional, su aplicación se bloqueará sin previo aviso ya que los recursos se cargan en tiempo de ejecución y no durante la compilación.

UNA strings.xml El archivo específico para un entorno local no necesita tener todos los recursos de cadena de la /res/valores/strings.xml expediente. Esto significa que si un recurso, como el nombre de su aplicación, no necesita ser localizado, no necesita incluirlo en cada archivo de cadenas.

En el tiempo de ejecución, el /res / valores--r/strings.xml archivo de la configuración regional del dispositivo se comprueba seguido de la / res / valores-/strings.xml archivo solo para el idioma. Si la cadena especificada no está disponible en esos archivos, entonces la aplicación recurre a la / res / values ​​/ strings.xml.

Por ejemplo, si desea localizar su aplicación para todas las regiones y países francófonos sin apuntar a una específica, coloque las cadenas para la aplicación en la / res / valores-fr /strings.xml expediente. Sin embargo, si desea localizar algunas cadenas con ortografía específica del francés como está escrito en Francia, debe colocarlas en el /res/valores-fr-rFr/strings.xml expediente. Asegúrese de agregar el r antes del código del país en el nombre de la carpeta o no se encontrará en el tiempo de ejecución cuando la aplicación esté localizada.

Aquí hay un ejemplo de / res / valores /strings.xml Archivo con algunos recursos de cadena en inglés:

  Demostración de localización de Android Hola Mundo! Hola% s!  

Y aquí hay un / res / values-fr /strings.xmlArchivo con los mismos recursos en francés:

  Démo de localización Android Bonjour le monde! Bonjour% s! 

Localización de cadenas en diseños

Las cadenas en sus diseños deben ser recursos de cadena. De hecho, se muestra una advertencia de Pelusa si una cadena está codificada. Puede usar recursos en todas partes donde establecería cadenas en diseños. Los recursos de cadena son identificados por @cuerda/ seguido del nombre del recurso de la strings.xml expediente. A continuación se muestra el Hola Mundo cadena del ejemplo anterior en una Vista de texto De acuerdo con la localización del dispositivo:

Esto muestra "Bonjour le monde!"en un dispositivo Android configurado en una configuración regional que incluya el idioma francés. Para todos los demás locales, el "¡Hola mundo!" se muestra la cadena.

Localizando Cadenas en Código

También necesitará localizar cadenas de su código si crea o modifica controles fuera de sus diseños. Para localizar esas cuerdas, primero debe obtener el android.content.res.Resources Objeto que contiene todos los recursos en el paquete de la aplicación para el contexto actual. Entonces llamas al getString método en ese objeto, pasando el identificador de la cadena para mostrar. Por ejemplo, el siguiente bloque de código le muestra cómo configurar el texto de un Vista de texto objeto:

// Obtenga la cadena traducida del recurso de cadena android.content.res.Resources res = context.getResources (); String helloWorld = res.getString (R.string.hello_world); // Establecer la cadena a la vista de texto TextView helloTextView; helloTextView = (TextView) findViewById (R.id.hello_world_textview); helloTextView.setText (helloWorld);

Cadenas más complejas, con uno o más componentes variables, necesita usar cadenas de formato. Las cadenas de formato le permiten especificar los valores para que se muestren los parámetros. Los parámetros en la cadena de formato se identifican con especificadores de formato. El especificador de formato más utilizado es % s, representando una cadena. De hecho, todas las cadenas de formato de la java.util.Formatter clase estan disponibles Además, si se requieren varios parámetros, debe numerar los especificadores de formato. En el caso de especificadores de formato de cadena, el primero debe ser % 1 $ s, el segundo % 2 $ s, y así.

Una vez que se especifican las cadenas de formato, se utiliza el String.format Método para pasar en los parámetros para mostrar a su cadena. Aquí es cómo configurar el texto para mostrar en una Vista de texto con el hello_world_name cadena de formato de la strings.xml expediente. Esta cadena de formato incluye un especificador de formato para el nombre del usuario:

// Obtener la cadena de formato android.content.res.Resources res = context.getResources (); String helloFormatString = res.getString (R.string.hello_world_name); String userName = "Bob"; // Inserte el nombre en la cadena de formato String helloWorldName = String.format (helloFormatString, userName); // Establecer texto de la vista de texto TextView helloTextView; helloTextView = (TextView) findViewById (R.id.hello_world_textview); helloTextView.setText (helloWorldName);

Esto muestra el "Bonjour Bob!"cadena para un dispositivo Android con una configuración regional que incluye el idioma francés. Para todos los demás locales el "¡Hola Bob!" se muestra la cadena.

2. Localización de fechas y horarios

Si las cadenas de su aplicación ya están localizadas, su aplicación ya está en muy buena forma. Sin embargo, es posible que deba mostrar fechas y horas al usuario en muchos casos. Esas fechas y horas también deben adaptarse a la ubicación actual del dispositivo. Afortunadamente, el SDK de Android incluye clases que dan formato a fechas y horas según la configuración regional.

En el SDK de Android, las fechas y horas son administradas por el Fecha clase de la java.util espacio de nombres. La fecha y hora actual del dispositivo es devuelta por el java.util.Calendar.

Fechas de localización

Las fechas se pueden formatear usando una instancia de Formato de fecha formateador de la java.text espacio de nombres. Debes usar el Formato de fecha clase del SDK de Android en el android.text.format espacio de nombres para obtener el formateador correcto para la configuración regional del dispositivo. El siguiente fragmento de código muestra cómo obtener una cadena con la fecha actual formateada para la configuración regional del dispositivo:

// Obtiene la fecha y hora actuales Fecha currentDate = Calendar.getInstance (). GetTime (); // Obtiene el formateador de fecha estándar para la configuración regional actual de // el dispositivo java.text.DateFormat dateFormat; dateFormat = android.text.format.DateFormat.getDateFormat (this); // Formatea la fecha actual de acuerdo con la configuración regional String formattedCurrentDate = dateFormat.format (currentDate);

Si la configuración regional actual del dispositivo es el inglés como se habla en los Estados Unidos, la cadena contendrá la fecha actual en un formato de fecha corta, 30/11/2014. los Formato de fecha La clase incluye algunos otros formatos de fecha. Por ejemplo, el getLongDateFormat método devuelve un formato de fecha larga, Domingo 30 de noviembre de 2014.

Tiempos de localización

Dado que los tiempos se representan como Fecha objetos por el SDK de Android, también deben mostrarse utilizando un formateador devuelto por el Formato de fecha clase de la android.text.format espacio de nombres. los getTimeFormat método devuelve un formato que solo muestra la hora de un Fecha objeto. El siguiente fragmento de código muestra cómo obtener una cadena con la hora actual formateada para la configuración regional del dispositivo:

// Obtiene la fecha y hora actuales java.util.Date currentDate = Calendar.getInstance (). GetTime (); // Obtiene un formateador de fecha para la configuración regional actual del dispositivo // que muestra las horas. java.text.DateFormat timeFormat; timeFormat = android.text.format.DateFormat.getTimeFormat (this); // Formatea la hora actual según la configuración regional String formattedTime = timeFormat.format (currentDate);

Si la configuración regional actual del dispositivo es el inglés como se habla en los Estados Unidos, la cadena contendrá la hora actual en el siguiente formato, 8:15 PM.

Conclusión

Es importante localizar solo las cadenas que se utilizan en la interfaz de usuario de la aplicación. Por ejemplo, no es necesario localizar los mensajes de depuración que solo se utilizan durante el desarrollo o para fines de diagnóstico. También tenga en cuenta que no debe escribir fechas y horas localizadas en el disco o en una base de datos. No solo puede cambiar la configuración regional de un dispositivo, trabajar con fechas y horas localizadas hace que el desarrollo sea innecesariamente difícil y complejo.