Como localizar seu aplicativo Android com IA
Configure as 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 publicar, com cada idioma de destino verificado por revisão visual antes do lançamento.
Este guia pressupõe 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 os 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 a values-es/, o Android fará o fallback para a values/. O fallback é silencioso. Um aplicativo parcialmente traduzido mostra inglês misturado com espanhol, sem nenhum erro.
Os códigos de locale seguem a 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 deixe 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 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 em 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 suporta 40+. Durante o teste de 30 dias, você pode selecionar quaisquer dois. A PTC usa o idioma de origem para escolher o mecanismo de tradução automática certo e 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 seu aplicativo e público-alvo. A PTC usa esse contexto para corresponder ao tom e à formalidade certos para cada idioma.
- Opcionalmente, faça o upload de traduções pré-existentes. Se você já tiver arquivos
values-*/strings.xmltraduzidos, faça o upload deles para que a PTC possa corresponder ao 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 destacará para que nada passe despercebido. Edite qualquer string no local ou peça à PTC para retraduzir com a restrição em mente. - Faça o download do
strings.xmltraduzido por idioma como um ZIP. Cada arquivo é estruturalmente idêntico à sua origem. 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, mude o idioma do seu emulador ou dispositivo e reinicie o aplicativo. A interface 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 (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 em 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 manualmente a tradução por lançamento não é escalável. A PTC oferece duas maneiras de automatizar.
Integração com Git (recomendada). Vá para Configurações > Merge Requests no painel da PTC e clique em Add Git Integration para conectar seu repositório GitHub, GitLab ou Bitbucket. Forneça um token de acesso com permissões de leitura e gravação e escolha as branches que a PTC deve monitorar. A partir daí, a PTC detecta alterações, traduz strings novas ou atualizadas e abre um merge request para sua revisão.
Integração via API. Vá para Configurações > Gerenciar tokens de API e crie um token de acesso. Em seguida, use a API da PTC dentro do seu CI existente:
# .github/workflows/translate.yml
name: PTC translate
on:
push:
branches: [main]
paths:
- 'app/src/main/res/values/strings.xml'
jobs:
translate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Translate with PTC
run: |
cat > .ptc-config.yml <<'EOF'
source_locale: en
files:
- file: app/src/main/res/values/strings.xml
output: app/src/main/res/values-{{lang}}/strings.xml
EOF
curl -fsSL https://raw.githubusercontent.com/OnTheGoSystems/ptc-cli/main/ptc-cli.sh -o ptc-cli.sh
chmod +x ptc-cli.sh
./ptc-cli.sh --config-file .ptc-config.yml --api-token="${{ secrets.PTC_API_TOKEN }}"
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 endpoints, webhooks e o modelo de integração completo.
Revisão visual de tradução do seu aplicativo Android traduzido - publique sem QA manual por idioma
Depois que a PTC traduz o seu strings.xml, o trabalho não está concluído. Um rótulo traduzido pode causar um estouro em um botão em alemão. “Submit” pode ser traduzido como um substantivo em francês quando a interface precisava de um verbo. Uma string hardcoded em inglês que alguém esqueceu de envolver em getString(R.string.welcome) ficará visivelmente não traduzida no aplicativo Android em execução. Identificar esses problemas tradicionalmente significa um passe de QA manual em cada idioma de destino. Essa é a etapa mais lenta e cara da localização de aplicativos móveis.
O AI Visual QA da PTC substitui esse passe. Para aplicativos Android nativos (que não são executados 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 faça o upload delas 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 se ajusta à largura do botão, regenera um plural ciente do layout. A PTC abre um merge request com as correções. Não requer nenhum trabalho seu. - 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 Claude Code. Sua equipe de desenvolvimento envolve as strings em segundos.
O resultado: você lança um aplicativo Android multilíngue e verificado a cada lançamento. Você não obtém um strings.xml traduzido com um trabalho residual de QA manual.
Traduza a 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 com novidades e o texto das notificações push vivem fora de strings.xml. O recurso 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, vá para Presença na loja > Ficha principal da loja > Traduções, adicione as descrições curta e longa traduzidas e salve.
Traduza o conteúdo do usuário no aplicativo com a API da PTC
O chat no aplicativo, as postagens sociais e as avaliações geradas por 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 por token Bearer, usando o mesmo glossário e voz da marca que as suas traduções em strings.xml.
Teste seu aplicativo Android localizado a cada lançamento
Mude o idioma do seu dispositivo em Configurações ou use o seletor de idiomas do emulador do Android Studio. Para cada idioma, verifique se há texto muito longo para os elementos da interface, 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ço da tradução para Android após o teste de 30 dias
Pay-As-You-Go, sem assinatura. Você só paga pelo que traduzir. 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 uma estimativa.
Agora traduza 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.
Relacionados:
- 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.