Android strings.xml —Detalhes que não podemos esquecer

Victor Oliveira
Apr 9 · 2 min read

Crie uma arquivo para cada idioma

É básico, mas é necessário falar

Quando você desenvolve um aplicativo, deseja que ele alcance o maio número de pessoas, e sabemos que nem todos falam português ou inglês ou alemão, temos pessoas de várias nacionalidades que tem seu próprio idioma. Desta maneira o aplicativo deve se adaptar a esses diferentes cenários.

res/values/strings.xml

Desta forma, no código java você terá que fazer condições, além disso o Android trabalha de forma diferente. O correto é criar dois arquivos de strings. Um em inglês e outro em português.

res/values-pt/strings.xml

Não reutilize

Não use a mesma string para cenas diferentes

  1. Imagine que você tem um dialog de carregamento para as telas de Sign In e Sign Up. Ambas as telas tem o dialog de carregamento e você decidiu usar a mesma string — R.string.loading.
res/values/strings.xml

Até ai tudo bem. Porém, imagine que mais tarde você decidiu usar diferentes mensagens para cada tela. Desta forma você terá que fazer duas strings e modificar no código java. Se você estivesse criado duas strings diferentes desde do inicio, só precisaria mudar no strings.xml.

res/values/strings.xml

Organização

A organização em programação ajuda muito. E não é diferente no strings.xml

Uma dica que ajuda muito é separar as strings que pertencem à mesma tela via prefixo e comentário.

res/values/strings.xml
  1. Adicionar prefixo do nome de tela a cada string ajuda a reconhecer imediatamente a tela à qual a string atual pertence.
  2. O arquivo clean strings.xml ajuda a manter e traduzir facilmente strings para diferentes idiomas — tela após tela.

Criar um arquivo strings.xml separado para cada tela.

O Android permite criar um arquivo strings.xml para cada tela, por exemplo: login-strings.xml, profile-strings.xml. Mas normalmente, os aplicativos tem de 10–20 telas e criar um arquivo para cada tela deixaria tudo muito bagunçado.

Formato

Use sempre o Resources#getString(int id, Object… formatArgs) para formatar as strings

Nunca concatene sua string usando um operador +, porque em outros idiomas a ordem das palavras podem variar.

res/values-pt/strings.xml
código java

O jeito correto é usar Resources#getString(int id, Object… formatArgs).

res/values/strings.xml
res/values-pt/strings.xml
código java

Plurais

Use Resources#getQuantityString(int id,int quantity)

Nunca resolva os plurais via código java, porque idiomas diferentes têm regras diferentes para acordo gramatical com quantidade.

res/values/strings.xml
código java

O correto é usar o Resources#getQuantityString(int id,int quantity)

res/values/strings.xml
código java

Android Dev BR

Artigos em português sobre Android, curados pela comunidade Android Dev BR. Junte-se a nós: slack.androiddevbr.org.

Victor Oliveira

Written by

Android dev — https://victorlopesjg.github.io/

Android Dev BR

Artigos em português sobre Android, curados pela comunidade Android Dev BR. Junte-se a nós: slack.androiddevbr.org.