PTC

Cómo localizar su aplicación de Android con IA

Configure las carpetas values/, traduzca strings.xml con IA, cambie de idioma con Kotlin y, a continuación, suba capturas de pantalla para que PTC (Private Translation Cloud) revise la aplicación de Android en funcionamiento. Al final de esta guía, tendrá una aplicación de Android multilingüe lista para su lanzamiento, con cada idioma de destino verificado mediante AI Visual QA antes del lanzamiento.

Esta guía asume que usted ya tiene un proyecto de Android en Android Studio. Si está empezando de cero, cree primero un nuevo proyecto con la plantilla "Empty Activity".

Cómo resuelve Android los recursos localizados desde 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 values/ predeterminada sin código de idioma. Esa es su opción de reserva (fallback). Android elige la carpeta correcta en tiempo de ejecución basándose en la configuración regional del dispositivo del usuario. Si el idioma del usuario es el español pero usted no tiene values-es/, Android recurre a values/. Este proceso se realiza de forma silenciosa. Una aplicación traducida parcialmente mostrará inglés mezclado con español, sin errores.

Los códigos de configuración regional siguen la norma BCP 47. es para español, pt-rBR para portugués de Brasil (observe 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 escriba texto directamente en el código Kotlin/Java ni en un atributo de diseño android:text=. El texto codificado directamente 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 mediante el ID R.string.* generado:

val welcomeText = stringResource(R.string.welcome_text)
val welcome = stringResource(R.string.welcome_user, userName)
val summary = stringResource(R.string.points_summary, userName, points)

Convenciones clave con las que PTC es compatible:

  • Marcadores de posición posicionales. Utilice %1$s, %2$d, %3$f en lugar de %s, %d. Algunos idiomas necesitan reordenar los argumentos. Los marcadores de posición posicionales lo hacen posible. PTC los reconoce y preserva automáticamente.
  • <plurals> para sustantivos contables. No escriba if (count == 1) "1 note" else "$count notes" en el código. Utilice <plurals> con las cantidades one / other / few / many. PTC genera las categorías de plural correctas por idioma de destino (1 forma para el japonés, 2 para el inglés, 3 para el polaco, 6 para el árabe).
  • <string-array> para listas estáticas. PTC traduce cada elemento manteniendo la estructura del array.
  • Escape de apóstrofos (\') y comillas (\") para evitar errores de análisis XML.

Traduzca strings.xml con PTC en 5 pasos

  1. Inicie un proyecto de PTC en su panel de control. Suba su archivo values/strings.xml, configure sus rutas de salida y elija los idiomas de destino. PTC admite más de 40 idiomas. Durante la prueba gratuita, 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 texto de origen coincide con el de destino.
  2. Revise la descripción de la aplicación generada automáticamente. PTC crea una descripción corta de su aplicación de Android a partir del archivo subido. Edítela para describir mejor su aplicación y su audiencia. PTC utiliza este contexto para adaptar el tono y la formalidad adecuados para cada idioma.
  3. Opcionalmente, suba traducciones existentes. Si ya tiene archivos values-*/strings.xml traducidos, súbalos para que PTC pueda ajustarse a su estilo actual. De lo contrario, traduzca desde cero.
  4. Traduzca y revise. PTC respeta cada clave 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 nada se pase por alto. Edite cualquier cadena directamente o pida a PTC que la vuelva a traducir teniendo en cuenta la restricción.
  5. Descargue los archivos strings.xml traducidos por idioma en 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

Vuelva a compilar el proyecto. Android detecta los nuevos recursos automáticamente. Para verificarlo, cambie el idioma de su emulador o dispositivo y reinicie la aplicación. La interfaz de usuario debería aparecer en el nuevo idioma.

Añada un selector de idioma en la aplicación con AppCompatDelegate.setApplicationLocales()

Muchas aplicaciones necesitan un selector de idioma interno para que los usuarios puedan anular la configuración regional 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 configuración regional del sistema los muestre), añada un archivo 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 aplicaciones destinadas a Android 12 o versiones anteriores, el enfoque antiguo 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()
    }
}

A continuación, 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 idiomas de derecha a izquierda

Para el á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 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 manualmente la traducción en cada lanzamiento no es escalable. PTC le ofrece dos formas de automatizarlo.

Integración con Git (recomendado). Vaya a Settings > 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 supervisar. 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 mediante API. Vaya a Settings > Manage API Tokens y cree un token de acceso. Luego, utilice la API de PTC dentro de su CI actual:

# .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: Trigger PTC translation
        run: |
          curl -X POST https://api.ptc.wpml.org/v1/projects/${{ secrets.PTC_PROJECT_ID }}/sync \
            -H "Authorization: Bearer ${{ secrets.PTC_API_KEY }}"

Tanto la integración con Git como con la API son funciones Pro que están disponibles al activar el Pay-As-You-Go. Consulte la referencia de la API de PTC para conocer los endpoints, 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 puede desbordar un botón en alemán. "Submit" puede traducirse como un sustantivo en francés cuando la interfaz necesitaba un verbo. Una cadena en inglés codificada directamente que alguien olvidó envolver en getString(R.string.welcome) aparecerá claramente sin traducir en la aplicación de Android en funcionamiento. Detectar esto tradicionalmente implica una fase de control de calidad manual en cada idioma de destino. Se trata de la etapa más lenta y costosa de la localización móvil.

AI Visual QA de PTC sustituye esa fase. Para 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 funcionamiento en cada idioma de destino (ajustes, flujo principal, casos extremos) y súbalas a PTC. La IA de visión de PTC inspecciona cada pantalla e informa de lo siguiente:

  • Problemas que PTC puede solucionar en strings.xml. PTC ajusta la traducción del verbo, elige un sinónimo más corto que se ajuste al ancho del botón o regenera un plural adaptado al diseño. PTC abre un PR con las correcciones. Sin esfuerzo por su parte.
  • Problemas que residen en su código Kotlin. Falta el envoltorio getString(), cadenas codificadas directamente o concatenación de frases que debería usar String.format() con marcadores de posición. PTC genera un prompt listo para pegar en Cursor o Claude Code. Su equipo de desarrollo envuelve las cadenas en segundos.

El resultado: usted publica una aplicación de Android multilingüe verificada por cada lanzamiento. No un archivo strings.xml traducido con una cola de control de calidad manual.

Traduzca su ficha de Play Store, notas de lanzamiento y notificaciones push

La descripción de su ficha de Play Store, las notas de lanzamiento y el texto de las notificaciones push residen fuera de strings.xml. La función Paste to Translate de PTC gestiona 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 las traducciones que utilizan el mismo glosario y voz de marca que las cadenas internas de su aplicación. Luego, en Google Play Console, vaya a Presencia en Google Play Store > Ficha de Play Store principal > Traducciones, añada las descripciones corta y larga traducidas y guarde los cambios.

Traduzca el contenido de usuario de la aplicación con la API de PTC

El chat de la aplicación, las publicaciones en redes 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 mediante token Bearer, utilizando el mismo glosario y voz de marca que las traducciones de su strings.xml.

Pruebe su aplicación de Android localizada en cada lanzamiento

Cambie el idioma de su dispositivo en Ajustes, 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, traducciones faltantes (sustitución silenciosa por el idioma predeterminado), formato incorrecto de fecha/número/moneda y problemas de diseño con textos más largos. Para los idiomas RTL, active "Forzar dirección de diseño RTL" en las Opciones de desarrollador.

Precios de traducción de Android tras la prueba gratuita

Pay-As-You-Go, 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 el calculador de precios para obtener un presupuesto.

Ahora traduzca su aplicación de Android real

Comience su prueba gratuita de 30 días: 20.000 palabras en 2 idiomas, sin tarjeta de crédito. Suba su archivo strings.xml, tradúzcalo en minutos y, a continuación, suba capturas de pantalla para que PTC verifique la aplicación en funcionamiento.

Relacionado: