1 page.title=Idioma y configuracin regional 2 page.tags=androidn 3 page.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">Desafos para la resolucin de recursos de idioma</a></li> 12 <li><a href="#postN">Mejoras de la estrategia de resolucin de recursos</a></li> 13 <li><a href="#design">Diseo de la aplicacin 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 22 y les permite seleccionar mltiples configuraciones regionales en la configuracin. Android N 23 brinda esta capacidad expandiendo ampliamente la cantidad de configuraciones regionales compatibles 24 y cambiando la forma en que el sistema resuelve los recursos. El nuevo mtodo de resolucin 25 de recursos es ms robusto y est diseado para ser compatible con APK existentes, pero 26 debes tener especial cuidado para detectar cualquier comportamiento inesperado. Por ejemplo, debes 27 realizar pruebas para asegurarte de que tu aplicacin muestre el idioma esperado de forma predeterminada. Adems, 28 si tu aplicacin permite mltiples idiomas, debes asegurarte de que esta compatibilidad funcione 29 como debera. Por ltimo, debes tratar de asegurarte de que tu aplicacin administre con facilidad 30 los idiomas para los cuales no diseaste explcitamente la aplicacin.</p> 31 32 <p>Al inicio de este documento, encontrars una explicacin sobre la estrategia de resolucin de recursos anterior a 33 Android N. Luego, encontrars una descripcin de la estrategia de resolucin de recursos 34 mejorada de Android N. Por ltimo, encontrars una explicacin sobre cmo aprovechar 35 la cantidad expandida de configuraciones regionales para permitir acceso a ms usuarios de diferentes idiomas.</p> 36 37 <h2 id="preN">Desafos para la resolucin de recursos de idioma</h2> 38 39 <p>Antes de Android N, Android no siempre poda 40 hacer coincidir correctamente las configuraciones regionales de la aplicacin y del sistema.</p> 41 42 <p>Por ejemplo, imagina que tienes la siguiente situacin:</p> 43 <ul> 44 <li>El idioma predeterminado de la aplicacin es {@code en_US} (ingls de EE. UU.), y tambin tiene 45 cadenas en espaol 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 cdigo Java hace referencia a cadenas, el sistema carga 50 las cadenas del archivo de recursos ({@code en_US}) predeterminado, incluso si la aplicacin tiene 51 recursos en espaol localizados en {@code es_ES}. Esto se debe a que, cuando el sistema 52 no puede encontrar una coincidencia exacta, contina buscando recursos y se quita el 53 cdigo del pas de la configuracin regional. Finalmente, si no se encuentra una coincidencia, el sistema regresa 54 a la configuracin predeterminada, que es {@code en_US}. </p> 55 56 57 <p>El sistema tambin usaba {@code en_US} de forma predeterminada si el usuario elega un idioma que 58 no era compatible con la aplicacin, como el francs. Por ejemplo:</p> 59 60 <p class="table-caption" id="t-resource-res"> 61 <strong>Tabla 1.</strong> Resolucin de recursos sin una coincidencia de configuracin regional exacta. 62 </p> 63 <table> 64 <tbody> 65 <tr> 66 <th>Configuracin del usuario</th> 67 <th>Recursos de la aplicacin</th> 68 <th>Resolucin de recursos</th> 69 </tr> 70 <tr> 71 <td>fr_CH</td> 72 <td> 73 Predeterminado (en)<br> 74 de_DE<br> 75 es_ES<br> 76 fr_FR<br> 77 it_IT<br> 78 </td> 79 <td> 80 Intentar fr_CH => Error<br> 81 Intentar fr => Error<br> 82 Usar predeterminado (en) 83 </td> 84 </tr> 85 </tbody> 86 </table> 87 88 89 <p>En este ejemplo, el sistema muestra las cadenas en ingls sin 90 saber si el usuario comprende este idioma. Este comportamiento es muy comn 91 hoy en da. Android N debera reducir sustancialmente la frecuencia 92 de resultados como este.</p> 93 94 <h2 id="postN">Mejoras de la estrategia de resolucin de recursos</h2> 95 <p>Android N brinda una resolucin de recursos ms robusta y 96 encuentra mejores recursos de forma automtica. Sin embargo, para acelerar la resolucin y mejorar la 97 facilidad de mantenimiento, debes almacenar los recursos en el dialecto primario. 98 Por ejemplo, si antes almacenabas los recursos en espaol en el directorio {@code es-US} 99 , psalos al directorio {@code es-419}, que contiene la variante de Latinoamrica. 100 De forma similar, si tienes cadenas de recursos en una carpeta llamada {@code en-GB}, cmbiale 101 el nombre a {@code en-001} (ingls internacional), ya que el dialecto primario ms comn 102 para las cadenas en <code>en-GB</code> es {@code en-001}. 103 Los siguientes ejemplos explican por qu estas prcticas mejoran el desempeo 104 y la confiabilidad de la resolucin de recursos.</p> 105 106 <h3>Ejemplos de resolucin de recursos</h3> 107 108 <p>Con Android N, el caso descrito en la <strong>Tabla 1</strong> se resuelve 109 de otra forma:</p> 110 111 <p class="table-caption" id="t-improved-res"> 112 <strong>Tabla 2.</strong> Una estrategia de resolucin mejorada para los casos en que no 113 hay una coincidencia de configuracin regional exacta.</p> 114 <table> 115 <tr> 116 <th>Configuracin del usuario</th> 117 <th>Recursos de la aplicacin</th> 118 <th>Resolucin de recursos</th> 119 </tr> 120 <tr> 121 <td><ol> 122 <li> fr_CH</li> 123 </ol> 124 </td> 125 <td> 126 Predeterminado (en)<br> 127 de_DE<br> 128 es_ES<br> 129 fr_FR<br> 130 it_IT<br> 131 </td> 132 <td> 133 Intentar fr_CH => Error<br> 134 Intentar fr => Error<br> 135 Intentar secundario de fr => fr_FR<br> 136 Usar fr_FR 137 </td> 138 </tr> 139 140 </table> 141 142 143 <p>As, los recursos se muestran en francs en lugar de en ingls. Este ejemplo tambin muestra 144 por qu deberas almacenar las cadenas en francs 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 ms cercano, 146 lo cual hace que la resolucin sea ms rpida y ms predecible.</p> 147 148 <p>Adems de esta lgica de resolucin mejorada, Android ofrece ahora ms 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 aplicacin con el idioma francs. </p> 151 152 <p class="table-caption" id="t-2d-choice"> 153 <strong>Tabla 3.</strong> Resolucin de recursos cuando la aplicacin solo hace coincidir la 154 configuracin regional de segunda preferencia del usuario.</p> 155 <table> 156 <tr> 157 <th>Configuracin del usuario</th> 158 <th>Recursos de la aplicacin</th> 159 <th>Resolucin 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> 169 Predeterminado (en)<br> 170 de_DE<br> 171 es_ES<br> 172 it_IT<br> 173 </td> 174 <td> 175 Intentar fr_CH => Error<br> 176 Intentar fr => Error<br> 177 Intentar secundario de fr => Error<br> 178 Intentar it_CH => Error<br> 179 Intentar it => Error<br> 180 Intentar secundario de it => it_IT<br> 181 Usar it_IT 182 </td> 183 184 </tr> 185 186 </table> 187 <p>El usuario recibe la informacin en un idioma que comprende, si bien la aplicacin no 188 es compatible con el idioma francs.</p> 189 190 191 <h2 id="design">Diseo de la aplicacin para permitir configuraciones regionales adicionales</h2> 192 <h3>API LocaleList</h3> 193 194 <p>Android N incorpora una nueva API, {@code LocaleList.getDefault()}, 195 que 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 aplicacin 197 ms sofisticado y una presentacin de contenido ms optimizada. Por ejemplo, las bsquedas 198 pueden mostrar resultados en mltiples idiomas segn la configuracin del usuario. Las aplicaciones de navegadores 199 pueden evitar ofrecer la traduccin de pginas que estn en un idioma que el usuario comprende, 200 y las aplicaciones de teclado pueden habilitar automticamente todos los diseos correctos. </p> 201 202 <h3>Formateadores</h3> 203 204 <p>Hasta Android 6.0 (API nivel 23), Android solo permita una o dos 205 configuraciones regionales para muchos idiomas comunes 206 (en, es, ar, fr, ru). Debido a que haba solo unas pocas variantes para cada idioma, 207 las aplicaciones podan almacenar algunos nmeros y fechas como cadenas preprogramadas 208 en los archivos de recursos. Sin embargo, con el conjunto ampliado de configuraciones regionales 209 compatibles de Android, puede haber diferencias importantes 210 en los formatos de fecha, hora, moneda e 211 informacin similar, incluso dentro de una sola configuracin regional. Preprogramar los formatos puede generar 212 una experiencia confusa para los usuarios. Por lo tanto, cuando desarrolles aplicaciones para Android, 213 asegrate de usar formateadores en lugar de preprogramar las cadenas de nmeros y fechas.</p> 214 215 <p>Un muy buen ejemplo es el rabe. Android N expandi su compatibilidad de 216 una configuracin regional, {@code ar_EG}, a 27 configuraciones regionales. Estas configuraciones regionales pueden compartir la mayora de los recursos, 217 pero algunas prefieren dgitos ASCII, mientras que otras prefieren dgitos nativos. Por ejemplo, 218 cuando desees crear una oracin con una variable de dgito, como 219 "Elige un PIN de 4dgitos", usa formateadores como se muestra a continuacin:</p> 220 221 <pre> format(locale, "Choose a %d-digit PIN", 4)</pre> 222