Home | History | Annotate | Download | only in features
      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 =&gt; Falha<br>
     81 Tentativa de fr =&gt; 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 =&gt; Falha<br>
    134 Tentativa de fr =&gt; Falha<br>
    135 Tentativa de filhos de fr =&gt; 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 =&gt; Falha<br>
    176 Tentativa de fr =&gt; Falha<br>
    177 Tentativa de filhos de fr =&gt; Falha<br>
    178 Tentativa de it_CH =&gt; Falha<br>
    179 Tentativa de it =&gt; Falha<br>
    180 Tentativa de filhos de it =&gt; 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