1 page.title=Idioma e localidades 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>Neste documento:</h2> 10 <ol> 11 <li><a href="#preN">Desafios ao resolver recursos de idioma</a></li> 12 <li><a href="#postN">Melhorias na estratgia de resoluo de recursos</a></li> 13 <li><a href="#design">Projetar seu aplicativo para oferecer suporte a 14 localidades adicionais</a></li> 15 16 </ol> 17 18 </div> 19 </div> 20 21 <p>O Android N oferece suporte avanado para usurios multilngues, 22 permitindo que eles selecionem vrias localidades nas configuraes. O Android N 23 fornece esse recurso ao expandir significativamente a quantidade de localidades com suporte 24 e mudando a forma como o sistema resolve recursos. O novo mtodo para resolver 25 recursos mais robusto e foi projetado para ser compatvel com APKs existentes, mas 26 tenha cuidado adicional para identificar comportamentos inesperados. Por exemplo, voc 27 deve testar para garantir que seu aplicativo assuma o idioma esperado por padro. Alm disso, 28 se seu aplicativo oferecer suporte a vrios idiomas, voc dever garantir que esse suporte funcione da maneira 29 esperada. Por fim, garanta que seu aplicativo possa lidar corretamente 30 com idiomas que ele no tenha sido explicitamente projetado para suportar.</p> 31 32 <p>Este documento comea explicando a estratgia de resoluo de recursos anterior ao 33 Android N. Em seguida, ele descreve a estratgia 34 de resoluo de recursos aprimorada do Android N. Por fim, ele explica como aproveitar as vantagens 35 do maior nmero de localidades para oferecer suporte a usurios multilngues.</p> 36 37 <h2 id="preN">Desafios ao resolver recursos de idioma</h2> 38 39 <p>Antes do Android N, o Android nem sempre conseguia 40 fazer a correspondncia correta entre aplicativos e localidades do sistema.</p> 41 42 <p>Considere, por exemplo, que temos a seguinte situao:</p> 43 <ul> 44 <li>o idioma padro do seu aplicativo {@code en_US} (ingls - EUA), mas ele tambm tem 45 strings em espanhol localizadas em arquivos de recursos {@code es_ES} 46 .</li> 47 <li> Um dispositivo est definido para {@code es_MX}. </li> 48 49 <p>Quando seu cdigo Java usa strings como referncia, o sistema carrega 50 strings do arquivo de recursos padro ({@code en_US}), mesmo que o aplicativo tenha recursos em 51 espanhol localizados em {@code es_ES}. Isso acontece porque, quando 52 no consegue encontrar uma correspondncia exata, o sistema continua procurando recursos aps extrair o 53 cdigo do pas da localidade. Por fim, se no h correspondncia, o sistema volta 54 ao padro, que {@code en_US}. </p> 55 56 57 <p>O sistema tambm usaria {@code en_US} como padro se o usurio escolhesse um idioma 58 no suportado pelo aplicativo, como o francs. Por exemplo:</p> 59 60 <p class="table-caption" id="t-resource-res"> 61 <strong>Tabela 1.</strong> Resoluo de recurso sem uma correspondncia exata de localidade. 62 </p> 63 <table> 64 <tbody> 65 <tr> 66 <th>Configuraes do usurio</th> 67 <th>Recursos do aplicativo</th> 68 <th>Resoluo do recurso</th> 69 </tr> 70 <tr> 71 <td>fr_CH</td> 72 <td> 73 padro (en)<br> 74 de_DE<br> 75 es_ES<br> 76 fr_FR<br> 77 it_IT<br> 78 </td> 79 <td> 80 Tentativa de fr_CH => Falha<br> 81 Tentativa de fr => Falha<br> 82 Usar o padro (en) 83 </td> 84 </tr> 85 </tbody> 86 </table> 87 88 89 <p>Neste exemplo, o sistema exibe strings em ingls sem saber 90 se o usurio entende ingls. Esse comportamento bastante comum 91 hoje em dia. O Android N dever reduzir de forma significativa a frequncia de 92 resultados como esse.</p> 93 94 <h2 id="postN">Melhorias na estratgia de resoluo de recursos</h2> 95 <p>O Android N proporciona uma resoluo de recurso mais robusta e 96 encontra solues alternativas melhores. No entanto, para agilizar a resoluo e melhorar 97 a capacidade de manuteno, voc deve armazenar os recursos no dialeto pai mais comum. 98 Por exemplo, se voc estava armazenando recursos em espanhol no diretrio {@code es-US} 99 antes, mova-os para o diretrio {@code es-419}, que contm o espanhol latino-americano. 100 Da mesma maneira, se voc tiver strings de recurso em uma pasta {@code en-GB}, renomeie 101 essa pasta para {@code en-001} (ingls internacional), pois o pai mais comum 102 para strings <code>en-GB</code> {@code en-001}. 103 O exemplo a seguir explica por que essas prticas melhoram o desempenho e 104 a confiabilidade da resoluo de recursos.</p> 105 106 <h3>Exemplos de resoluo de recursos</h3> 107 108 <p>Com o Android N, o caso descrito na <strong>Tabela 1</strong> resolvido 109 de forma diferente:</p> 110 111 <p class="table-caption" id="t-improved-res"> 112 <strong>Tabela 2.</strong> Uma estratgia de resoluo melhorada para quando no h 113 uma correspondncia exata para a localidade.</p> 114 <table> 115 <tr> 116 <th>Configuraes do usurio</th> 117 <th>Recursos do aplicativo</th> 118 <th>Resoluo do recurso</th> 119 </tr> 120 <tr> 121 <td><ol> 122 <li> fr_CH</li> 123 </ol> 124 </td> 125 <td> 126 padro (en)<br> 127 de_DE<br> 128 es_ES<br> 129 fr_FR<br> 130 it_IT<br> 131 </td> 132 <td> 133 Tentativa de fr_CH => Falha<br> 134 Tentativa de fr => Falha<br> 135 Tentativa de filhos de fr => fr_FR<br> 136 Usar fr_FR 137 </td> 138 </tr> 139 140 </table> 141 142 143 <p>Agora o usurio obtm recursos em francs em vez de ingls. Esse exemplo tambm mostra 144 por que voc deve armazenar strings em francs em {@code fr} em vez de em {@code fr_FR} 145 para o Android N. Nesse caso, a ao necessria fazer a correspondncia com o dialeto pai mais prximo, 146 tornando a resoluo mais rpida e mais previsvel.</p> 147 148 <p>Alm dessa lgica de resoluo melhorada, agora o Android oferece mais 149 idiomas de usurio dentre os quais escolher. Vamos experimentar o exemplo acima novamente com o italiano 150 especificado como um idioma de usurio adicional, mas sem suporte para francs no aplicativo. </p> 151 152 <p class="table-caption" id="t-2d-choice"> 153 <strong>Tabela 3.</strong> Resoluo de recurso quando o aplicativo faz a correspondncia apenas da 154 segunda configurao de localidade preferencial do usurio.</p> 155 <table> 156 <tr> 157 <th>Configuraes do usurio</th> 158 <th>Recursos do aplicativo</th> 159 <th>Resoluo do recurso</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 padro (en)<br> 170 de_DE<br> 171 es_ES<br> 172 it_IT<br> 173 </td> 174 <td> 175 Tentativa de fr_CH => Falha<br> 176 Tentativa de fr => Falha<br> 177 Tentativa de filhos de fr => Falha<br> 178 Tentativa de it_CH => Falha<br> 179 Tentativa de it => Falha<br> 180 Tentativa de filhos de it => it_IT<br> 181 Usar it_IT 182 </td> 183 184 </tr> 185 186 </table> 187 <p>O usurio obtm um idioma que ele compreende, mesmo que o aplicativo no tenha suporte para 188 o francs.</p> 189 190 191 <h2 id="design">Projetar seu aplicativo para oferecer suporte a localidades adicionais</h2> 192 <h3>LocaleList API</h3> 193 194 <p>O Android N adiciona uma nova API {@code LocaleList.getDefault()} 195 que permite que os aplicativos faam uma consulta direta na lista de idiomas especificados por um usurio. Essa API 196 permite que voc crie um comportamento mais sofisticado 197 para o aplicativo e uma exibio de contedo mais otimizada. Por exemplo, uma pesquisa 198 pode mostrar resultados em vrios idiomas com base nas configuraes do usurio. Aplicativos de navegador 199 podem evitar ofertas de traduo de pginas em um idioma que o usurio conhece 200 e os aplicativos de teclado tambm podem ativar todos os layouts apropriados automaticamente. </p> 201 202 <h3>Formatadores</h3> 203 204 <p>At o Android 6.0 (nvel da API 23), o Android oferecia suporte para apenas uma ou duas localidades 205 para muitos idiomas comuns 206 (en, es, ar, fr, ru). Como s existiam poucas variantes de cada idioma, 207 os aplicativos podiam armazenar alguns nmeros e datas como strings no cdigo 208 nos arquivos de recurso. No entanto, com o conjunto mais amplo de localidades suportadas do Android, 209 podem existir 210 diferenas significativas nos formatos de data, hora, moeda e informaes 211 similares dentro da mesma localidade. Colocar formatos no cdigo pode produzir uma 212 experincia confusa para os usurios. Portanto, ao desenvolver para o Android N, 213 no deixe de usar formatadores em vez de strings no cdigo para nmeros e datas.</p> 214 215 <p>Um bom exemplo o rabe, cujo suporte no Android N foi expandido de 216 uma {@code ar_EG} para 27 localidades de rabe. Essas localidades podem compartilhar a maioria dos recursos, 217 mas algumas preferem dgitos ASCII, enquanto outras preferem dgitos nativos. Por exemplo, 218 quando voc quer criar uma frase com uma varivel em dgito, como 219 Choose a 4 digit pin, use formatadores como mostrado abaixo:</p> 220 221 <pre> format(locale, "Choose a %d-digit PIN", 4)</pre> 222