🌍Sprache per Skript lesen und setzen

Die Sprache auszulesen ist ein Einzeiler. Sie zu setzen ist kniffliger: Der direkte Weg ist der Shell verboten. Es bleiben drei saubere Möglichkeiten – je nachdem, ob das ganze System, eine einzelne App oder nur das Menü gemeint ist.

🧭Welcher Weg wofür?

ZielBefehlVoraussetzungGeht ohne Root?
Sprache lesengetprop persist.sys.locale–✅
Systemsprache direkt setzensetprop persist.sys.locale de-DERoot❌
Systemsprache über Hilfs-Apppm grant … CHANGE_CONFIGURATION + am broadcastHilfs-App installiert; ab Android 14 eingeschränkt✅
Sprache einer Appcmd locale set-app-locales <paket> --locales de-DEAndroid 13 (API 33) oder neuer✅
Sprachmenü öffnenam start -a android.settings.LOCALE_SETTINGSOberfläche kennt die Aktion✅

📎 Quellen: AOSP – android.provider.Settings (Quelltext) · AOSP – LocaleManagerShellCommand (Quelltext von „cmd locale“) · Android Developers – Sprache pro App · Appium Settings (io.appium.settings) – README

🎛️Generator: Sprache wählen, Befehle erhalten

Deutsch (Deutschland)

Sprache
de
2–3 Kleinbuchstaben (ISO 639)
Schrift
–
optional, 4 Buchstaben (ISO 15924)
Region
DE
2 Großbuchstaben (ISO 3166) oder 3 Ziffern
Befehle für de-DE
# Sprache lesen
adb -s 192.0.2.50:5555 shell getprop persist.sys.locale
adb -s 192.0.2.50:5555 shell settings get system system_locales
adb -s 192.0.2.50:5555 shell getprop ro.product.locale

# Systemsprache auf de-DE setzen (Hilfs-App io.appium.settings muss installiert sein)
adb -s 192.0.2.50:5555 shell pm grant io.appium.settings android.permission.CHANGE_CONFIGURATION
adb -s 192.0.2.50:5555 shell am broadcast -a io.appium.settings.locale -n io.appium.settings/.receivers.LocaleSettingReceiver --es lang de --es country DE
adb -s 192.0.2.50:5555 shell getprop persist.sys.locale

# Nur die App com.example.tvapp umstellen (ab Android 13)
adb -s 192.0.2.50:5555 shell cmd locale set-app-locales com.example.tvapp --user 0 --locales de-DE
adb -s 192.0.2.50:5555 shell cmd locale get-app-locales com.example.tvapp --user 0
# … und wieder der Systemsprache folgen lassen:
# adb -s 192.0.2.50:5555 shell cmd locale set-app-locales com.example.tvapp --user 0

# Sprachauswahl am Fernseher öffnen (Fallback, geräteabhängig)
adb -s 192.0.2.50:5555 shell am start -a android.settings.LOCALE_SETTINGS

📎 Quellen: RFC 5646 – Tags for Identifying Languages (BCP 47) · Appium Settings (io.appium.settings) – README · AOSP – LocaleManagerShellCommand (Quelltext von „cmd locale“) · AOSP – android.provider.Settings (Quelltext)

🔍Lesen: drei Stellen, eine Wahrheit

Befehl
adb shell getprop persist.sys.locale          # z. B. de-DE – die eingestellte Systemsprache
adb shell settings get system system_locales  # Liste, falls mehrere Sprachen gewählt sind
adb shell getprop ro.product.locale           # Werksvorgabe des Herstellers (nur lesbar)

Maßgeblich ist persist.sys.locale. Ist der Wert leer, wurde die Sprache nie umgestellt und es gilt die Werksvorgabe ausro.product.locale. system_locales ist die geordnete Liste aus den Einstellungen und kann leer („null“) sein.

📎 Quellen: AOSP – android.provider.Settings (Quelltext) · Appium Settings (io.appium.settings) – README

⛔Warum „setprop“ scheitert

ADB arbeitet als Benutzer shell (uid 2000). Systemeigenschaften mit dem Präfix persist.sys. darf dieser Benutzer lesen, aber nicht schreiben – der Befehl endet mit einer Fehlermeldung oder bleibt ohne Wirkung. Selbst mit Root würdesetprop allein laufende Apps nicht umstellen: Dazu muss das System seine Konfiguration neu verteilen.

Befehl
adb shell id
# uid=2000(shell) gid=2000(shell) …
adb shell setprop persist.sys.locale de-DE
# → verweigert: die Shell darf persist.sys.* nicht setzen
Der erlaubte Umweg
Eine App darf die Sprache ändern, wenn sie die Berechtigung android.permission.CHANGE_CONFIGURATION hat. Normale Apps bekommen sie nicht – per ADB kann man sie aber gezielt erteilen. Genau das macht pm grant.

📎 Quellen: Android Developers – Android Debug Bridge (adb) · Appium Settings (io.appium.settings) – README

🧩Systemsprache über eine Hilfs-App

Bewährt und quelloffen ist Appium Settings (Paket io.appium.settings) aus dem Testwerkzeug Appium. Die APK gibt es auf der Projektseite; sie wird einmal per adb install aufgespielt.

Befehl
adb install settings_apk-debug.apk
adb shell pm grant io.appium.settings android.permission.CHANGE_CONFIGURATION
adb shell am broadcast -a io.appium.settings.locale \
  -n io.appium.settings/.receivers.LocaleSettingReceiver \
  --es lang de --es country DE
adb shell getprop persist.sys.locale   # de-DE

# Schrift mit angeben (z. B. vereinfachtes Chinesisch):
#   --es lang zh --es country CN --es script Hans
Drei Einschränkungen
  • Ab Android 14 (API 34) blockiert das System die dafür nötige interne Schnittstelle unter Umständen – dann bleibt nur das Menü.
  • Die App ist für eigene Testgeräte gedacht: Ihre Empfänger prüfen nicht, wer sie aufruft. Nach Gebrauch wieder entfernen (adb uninstall io.appium.settings).
  • Ob sich die App auf einem bestimmten Fernseher installieren lässt und die Oberfläche des Herstellers der Umstellung folgt, ist geräteabhängig.

📎 Quellen: Appium Settings (io.appium.settings) – README · AOSP – PackageManagerShellCommand (Quelltext von „pm“)

📱Nur eine App umstellen (ab Android 13)

Seit Android 13 kann jede App eine eigene Sprache haben – unabhängig vom System. Das geht ganz ohne Hilfs-App und ohne besondere Berechtigung:

Befehl
adb shell cmd locale set-app-locales com.example.tvapp --user 0 --locales en-US
adb shell cmd locale get-app-locales com.example.tvapp --user 0

# zurück zur Systemsprache: ohne --locales wird die Liste geleert
adb shell cmd locale set-app-locales com.example.tvapp --user 0

Mehrere Sprachen werden mit Komma getrennt (--locales de-DE,en-US). Wirkung zeigt das nur bei Apps, die die gewünschte Sprache auch mitbringen. Prüfen, ob das Gerät neu genug ist: adb shell getprop ro.build.version.sdk muss mindestens 33 liefern.

📎 Quellen: AOSP – LocaleManagerShellCommand (Quelltext von „cmd locale“) · Android Developers – Sprache pro App

🚪Wenn nichts davon geht: das Menü direkt öffnen

Befehl
adb shell am start -a android.settings.LOCALE_SETTINGS
# kennt die Oberfläche die Aktion nicht:
adb shell am start -a android.settings.SETTINGS

Das spart den Weg durch ein Menü in einer Sprache, die man nicht lesen kann – der klassische Fall nach einem versehentlichen Umstellen. Von Hand liegt die Auswahl unter Einstellungen → System → Sprache (Android TV: Geräteeinstellungen → Sprache). Ob ein Fernseher die Aktion LOCALE_SETTINGS beantwortet, ist geräteabhängig.

📎 Quellen: AOSP – android.provider.Settings (Quelltext) · AOSP – TvSettings, deutsche Texte