Documenti / Android
Risorse stringa Android, automatizzate
Sposta il testo hardcoded nei layout Android, Jetpack Compose e nel codice View (Kotlin o Java) nelle risorse stringa: strings.xml per lingua, chiamate stringResource() e l'elenco delle lingue per app.
Come funziona
Nei layout e nei menu, android:text, hint, contentDescription e title diventano @string/…. In Compose, Text("…") e contentDescription = "…" all'interno delle funzioni @Composable diventano stringResource(R.string.…, args); i toast usano context.getString.
Anche il codice View in Kotlin o Java funziona: label.setText("…"), setHint, setTitle e pulsanti di dialogo, e label.text = "…" di Kotlin, diventano setText(R.string.…). Viene segnalato un testo di visualizzazione creato da valori, poiché setText non accetta argomenti di formato.
I segnaposto diventano %1$s, %2$s… numerati in base al loro ordine nel testo di origine, in modo che una traduzione possa riordinarli.
Un conteggio con la sua parola, "$n ${if (n == 1) "item" else "items"}", diventa una risorsa <plurals> letta con pluralStringResource(R.plurals.…, n, n) (o getQuantityString in un toast).
Prima e dopo
L'output effettivo del motore per questo file. In un'esecuzione reale, il modello ospitato nomina le chiavi dal contesto.
@Composable
fun Cart(name: String) {
Column {
Text("Welcome back, $name!")
Text(text = "Checkout")
}
}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))
}
}<?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>Cosa aggiunge la configurazione
La prima esecuzione imposta Risorse stringa Android se il progetto non lo ha ancora:
res/values/strings.xmleres/values-<lang>/strings.xmlres/xml/locales_config.xmleandroid:localeConfig, così Android 13+ elenca le lingue nelle impostazioni dell'app
Eseguilo
La CLI richiede Node.js 22 o versioni successive, nient'altro: npx lo esegue senza aggiungere un package.json al progetto. Non hai Node sulla tua macchina? La GitHub Action qui sotto lo esegue per te.
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,deOppure aggiungi la GitHub Action e ottieni una pull request a ogni push. Provalo prima sul tuo codice nel playground.