PTC

So lokalisieren Sie Ihre Android-App mit KI

Richten Sie values/-Ordner ein, übersetzen Sie strings.xml mit KI, wechseln Sie die Sprache in Kotlin und laden Sie anschließend Screenshots hoch, damit PTC (Private Translation Cloud) die laufende Android-App prüft. Am Ende dieser Anleitung haben Sie eine mehrsprachige Android-App, die versandfertig ist und in der jede Zielsprache vor der Veröffentlichung durch eine visuelle Prüfung verifiziert wurde.

Diese Anleitung setzt voraus, dass Sie bereits ein bestehendes Android-Projekt in Android Studio haben. Wenn Sie ganz neu beginnen, erstellen Sie zuerst ein neues Projekt mit der Vorlage „Empty Activity".

So löst Android lokalisierte Ressourcen aus values-{locale}/-Ordnern auf

Android organisiert lokalisierte Ressourcen in res/values-{locale}/-Ordnern innerhalb von app/src/main/. Der Standardordner ist values/, der 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 zur Laufzeit den richtigen Ordner anhand der Geräte-Locale des Nutzers aus. Wenn die Sprache des Nutzers Spanisch ist, Sie aber keinen values-es/-Ordner haben, greift Android auf values/ zurück. Der Fallback erfolgt stillschweigend. Eine teilweise übersetzte App zeigt Englisch gemischt mit Spanisch an, ohne dass ein Fehler auftritt.

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 vereinfachtes Chinesisch.

Verschieben Sie jeden für Nutzer sichtbaren String in strings.xml

Verwenden Sie immer String-Ressourcen, die in strings.xml gespeichert sind. Schreiben Sie Text niemals fest in den Kotlin-/Java-Code oder in ein android:text=-Layout-Attribut. Fest codierter Text kann nicht übersetzt werden.

Verschieben Sie jeden für Nutzer sichtbaren String nach 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 welcomeText = stringResource(R.string.welcome_text)
val welcome = stringResource(R.string.welcome_user, userName)
val summary = stringResource(R.string.points_summary, userName, points)

