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 la estructura de un nuevo proyecto con la plantilla Empty Activity.
Cómo Android resuelve 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 según el locale del dispositivo del usuario. Si el idioma del usuario es el 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 el español, pt-rBR para el portugués de Brasil (observe el prefijo r para la región), zh-rCN para el chino (simplificado).
Mueva cada cadena visible para el usuario a strings.xml
Utilice siempre recursos de cadenas almacenados en strings.xml. Nunca incruste texto directamente en el código Kotlin/Java ni en un atributo de diseño android:text=. El texto incrustado en el código no se puede traducir.
Mueva cada cadena visible para el 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 mediante el 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 clave que respeta PTC:
- 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 el japonés, 2 para el inglés, 4 para el polaco, 6 para el árabe).<string-array>para listas estáticas. PTC traduce cada elemento mientras conserva 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, configure sus rutas de salida y elija los idiomas de destino. PTC admite más de 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 donde 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 adaptar 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 mantener 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 para cada idioma de destino. Si una traducción supera sus límites de longitud, PTC la resalta para que nada pase desapercibido. Edite cualquier cadena directamente 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. Las mismas claves, los mismos arrays, las mismas etiquetas de plural. Valores traducidos.
Coloque directamente 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 (de modo 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 anterior consiste en guardar la elección del usuario en SharedPreferences y aplicarla en cada inicio de 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()
}
}
Luego, cargue el idioma guardado en cada inicio 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 el árabe, el hebreo, el persa y el 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 las 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 proyectos activos, volver a ejecutar la traducción manualmente en cada lanzamiento no es escalable. PTC le ofrece dos formas de automatizar.
Integración con Git (recomendada). 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 la API. Vaya a Configuración > Gestionar tokens de API y cree un token de acceso. Luego, utilice la API de PTC dentro de su CI existente.
Haga un commit de un .ptc-config.yml que indique su archivo de origen y adónde pertenecen las traducciones:
# .ptc-config.yml
source_locale: en
files:
- file: app/src/main/res/values/strings.xml
output: app/src/main/res/values-{{lang}}/strings.xml
Luego, añada la acción PTC Translate a su flujo de trabajo. Lleva internamente una versión fijada de la CLI de PTC, por lo que su compilación no descarga nada en tiempo de ejecución:
# .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 la integración con Git como la integración de la API son funciones Pro que pasan a estar disponibles al activar 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: 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 podría desbordar un botón en alemán. «Submit» podría traducirse como un sustantivo en francés cuando la interfaz necesitaba un verbo. Una cadena en inglés incrustada en el código que alguien olvidó envolver en getString(R.string.welcome) aparecerá claramente sin traducir en la aplicación de Android en ejecución. Tradicionalmente, detectar esto implica realizar un 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 esa pasada. 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 e informa de los resultados:
- Incidencias 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 el ancho 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. - Incidencias que residen en su código Kotlin. Falta de un wrapper
getString(), cadenas incrustadas en el código, concatenación de oraciones que debería usarString.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 verificada y multilingüe en cada lanzamiento. No obtiene un strings.xml traducido con un trabajo residual de control de calidad manual.
Traduzca la ficha de tienda de Play Store, las notas de lanzamiento y las notificaciones push
La descripción de su ficha de tienda de Play Store, las notas de lanzamiento con las novedades y el texto de las notificaciones push residen fuera de strings.xml. 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 obtenga traducciones que utilizan el mismo glosario y voz de marca que sus cadenas dentro de la aplicación. Luego, 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 los ajustes, o utilice el selector de idioma del emulador de Android Studio. Para cada idioma, compruebe si hay texto que sea demasiado largo para los elementos de la interfaz, traducciones faltantes (reserva silenciosa al predeterminado), formato incorrecto de fechas/números/monedas y problemas de diseño con textos más largos. 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 de cada mes son gratuitas, 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 las 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.