• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 =&gt; Error<br>
81Intentar fr =&gt; 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 =&gt; Error<br>
134Intentar fr =&gt; Error<br>
135Intentar secundario de fr =&gt; 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 =&gt; Error<br>
176Intentar fr =&gt; Error<br>
177Intentar secundario de fr =&gt; Error<br>
178Intentar it_CH =&gt; Error<br>
179Intentar it =&gt; Error<br>
180Intentar secundario de it =&gt; 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