Cómo localizar su aplicación de Android con IA
Configure las carpetas values/, traduzca strings.xml con IA, cambie de idioma en Kotlin y, a continuación, suba capturas de pantalla para que PTC (Private Translation Cloud) revise la aplicación de Android en ejecución. Al final de esta guía, tendrá una aplicación de Android multilingüe lista para publicar, con cada idioma de destino verificado mediante una revisión visual antes del lanzamiento.
Esta guía asume que tiene un proyecto de Android existente en Android Studio. Si va a empezar desde cero, genere primero un nuevo proyecto con la plantilla Empty Activity.
Cómo resuelve Android los recursos localizados de las carpetas values-{locale}/
Android organiza los recursos localizados en carpetas res/values-{locale}/ dentro de app/src/main/. La carpeta predeterminada es values/, que contiene las cadenas del idioma de origen. Cada idioma de destino tiene su propia carpeta 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)
Incluya siempre la carpeta predeterminada values/ sin un código de idioma. Esa es su reserva. Android elige la carpeta correcta en tiempo de ejecución en función del locale del dispositivo del usuario. Si el idioma del usuario es español pero usted no tiene values-es/, Android recurre a values/. La reserva es silenciosa. Una aplicación traducida parcialmente muestra inglés mezclado con español, sin ningún error.
Los códigos de locale siguen el estándar BCP 47. es para español, pt-rBR para portugués de Brasil (tenga en cuenta el prefijo r para la región), zh-rCN para chino (simplificado).
Mueva cada cadena orientada al usuario a strings.xml
Utilice siempre recursos de cadena almacenados en strings.xml. Nunca incruste texto hardcoded directamente en el código Kotlin/Java ni en un atributo de diseño android:text=. El texto hardcoded no se puede traducir.
Mueva cada cadena orientada al usuario a 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>
Haga referencia a cada cadena en Kotlin a través del ID R.string.* generado:
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)
Convenciones de claves que PTC respeta:
- Marcadores de posición posicionales. Utilice
%1$s,%2$d,%3$fen lugar de%s,%d. Algunos idiomas necesitan reordenar los argumentos. Los marcadores de posición posicionales lo hacen posible. PTC los reconoce y los conserva automáticamente. <plurals>para sustantivos contables. No escribaif (count == 1) "1 note" else "$count notes"en el código. Utilice<plurals>con las cantidadesone/other/few/many. PTC genera las categorías de plural correctas para cada idioma de destino (1 forma para japonés, 2 para inglés, 4 para polaco, 6 para árabe).<string-array>para listas estáticas. PTC traduce cada elemento conservando la estructura del array.- Escape los apóstrofos (
\') y las comillas (\") para evitar errores de análisis XML.
Traduzca strings.xml con PTC en 5 pasos
- Inicie un proyecto de PTC en su panel de control. Suba su
values/strings.xml, establezca sus rutas de salida y elija los idiomas de destino. PTC admite 40+. Durante la prueba, puede seleccionar dos cualesquiera. PTC utiliza el idioma de origen para elegir el motor de traducción automática adecuado y para omitir las cadenas en las que el origen es igual al destino. - Revise la descripción de la aplicación generada automáticamente. PTC crea una breve descripción de su aplicación de Android a partir del archivo subido. Edítela para describir mejor su aplicación y su público. PTC utiliza este contexto para aplicar el tono y el nivel de formalidad adecuados para cada idioma.
- Opcionalmente, suba traducciones preexistentes. Si ya tiene archivos
values-*/strings.xmltraducidos, súbalos para que PTC pueda adaptarse a su estilo existente. De lo contrario, traduzca desde cero. - Traduzca y revise. PTC respeta cada clave de
name=(sus claves nunca cambian), cada marcador de posición posicional y genera las categorías de plural correctas por destino. Si una traducción supera sus límites de longitud, PTC la resalta para que no se pase nada por alto. Edite cualquier cadena in situ o pida a PTC que la vuelva a traducir teniendo en cuenta la restricción. - Descargue el
strings.xmltraducido por idioma como un archivo ZIP. Cada archivo es estructuralmente idéntico a su origen. Mismas claves, mismos arrays, mismas etiquetas de plural. Valores traducidos.
Coloque los archivos strings.xml traducidos en values-{locale}/
Coloque cada archivo traducido en la carpeta values-{locale}/ correspondiente:
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 el proyecto. Android detecta los nuevos recursos automáticamente. Para verificarlo, cambie el idioma de su emulador o dispositivo y vuelva a iniciar la aplicación. La interfaz de usuario debería aparecer en el nuevo idioma.
Añada un selector de idioma dentro de la aplicación con AppCompatDelegate.setApplicationLocales()
Muchas aplicaciones necesitan un selector de idioma dentro de la aplicación para que los usuarios puedan anular el locale del dispositivo. A partir de Android 13 (API 33), el enfoque canónico utiliza 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 qué idiomas admite su aplicación (para que el selector de locale del sistema los muestre), añada un 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>
Y haga referencia a él en AndroidManifest.xml:
<application
android:localeConfig="@xml/locales_config"
... >
Para las aplicaciones dirigidas a Android 12 o inferior, el enfoque más antiguo consiste en guardar la elección del usuario en SharedPreferences y aplicarla cada vez que se inicie la aplicación:
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()
}
}
A continuación, cargue el idioma guardado en cada lanzamiento de la aplicación:
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)
}
Esto persiste entre sesiones y funciona correctamente después de publicar en Google Play.
Utilice start/end (no left/right) para los idiomas de derecha a izquierda
Para árabe, hebreo, persa y urdu, utilice start y end en lugar de left y right en sus diseños para que Android refleje el diseño automáticamente:
<!-- Instead of this -->
<TextView android:layout_marginLeft="16dp" />
<!-- Use this -->
<TextView android:layout_marginStart="16dp" />
En Jetpack Compose, utilice Arrangement.Start en lugar de Arrangement.Absolute.Left. Active «Forzar dirección de diseño RTL» en Opciones de desarrollador para probar el reflejo sin cambiar el idioma del dispositivo.
Automatice la traducción de Android en cada lanzamiento con Git o la API de PTC
Para los proyectos activos, volver a ejecutar manualmente la traducción en cada lanzamiento no escala. PTC le ofrece dos formas de automatizarlo.
Integración con Git (recomendado). Vaya a Configuración > Merge Requests en el panel de control de PTC y haga clic en Add Git Integration para conectar su repositorio de GitHub, GitLab o Bitbucket. Proporcione un token de acceso con permisos de lectura y escritura y elija las ramas que PTC debe monitorizar. A partir de ahí, PTC detecta los cambios, traduce las cadenas nuevas o actualizadas y abre un merge request para su revisión.
Integración de API. Vaya a Configuración > Gestionar tokens de API y cree un token de acceso. A continuación, utilice la API de PTC dentro de su 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 la integración con Git como la integración de API son funciones Pro que pasan a estar disponibles cuando activa el pago al consumo. Consulte la referencia de la API de PTC para conocer los endpoints, los webhooks y el modelo de integración completo.
Revisión visual de la traducción de su aplicación de Android traducida: publique sin control de calidad manual por idioma
Después de que PTC traduzca su strings.xml, el trabajo no ha terminado. Una etiqueta traducida puede desbordar un botón en alemán. “Submit” puede traducirse como un sustantivo en francés cuando la interfaz de usuario necesitaba un verbo. Una cadena en inglés hardcoded que alguien olvidó envolver en getString(R.string.welcome) aparecerá claramente sin traducir en la aplicación de Android en ejecución. Detectar estos problemas tradicionalmente significa un ciclo de control de calidad manual en cada idioma de destino. Esa es la etapa más lenta y costosa de la localización móvil.
El AI Visual QA de PTC sustituye a ese ciclo. Para las aplicaciones nativas de Android (que no se ejecutan en un navegador, por lo que el flujo de la extensión no se aplica), utilice la subida de capturas de pantalla. Capture las pantallas críticas de la aplicación en ejecución en cada idioma de destino (configuración, flujo principal, casos límite) y súbalas a PTC. La IA de visión de PTC inspecciona cada pantalla y genera un informe:
- Problemas que PTC puede solucionar en
strings.xml. PTC vuelve a traducir la acepción del verbo, elige un sinónimo más corto que encaje en la anchura del botón y regenera un plural adaptado al diseño. PTC abre un merge request con las correcciones. No requiere ningún trabajo por su parte. - Problemas que residen en su código Kotlin. Envoltorio
getString()ausente, cadenas hardcoded, concatenación de oraciones que debería utilizarString.format()con marcadores de posición. PTC genera un prompt listo para pegar para Cursor o Claude Code. Su equipo de desarrollo envuelve las cadenas en segundos.
El resultado: usted publica una aplicación de Android multilingüe y verificada en cada lanzamiento. No obtiene un strings.xml traducido con un trabajo residual de control de calidad manual.
Traduzca su ficha de Play Store, las notas de lanzamiento y las notificaciones push
La descripción de su ficha de Play Store, las notas de lanzamiento con las novedades y el texto de las notificaciones push residen fuera de strings.xml. La función Paste to Translate de PTC procesa ese texto en el mismo proyecto. Pegue el texto de origen en el panel de control de PTC, elija los idiomas de destino y reciba traducciones que utilizan el mismo glosario y voz de marca que las cadenas dentro de la aplicación. A continuación, en Google Play Console, vaya a Presencia en la tienda > Ficha principal de tienda > Traducciones, añada las descripciones corta y larga traducidas y guarde.
Traduzca el contenido de usuario dentro de la aplicación con la API de PTC
El chat dentro de la aplicación, las publicaciones sociales y las reseñas generadas por los usuarios necesitan traducción a medida que llega el contenido. La API REST de PTC traduce este contenido bajo demanda con autenticación Bearer, utilizando el mismo glosario y voz de marca que sus traducciones de strings.xml.
Pruebe su aplicación de Android localizada en cada lanzamiento
Cambie el idioma de su dispositivo en Configuración, o utilice el selector de idioma del emulador de Android Studio. Para cada idioma, compruebe si hay texto demasiado largo para los elementos de la interfaz de usuario, traducciones ausentes (reserva silenciosa al valor predeterminado), formato incorrecto de fecha/número/moneda y problemas de diseño con texto más largo. Para los idiomas RTL, active «Forzar dirección de diseño RTL» en Opciones de desarrollador.
Precios de la traducción de Android después de la prueba
Pago al consumo, sin suscripción. Solo paga por lo que traduce. Las primeras 500 palabras cada mes son gratis y la tarifa disminuye a medida que traduce más. Utilice la calculadora de precios para obtener una estimación.
Ahora traduzca su aplicación de Android real
Comience su prueba de 30 días: 20.000 palabras en 2 idiomas, sin tarjeta de crédito. Suba su strings.xml, tradúzcalo en minutos, luego suba capturas de pantalla y deje que PTC verifique la aplicación en ejecución.
Relacionado:
- Traducir aplicaciones de iOS y Android con IA: descripción general del servicio para equipos multiplataforma.
- Cómo localizar su aplicación de iOS: la guía equivalente para Xcode y SwiftUI.
- Referencia de la API de PTC: endpoints REST para la integración de CI.