localize.dev

Dokumentation / Android

Android-String-Ressourcen

Verschiebe fest codierten Text in Android-Layouts, Jetpack Compose und View-Code (Kotlin oder Java) in String-Ressourcen: strings.xml pro Sprache, stringResource()-Aufrufe und die Sprachliste pro App.

Funktionsweise

In Layouts und Menüs werden android:text, hint, contentDescription und title zu @string/…. In Compose werden Text("…") und contentDescription = "…" in @Composable-Funktionen zu stringResource(R.string.…, args); Toasts verwenden context.getString.

Auch View-Code in Kotlin oder Java funktioniert: label.setText("…"), setHint, setTitle und Dialog-Schaltflächen sowie Kotlins label.text = "…" werden zu setText(R.string.…). Ein aus Werten gebildeter View-Text wird gemeldet, da setText keine Formatargumente akzeptiert.

Platzhalter werden zu %1$s, %2$s… nummeriert nach ihrer Reihenfolge im Quelltext, sodass eine Übersetzung sie umordnen kann.

Eine Zahl mit ihrem Wort, "$n ${if (n == 1) "item" else "items"}", wird zu einem <plurals>-Ressourcen-Eintrag, der mit pluralStringResource(R.plurals.…, n, n) (oder getQuantityString in einer Benachrichtigung) gelesen wird.

Vorher und nachher

Die tatsächliche Ausgabe der Engine für diese Datei. Bei einer echten Ausführung benennt das gehostete Modell die Schlüssel anhand des Kontexts.

app/src/main/java/com/acme/shop/ui/Cart.kt · vorher
@Composable
fun Cart(name: String) {
    Column {
        Text("Welcome back, $name!")
        Text(text = "Checkout")
    }
}
app/src/main/java/com/acme/shop/ui/Cart.kt · nachher
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>

Was das Setup hinzufügt

Der erste Durchlauf richtet Android-String-Ressourcen (Bibliothek) ein, falls das Projekt es noch nicht hat:

  • res/values/strings.xml und res/values-<lang>/strings.xml
  • res/xml/locales_config.xml und android:localeConfig, sodass Android 13+ die Sprachen in den App-Einstellungen auflistet

Ausführen

Die CLI benötigt Node.js 22 oder neuer, sonst nichts: npx führt es aus, ohne ein package.json zum Projekt. Kein Node auf Ihrem Rechner? Die GitHub Action unten führt es für Sie aus.

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

Oder fügen Sie die GitHub Action und erhalten Sie bei jedem Push einen Pull Request. Probieren Sie es zuerst mit Ihrem eigenen Code im Spielbereich.