Wichtige Konventionen, die PTC berücksichtigt:

  • Positionsbasierte Platzhalter. Verwenden Sie %1$s, %2$d, %3$f statt %s, %d. Einige Sprachen müssen die Argumente umordnen. Positionsbasierte Platzhalter machen das möglich. PTC erkennt und bewahrt sie automatisch.
  • <plurals> für zählbare Substantive. Schreiben Sie nicht if (count == 1) "1 note" else "$count notes" in den Code. Verwenden Sie <plurals> mit den Mengen one / other / few / many. PTC generiert die richtigen Pluralkategorien je Zielsprache (1 Form für Japanisch, 2 für Englisch, 3 für Polnisch, 6 für Arabisch).
  • <string-array> für statische Listen. PTC übersetzt jedes Element und bewahrt dabei die Array-Struktur.
  • Maskieren Sie Apostrophe (\') und Anführungszeichen (\"), um XML-Parsing-Fehler zu vermeiden.

Übersetzen Sie strings.xml mit 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. PTC unterstützt mehr als 40. Während der kostenlosen Testphase können Sie zwei beliebige auswählen. PTC verwendet die Ausgangssprache, um die richtige MT-Engine auszuwählen und Strings zu überspringen, bei denen die Quelle gleich dem Ziel ist.
  2. Prüfen Sie die automatisch generierte App-Beschreibung. PTC erstellt aus der hochgeladenen Datei eine kurze Beschreibung Ihrer Android-App. Bearbeiten Sie sie, um Ihre App und Zielgruppe besser zu beschreiben. PTC nutzt diesen Kontext, um für jede Sprache den richtigen Ton und die richtige Formalität zu treffen.
  3. Laden Sie optional vorhandene Übersetzungen hoch. Wenn Sie bereits übersetzte values-*/strings.xml-Dateien haben, laden Sie diese hoch, damit PTC sich an Ihren bestehenden Stil anpassen kann. Andernfalls wird von Grund auf neu übersetzt.
  4. Übersetzen und prüfen. PTC berücksichtigt jeden name=-Schlüssel (Ihre Schlüssel ändern sich nie), jeden positionsbasierten Platzhalter und generiert die korrekten Pluralkategorien je Zielsprache. Wenn eine Übersetzung Ihre Längenbeschränkungen überschreitet, hebt PTC sie hervor, damit nichts durchrutscht. Bearbeiten Sie jeden String direkt oder bitten Sie PTC, ihn unter Berücksichtigung der Beschränkung neu zu übersetzen.
  5. Laden Sie die übersetzte strings.xml je Sprache als ZIP herunter. Jede Datei ist strukturell identisch mit Ihrer Quelle. Gleiche Schlüssel, gleiche Arrays, gleiche Plural-Tags. Übersetzte Werte.

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

Legen Sie jede übersetzte Datei in den passenden values-{locale}/-Ordner:

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 übernimmt die neuen Ressourcen automatisch. Ändern Sie zur Überprüfung die Sprache Ihres Emulators oder Geräts und starten Sie die App neu. Die Benutzeroberfläche sollte in der neuen Sprache erscheinen.

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

Viele Apps benötigen einen In-App-Sprachumschalter, damit Nutzer die Geräte-Locale überschreiben können. Seit 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 eine 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 diese 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 Nutzers in SharedPreferences zu speichern und 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 bei jedem App-Start die gespeicherte Sprache:

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 zwischen Sitzungen erhalten und funktioniert auch nach der Veröffentlichung in Google Play korrekt.

Verwenden Sie für Arabisch, Hebräisch, Persisch und Urdu start und end statt 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 statt Arrangement.Absolute.Left. Aktivieren Sie „Force RTL layout direction" 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 skaliert das manuelle erneute Ausführen der Übersetzung je Release nicht. PTC bietet Ihnen zwei Möglichkeiten zur Automatisierung.

Git-Integration (empfohlen). Gehen Sie im PTC-Dashboard zu Settings > 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 PTC überwachen soll. Von dort aus erkennt PTC Änderungen, übersetzt neue oder aktualisierte Strings und öffnet einen Merge Request zu Ihrer Prüfung.

API-Integration. Gehen Sie zu Settings > Manage API Tokens und erstellen Sie ein Zugriffstoken. Verwenden Sie dann die PTC-API in Ihrer bestehenden CI:

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

Sowohl die Git- als auch die API-Integration sind Pro-Funktionen, die verfügbar werden, wenn Sie Pay-As-You-Go aktivieren. Im PTC API reference finden Sie Endpunkte, Webhooks und das vollständige Integrationsmodell.

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

Nachdem PTC Ihre strings.xml übersetzt hat, ist die Arbeit noch nicht erledigt. Ein übersetztes Label kann im Deutschen über einen Button hinauslaufen. „Submit" kann im Französischen als Substantiv übersetzt werden, während die Benutzeroberfläche ein Verb benötigte. Ein fest codierter englischer String, den jemand vergessen hat, in getString(R.string.welcome) zu verpacken, bleibt in der laufenden Android-App offensichtlich unübersetzt. Diese Fehler abzufangen bedeutet traditionell einen manuellen QA-Durchlauf in jeder Zielsprache. Die langsamste und teuerste Phase der mobilen Lokalisierung.

Die visuelle KI-Prüfung von PTC ersetzt diesen Durchlauf. Für native Android-Apps (die nicht in einem Browser laufen, sodass der Erweiterungs-Workflow nicht greift) verwenden Sie den Screenshot-Upload. Erfassen Sie die kritischen Bildschirme der laufenden App in jeder Zielsprache (Einstellungen, Hauptablauf, Sonderfälle) und laden Sie sie zu PTC hoch. Die Vision-KI von PTC inspiziert jeden Bildschirm und meldet zurück:

  • Probleme, die PTC in strings.xml beheben kann. PTC übersetzt die Verbbedeutung neu, wählt ein kürzeres Synonym, das in die Buttonbreite passt, generiert einen layoutbewussten Plural neu. PTC öffnet einen PR mit den Korrekturen. Keine Arbeit für Sie.
  • Probleme, die in Ihrem Kotlin-Code liegen. Fehlender getString()-Wrapper, fest codierte Strings, Satzverkettung, die String.format() mit Platzhaltern verwenden sollte. PTC generiert einen einsatzbereiten Prompt für Cursor oder Claude Code. Ihr Entwicklungsteam verpackt die Strings in Sekunden.

Das Ergebnis: Sie veröffentlichen je Release eine verifizierte, mehrsprachige Android-App. Keine übersetzte strings.xml mit einem manuellen QA-Nachlauf.

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

Die Beschreibung Ihres Play-Store-Eintrags, die „Neuheiten"-Release-Notes und der Text Ihrer Push-Benachrichtigungen liegen außerhalb von strings.xml. Die Funktion Paste to Translate von PTC bearbeitet diesen Text im selben Projekt. Fügen Sie den Ausgangstext im PTC-Dashboard ein, wählen Sie Zielsprachen 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 Presence > Main Store Listing > Translations, fügen Sie die übersetzten Kurz- und Langbeschreibungen hinzu und speichern Sie.

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

In-App-Chat, soziale Beiträge und nutzergenerierte Bewertungen müssen übersetzt werden, sobald 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 auf Text, der für UI-Elemente zu lang ist, fehlende Übersetzungen (stiller Fallback auf den Standard), falsche Datums-, Zahlen- oder Währungsformatierung sowie Layoutprobleme bei längerem Text. Aktivieren Sie für RTL-Sprachen „Force RTL layout direction" in den Entwickleroptionen.

Preise für die Android-Übersetzung nach der kostenlosen 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 Tarif sinkt, je mehr Sie übersetzen. Verwenden Sie den pricing calculator für eine Schätzung.

Übersetzen Sie jetzt Ihre echte Android-App

Starten Sie Ihre kostenlose 30-Tage-Testphase - 20.000 Wörter in 2 Sprachen, keine Kreditkarte. Laden Sie Ihre strings.xml hoch, übersetzen Sie sie in Minuten, laden Sie anschließend Screenshots hoch und lassen Sie PTC die laufende App verifizieren.

Verwandt: