localize.dev

Documentación / Android

Recursos de cadena de Android

Mueve texto codificado a mano en diseños de Android, Jetpack Compose y código de vistas (Kotlin o Java) a recursos de cadena: archivos strings.xml por idioma, llamadas a stringResource(), y la lista de idiomas por aplicación.

Cómo funciona

En diseños y menús, android:text, hint, contentDescription y title se convierten en @string/…. En Compose, Text("…") y contentDescription = "…" dentro de funciones @Composable se convierten en stringResource(R.string.…, args); las notificaciones usan context.getString.

El código de vistas en Kotlin o Java también funciona: label.setText("…"), setHint, setTitle y botones de diálogo, y Kotlin’s label.text = "…", se convierten en setText(R.string.…). Un texto de vista construido a partir de valores se reporta, ya que setText no acepta argumentos de formato.

Los placeholders se convierten en %1$s, %2$s… numerados según su orden en el texto original, para que la traducción pueda reordenarlos.

Un número con su palabra, "$n ${if (n == 1) "item" else "items"}", se convierte en un recurso <plurals> leído con pluralStringResource(R.plurals.…, n, n) (o getQuantityString en un toast).

Antes y después

La salida real del motor para este archivo. En una ejecución real, el modelo alojado nombra las claves a partir del contexto.

app/src/main/java/com/acme/shop/ui/Cart.kt · antes
@Composable
fun Cart(name: String) {
    Column {
        Text("Welcome back, $name!")
        Text(text = "Checkout")
    }
}
app/src/main/java/com/acme/shop/ui/Cart.kt · después
import androidx.compose.ui.res.stringResource

@Composable
fun Cart(name: String) {
    Column {
        Text(stringResource(R.string.cart_welcome_back, name))
        Text(text = stringResource(R.string.cart_checkout))
    }
}
res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="cart_welcome_back">Welcome back, %1$s!</string>
    <string name="cart_checkout">Checkout</string>
</resources>

Lo que añade la configuración

La primera ejecución configura Recursos de cadena de Android (biblioteca) si el proyecto aún no lo tiene:

  • res/values/strings.xml y res/values-<lang>/strings.xml
  • res/xml/locales_config.xml y android:localeConfig, para que Android 13+ liste los idiomas en la configuración de la app

Ejecutarlo

La CLI necesita Node.js 22 o posterior, nada más: npx lo ejecuta sin añadir un package.json al proyecto. ¿No tienes Node en tu máquina? La GitHub Action de abajo la ejecuta por ti.

npx localize-dev login

# Preview, then write the changes
npx localize-dev run --dry-run -l es,fr,de
npx localize-dev run -l es,fr,de

# Or open a pull request instead
npx localize-dev pr -l es,fr,de

O añade la GitHub Action y obtén una pull request en cada push. Pruébalo primero en tu propio código en el playground.