🌍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?
| Ziel | Befehl | Voraussetzung | Geht ohne Root? |
|---|---|---|---|
| Sprache lesen | getprop persist.sys.locale | – | ✅ |
| Systemsprache direkt setzen | setprop persist.sys.locale de-DE | Root | ❌ |
| Systemsprache über Hilfs-App | pm grant … CHANGE_CONFIGURATION + am broadcast | Hilfs-App installiert; ab Android 14 eingeschränkt | ✅ |
| Sprache einer App | cmd locale set-app-locales <paket> --locales de-DE | Android 13 (API 33) oder neuer | ✅ |
| Sprachmenü öffnen | am start -a android.settings.LOCALE_SETTINGS | Oberflä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 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
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.
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
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.
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
- 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:
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
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