Como localizar seu aplicativo Android com IA
Configure pastas values/, traduza o strings.xml com IA, alterne os idiomas no Kotlin e, em seguida, faça o upload de capturas de tela para que a PTC (Private Translation Cloud) revise o aplicativo Android em execução. Ao final deste guia, você terá um aplicativo Android multilíngue pronto para lançamento, com cada idioma de destino verificado por revisão visual antes do lançamento.
Este guia presume que você tenha um projeto Android existente no Android Studio. Se você estiver começando do zero, gere a estrutura inicial de um novo projeto com o modelo Empty Activity primeiro.
Como o Android resolve recursos localizados a partir de pastas values-{locale}/
O Android organiza recursos localizados em pastas res/values-{locale}/ dentro de app/src/main/. A pasta padrão é values/, que contém as strings do idioma de origem. Cada idioma de destino recebe sua própria pasta values-{locale}/.
app/src/main/res/
values/strings.xml # source language (typically English) - REQUIRED
values-es/strings.xml # Spanish
values-fr/strings.xml # French
values-de/strings.xml # German
values-ja/strings.xml # Japanese
values-zh-rCN/strings.xml # Simplified Chinese (region-specific)
Sempre inclua a pasta values/ padrão sem um código de idioma. Esse é o seu fallback. O Android escolhe a pasta certa em tempo de execução com base no locale do dispositivo do usuário. Se o idioma do usuário for espanhol, mas você não tiver values-es/, o Android usará o values/ como fallback. O fallback é silencioso. Um aplicativo parcialmente traduzido mostra inglês misturado com espanhol, sem nenhum erro.
Os códigos de locale seguem o BCP 47. es para espanhol, pt-rBR para português do Brasil (note o prefixo r para a região), zh-rCN para chinês simplificado.
Mova todas as strings voltadas para o usuário para strings.xml
Sempre use recursos de string armazenados em strings.xml. Nunca escreva texto hardcoded diretamente no código Kotlin/Java ou em um atributo de layout android:text=. Texto hardcoded não pode ser traduzido.
Mova todas as strings voltadas para o usuário para res/values/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">My Notes</string>
<string name="welcome_message">Welcome, %1$s!</string>
<string name="notes_count_zero">No notes yet</string>
<plurals name="notes_count">
<item quantity="one">%d note</item>
<item quantity="other">%d notes</item>
</plurals>
<string-array name="categories">
<item>Personal</item>
<item>Work</item>
<item>Travel</item>
</string-array>
</resources>
Referencie cada string no Kotlin por meio do ID R.string.* gerado:
val appName = stringResource(R.string.app_name)
val welcome = stringResource(R.string.welcome_message, userName)
val counts = pluralStringResource(R.plurals.notes_count, notes.size, notes.size)
Principais convenções que a PTC respeita:
- Placeholders posicionais. Use
%1$s,%2$d,%3$fem vez de%s,%d. Alguns idiomas precisam reordenar os argumentos. Os placeholders posicionais tornam isso possível. A PTC os reconhece e os preserva automaticamente. <plurals>para substantivos contáveis. Não escrevaif (count == 1) "1 note" else "$count notes"no código. Use<plurals>com as quantidadesone/other/few/many. A PTC gera as categorias de plural corretas por idioma de destino (1 forma para japonês, 2 para inglês, 4 para polonês, 6 para árabe).<string-array>para listas estáticas. A PTC traduz cada item enquanto preserva a estrutura do array.- Escape apóstrofos (
\') e aspas (\") para evitar erros de análise de XML.
Traduza o strings.xml com a PTC em 5 passos
- Inicie um projeto na PTC no seu painel. Faça o upload do seu
values/strings.xml, defina seus caminhos de saída e escolha os idiomas de destino. A PTC oferece suporte a mais de 40. Durante o teste, você pode selecionar quaisquer dois. A PTC usa o idioma de origem para escolher o mecanismo de tradução automática correto e para pular strings onde a origem é igual ao destino. - Revise a descrição do aplicativo gerada automaticamente. A PTC cria uma breve descrição do seu aplicativo Android a partir do arquivo enviado. Edite-a para descrever melhor o seu aplicativo e público. A PTC usa esse contexto para adequar o tom e a formalidade corretos para cada idioma.
- Opcionalmente, faça o upload de traduções existentes. Se você já tiver arquivos
values-*/strings.xmltraduzidos, faça o upload deles para que a PTC possa seguir o seu estilo existente. Caso contrário, traduza do zero. - Traduza e revise. A PTC respeita cada chave
name=(suas chaves nunca mudam), cada placeholder posicional e gera as categorias de plural corretas por destino. Se uma tradução exceder seus limites de comprimento, a PTC a destaca para que nada passe despercebido. Edite qualquer string no próprio local ou peça à PTC para retraduzir tendo a restrição em mente. - Baixe o
strings.xmltraduzido por idioma como um ZIP. Cada arquivo é estruturalmente idêntico à sua fonte. Mesmas chaves, mesmos arrays, mesmas tags de plural. Valores traduzidos.
Coloque os arquivos strings.xml traduzidos em values-{locale}/
Coloque cada arquivo traduzido na pasta values-{locale}/ correspondente:
app/src/main/res/values-es/strings.xml # from PTC
app/src/main/res/values-fr/strings.xml # from PTC
app/src/main/res/values-de/strings.xml # from PTC
Recompile o projeto. O Android reconhece os novos recursos automaticamente. Para verificar, altere o idioma do seu emulador ou dispositivo e reinicie o aplicativo. A UI deve aparecer no novo idioma.
Adicione um seletor de idiomas no aplicativo com AppCompatDelegate.setApplicationLocales()
Muitos aplicativos precisam de um seletor de idiomas no aplicativo para que os usuários possam substituir o locale do dispositivo. A partir do Android 13 (API 33), a abordagem canônica usa AppCompatDelegate.setApplicationLocales():
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
fun setAppLanguage(languageTag: String) {
val locales = LocaleListCompat.forLanguageTags(languageTag)
AppCompatDelegate.setApplicationLocales(locales)
}
// Usage in a settings screen
binding.spanishButton.setOnClickListener {
setAppLanguage("es")
}
binding.frenchButton.setOnClickListener {
setAppLanguage("fr")
}
Para declarar quais idiomas seu aplicativo suporta (para que o seletor de locale do sistema os mostre), adicione um locales_config.xml:
<!-- res/xml/locales_config.xml -->
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
<locale android:name="en"/>
<locale android:name="es"/>
<locale android:name="fr"/>
<locale android:name="de"/>
<locale android:name="ja"/>
</locale-config>
E referencie-o no AndroidManifest.xml:
<application
android:localeConfig="@xml/locales_config"
... >
Para aplicativos direcionados ao Android 12 ou inferior, a abordagem mais antiga é salvar a escolha do usuário em SharedPreferences e aplicá-la a cada inicialização do aplicativo:
fun setLocale(context: Context, languageCode: String) {
// Save the user's choice
val prefs = context.getSharedPreferences("Settings", Context.MODE_PRIVATE)
prefs.edit().putString("app_language", languageCode).apply()
// Apply the new locale
val locale = Locale(languageCode)
Locale.setDefault(locale)
val config = Configuration()
config.setLocale(locale)
context.resources.updateConfiguration(config, context.resources.displayMetrics)
// Restart the activity so changes take effect
if (context is Activity) {
context.recreate()
}
}
Em seguida, carregue o idioma salvo a cada inicialização do aplicativo:
override fun onCreate() {
super.onCreate()
val prefs = getSharedPreferences("Settings", Context.MODE_PRIVATE)
val languageCode = prefs.getString("app_language", "en") ?: "en"
val locale = Locale(languageCode)
Locale.setDefault(locale)
val config = Configuration()
config.setLocale(locale)
resources.updateConfiguration(config, resources.displayMetrics)
}
Isso persiste entre as sessões e funciona corretamente depois que você publica no Google Play.
Use start/end (e não left/right) para idiomas da direita para a esquerda
Para árabe, hebraico, persa e urdu, use start e end em vez de left e right nos seus layouts para que o Android espelhe o layout automaticamente:
<!-- Instead of this -->
<TextView android:layout_marginLeft="16dp" />
<!-- Use this -->
<TextView android:layout_marginStart="16dp" />
No Jetpack Compose, use Arrangement.Start em vez de Arrangement.Absolute.Left. Ative “Forçar direção do layout RTL” nas Opções do desenvolvedor para testar o espelhamento sem alterar o idioma do dispositivo.
Automatize a tradução do Android a cada lançamento com o Git ou a API da PTC
Para projetos ativos, reexecutar a tradução manualmente a cada lançamento não é escalável. A PTC oferece duas maneiras de automatizar.
Integração com Git (recomendada). Acesse Configurações > Merge Requests no painel da PTC e clique em Add Git Integration para conectar seu repositório do GitHub, GitLab ou Bitbucket. Forneça um token de acesso com permissões Read and write e escolha as branches que a PTC deve monitorar. A partir daí, a PTC detecta alterações, traduz as strings novas ou atualizadas e abre um merge request para sua revisão.
Integração via API. Acesse Configurações > Gerenciar tokens de API e crie um token de acesso. Em seguida, use a API da PTC dentro da sua CI existente.
Faça o commit de um .ptc-config.yml nomeando seu arquivo de origem e onde as traduções devem ficar:
# .ptc-config.yml
source_locale: en
files:
- file: app/src/main/res/values/strings.xml
output: app/src/main/res/values-{{lang}}/strings.xml
Em seguida, adicione a ação PTC Translate ao seu fluxo de trabalho. Ela carrega uma versão fixada da CLI da PTC internamente, para que sua build não baixe nada em tempo de execução:
# .github/workflows/translate.yml
name: Translate
on:
push:
branches: [main]
paths:
- 'app/src/main/res/values/strings.xml'
workflow_dispatch: {}
jobs:
translate:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: OnTheGoSystems/ptc-action@v1
with:
api-token: ${{ secrets.PTC_API_TOKEN }}
create-pr: true
Tanto a integração com Git quanto a integração via API são recursos Pro que ficam disponíveis quando você ativa o Pay-As-You-Go. Consulte a referência da API da PTC para ver os endpoints da API, webhooks e o modelo de integração completo.
Revisão visual de tradução do seu aplicativo Android traduzido - lance sem QA manual por idioma
Depois que a PTC traduz o seu strings.xml, o trabalho não termina. Um rótulo traduzido pode estourar um botão em alemão. “Submit” pode ser traduzido como um substantivo em francês quando a UI precisava de um verbo. Uma string em inglês hardcoded que alguém esqueceu de envolver em getString(R.string.welcome) ficará visivelmente sem tradução no aplicativo Android em execução. Tradicionalmente, detectar isso significa um passe de QA manual em cada idioma de destino. Essa é a etapa mais lenta e cara da localização de dispositivos móveis.
O AI Visual QA da PTC substitui esse passe. Para aplicativos Android nativos (que não rodam em um navegador, portanto, o fluxo da extensão não se aplica), use o upload de captura de tela. Capture as telas críticas do aplicativo em execução em cada idioma de destino (configurações, fluxo principal, casos extremos) e envie-as para a PTC. A IA de visão da PTC inspeciona cada tela e relata:
- Problemas que a PTC pode corrigir em
strings.xml. A PTC retraduz o sentido do verbo, escolhe um sinônimo mais curto que caiba na largura do botão e gera novamente um plural sensível ao layout. A PTC abre um merge request com as correções. Isso não exige nenhum trabalho da sua parte. - Problemas que residem no seu código Kotlin. Falta de wrapper
getString(), strings hardcoded, concatenação de frases que deveria usarString.format()com placeholders. A PTC gera um prompt pronto para colar para o Cursor ou o Claude Code. Sua equipe de desenvolvimento envolve as strings em segundos.
O resultado: você lança um aplicativo Android verificado e multilíngue a cada lançamento. Você não recebe um strings.xml traduzido com um trabalho residual de QA manual.
Traduza sua ficha da Play Store, notas de lançamento e notificações push
A descrição da sua ficha da Play Store, as notas de lançamento sobre novidades e o texto das notificações push ficam fora do strings.xml. O Paste to Translate da PTC lida com esse texto no mesmo projeto. Cole o texto de origem no painel da PTC, escolha os idiomas de destino e receba traduções que usam o mesmo glossário e voz da marca que as suas strings no aplicativo. Em seguida, no Google Play Console, acesse Presença na loja > Ficha principal da loja > Traduções, adicione as descrições curtas e longas traduzidas e salve.
Traduza o conteúdo do usuário no aplicativo com a API da PTC
O bate-papo no aplicativo, as postagens sociais e as avaliações geradas pelos usuários precisam de tradução à medida que o conteúdo chega. A API REST da PTC traduz esse conteúdo sob demanda com autenticação de token Bearer, usando o mesmo glossário e voz da marca que as suas traduções do strings.xml.
Teste seu aplicativo Android localizado a cada lançamento
Altere o idioma do seu dispositivo nas Configurações ou use o seletor de idioma do emulador do Android Studio. Para cada idioma, verifique se há texto muito longo para os elementos da UI, traduções ausentes (fallback silencioso para o padrão), formatação incorreta de data/número/moeda e problemas de layout com textos mais longos. Para idiomas RTL, ative “Forçar direção do layout RTL” nas Opções do desenvolvedor.
Preços de tradução do Android após o teste
Pay-As-You-Go, sem assinatura. Você só paga pelo que traduz. As primeiras 500 palavras de cada mês são gratuitas e a tarifa diminui à medida que você traduz mais. Use a calculadora de preços para obter uma estimativa.
Agora traduza o seu aplicativo Android real
Comece seu teste de 30 dias - 20.000 palavras em 2 idiomas, sem cartão de crédito. Faça o upload do seu strings.xml, traduza-o em minutos, depois faça o upload de capturas de tela e deixe a PTC verificar o aplicativo em execução.
Relacionado:
- Traduza aplicativos iOS e Android com IA - visão geral do serviço para equipes multiplataforma.
- Como localizar seu aplicativo iOS - o guia equivalente para Xcode e SwiftUI.
- Referência da API da PTC - endpoints REST para integração de CI.