PTC

So lokalisieren Sie Ihre Android-App mit KI

Richten Sie values/-Ordner ein, übersetzen Sie strings.xml mit KI, wechseln Sie die Sprachen in Kotlin und laden Sie anschließend Screenshots hoch, damit die PTC (Private Translation Cloud) die laufende Android-App prüft. Am Ende dieser Anleitung haben Sie eine mehrsprachige, veröffentlichungsreife Android-App, 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 ganz neu anfangen, erstellen Sie zunächst ein neues Projekt mit dem Empty Activity-Template.

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/, 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 basierend auf dem Geräte-Locale des Nutzers den richtigen Ordner aus. Wenn die Sprache des Nutzers Spanisch ist, Sie aber kein values-es/ 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 r-Präfix für die Region), zh-rCN für Chinesisch (vereinfacht).

Verschieben Sie jeden nutzersichtbaren String in die strings.xml

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

Verschieben Sie jeden nutzersichtbaren String in die 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)

Key-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 neu angeordnet werden. Positionsgebundene Platzhalter machen das möglich. Die PTC erkennt und bewahrt sie automatisch.
  • <plurals> für zählbare Substantive. Schreiben Sie if (count == 1) "1 note" else "$count notes" nicht in den Code. Verwenden Sie <plurals> mit den Mengenangaben 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 die 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 Quelle und Ziel identisch sind.
  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 die richtige Tonalität und 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 Sie. 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 weisen Sie die PTC an, ihn unter Berücksichtigung der Beschränkung neu zu übersetzen.
  5. Laden Sie die übersetzte strings.xml pro Sprache als ZIP 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 überprüfen, ändern Sie 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 einen In-App-Sprachumschalter mit AppCompatDelegate.setApplicationLocales() hinzu

Viele Apps benötigen einen In-App-Sprachumschalter, damit Nutzer das Geräte-Locale überschreiben können. Ab Android 13 (API 33) nutzt 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 der 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 den 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 in Ihren Layouts start und end anstelle von left und right, 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

Für aktive Projekte ist das manuelle erneute Ausführen der Übersetzung pro Release nicht skalierbar. 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. Stellen Sie ein Zugriffstoken mit Lese- und Schreibberechtigungen bereit 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. Verwenden Sie dann die PTC-API innerhalb 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: Translate with PTC
        run: |
          cat > .ptc-config.yml <<'EOF'
          source_locale: en
          files:
            - file: app/src/main/res/values/strings.xml
              output: app/src/main/res/values-{{lang}}/strings.xml
          EOF
          curl -fsSL https://raw.githubusercontent.com/OnTheGoSystems/ptc-cli/main/ptc-cli.sh -o ptc-cli.sh
          chmod +x ptc-cli.sh
          ./ptc-cli.sh --config-file .ptc-config.yml --api-token="${{ secrets.PTC_API_TOKEN }}"

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

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 getan. Ein übersetztes Label könnte auf Deutsch über einen Button hinausragen. „Submit“ wird im Französischen möglicherweise als Substantiv übersetzt, wenn die Benutzeroberfläche ein Verb benötigte. Ein hardcodierter englischer String, bei dem jemand vergessen hat, ihn in getString(R.string.welcome) zu wrappen, wird in der laufenden Android-App auffällig unübersetzt bleiben. Um diese Fehler zu finden, war 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 hier nicht anwendbar ist) den Screenshot-Upload. Erfassen Sie die kritischen Bildschirme der laufenden App in jeder Zielsprache (Einstellungen, Haupt-Workflow, Edge-Cases) und laden Sie sie in die PTC hoch. Die Vision-KI der PTC inspiziert jeden Bildschirm und meldet zurück:

  • Fehler, die die PTC in der strings.xml beheben kann. Die PTC übersetzt die Verb-Bedeutung neu, wählt ein kürzeres Synonym, das zur Button-Breite passt, und generiert einen layoutbewussten Plural neu. Die PTC öffnet einen Merge Request mit den Korrekturen. Es ist keine Arbeit Ihrerseits erforderlich.
  • Fehler, die in Ihrem Kotlin-Code liegen. Fehlende 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 Dev-Team wrappt die Strings in Sekundenschnelle.

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

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

Die Beschreibung Ihres Play Store-Eintrags, die Release Notes mit Neuerungen und die Texte der Push-Benachrichtigungen befinden sich außerhalb der strings.xml. Die 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 Kurz- und Langbeschreibungen hinzu und speichern Sie.

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

In-App-Chats, Social-Media-Beiträge und nutzergenerierte Bewertungen erfordern eine Übersetzung, 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 nutzen Sie die Sprachauswahl des Android Studio-Emulators. Prüfen Sie für jede Sprache auf Text, der für UI-Elemente zu lang ist, auf fehlende Übersetzungen (stiller Fallback auf den Standard), auf falsche Formatierungen von Datum/Zahlen/Währungen und auf Layout-Probleme durch längeren Text. 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 pro Wort sinkt, je mehr Sie übersetzen. Nutzen Sie den Preisrechner für eine Einschätzung.

Übersetzen Sie jetzt 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 verifizieren.

Verwandte Themen: