PTC

Wie Sie Ihre Android-App mit KI lokalisieren

Richten Sie values/-Ordner ein, übersetzen Sie strings.xml mit KI, wechseln Sie die Sprachen in Kotlin und laden Sie dann Screenshots hoch, damit die PTC (Private Translation Cloud) die laufende Android-App prüft. Am Ende dieser Anleitung werden Sie eine mehrsprachige, veröffentlichungsbereite Android-App haben, bei der jede Zielsprache vor dem Release durch eine visuelle Übersetzungsprüfung verifiziert wurde.

Diese Anleitung setzt voraus, dass Sie ein bestehendes Android-Projekt in Android Studio haben. Wenn Sie von Grund auf neu beginnen, erstellen Sie zunächst ein neues Projekt mit dem Template „Empty Activity“.

Wie Android lokalisierte Ressourcen aus values-{locale}/-Ordnern auflöst

Android organisiert lokalisierte Ressourcen in res/values-{locale}/-Ordnern innerhalb von app/src/main/. Der Standardordner ist values/, welcher die Strings der Ausgangssprache enthält. Jede Zielsprache erhält ihren eigenen values-{locale}/-Ordner.

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)

Fügen Sie immer den Standardordner values/ ohne Sprachcode ein. Das ist Ihr Fallback. Android wählt den richtigen Ordner zur Laufzeit basierend auf dem Geräte-Locale des Benutzers aus. Wenn die Sprache des Benutzers Spanisch ist, Sie aber kein values-es/ haben, greift Android auf values/ zurück. Der Fallback erfolgt im Hintergrund. Eine teilweise übersetzte App zeigt Englisch gemischt mit Spanisch, ohne Fehler.

Die Locale-Codes folgen BCP 47. es für Spanisch, pt-rBR für brasilianisches Portugiesisch (beachten Sie das Präfix r für die Region), zh-rCN für Chinesisch (vereinfacht).

Verschieben Sie jeden sichtbaren String in strings.xml

Verwenden Sie immer String-Ressourcen, die in strings.xml gespeichert sind. Hardcodieren Sie Text niemals direkt im Kotlin/Java-Code oder in einem android:text=-Layout-Attribut. Ein hartcodierter String kann nicht übersetzt werden.

Verschieben Sie jeden für den Benutzer sichtbaren String in 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>

Referenzieren Sie jeden String in Kotlin über die generierte R.string.*-ID:

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)

Wichtige Konventionen, die die PTC beachtet:

  • Positionsgebundene Platzhalter. Verwenden Sie %1$s, %2$d, %3$f anstelle von %s, %d. In einigen Sprachen müssen die Argumente umgeordnet werden. Positionsgebundene Platzhalter machen das möglich. Die PTC erkennt und erhält sie automatisch.
  • <plurals> für zählbare Substantive. Schreiben Sie nicht if (count == 1) "1 note" else "$count notes" im Code. Verwenden Sie <plurals> mit den Mengen one / other / few / many. Die PTC generiert die richtigen Pluralkategorien pro Zielsprache (1 Form für Japanisch, 2 für Englisch, 4 für Polnisch, 6 für Arabisch).
  • <string-array> für statische Listen. Die PTC übersetzt jedes Element und behält dabei die Array-Struktur bei.
  • Escapen Sie Apostrophe (\') und Anführungszeichen (\"), um XML-Parsing-Fehler zu vermeiden.

Übersetzen Sie strings.xml mit der PTC in 5 Schritten

  1. Starten Sie ein PTC-Projekt in Ihrem Dashboard. Laden Sie Ihre values/strings.xml hoch, legen Sie Ihre Ausgabepfade fest und wählen Sie die Zielsprachen. Die PTC unterstützt 40+. Während der Testphase können Sie zwei beliebige auswählen. Die PTC nutzt die Ausgangssprache, um die richtige MT-Engine auszuwählen und Strings zu überspringen, bei denen die Quelle dem Ziel entspricht.
  2. Überprüfen Sie die automatisch generierte App-Beschreibung. Die PTC erstellt anhand der hochgeladenen Datei eine kurze Beschreibung Ihrer Android-App. Bearbeiten Sie diese, um Ihre App und Zielgruppe besser zu beschreiben. Die PTC nutzt diesen Kontext, um für jede Sprache den richtigen Ton und die richtige Anredeform zu treffen.
  3. Laden Sie optional bereits vorhandene Übersetzungen hoch. Wenn Sie bereits übersetzte values-*/strings.xml-Dateien haben, laden Sie diese hoch, damit die PTC Ihren bestehenden Stil übernehmen kann. Andernfalls übersetzen Sie von Grund auf.
  4. Übersetzen und prüfen. Die PTC respektiert jeden name=-Key (Ihre Keys ändern sich nie), jeden positionsgebundenen Platzhalter und generiert die korrekten Pluralkategorien pro Zielsprache. Wenn eine Übersetzung Ihre Längenbegrenzungen überschreitet, hebt die PTC sie hervor, damit nichts durchrutscht. Bearbeiten Sie jeden String direkt oder bitten Sie die PTC, ihn unter Berücksichtigung der Längenbeschränkung neu zu übersetzen.
  5. Laden Sie die übersetzte strings.xml pro Sprache als ZIP-Datei herunter. Jede Datei ist strukturell identisch mit Ihrer Quelle. Gleiche Keys, gleiche Arrays, gleiche Plural-Tags. Übersetzte Werte.

Legen Sie die übersetzten strings.xml-Dateien in values-{locale}/ ab

Legen Sie jede übersetzte Datei im passenden values-{locale}/-Ordner ab:

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

Erstellen Sie das Projekt neu. Android erkennt die neuen Ressourcen automatisch. Um dies zu verifizieren, ändern Sie die Sprache Ihres Emulators oder Geräts und starten Sie die App neu. Die UI sollte in der neuen Sprache erscheinen.

Fügen Sie einen In-App-Sprachumschalter mit AppCompatDelegate.setApplicationLocales() hinzu

Viele Apps benötigen einen In-App-Sprachumschalter, damit Benutzer das Geräte-Locale überschreiben können. Ab Android 13 (API 33) verwendet der kanonische Ansatz 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")
}

Um zu deklarieren, welche Sprachen Ihre App unterstützt (damit die System-Sprachauswahl sie anzeigt), fügen Sie locales_config.xml hinzu:

<!-- 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>

Und referenzieren Sie dies in AndroidManifest.xml:

<application
    android:localeConfig="@xml/locales_config"
    ... >

Für Apps, die auf Android 12 oder niedriger abzielen, besteht der ältere Ansatz darin, die Auswahl des Benutzers in SharedPreferences zu speichern und sie bei jedem App-Start anzuwenden:

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()
    }
}

Laden Sie dann die gespeicherte Sprache bei jedem App-Start:

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)
}

Dies bleibt über Sitzungen hinweg bestehen und funktioniert nach der Veröffentlichung bei Google Play korrekt.

Verwenden Sie start/end (nicht left/right) für Rechts-nach-links-Sprachen

Verwenden Sie für Arabisch, Hebräisch, Persisch und Urdu start und end anstelle von left und right in Ihren Layouts, damit Android das Layout automatisch spiegelt:

<!-- Instead of this -->
<TextView android:layout_marginLeft="16dp" />

<!-- Use this -->
<TextView android:layout_marginStart="16dp" />

Verwenden Sie in Jetpack Compose Arrangement.Start anstelle von Arrangement.Absolute.Left. Aktivieren Sie „RTL-Layoutrichtung erzwingen“ in den Entwickleroptionen, um die Spiegelung zu testen, ohne die Gerätesprache zu ändern.

Automatisieren Sie die Android-Übersetzung bei jedem Release mit Git oder der PTC-API

Bei aktiven Projekten ist es nicht skalierbar, die Übersetzung bei jedem Release manuell neu durchzuführen. Die PTC bietet Ihnen zwei Möglichkeiten zur Automatisierung.

Git-Integration (empfohlen). Gehen Sie im PTC-Dashboard zu Einstellungen > Merge Requests und klicken Sie auf Add Git Integration, um Ihr GitHub-, GitLab- oder Bitbucket-Repository zu verbinden. Geben Sie ein Zugriffstoken mit Lese- und Schreibberechtigungen an und wählen Sie die Branches aus, die die PTC überwachen soll. Von da an erkennt die PTC Änderungen, übersetzt neue oder aktualisierte Strings und öffnet einen Merge Request für Ihre Überprüfung.

API integration. Gehen Sie zu Einstellungen > API-Tokens verwalten und erstellen Sie ein Zugriffstoken. Nutzen Sie dann die PTC-API innerhalb Ihrer bestehenden CI.

Committen Sie eine .ptc-config.yml, die Ihre Quelldatei benennt und angibt, wo die Übersetzungen abgelegt werden sollen:

# .ptc-config.yml
source_locale: en
files:
  - file: app/src/main/res/values/strings.xml
    output: app/src/main/res/values-{{lang}}/strings.xml

Fügen Sie dann die PTC Translate-Aktion zu Ihrem Workflow hinzu. Sie enthält eine angeheftete Version der PTC-CLI, sodass Ihr Build zur Laufzeit nichts herunterlädt:

# .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

Sowohl die Git- als auch die API-Integration sind Pro-Funktionen, die verfügbar werden, wenn Sie Pay-As-You-Go aktivieren. Weitere Informationen zu Endpunkten, Webhooks und dem vollständigen Integrationsmodell finden Sie in der PTC-API-Referenz.

Visuelle Übersetzungsprüfung Ihrer übersetzten Android-App – veröffentlichen Sie ohne manuelle QA pro Sprache

Nachdem die PTC Ihre strings.xml übersetzt hat, ist die Arbeit noch nicht erledigt. Ein übersetztes Label kann im Deutschen über einen Button hinausragen. „Submit“ wird im Französischen möglicherweise als Substantiv übersetzt, obwohl die UI ein Verb benötigt. Ein hardcodierter englischer String, den jemand vergessen hat, in getString(R.string.welcome) einzuschließen, bleibt in der laufenden Android-App auffällig unübersetzt. Um diese Fehler zu finden, ist traditionell ein manueller QA-Durchlauf in jeder Zielsprache erforderlich. Das ist die langsamste und teuerste Phase der mobilen Lokalisierung.

Die AI Visual QA der PTC ersetzt diesen Durchlauf. Verwenden Sie für native Android-Apps (die nicht in einem Browser ausgeführt werden, weshalb der Workflow über die Browser-Erweiterung nicht anwendbar ist) den Screenshot-Upload. Erfassen Sie die kritischen Bildschirme der laufenden App in jeder Zielsprache (Einstellungen, Haupt-Workflow, Randfälle) und laden Sie sie in die PTC hoch. Die Vision-KI der PTC prüft jeden Bildschirm und meldet zurück:

  • Fehler, die die PTC in strings.xml beheben kann. Die PTC übersetzt die Bedeutung des Verbs neu, wählt ein kürzeres Synonym, das in die Button-Breite passt, und generiert einen layoutgerechten Plural neu. Die PTC öffnet einen Merge Request mit den Korrekturen. Sie müssen nichts weiter tun.
  • Fehler, die in Ihrem Kotlin-Code liegen. Fehlender getString()-Wrapper, hardcodierte Strings, Satzverkettungen, die String.format() mit Platzhaltern verwenden sollten. Die PTC generiert einen einsatzbereiten Prompt für Cursor oder Claude Code. Ihr Entwicklerteam schließt die Strings in Sekundenschnelle in Wrapper ein.

Das Ergebnis: Sie veröffentlichen pro Release eine verifizierte, mehrsprachige Android-App. Sie erhalten keine übersetzte strings.xml mit einem Restaufwand der manuellen QA.

Übersetzen Sie Ihren Play Store-Eintrag, Ihre Release Notes und Push-Benachrichtigungen

Die Beschreibung Ihres Play Store-Eintrags, Ihre „What's-new“-Release Notes und die Texte Ihrer Push-Benachrichtigungen befinden sich außerhalb von strings.xml. Paste to Translate der PTC verarbeitet diese Texte im selben Projekt. Fügen Sie den Ausgangstext im PTC-Dashboard ein, wählen Sie die Zielsprachen aus und erhalten Sie Übersetzungen zurück, die dasselbe Glossar und dieselbe Markenstimme wie Ihre In-App-Strings verwenden. Gehen Sie dann in der Google Play Console zu Store-Präsenz > Haupt-Store-Eintrag > Übersetzungen, fügen Sie die übersetzten kurzen und langen Beschreibungen hinzu und speichern Sie.

Übersetzen Sie In-App-Benutzerinhalte mit der PTC-API

In-App-Chats, Social-Media-Beiträge und nutzergenerierte Bewertungen müssen übersetzt werden, sobald die Inhalte eintreffen. Die PTC-REST-API übersetzt diese Inhalte bei Bedarf mit Bearer-Token-Authentifizierung und verwendet dabei dasselbe Glossar und dieselbe Markenstimme wie Ihre strings.xml-Übersetzungen.

Testen Sie Ihre lokalisierte Android-App bei jedem Release

Ändern Sie Ihre Gerätesprache in den Einstellungen oder verwenden Sie die Sprachauswahl des Emulators in Android Studio. Prüfen Sie für jede Sprache, ob Text für UI-Elemente zu lang ist, ob Übersetzungen fehlen (stiller Fallback auf den Standard), ob die Datums-/Zahlen-/Währungsformatierung falsch ist und ob Layout-Probleme bei längerem Text auftreten. Aktivieren Sie für RTL-Sprachen „RTL-Layoutrichtung erzwingen“ in den Entwickleroptionen.

Preise für die Android-Übersetzung nach der Testphase

Pay-As-You-Go, kein Abonnement. Sie zahlen nur für das, was Sie übersetzen. Die ersten 500 Wörter jeden Monat sind kostenlos, und der Preis sinkt, je mehr Sie übersetzen. Verwenden Sie den Preisrechner für eine Schätzung.

Übersetzen Sie nun Ihre echte Android-App

Starten Sie Ihre 30-Tage-Testphase – 20.000 Wörter in 2 Sprachen, keine Kreditkarte. Laden Sie Ihre strings.xml hoch, übersetzen Sie sie in wenigen Minuten, laden Sie dann Screenshots hoch und lassen Sie die PTC die laufende App überprüfen.

Verwandte Themen: