1page.title=Idioma y configuración regional 2page.tags=androidn 3page.image=images/cards/card-nyc_2x.jpg 4 5@jd:body 6 7<div id="qv-wrapper"> 8<div id="qv"> 9<h2>En este documento:</h2> 10<ol> 11 <li><a href="#preN">Desafíos para la resolución de recursos de idioma</a></li> 12 <li><a href="#postN">Mejoras de la estrategia de resolución de recursos</a></li> 13 <li><a href="#design">Diseño de la aplicación para permitir configuraciones regionales 14 adicionales</a></li> 15 16</ol> 17 18</div> 19</div> 20 21<p>Android N brinda un soporte mejorado para los usuarios de diferentes idiomas 22y les permite seleccionar múltiples configuraciones regionales en la configuración. Android N 23brinda esta capacidad expandiendo ampliamente la cantidad de configuraciones regionales compatibles 24y cambiando la forma en que el sistema resuelve los recursos. El nuevo método de resolución 25de recursos es más robusto y está diseñado para ser compatible con APK existentes, pero 26debes tener especial cuidado para detectar cualquier comportamiento inesperado. Por ejemplo, debes 27realizar pruebas para asegurarte de que tu aplicación muestre el idioma esperado de forma predeterminada. Además, 28si tu aplicación permite múltiples idiomas, debes asegurarte de que esta compatibilidad funcione 29como debería. Por último, debes tratar de asegurarte de que tu aplicación administre con facilidad 30los idiomas para los cuales no diseñaste explícitamente la aplicación.</p> 31 32<p>Al inicio de este documento, encontrarás una explicación sobre la estrategia de resolución de recursos anterior a 33Android N. Luego, encontrarás una descripción de la estrategia de resolución de recursos 34mejorada de Android N. Por último, encontrarás una explicación sobre cómo aprovechar 35la cantidad expandida de configuraciones regionales para permitir acceso a más usuarios de diferentes idiomas.</p> 36 37<h2 id="preN">Desafíos para la resolución de recursos de idioma</h2> 38 39<p>Antes de Android N, Android no siempre podía 40 hacer coincidir correctamente las configuraciones regionales de la aplicación y del sistema.</p> 41 42 <p>Por ejemplo, imagina que tienes la siguiente situación:</p> 43 <ul> 44 <li>El idioma predeterminado de la aplicación es {@code en_US} (inglés de EE. UU.), y también tiene 45 cadenas en español localizadas en archivos de recursos {@code es_ES} 46.</li> 47 <li> Se configura un dispositivo en {@code es_MX}. </li> 48 49<p>Cuando el código Java hace referencia a cadenas, el sistema carga 50 las cadenas del archivo de recursos ({@code en_US}) predeterminado, incluso si la aplicación tiene 51 recursos en español localizados en {@code es_ES}. Esto se debe a que, cuando el sistema 52 no puede encontrar una coincidencia exacta, continúa buscando recursos y se quita el 53 código del país de la configuración regional. Finalmente, si no se encuentra una coincidencia, el sistema regresa 54 a la configuración predeterminada, que es {@code en_US}. </p> 55 56 57<p>El sistema también usaba {@code en_US} de forma predeterminada si el usuario elegía un idioma que 58 no era compatible con la aplicación, como el francés. Por ejemplo:</p> 59 60<p class="table-caption" id="t-resource-res"> 61<strong>Tabla 1.</strong> Resolución de recursos sin una coincidencia de configuración regional exacta. 62</p> 63<table> 64<tbody> 65<tr> 66<th>Configuración del usuario</th> 67<th>Recursos de la aplicación</th> 68<th>Resolución de recursos</th> 69</tr> 70<tr> 71<td>fr_CH</td> 72<td> 73Predeterminado (en)<br> 74de_DE<br> 75es_ES<br> 76fr_FR<br> 77it_IT<br> 78</td> 79 <td> 80Intentar fr_CH => Error<br> 81Intentar fr => Error<br> 82Usar predeterminado (en) 83</td> 84 </tr> 85 </tbody> 86</table> 87 88 89<p>En este ejemplo, el sistema muestra las cadenas en inglés sin 90saber si el usuario comprende este idioma. Este comportamiento es muy común 91hoy en día. Android N debería reducir sustancialmente la frecuencia 92de resultados como este.</p> 93 94<h2 id="postN">Mejoras de la estrategia de resolución de recursos</h2> 95<p>Android N brinda una resolución de recursos más robusta y 96encuentra mejores recursos de forma automática. Sin embargo, para acelerar la resolución y mejorar la 97facilidad de mantenimiento, debes almacenar los recursos en el dialecto primario. 98 Por ejemplo, si antes almacenabas los recursos en español en el directorio {@code es-US} 99, pásalos al directorio {@code es-419}, que contiene la variante de Latinoamérica. 100 De forma similar, si tienes cadenas de recursos en una carpeta llamada {@code en-GB}, cámbiale 101 el nombre a {@code en-001} (inglés internacional), ya que el dialecto primario más común 102 para las cadenas en <code>en-GB</code> es {@code en-001}. 103 Los siguientes ejemplos explican por qué estas prácticas mejoran el desempeño 104 y la confiabilidad de la resolución de recursos.</p> 105 106<h3>Ejemplos de resolución de recursos</h3> 107 108<p>Con Android N, el caso descrito en la <strong>Tabla 1</strong> se resuelve 109de otra forma:</p> 110 111<p class="table-caption" id="t-improved-res"> 112<strong>Tabla 2.</strong> Una estrategia de resolución mejorada para los casos en que no 113hay una coincidencia de configuración regional exacta.</p> 114<table> 115<tr> 116<th>Configuración del usuario</th> 117<th>Recursos de la aplicación</th> 118<th>Resolución de recursos</th> 119</tr> 120<tr> 121<td><ol> 122<li> fr_CH</li> 123</ol> 124</td> 125<td> 126Predeterminado (en)<br> 127de_DE<br> 128es_ES<br> 129fr_FR<br> 130it_IT<br> 131</td> 132<td> 133Intentar fr_CH => Error<br> 134Intentar fr => Error<br> 135Intentar secundario de fr => fr_FR<br> 136Usar fr_FR 137</td> 138</tr> 139 140</table> 141 142 143<p>Así, los recursos se muestran en francés en lugar de en inglés. Este ejemplo también muestra 144 por qué deberías almacenar las cadenas en francés en {@code fr} en lugar de en {@code fr_FR} 145 para Android N. Aquí, el procedimiento se basa en hacer coincidir el dialecto primario más cercano, 146 lo cual hace que la resolución sea más rápida y más predecible.</p> 147 148<p>Además de esta lógica de resolución mejorada, Android ofrece ahora más 149 idiomas de usuario de entre los cuales elegir. Volvamos a ver el ejemplo anterior con el idioma italiano 150 especificado como un idioma de usuario adicional, pero sin compatibilidad de la aplicación con el idioma francés. </p> 151 152<p class="table-caption" id="t-2d-choice"> 153<strong>Tabla 3.</strong> Resolución de recursos cuando la aplicación solo hace coincidir la 154configuración regional de segunda preferencia del usuario.</p> 155<table> 156<tr> 157<th>Configuración del usuario</th> 158<th>Recursos de la aplicación</th> 159<th>Resolución de recursos</th> 160 161</tr> 162<tr> 163<td><ol> 164<li> fr_CH</li> 165<li> it_CH</li> 166</ol> 167</td> 168<td> 169Predeterminado (en)<br> 170de_DE<br> 171es_ES<br> 172it_IT<br> 173</td> 174<td> 175Intentar fr_CH => Error<br> 176Intentar fr => Error<br> 177Intentar secundario de fr => Error<br> 178Intentar it_CH => Error<br> 179Intentar it => Error<br> 180Intentar secundario de it => it_IT<br> 181Usar it_IT 182</td> 183 184</tr> 185 186</table> 187<p>El usuario recibe la información en un idioma que comprende, si bien la aplicación no 188es compatible con el idioma francés.</p> 189 190 191<h2 id="design">Diseño de la aplicación para permitir configuraciones regionales adicionales</h2> 192<h3>API LocaleList</h3> 193 194<p>Android N incorpora una nueva API, {@code LocaleList.getDefault()}, 195que les permite a las aplicaciones consultar directamente la lista de idiomas que ha especificado el usuario. Esta API 196 te permite crear un comportamiento de la aplicación 197 más sofisticado y una presentación de contenido más optimizada. Por ejemplo, las búsquedas 198 pueden mostrar resultados en múltiples idiomas según la configuración del usuario. Las aplicaciones de navegadores 199 pueden evitar ofrecer la traducción de páginas que están en un idioma que el usuario comprende, 200 y las aplicaciones de teclado pueden habilitar automáticamente todos los diseños correctos. </p> 201 202<h3>Formateadores</h3> 203 204<p>Hasta Android 6.0 (API nivel 23), Android solo permitía una o dos 205 configuraciones regionales para muchos idiomas comunes 206 (en, es, ar, fr, ru). Debido a que había solo unas pocas variantes para cada idioma, 207las aplicaciones podían almacenar algunos números y fechas como cadenas preprogramadas 208en los archivos de recursos. Sin embargo, con el conjunto ampliado de configuraciones regionales 209compatibles de Android, puede haber diferencias importantes 210en los formatos de fecha, hora, moneda e 211información similar, incluso dentro de una sola configuración regional. Preprogramar los formatos puede generar 212una experiencia confusa para los usuarios. Por lo tanto, cuando desarrolles aplicaciones para Android, 213asegúrate de usar formateadores en lugar de preprogramar las cadenas de números y fechas.</p> 214 215<p>Un muy buen ejemplo es el árabe. Android N expandió su compatibilidad de 216una configuración regional, {@code ar_EG}, a 27 configuraciones regionales. Estas configuraciones regionales pueden compartir la mayoría de los recursos, 217pero algunas prefieren dígitos ASCII, mientras que otras prefieren dígitos nativos. Por ejemplo, 218cuando desees crear una oración con una variable de dígito, como 219"Elige un PIN de 4 dígitos", usa formateadores como se muestra a continuación:</p> 220 221<pre> format(locale, "Choose a %d-digit PIN", 4)</pre> 222