tinyjukebox 0.47.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. tinyjukebox/__init__.py +7 -0
  2. tinyjukebox/albumplayer/__init__.py +1 -0
  3. tinyjukebox/albumplayer/aalbumplayer.py +402 -0
  4. tinyjukebox/albumplayer/clock.py +39 -0
  5. tinyjukebox/albumplayer/dummyplayer.py +49 -0
  6. tinyjukebox/albumplayer/player_interface.py +97 -0
  7. tinyjukebox/albumplayer/radioplayer.py +391 -0
  8. tinyjukebox/albumplayer/simpleplayer.py +419 -0
  9. tinyjukebox/albumplayer/spotifyplayer.py +671 -0
  10. tinyjukebox/backup.py +176 -0
  11. tinyjukebox/backups.py +340 -0
  12. tinyjukebox/cli.py +1076 -0
  13. tinyjukebox/control.py +1386 -0
  14. tinyjukebox/core/__init__.py +1 -0
  15. tinyjukebox/core/config.py +100 -0
  16. tinyjukebox/core/logging/__init__.py +113 -0
  17. tinyjukebox/core/microservice.py +303 -0
  18. tinyjukebox/core/pubsub/__init__.py +15 -0
  19. tinyjukebox/core/pubsub/base.py +196 -0
  20. tinyjukebox/core/pubsub/localqueue.py +102 -0
  21. tinyjukebox/core/pubsub/statistics.py +57 -0
  22. tinyjukebox/core/py.typed +0 -0
  23. tinyjukebox/core/schema/__init__.py +5 -0
  24. tinyjukebox/core/schema/logger.py +40 -0
  25. tinyjukebox/core/schema/microservice.py +48 -0
  26. tinyjukebox/core/threads.py +39 -0
  27. tinyjukebox/core/ui/__init__.py +5 -0
  28. tinyjukebox/core/ui/cli.py +120 -0
  29. tinyjukebox/core/ui/tools.py +73 -0
  30. tinyjukebox/core/unexpected.py +46 -0
  31. tinyjukebox/data/__init__.py +0 -0
  32. tinyjukebox/data/activities.py +175 -0
  33. tinyjukebox/data/activity.py +138 -0
  34. tinyjukebox/data/common.py +91 -0
  35. tinyjukebox/data/degraded.py +39 -0
  36. tinyjukebox/data/jsondata.py +218 -0
  37. tinyjukebox/data/sanitycheck.py +71 -0
  38. tinyjukebox/data/tag.py +98 -0
  39. tinyjukebox/data/tags.py +160 -0
  40. tinyjukebox/data/target.py +568 -0
  41. tinyjukebox/data/targetalbumtools.py +88 -0
  42. tinyjukebox/data/targets.py +256 -0
  43. tinyjukebox/data/volumelimits.py +68 -0
  44. tinyjukebox/data_folder.py +180 -0
  45. tinyjukebox/devices/__init__.py +1 -0
  46. tinyjukebox/devices/baseclasses/__init__.py +1 -0
  47. tinyjukebox/devices/baseclasses/adriver.py +115 -0
  48. tinyjukebox/devices/baseclasses/aevents.py +47 -0
  49. tinyjukebox/devices/baseclasses/gpiolevel.py +16 -0
  50. tinyjukebox/devices/bluetooth/__init__.py +1 -0
  51. tinyjukebox/devices/bluetooth/avrcp_input.py +118 -0
  52. tinyjukebox/devices/bluetooth/bluez.py +446 -0
  53. tinyjukebox/devices/bluetooth/link.py +396 -0
  54. tinyjukebox/devices/bluetooth/virtual.py +155 -0
  55. tinyjukebox/devices/drivermanager/__init__.py +1 -0
  56. tinyjukebox/devices/drivermanager/driverfactory.py +75 -0
  57. tinyjukebox/devices/drivermanager/drivermanager.py +151 -0
  58. tinyjukebox/devices/drivers/__init__.py +31 -0
  59. tinyjukebox/devices/drivers/bluetooth.py +257 -0
  60. tinyjukebox/devices/drivers/input.py +165 -0
  61. tinyjukebox/devices/drivers/rfid.py +297 -0
  62. tinyjukebox/devices/drivers/rgbled.py +215 -0
  63. tinyjukebox/devices/py.typed +0 -0
  64. tinyjukebox/devices/schema/__init__.py +1 -0
  65. tinyjukebox/devices/schema/adriver.py +33 -0
  66. tinyjukebox/devices/schema/bluetooth.py +31 -0
  67. tinyjukebox/devices/schema/drivermanager.py +41 -0
  68. tinyjukebox/devices/schema/input.py +23 -0
  69. tinyjukebox/devices/schema/rfid.py +44 -0
  70. tinyjukebox/devices/schema/rgbled.py +26 -0
  71. tinyjukebox/diagnostics.py +179 -0
  72. tinyjukebox/errors.py +91 -0
  73. tinyjukebox/headset.py +296 -0
  74. tinyjukebox/images.py +133 -0
  75. tinyjukebox/latency.py +43 -0
  76. tinyjukebox/library/__init__.py +2 -0
  77. tinyjukebox/library/diagnostics.py +183 -0
  78. tinyjukebox/library/journal.py +94 -0
  79. tinyjukebox/library/releases.py +348 -0
  80. tinyjukebox/library/schema.py +98 -0
  81. tinyjukebox/library/service.py +1115 -0
  82. tinyjukebox/library/statistics.py +288 -0
  83. tinyjukebox/library/store.py +1386 -0
  84. tinyjukebox/messages.py +202 -0
  85. tinyjukebox/metadata.py +133 -0
  86. tinyjukebox/py.typed +0 -0
  87. tinyjukebox/restore.py +391 -0
  88. tinyjukebox/rgbled.py +158 -0
  89. tinyjukebox/schema/__init__.py +1 -0
  90. tinyjukebox/schema/activities.py +27 -0
  91. tinyjukebox/schema/tags.py +54 -0
  92. tinyjukebox/schema/targets.py +83 -0
  93. tinyjukebox/schema/tinyjukebox.py +217 -0
  94. tinyjukebox/schema/volume.py +28 -0
  95. tinyjukebox/slots.py +234 -0
  96. tinyjukebox/spotify/__init__.py +1 -0
  97. tinyjukebox/spotify/account.py +647 -0
  98. tinyjukebox/spotify/engine.py +568 -0
  99. tinyjukebox/spotify/oembed.py +65 -0
  100. tinyjukebox/spotify/soloist.py +198 -0
  101. tinyjukebox/spotify/sound.py +316 -0
  102. tinyjukebox/stm/__init__.py +0 -0
  103. tinyjukebox/stm/base.py +174 -0
  104. tinyjukebox/stm/playradio.py +237 -0
  105. tinyjukebox/stm/playspotify.py +418 -0
  106. tinyjukebox/stm/stmoperation.py +769 -0
  107. tinyjukebox/stm/stmplayalbum.py +655 -0
  108. tinyjukebox/stm/stmvolume.py +221 -0
  109. tinyjukebox/sync/__init__.py +42 -0
  110. tinyjukebox/sync/box.py +486 -0
  111. tinyjukebox/sync/client.py +189 -0
  112. tinyjukebox/sync/data.py +489 -0
  113. tinyjukebox/sync/files.py +447 -0
  114. tinyjukebox/sync/handshake.py +42 -0
  115. tinyjukebox/sync/link.py +379 -0
  116. tinyjukebox/sync/manifest.py +162 -0
  117. tinyjukebox/sync/util.py +137 -0
  118. tinyjukebox/tinyjukebox.py +680 -0
  119. tinyjukebox/tools/__init__.py +1 -0
  120. tinyjukebox/tools/backup.py +173 -0
  121. tinyjukebox/tools/fill_library.py +120 -0
  122. tinyjukebox/tools/import_cards.py +274 -0
  123. tinyjukebox/tools/import_covers.py +138 -0
  124. tinyjukebox/tools/migrate_box01.py +151 -0
  125. tinyjukebox/volumemanager.py +355 -0
  126. tinyjukebox/web/__init__.py +1 -0
  127. tinyjukebox/web/auth.py +373 -0
  128. tinyjukebox/web/certificates.py +111 -0
  129. tinyjukebox/web/logbuffer.py +62 -0
  130. tinyjukebox/web/server.py +1237 -0
  131. tinyjukebox/web/uploads.py +262 -0
  132. tinyjukebox/web/users.py +106 -0
  133. tinyjukebox/web/web/app.js +3050 -0
  134. tinyjukebox/web/web/favicon.svg +6 -0
  135. tinyjukebox/web/web/help/de/admin.html +714 -0
  136. tinyjukebox/web/web/help/de/manual.html +1147 -0
  137. tinyjukebox/web/web/help/de/quick-guide.html +79 -0
  138. tinyjukebox/web/web/help/en/admin.html +701 -0
  139. tinyjukebox/web/web/help/en/manual.html +1126 -0
  140. tinyjukebox/web/web/help/en/quick-guide.html +79 -0
  141. tinyjukebox/web/web/help/help.css +25 -0
  142. tinyjukebox/web/web/help/images/box-2026.jpg +0 -0
  143. tinyjukebox/web/web/help/images/box-back.jpg +0 -0
  144. tinyjukebox/web/web/help/images/lid-top.jpg +0 -0
  145. tinyjukebox/web/web/help/images/logo-mark.svg +38 -0
  146. tinyjukebox/web/web/index.html +867 -0
  147. tinyjukebox/web/web/style.css +412 -0
  148. tinyjukebox/web/web/texts/de.json +892 -0
  149. tinyjukebox/web/web/texts/en.json +892 -0
  150. tinyjukebox-0.47.0.dist-info/METADATA +236 -0
  151. tinyjukebox-0.47.0.dist-info/RECORD +154 -0
  152. tinyjukebox-0.47.0.dist-info/WHEEL +4 -0
  153. tinyjukebox-0.47.0.dist-info/entry_points.txt +9 -0
  154. tinyjukebox-0.47.0.dist-info/licenses/LICENSE.txt +21 -0
@@ -0,0 +1,892 @@
1
+ {
2
+ "access.bootstrap.placeholder": "Neues Bootstrap-Passwort (mindestens 16 Zeichen)",
3
+ "access.bootstrap.saved": "Bootstrap-Passwort geändert.",
4
+ "access.bootstrap.submit": "Bootstrap-Passwort ändern",
5
+ "access.help": "Mit dem Bootstrap-Passwort meldet sich eine neue Box das erste Mal an; danach hat sie einen eigenen Schlüssel. Ein Token erlaubt einem Skript nur, nach einer neuen Version suchen zu lassen.",
6
+ "access.title": "Zugang für Boxen und Skripte",
7
+ "access.token.new": "Token für Skripte erzeugen",
8
+ "access.verified": "Geprüft.",
9
+ "access.verify": "Dateien der Alben und Titelbilder prüfen",
10
+ "album.added": "hinzugefügt am {date}",
11
+ "album.broken": "Von Boxen gemeldet:",
12
+ "album.broken.forget": "Meldungen verwerfen",
13
+ "album.broken.forgotten": "Meldungen verworfen.",
14
+ "album.broken.report": "{file}: Box {box} meldet Fehler beim Abspielen ({date})",
15
+ "album.delete.confirm": "Album „{title}“ aus der Liste entfernen? (Dateien bleiben erhalten)",
16
+ "album.delete.confirm_files": "Album „{title}“ samt Dateien löschen?",
17
+ "album.delete_files": "Dateien ebenfalls löschen",
18
+ "album.folder": "Ordner: {folder}",
19
+ "album.more_problems": "… und {n} weitere",
20
+ "album.playlist.confirm": "Playlist aus allen MP3-Dateien des Ordners neu erzeugen? Die alte Playlist wird als .bak aufgehoben.",
21
+ "album.playlist.done": "Playlist neu erzeugt.",
22
+ "album.playlist.rebuild": "Playlist aus den MP3-Dateien neu erzeugen",
23
+ "album.problems": "Probleme mit diesem Album:",
24
+ "album.remove": "Album entfernen",
25
+ "album.removed": "Album entfernt.",
26
+ "album.title_saved": "Titel gespeichert.",
27
+ "album.track_missing": "(fehlt)",
28
+ "albums.add.done": "Album hinzugefügt.",
29
+ "albums.add.folder": "Ordner relativ zum Album-Verzeichnis",
30
+ "albums.add.submit": "Ordner als Album hinzufügen",
31
+ "albums.add.title": "Titel des Albums",
32
+ "albums.broken": "defekt",
33
+ "albums.broken.title": "Dateien des Albums sind defekt",
34
+ "albums.column.created": "Hinzugefügt",
35
+ "albums.column.folder": "Ordner",
36
+ "albums.column.length": "Länge",
37
+ "albums.column.title": "Album",
38
+ "albums.column.tracks": "Titel",
39
+ "albums.none": "Keine Alben.",
40
+ "albums.scan": "Neue Ordner suchen",
41
+ "albums.scan.added": {
42
+ "one": "{n} Album hinzugefügt.",
43
+ "other": "{n} Alben hinzugefügt."
44
+ },
45
+ "albums.scan.added_skipped": {
46
+ "one": "{n} Album hinzugefügt, {skipped} übersprungen.",
47
+ "other": "{n} Alben hinzugefügt, {skipped} übersprungen."
48
+ },
49
+ "albums.scan.confirm": {
50
+ "one": "{n} neuer Ordner gefunden:\n\n{folders}\n\nHinzufügen? Der Titel lässt sich danach im Album ändern.",
51
+ "other": "{n} neue Ordner gefunden:\n\n{folders}\n\nAlle hinzufügen? Der Titel lässt sich danach im Album ändern."
52
+ },
53
+ "albums.scan.line": "{folder} → „{title}“",
54
+ "albums.scan.none": "Keine neuen Album-Ordner gefunden.",
55
+ "albums.tracks": {
56
+ "one": "{n} Titel",
57
+ "other": "{n} Titel"
58
+ },
59
+ "albums.without_tag_only": "nur Alben ohne Tag",
60
+ "backup.albums_note": "Mit MP3s enthält die Datei auch die Alben und ist so groß wie alle zusammen.",
61
+ "backup.column.content": "Inhalt",
62
+ "backup.column.size": "Größe",
63
+ "backup.column.when": "Backup vom",
64
+ "backup.delete.confirm": "Backup vom {when} löschen?",
65
+ "backup.deleted": "Backup gelöscht.",
66
+ "backup.download": "Backup herunterladen",
67
+ "backup.download_albums": "Backup mit MP3s herunterladen",
68
+ "backup.folder": "Ordner für die Backups",
69
+ "backup.folder.placeholder": "Ordner für die Backups (leer: {folder})",
70
+ "backup.folder.title": "Ordner auf dem Rechner der Bibliothek oder auf der Box, in dem diese Backups abgelegt werden. Leer: der Ordner aus der Konfiguration.",
71
+ "backup.help.box": "Eine Datei mit den Tags, Verknüpfungen, Fortschritten, Lautstärken und Titelbildern dieser Box. Benutzer, Schlüssel und Passwörter sind nicht darin.",
72
+ "backup.help.library": "Eine Datei mit dem Katalog, den Fortschritten und Einstellungen aller Boxen, der Statistik und den Titelbildern. Benutzer, Schlüssel und Passwörter sind nicht darin.",
73
+ "backup.none": "Noch keine Backups.",
74
+ "backup.now": "Jetzt sichern",
75
+ "backup.now_albums": "Jetzt mit MP3s sichern",
76
+ "backup.schedule.enabled": "regelmäßig",
77
+ "backup.schedule.every": "alle {every} {unit} um {time}",
78
+ "backup.schedule.keep": "Backups aufbewahren",
79
+ "backup.schedule.title": "Regelmäßig sichern",
80
+ "backup.started": "Das Backup wird erstellt.",
81
+ "backup.state.failed": "Das letzte Backup ist fehlgeschlagen ({when}): {message}",
82
+ "backup.state.folder": "Die Backups liegen in {folder}.",
83
+ "backup.state.last": "Letztes Backup: {when}.",
84
+ "backup.state.next": "Nächstes: {when}.",
85
+ "backup.state.running": "Ein Backup wird gerade erstellt …",
86
+ "backup.title": "Backup",
87
+ "backup.unit.days": "Tage",
88
+ "backup.unit.months": "Monate",
89
+ "backup.unit.weeks": "Wochen",
90
+ "backup.with_albums": "mit MP3s",
91
+ "backup.without_albums": "ohne MP3s",
92
+ "bluetooth.battery": "Akku",
93
+ "bluetooth.connected": "Verbunden",
94
+ "bluetooth.help": "Koppeln: den Kopfhörer in den Pairing-Modus versetzen, dann hier „Koppeln“ wählen oder an der Box Weiter und Zurück gleichzeitig 5 s halten. Die LED blinkt schnell blau, solange die Box sucht (höchstens eine Minute). Es ist immer nur ein Kopfhörer gekoppelt – ein neuer ersetzt den alten. Ist der Kopfhörer verbunden, spielt die Box nur über ihn; bricht die Verbindung ab, pausiert sie.",
95
+ "bluetooth.limits": "Startwert und Maximum ändern",
96
+ "bluetooth.none": "Kein Kopfhörer gekoppelt.",
97
+ "bluetooth.pair": "Koppeln",
98
+ "bluetooth.pair.started": "Suche gestartet – die LED blinkt schnell blau.",
99
+ "bluetooth.pairing.failed": "Koppeln fehlgeschlagen.",
100
+ "bluetooth.pairing.not_found": "Kein Kopfhörer im Pairing-Modus gefunden.",
101
+ "bluetooth.pairing.paired": "Kopfhörer gekoppelt.",
102
+ "bluetooth.searching": "Suche läuft – Kopfhörer in den Pairing-Modus versetzen …",
103
+ "bluetooth.title": "Bluetooth-Kopfhörer",
104
+ "bluetooth.unavailable": "Bluetooth ist nicht verfügbar (kein Treiber oder kein Adapter).",
105
+ "bluetooth.unpair": "Kopplung aufheben",
106
+ "bluetooth.unpair.confirm": "Kopplung mit „{name}“ aufheben? Ein laufendes Album pausiert.",
107
+ "bluetooth.unpaired": "Kopplung aufgehoben.",
108
+ "bluetooth.virtual.help": "Die Box läuft ohne Hardware: Dieser Kopfhörer verhält sich wie ein echter, der Ton kommt weiter aus dem PC. „Koppeln“ findet ihn nach wenigen Sekunden.",
109
+ "bluetooth.virtual.off": "Ausschalten (Verbindung weg)",
110
+ "bluetooth.virtual.on": "Einschalten",
111
+ "bluetooth.virtual.title": "Virtueller Kopfhörer",
112
+ "boxes.column.contact": "Letzter Kontakt, Adresse",
113
+ "boxes.page": "Seite von {name}",
114
+ "boxes.column.state": "Stand",
115
+ "boxes.degraded": {
116
+ "one": "arbeitet ohne {n} beschädigte oder unbekannte Angabe (Seite der Box, Tab System)",
117
+ "other": "arbeitet ohne {n} beschädigte oder unbekannte Angaben (Seite der Box, Tab System)"
118
+ },
119
+ "boxes.fits": "Box {name} spricht Version {speaks} der Schnittstelle, diese Bibliothek Version {serves}",
120
+ "boxes.fits_manual": "Box {name} spricht Version {speaks} der Schnittstelle, diese Bibliothek Version {serves}; ihre Updates sind auf „nur von Hand“ gestellt, sie muss von Hand aktualisiert werden",
121
+ "boxes.add.title": "Box hinzufügen",
122
+ "boxes.add.help": "Auf einem Raspberry Pi mit frischer Karte (Raspberry Pi OS Lite, 64 Bit), über SSH angemeldet, diese Zeile ausführen: Sie richtet die Box ein, installiert Version {version} und verbindet die Box mit dieser Bibliothek. Sie fragt nach dem Bootstrap-Passwort, das weiter unten gesetzt wird. Die Box muss die Bibliothek unter dieser Adresse erreichen.",
123
+ "boxes.add.older": "Version {newest} kam in die Bibliothek, bevor sie Installer aufbewahrt hat: Die Zeile installiert {version}, danach aktualisiert sich die Box selbst.",
124
+ "boxes.add.none": "Aus dieser Bibliothek lässt sich noch keine Version installieren: Sie bewahrt den Installer einer Box mit jedem Release ab Version 0.38.0 auf.",
125
+ "boxes.add.copy": "Kopieren",
126
+ "boxes.add.copied": "Die Zeile ist kopiert.",
127
+ "boxes.help": "Jede Box meldet sich selbst an, sobald sie die Adresse der Bibliothek und das Bootstrap-Passwort kennt. Fortschritte gehören zur Box, alles andere ist für alle gleich.",
128
+ "boxes.manual_updates": "Updates von Hand",
129
+ "boxes.no_bootstrap": "Es ist noch kein Bootstrap-Passwort gesetzt.",
130
+ "boxes.none": "Noch hat sich keine Box angemeldet.",
131
+ "boxes.positions": {
132
+ "one": "{n} Fortschritt",
133
+ "other": "{n} Fortschritte"
134
+ },
135
+ "boxes.remove.confirm": "Box „{name}“ entfernen? Ihr Schlüssel gilt dann nicht mehr.",
136
+ "boxes.remove.done": "Box entfernt.",
137
+ "boxes.removed": "entfernt",
138
+ "boxes.rename": "Umbenennen",
139
+ "boxes.rename.prompt": "Name der Box",
140
+ "boxes.startup": {
141
+ "one": "startet seit {since} nicht ({n} gescheiterter Start) – Tab Log",
142
+ "other": "startet seit {since} nicht ({n} gescheiterte Starts) – Tab Log"
143
+ },
144
+ "boxes.takeover": "Alte Box übernehmen",
145
+ "boxes.takeover.done": "Übernommen.",
146
+ "boxes.takeover.prompt": "Fortschritte und Einstellungen welcher Box übernehmen?\n{boxes}",
147
+ "boxes.updates_off": "Updates aus",
148
+ "boxes.uploads.help": "Alben, die auf einer Box hochgeladen wurden und noch nicht vollständig hier sind.",
149
+ "boxes.uploads.line": {
150
+ "one": "„{folder}“ – nur auf {box}, {transferred} von {n} Datei übertragen",
151
+ "other": "„{folder}“ – nur auf {box}, {transferred} von {n} Dateien übertragen"
152
+ },
153
+ "boxes.uploads.title": "Alben unterwegs",
154
+ "boxes.waiting": {
155
+ "one": "{n} Änderung wartet auf ein Album",
156
+ "other": "{n} Änderungen warten auf ein Album"
157
+ },
158
+ "phones.phone": "Telefon",
159
+ "phones.add.title": "Telefon hinzufügen",
160
+ "phones.app.help": "Die App für Android-Telefone und -Tablets, Version {version}: Diese Adresse auf dem Telefon öffnen oder seine Kamera auf den QR-Code richten. Der Browser warnt einmal wegen des Zertifikats der Bibliothek, und Android fragt einmal, ob der Browser Apps installieren darf.",
161
+ "phones.app.qr": "QR-Code der Adresse der App",
162
+ "phones.app.none": "Diese Bibliothek hat noch keine App zum Ausgeben: Sie bewahrt die App mit jedem Release ab der Version auf, die sie mitbringt.",
163
+ "phones.pair": "Koppeln",
164
+ "phones.pair.help": "Dann die App mit dieser Bibliothek koppeln: „Koppeln“ tippen und den QR-Code mit der App scannen. Der Code gilt einmal und 10 Minuten lang. Das Telefon erscheint dann oben in der Tabelle, wie eine Box.",
165
+ "phones.pair.qr": "QR-Code zum Koppeln der App",
166
+ "phones.pair.valid": "Noch {minutes}:{seconds} gültig.",
167
+ "phones.pair.expired": "Der QR-Code ist abgelaufen. „Koppeln“ tippen für einen neuen.",
168
+ "phones.limits": "Lautstärke",
169
+ "phones.limits.title": "Lautstärke des Telefons: Maximum",
170
+ "phones.limits.help": "Die App spielt mit höchstens diesem Anteil dessen, worauf das Telefon gestellt ist – so gilt die Grenze, was die Tasten des Telefons auch sagen.",
171
+ "phones.limits.line": "Lautsprecher höchstens {speaker} %, Kopfhörer höchstens {headphones} %",
172
+ "common.address": "Adresse",
173
+ "common.album": "Album",
174
+ "common.back": "Zurück",
175
+ "common.cancel": "Abbrechen",
176
+ "common.close": "Schließen",
177
+ "common.create": "Anlegen",
178
+ "common.default_volume": "Startwert",
179
+ "common.delete": "Löschen",
180
+ "common.download": "Herunterladen",
181
+ "common.image": "Bild",
182
+ "common.louder": "Lauter",
183
+ "common.max_volume": "Maximum",
184
+ "common.name": "Name",
185
+ "common.name_changed": "Name geändert.",
186
+ "common.never": "noch nie",
187
+ "common.next": "Weiter",
188
+ "common.no": "nein",
189
+ "common.no_tag": "kein Tag",
190
+ "common.not_linked": "nicht verknüpft",
191
+ "common.pause": "Pause",
192
+ "common.percent": "{n} %",
193
+ "common.play": "Play",
194
+ "common.present": "liegt auf",
195
+ "common.progress": "Fortschritt",
196
+ "common.quieter": "Leiser",
197
+ "common.remove": "Entfernen",
198
+ "common.resume": "Weiterspielen",
199
+ "common.save": "Speichern",
200
+ "common.saved": "Gespeichert.",
201
+ "common.size_unknown": "Größe unbekannt",
202
+ "common.state": "Zustand",
203
+ "common.target": "Album / Sender",
204
+ "common.title": "Titel",
205
+ "common.track": "Titel",
206
+ "common.uid": "UID",
207
+ "common.unlink": "Verknüpfung lösen",
208
+ "common.unnamed": "ohne Namen",
209
+ "common.version": "Version",
210
+ "common.volume": "Lautstärke",
211
+ "common.yes": "ja",
212
+ "cover.change": "Titelbild ändern",
213
+ "cover.saved": "Titelbild gespeichert.",
214
+ "cover.send_failed": "Das Titelbild konnte nicht gesendet werden.",
215
+ "duration.hours": "{h} h {m} min",
216
+ "duration.minutes": "{n} min",
217
+ "duration.seconds": "{n} s",
218
+ "error.album.add_failed": "Das Album wurde nicht hinzugefügt: {reason}",
219
+ "error.album.folder_known": "Der Ordner „{folder}“ ist schon ein Album.",
220
+ "error.album.folder_missing": "Der Ordner des Albums fehlt: {folder}",
221
+ "error.album.folder_relative": "Der Ordner muss im Album-Verzeichnis liegen.",
222
+ "error.album.folder_required": "Bitte den Ordner angeben.",
223
+ "error.album.linked": "Das Album ist mit Tags verknüpft – erst die Verknüpfung lösen.",
224
+ "error.album.no_mp3": "Im Ordner des Albums sind keine MP3-Dateien.",
225
+ "error.album.playing": "Das Album spielt gerade.",
226
+ "error.album.title_required": "Bitte den Titel angeben.",
227
+ "error.album.unknown": "Das Album gibt es nicht mehr.",
228
+ "error.backup.busy": "Gerade wird schon ein Backup erstellt.",
229
+ "error.backup.busy_folder": "Gerade wird ein Backup erstellt: Der Ordner lässt sich jetzt nicht ändern.",
230
+ "error.backup.folder_absolute": "Der Ordner braucht einen vollständigen Pfad, z. B. /volume1/tinyjukebox/backups.",
231
+ "error.backup.folder_create": "Der Ordner {folder} lässt sich nicht anlegen.",
232
+ "error.backup.folder_write": "In den Ordner {folder} lässt sich nicht schreiben.",
233
+ "error.backup.library": "Diese Box arbeitet mit einer Bibliothek, die die Backups macht.",
234
+ "error.backup.unknown": "Dieses Backup gibt es nicht mehr.",
235
+ "error.bluetooth.not_paired": "Es ist kein Kopfhörer gekoppelt.",
236
+ "error.bluetooth.searching": "Die Suche läuft schon.",
237
+ "error.bootstrap.too_short": "Das Bootstrap-Passwort braucht mindestens 16 Zeichen.",
238
+ "error.boxes.takeover_self": "Eine Box kann sich nicht selbst übernehmen.",
239
+ "error.boxes.volume_invalid": "Ein Telefon spielt mit höchstens 0 bis 100 %.",
240
+ "error.boxes.volume_not_a_phone": "Nur ein Telefon bekommt seine Lautstärke-Grenzen hier; eine Box setzt sie auf ihrer eigenen Seite.",
241
+ "error.pairing.url": "Die Adresse der Bibliothek muss mit https:// beginnen.",
242
+ "error.box.name_needs_library": "Einen Namen bekommt die Box, sobald sie mit einer Bibliothek arbeitet.",
243
+ "error.box.not_linked": "Diese Box ist mit keiner Bibliothek verbunden.",
244
+ "error.image.too_large": "Das Bild ist zu groß.",
245
+ "error.image.type": "Nur Bilder als JPEG, PNG oder WebP.",
246
+ "error.library.address_https": "Die Adresse der Bibliothek beginnt mit https://.",
247
+ "error.name.empty": "Der Name darf nicht leer sein.",
248
+ "error.password.too_short": "Das Passwort braucht mindestens {min} Zeichen.",
249
+ "error.player.no_album": "Es spielt kein Album.",
250
+ "error.radio.invalid": "Name oder Adresse des Senders gehen so nicht – die Adresse beginnt mit http:// oder https://.",
251
+ "error.radio.linked": "Der Sender ist mit Tags verknüpft – erst die Verknüpfung lösen.",
252
+ "error.radio.playing": "Der Sender spielt gerade.",
253
+ "error.radio.test_impossible": "Der Test geht gerade nicht – nur solange kein Tag aufliegt.",
254
+ "error.radio.unknown": "Den Sender gibt es nicht mehr.",
255
+ "error.releases.keep_invalid": "Die Anzahl der Versionen muss mindestens 1 sein.",
256
+ "error.releases.no_repository": "In der Konfiguration steht kein Repository mit Releases.",
257
+ "error.releases.token_empty": "Das Token darf nicht leer sein.",
258
+ "error.releases.token_missing": "Das Token für die Releases fehlt: Es wird hier im Tab „Versionen“ gespeichert.",
259
+ "error.releases.token_refused": "Das Token wurde nicht übernommen: {reason}",
260
+ "error.restore.busy": "Es wird schon ein Backup zurückgespielt.",
261
+ "error.restore.format": "Dieses Backup stammt von einer neueren Version ({version}), die diese nicht lesen kann.",
262
+ "error.restore.full": "Der Speicher ist voll: Das Backup wird nicht zurückgespielt.",
263
+ "error.restore.incomplete": "Das ist kein Backup, oder es ist abgeschnitten: {reason}",
264
+ "error.restore.kind": "Das ist ein Backup einer anderen Art ({kind}).",
265
+ "error.restore.nothing": "Es wartet kein Backup darauf, zurückgespielt zu werden.",
266
+ "error.restore.space": "Für einen Moment brauchen die Alben doppelt Platz: Es fehlen {missing} Bytes.",
267
+ "error.scan.invalid_uid": "Diese UID kann kein Tag sein.",
268
+ "error.spotify.cannot_run": "Der Player von Spotify startet auf dieser Box nicht.",
269
+ "error.spotify.connecting": "Die Box wartet darauf, in der Spotify-App ausgewählt zu werden.",
270
+ "error.spotify.expired": "Der Player von Spotify ist abgelaufen – „Jetzt aktualisieren“.",
271
+ "error.spotify.fetching": "Der Player wird gerade geholt.",
272
+ "error.spotify.invalid": "Name oder Link des Eintrags gehen so nicht.",
273
+ "error.spotify.key": "Der Key darf nicht leer sein und hat keine Leerzeichen.",
274
+ "error.spotify.link": "Das ist kein Link von Spotify – in der Spotify-App unter „Teilen“ → „Link kopieren“ kopieren.",
275
+ "error.spotify.linked": "Der Eintrag ist mit Tags verknüpft – erst die Verknüpfung lösen.",
276
+ "error.spotify.no_key": "Zuerst den Key von Spotify eintragen.",
277
+ "error.spotify.no_player": "Der Player von Spotify ist noch nicht geholt.",
278
+ "error.spotify.playing": "Der Eintrag spielt gerade.",
279
+ "error.spotify.unknown": "Den Spotify-Eintrag gibt es nicht mehr.",
280
+ "error.spotify.client_invalid": "Die Client ID von Spotify hat 32 Zeichen, 0–9 und a–f.",
281
+ "error.status": "Fehler {status}",
282
+ "error.tag.exists": "Den Tag {uid} gibt es schon.",
283
+ "error.tag.invalid_uid": "Diese UID geht nicht: nur Buchstaben, Ziffern und : . - _",
284
+ "error.tag.none_present": "Es liegt kein Tag auf der Box.",
285
+ "error.tag.unknown": "Den Tag {uid} gibt es nicht mehr.",
286
+ "error.upload.add_failed": "Das Album wurde nicht angelegt: {reason}",
287
+ "error.upload.empty": "Es ist noch keine Datei hochgeladen.",
288
+ "error.upload.file_too_large": "„{filename}“ ist größer als {limit} MB.",
289
+ "error.upload.folder_exists": "Den Ordner „{folder}“ gibt es schon.",
290
+ "error.upload.in_progress": "Für „{folder}“ läuft schon ein Upload.",
291
+ "error.upload.incomplete": "„{filename}“ ist nicht vollständig angekommen.",
292
+ "error.upload.name_invalid": "Dieser Titel geht als Name eines Ordners nicht.",
293
+ "error.upload.name_too_long": "Der Titel ist zu lang.",
294
+ "error.upload.no_space": "Zu wenig Platz auf der Box ({free} MB frei).",
295
+ "error.upload.not_mp3": "„{filename}“ ist keine gültige MP3-Datei.",
296
+ "error.upload.only_mp3": "Nur MP3-Dateien: „{filename}“ ist keine.",
297
+ "error.upload.reserved": "„{filename}“ ist der Name der Playlist.",
298
+ "error.upload.too_many": "Ein Album hat höchstens {limit} Dateien.",
299
+ "error.upload.unknown": "Diesen Upload gibt es nicht mehr.",
300
+ "error.user.exists": "Den Benutzer „{name}“ gibt es schon.",
301
+ "error.user.invalid_name": "Dieser Benutzername geht nicht.",
302
+ "error.user.self": "Der eigene Benutzer lässt sich nicht löschen.",
303
+ "error.user.unknown": "Den Benutzer „{name}“ gibt es nicht mehr.",
304
+ "hardware.ago.hours": "vor {n} h",
305
+ "hardware.ago.minutes": "vor {n} min",
306
+ "hardware.ago.seconds": "vor {n} s",
307
+ "hardware.button.next": "Weiter",
308
+ "hardware.button.prev": "Zurück",
309
+ "hardware.button.volume-down": "Leiser",
310
+ "hardware.button.volume-up": "Lauter",
311
+ "hardware.buttons": "Tasten",
312
+ "hardware.column.button": "Taste",
313
+ "hardware.column.driver": "Treiber",
314
+ "hardware.column.last": "Letztes Ereignis",
315
+ "hardware.column.level": "Pegel",
316
+ "hardware.column.pin": "GPIO",
317
+ "hardware.column.presses": "Gedrückt seit dem Start",
318
+ "hardware.driver.running": "läuft",
319
+ "hardware.driver.stopped": "gestoppt",
320
+ "hardware.event.held": "gehalten",
321
+ "hardware.event.pressed": "gedrückt",
322
+ "hardware.event.released": "losgelassen",
323
+ "hardware.event_at": "{event} um {time} ({ago})",
324
+ "hardware.event_none": "noch keines",
325
+ "hardware.help": "Was die Treiber der Box gerade melden, zweimal pro Sekunde neu gelesen. Der Pegel ist der Zustand des GPIO-Pins in diesem Moment, das letzte Ereignis ist das, was der Treiber zuletzt an die Box gemeldet hat: Eine Taste, deren Pegel sich beim Drücken nicht ändert, kommt am Pin nicht an.",
326
+ "hardware.led": "LED",
327
+ "hardware.led.lit": "Leuchtet gerade",
328
+ "hardware.led.off": "aus",
329
+ "hardware.led.pattern": "Muster",
330
+ "hardware.led.step": "{color} für {seconds} s",
331
+ "hardware.level.open": "offen",
332
+ "hardware.level.pressed": "gedrückt",
333
+ "hardware.level.unknown": "nicht lesbar",
334
+ "hardware.light.blue": "Blau",
335
+ "hardware.light.green": "Grün",
336
+ "hardware.light.red": "Rot",
337
+ "hardware.none": "Diese Box läuft ohne Gerätetreiber – es gibt keine Hardware, deren Zustand sich zeigen ließe.",
338
+ "hardware.pin": "{name}: GPIO {pin}",
339
+ "hardware.pins": "GPIOs",
340
+ "hardware.reader": "RFID-Leser",
341
+ "hardware.reader.changed": "Letzte Änderung",
342
+ "hardware.reader.error": "Fehler",
343
+ "hardware.reader.no_tag": "keiner aufgelegt",
344
+ "hardware.reader.not_running": "läuft nicht",
345
+ "hardware.reader.program": "Programm rfid-reader",
346
+ "hardware.reader.tag": "Tag",
347
+ "hardware.time": "{time} ({ago})",
348
+ "hardware.title": "Hardware",
349
+ "help.button": "Hilfe",
350
+ "help.title": "Die Hilfe zum offenen Tab: Handbuch und Verwaltung",
351
+ "help.quick_guide": "Kurzanleitung",
352
+ "help.hint": "Neu hier? Die Kurzanleitung zeigt die Box und diese Seite in zwei Minuten; „Hilfe“ oben öffnet das Handbuch beim gerade offenen Tab.",
353
+ "help.hint.never": "Nicht mehr anzeigen",
354
+ "headset.connected": "Kopfhörer verbunden",
355
+ "language.label": "Sprache",
356
+ "led.color.aqua": "türkis",
357
+ "led.color.black": "aus",
358
+ "led.color.blue": "blau",
359
+ "led.color.green": "grün",
360
+ "led.color.magenta": "magenta",
361
+ "led.color.red": "rot",
362
+ "led.color.white": "weiß",
363
+ "led.color.yellow": "gelb",
364
+ "led.label": "LED der Box",
365
+ "led.title": "LED: {colors}",
366
+ "library.address": "Adresse der Bibliothek",
367
+ "library.address.placeholder": "https://nas:8866",
368
+ "library.address.saved": "Adresse der Bibliothek gespeichert.",
369
+ "library.alone.answered": "die Bibliothek antwortet mit einem Fehler",
370
+ "library.alone.certificate": "die Bibliothek zeigt ein anderes Zertifikat",
371
+ "library.alone.unreachable": "keine Verbindung",
372
+ "library.bootstrap": "Bootstrap-Passwort",
373
+ "library.bootstrap.placeholder": "Bootstrap-Passwort (nur beim ersten Mal)",
374
+ "library.connection": "Verbindung",
375
+ "library.help": "Die Bibliothek hält Tags, Alben und Sender für alle Boxen. Diese Box holt, was ihr fehlt, und spielt auch ohne sie, was sie schon hat.",
376
+ "library.none": "keine – diese Box arbeitet für sich allein",
377
+ "library.outbox": {
378
+ "one": "{n} Änderung",
379
+ "other": "{n} Änderungen"
380
+ },
381
+ "library.outbox_unsettled": {
382
+ "one": "{n} Änderung, davon {unsettled} neu angelegt",
383
+ "other": "{n} Änderungen, davon {unsettled} neu angelegt"
384
+ },
385
+ "library.state.blocked": "Die Bibliothek ist zu alt für diese Box – die Box spielt nichts, bis das behoben ist.",
386
+ "library.state.connected": "verbunden",
387
+ "library.state.next_start": "ab dem nächsten Start der Box",
388
+ "library.state.unreachable": "nicht erreichbar – die Box arbeitet ohne sie ({reason})",
389
+ "library.this_box": "Diese Box",
390
+ "library.title": "Bibliothek",
391
+ "library.unlink": "Verbindung zur Bibliothek lösen",
392
+ "library.unlink.absent": {
393
+ "one": "{n} Album liegt nicht vollständig auf der SD-Karte und lässt sich danach nicht mehr holen.",
394
+ "other": "{n} Alben liegen nicht vollständig auf der SD-Karte und lassen sich danach nicht mehr holen."
395
+ },
396
+ "library.unlink.changes": {
397
+ "one": "{n} Änderung hat die Bibliothek noch nicht übernommen. Sie bleibt auf der Box und kommt in der Bibliothek nicht mehr an.",
398
+ "other": "{n} Änderungen hat die Bibliothek noch nicht übernommen. Sie bleiben auf der Box und kommen in der Bibliothek nicht mehr an."
399
+ },
400
+ "library.unlink.confirm": "Die Verbindung zur Bibliothek lösen? Die Box behält alles, was auf ihrer SD-Karte liegt, und arbeitet danach für sich allein. Die Bibliothek wird dabei nicht gefragt.",
401
+ "library.unlink.wait": "„Abbrechen“, wenn die Box das erst noch abliefern oder holen soll.",
402
+ "library.unlinked": "Die Box arbeitet jetzt für sich allein.",
403
+ "library.unsettled": "Noch nicht bestätigt",
404
+ "limits.default": "Startwert %",
405
+ "limits.default_over_max": "{output}: Der Startwert darf nicht über dem Maximum liegen.",
406
+ "limits.help": "Der Startwert gilt beim Start der Box bzw. bei jedem Verbinden des Kopfhörers. Das Maximum gilt sofort – auch für die Tasten am Kopfhörer.",
407
+ "limits.max": "Maximum %",
408
+ "limits.saved": "Lautstärke-Grenzen gespeichert.",
409
+ "limits.title": "Lautstärke: Startwert und Maximum",
410
+ "log.cannot_start": "startet nicht",
411
+ "log.code": "Code",
412
+ "log.code.all": "alle Codes",
413
+ "log.component": "Teil",
414
+ "log.component.all": "alle Teile",
415
+ "log.copied": {
416
+ "one": "{n} Eintrag kopiert.",
417
+ "other": "{n} Einträge kopiert."
418
+ },
419
+ "log.copy": "Kopieren",
420
+ "log.export": "Als Datei speichern",
421
+ "log.export_failed": "Die Einträge konnten nicht geholt werden.",
422
+ "log.filter": "Filter",
423
+ "log.level": "Level",
424
+ "log.level.debug": "Debug",
425
+ "log.level.error": "Fehler",
426
+ "log.level.info": "Info",
427
+ "log.level.warning": "Warnung",
428
+ "log.live": "live",
429
+ "log.none": "Keine Einträge.",
430
+ "log.recovery": "Notfall-Modus: {problem}",
431
+ "log.since": "seit",
432
+ "log.source": "Wessen Log",
433
+ "log.source.library": "Diese Bibliothek",
434
+ "log.startup": {
435
+ "one": "Die Box startet seit {since} nicht: {n} gescheiterter Start, Version {version} in Slot {slot}.",
436
+ "other": "Die Box startet seit {since} nicht: {n} gescheiterte Starts, Version {version} in Slot {slot}."
437
+ },
438
+ "log.traceback": "Traceback",
439
+ "log.version.all": "alle Versionen",
440
+ "login.error.too_many": "Zu viele Fehlversuche – bitte später erneut versuchen.",
441
+ "login.error.wrong": "Benutzer oder Passwort falsch.",
442
+ "login.idle": "Du wurdest abgemeldet: Auf dieser Seite wurde {minutes} min lang nichts bedient.",
443
+ "login.password": "Passwort",
444
+ "login.place.box": "Box",
445
+ "login.place.box_named": "Box „{name}“",
446
+ "login.place.library": "Bibliothek",
447
+ "login.submit": "Anmelden",
448
+ "login.user": "Benutzer",
449
+ "logout": "Abmelden",
450
+ "now.connection_lost": "Verbindung verloren",
451
+ "now.link.submit": "Verknüpfen & abspielen",
452
+ "now.link.text": "Tag {uid} ist mit keinem Album und keinem Radiosender verknüpft.",
453
+ "now.link.title": "Unbekannter Tag aufgelegt",
454
+ "now.linked.album": "Tag verknüpft – Album startet.",
455
+ "now.linked.radio": "Tag verknüpft – Sender startet.",
456
+ "now.linked.spotify": "Tag verknüpft – Spotify-Eintrag startet.",
457
+ "now.louder.title": "Lauter (Taste)",
458
+ "now.next.title": "Weiter (Taste)",
459
+ "now.prev.title": "Zurück (Taste)",
460
+ "now.quieter.title": "Leiser (Taste)",
461
+ "now.radio.active": "Radio aktiv",
462
+ "now.radio.test": "Radio-Test",
463
+ "now.restart": "Album von vorn",
464
+ "now.spotify.active": "Spotify",
465
+ "now.spotify.speaker": "Spotify-Lautsprecher",
466
+ "now.spotify.test": "Spotify-Test",
467
+ "now.tag": "Tag: {name} ({uid})",
468
+ "now.tracks": "Titel",
469
+ "now.volume.change": "ändern",
470
+ "now.volume.info": "{output} · Startwert {default} % · Maximum {max} %",
471
+ "output.headphones": "Kopfhörer",
472
+ "output.speaker": "Lautsprecher",
473
+ "password.changed": "Passwort geändert.",
474
+ "password.current": "Aktuelles Passwort",
475
+ "password.help": "Mindestens 8 Zeichen. Auf allen anderen Geräten musst du dich danach neu anmelden.",
476
+ "password.mismatch": "Die beiden neuen Passwörter stimmen nicht überein.",
477
+ "password.new": "Neues Passwort",
478
+ "password.repeat": "Neues Passwort wiederholen",
479
+ "password.submit": "Ändern",
480
+ "password.title": "Eigenes Passwort ändern",
481
+ "password.wrong": "Das aktuelle Passwort ist falsch.",
482
+ "playback.delay": "Pause zwischen Titeln",
483
+ "playback.end": "gestoppt",
484
+ "playback.finished": "Album zu Ende",
485
+ "playback.first": "Album von vorn",
486
+ "playback.init": "startet",
487
+ "playback.paused": "pausiert",
488
+ "playback.play": "spielt",
489
+ "playback.prev": "zurück",
490
+ "playback.resume": "pausiert",
491
+ "playback.rewind": "Titel von vorn",
492
+ "playback.tonext": "nächster Titel",
493
+ "playback.toprev": "vorheriger Titel",
494
+ "playback.wait": "wartet auf den Titel aus der Bibliothek",
495
+ "progress.column.finished": "Fertig",
496
+ "progress.column.position": "Position",
497
+ "progress.column.tag": "Tag",
498
+ "progress.finished": "fertig",
499
+ "progress.title": "Fortschritt je Tag",
500
+ "progress.track": "Titel {n}, {time}",
501
+ "radio.column.url": "Stream-URL",
502
+ "radio.created": "Sender „{name}“ angelegt.",
503
+ "radio.help": "Ein Tag, der mit einem Sender verknüpft ist, spielt den Sender, solange er auf der Box liegt. Die Tasten „Weiter“ und „Zurück“ haben beim Radio keine Wirkung.",
504
+ "radio.new.help": "Adresse des Streams oder einer Playlist (<code>.m3u</code>, <code>.pls</code>, <code>.m3u8</code>), beginnend mit <code>http://</code> oder <code>https://</code>. „Testen“ spielt die eingegebene Adresse eine Minute lang – nur solange kein Tag aufliegt.",
505
+ "radio.new.name": "Name, z. B. FM4",
506
+ "radio.new.title": "Neuen Sender anlegen",
507
+ "radio.new.url": "https://…",
508
+ "radio.none": "Keine Radiosender.",
509
+ "radio.remove.confirm": "Sender „{name}“ löschen?",
510
+ "radio.remove.linked": "„{name}“ ist mit {tags} verknüpft – erst die Verknüpfung lösen (✕).",
511
+ "radio.removed": "Sender gelöscht.",
512
+ "radio.saved": "Sender gespeichert.",
513
+ "radio.state.connecting": "verbindet",
514
+ "radio.state.paused": "pausiert",
515
+ "radio.state.playing": "spielt",
516
+ "radio.state.retrying": "Verbindung unterbrochen – neuer Versuch",
517
+ "radio.state.stopped": "gestoppt",
518
+ "radio.test": "Testen",
519
+ "radio.test.state": "Test: {station} – {state}",
520
+ "radio.test.state_error": "Test: {station} – {state} ({error})",
521
+ "radio.test.stop": "Stop",
522
+ "radio.title": "Radiosender",
523
+ "releases.access.title": "Zugang zu den Releases",
524
+ "releases.check": "Jetzt nach einer neuen Version suchen",
525
+ "releases.checked": {
526
+ "one": "Zuletzt gesucht: {date}, nächste Suche in {n} Minute.",
527
+ "other": "Zuletzt gesucht: {date}, nächste Suche in {n} Minuten."
528
+ },
529
+ "releases.column.prepared_on": "Vorbereitet auf",
530
+ "releases.column.runs_on": "Läuft auf",
531
+ "releases.column.set": "Gesetzt",
532
+ "releases.found": "Version {version} gefunden.",
533
+ "releases.help": "<b>use</b>: Boxen installieren die Version von selbst. <b>manual</b>: nur von Hand. <b>dontuse</b>: jede Box, auf der sie läuft, verlässt sie sofort. <b>Läuft auf</b> nennt auch die Bibliothek selbst. <b>Vorbereitet auf</b>: Die Box hat die Version geholt und probiert sie aus, sobald sie das nächste Mal eingeschaltet wird.",
534
+ "releases.hidden": {
535
+ "one": "{n} Version ausgeblendet",
536
+ "other": "{n} Versionen ausgeblendet"
537
+ },
538
+ "releases.hide_old": "alte Versionen ausblenden, die nicht im Archiv sind",
539
+ "releases.keep.help": "Ältere Versionen verlassen das Archiv, zuerst die im Zustand dontuse. Immer bleibt, was auf einer Box läuft oder in einem ihrer Slots liegt, die Version der Bibliothek selbst und die neueste im Zustand use. Eine Version, die nicht mehr im Archiv liegt, holt die Bibliothek wieder aus den Releases, wenn eine Box sie braucht.",
540
+ "releases.keep.label": "Höchstens {versions} Versionen im Archiv behalten",
541
+ "releases.library": "Die Bibliothek spricht die Schnittstelle {interface}.",
542
+ "releases.needs_newer_library": "braucht eine neuere Bibliothek",
543
+ "releases.never_checked": "Es wurde noch nicht nach Versionen gesucht.",
544
+ "releases.no_repository": "In der Konfiguration der Bibliothek steht kein Repository: sie sucht nicht nach neuen Versionen.",
545
+ "releases.none": "Noch keine Version im Archiv.",
546
+ "releases.not_archived": "nicht im Archiv",
547
+ "releases.nothing_new": "Keine neue Version.",
548
+ "releases.repository": "Neue Versionen kommen aus den Releases von {repository}.",
549
+ "releases.set.done": "Zustand gesetzt.",
550
+ "releases.set.prompt": "Version {version} auf „{state}“ setzen – warum?",
551
+ "releases.title": "Versionen der Box-Software",
552
+ "releases.token.placeholder": "Token, das die Releases lesen darf",
553
+ "releases.token.submit": "Token speichern",
554
+ "releases.token_saved": "Token gespeichert.",
555
+ "releases.token_state.file": "Das Token dafür kommt aus der Datei, die in der Konfiguration steht; ein hier gespeichertes ersetzt es.",
556
+ "releases.token_state.missing": "Das Token dafür fehlt noch: bis es hier gespeichert ist, sucht die Bibliothek nicht.",
557
+ "releases.token_state.none": "Die Bibliothek fragt ohne Token.",
558
+ "releases.token_state.page": "Das Token dafür ist hier gespeichert.",
559
+ "restore.choose": "Backup wählen …",
560
+ "restore.confirm": "Das ersetzt alle Daten durch die vom {when}.",
561
+ "restore.confirm.albums": "Mit MP3s: Alle Alben werden gelöscht und ersetzt.",
562
+ "restore.confirm.backup": "Vorher wird kein Backup erstellt. Wenn die Daten von jetzt noch gebraucht werden könnten: abbrechen und zuerst ein Backup herunterladen.",
563
+ "restore.confirm.library": "Diese Box arbeitet mit einer Bibliothek: Bei der nächsten Synchronisierung bekommt sie wieder den Stand der Bibliothek.",
564
+ "restore.discard": "Verwerfen",
565
+ "restore.discarded": "Das Backup wird nicht zurückgespielt.",
566
+ "restore.help": "Ersetzt die Daten durch die eines Backups – mit MP3s auch die Alben. Benutzer, Passwörter, Schlüssel und die Ordner der Backups bleiben, wie sie sind. Danach startet alles neu.",
567
+ "restore.put_back": "Zurückspielen",
568
+ "restore.send_failed": "Das Backup ließ sich nicht senden.",
569
+ "restore.state.failed": "Das Backup wurde nicht zurückgespielt: {message}",
570
+ "restore.state.last": "Zuletzt zurückgespielt am {when}: das Backup vom {created}.",
571
+ "restore.state.missing": {
572
+ "one": "{n} Album steht in den Daten, sein Ordner fehlt aber: {albums}.",
573
+ "other": "{n} Alben stehen in den Daten, ihre Ordner fehlen aber: {albums}."
574
+ },
575
+ "restore.state.restarting": "Die Daten werden ersetzt, und alles startet neu – die Seite lädt gleich neu.",
576
+ "restore.state.staged": "Das Backup vom {when} ist entpackt und wartet darauf, zurückgespielt zu werden.",
577
+ "restore.state.staging": "Das Backup wird gelesen und entpackt …",
578
+ "restore.state.uploading": "Das Backup wird gesendet und entpackt ({size}) …",
579
+ "restore.title": "Backup zurückspielen",
580
+ "role.admin": "admin",
581
+ "role.user": "user",
582
+ "scan.error.NotReadableError": "NFC ist ausgeschaltet – schalte es in den Einstellungen des Telefons ein.",
583
+ "scan.error.NotSupportedError": "Dieses Telefon kann keine Tags lesen (kein NFC).",
584
+ "scan.failed": "NFC: {message}",
585
+ "scan.help": "Halte einen Tag an die Rückseite des Telefons. Ein neuer Tag wird der Bibliothek hinzugefügt.",
586
+ "scan.new": "neu",
587
+ "scan.obstacle.browser": "Dieser Browser kann keine Tags lesen – öffne die Seite in Chrome.",
588
+ "scan.obstacle.chrome": "Chrome {version} bietet dieser Seite kein NFC an.",
589
+ "scan.obstacle.https": "Chrome liest Tags nur auf einer Seite mit HTTPS.",
590
+ "scan.obstacle.ios": "Ein iPhone oder iPad kann keine Tags lesen – nur ein Android-Telefon mit Chrome.",
591
+ "scan.refused.blocked": "Chrome erlaubt dieser Seite kein NFC. So erlaubst du es: links neben der Adresse auf das Symbol tippen, dann „Berechtigungen“ und „NFC-Geräte“. Fehlt der Eintrag dort: Chrome-Menü, „Einstellungen“, „Website-Einstellungen“, „NFC-Geräte“ – der Schalter muss an sein, und diese Seite darf nicht unter „Blockiert“ stehen.",
592
+ "scan.refused.closed": "Chrome hat gefragt, ob diese Seite NFC verwenden darf, und keine Erlaubnis bekommen. Tippe noch einmal auf „Tag scannen“ und dann auf „Zulassen“.",
593
+ "scan.start": "Tag scannen",
594
+ "scan.stop": "Scannen beenden",
595
+ "scan.unreadable": "Diesen Tag kann das Telefon nicht lesen.",
596
+ "slot.installed": "installiert",
597
+ "slot.name.a": "A",
598
+ "slot.name.b": "B",
599
+ "slot.name.fallback": "Notfall",
600
+ "slot.name.next": "ab dem nächsten Start",
601
+ "slot.since": {
602
+ "one": "{state} seit {since}, {n} Start",
603
+ "other": "{state} seit {since}, {n} Starts"
604
+ },
605
+ "slot.state.abandoned": "verlassen",
606
+ "slot.state.confirmed": "bewährt",
607
+ "slot.state.probation": "wird ausprobiert",
608
+ "spotify.account.choose": "Jetzt die Box in der Spotify-App auswählen.",
609
+ "spotify.account.connect": "Verbinden",
610
+ "spotify.account.disconnect": "Trennen",
611
+ "spotify.account.disconnect.confirm": "Das Spotify-Konto von dieser Box entfernen?",
612
+ "spotify.account.help": "Den Key gibt es auf developer.spotify.com (Dashboard → „Spotify Soloist API Key“, angemeldet mit einem Premium-Konto). Damit holt die Box den Player von Spotify. Nach „Verbinden“ diese Box innerhalb von fünf Minuten in der Spotify-App eines Handys im selben WLAN auswählen – angemeldet mit dem Spotify-Konto der Box. Key und Anmeldung bleiben auf dieser Box.",
613
+ "spotify.account.key": "Soloist API Key",
614
+ "spotify.account.key_missing": "Noch kein Key.",
615
+ "spotify.account.key_present": "Key eingetragen.",
616
+ "spotify.account.key_save": "Key speichern",
617
+ "spotify.account.key_saved": "Key gespeichert – die Box holt den Player.",
618
+ "spotify.account.result.failed": "Verbinden hat nicht geklappt.",
619
+ "spotify.account.result.stopped": "Verbinden wurde unterbrochen.",
620
+ "spotify.account.result.timeout": "Niemand hat die Box rechtzeitig ausgewählt – nochmal versuchen.",
621
+ "spotify.account.speaker": "Spotify-Lautsprecher, solange kein Tag aufliegt",
622
+ "spotify.account.state.connected": "Verbunden seit {since}.",
623
+ "spotify.account.state.connecting": "Wartet darauf, in der Spotify-App ausgewählt zu werden …",
624
+ "spotify.account.state.none": "Mit keinem Konto verbunden.",
625
+ "spotify.account.title": "Konto",
626
+ "spotify.column.kind": "Art",
627
+ "spotify.column.link": "Link",
628
+ "spotify.created": "Eintrag „{name}“ angelegt.",
629
+ "spotify.error.cannot_run": "der Player von Spotify startet nicht",
630
+ "spotify.error.expired": "der Player von Spotify ist abgelaufen",
631
+ "spotify.error.no_key": "der Key von Spotify fehlt (Tab Spotify, Konto)",
632
+ "spotify.error.no_player": "der Player von Spotify ist noch nicht geholt",
633
+ "spotify.error.not_connected": "die Box ist nicht mit Spotify verbunden (Tab Spotify, Konto)",
634
+ "spotify.error.unexpected": "ein Fehler in der Box",
635
+ "spotify.help": "Ein Tag, der mit einem Spotify-Eintrag verknüpft ist, spielt ihn wie ein Album: Er setzt fort, wo er aufgehört hat, „Weiter“ und „Zurück“ wirken. Dafür braucht es Internet und ein Spotify-Konto, das mit der Box verbunden ist.",
636
+ "spotify.kind.album": "Album",
637
+ "spotify.kind.artist": "Künstler",
638
+ "spotify.kind.audiobook": "Hörbuch",
639
+ "spotify.kind.episode": "Folge",
640
+ "spotify.kind.playlist": "Playlist",
641
+ "spotify.kind.show": "Podcast",
642
+ "spotify.kind.track": "Titel",
643
+ "spotify.new.help": "Den Link einfügen, den die Spotify-App unter „Teilen“ → „Link kopieren“ gibt. Name und Cover kommen von Spotify; den Namen kann man vor dem Speichern ändern. Einen Podcast benennt man selbst.",
644
+ "spotify.new.link": "https://open.spotify.com/…",
645
+ "spotify.new.name": "Name",
646
+ "spotify.new.title": "Neuen Eintrag anlegen",
647
+ "spotify.none": "Keine Spotify-Einträge.",
648
+ "spotify.player.asked": "Zuletzt bei Spotify gefragt am {time}: {result}",
649
+ "spotify.player.built": "Build vom {built}, läuft bis {last_day}; ab {renew_from} sucht die Box einen neuen.",
650
+ "spotify.player.missing": "Fehlt auf der Box: {packages} – der Installer der Box installiert es, wenn er noch einmal läuft.",
651
+ "spotify.player.never": "Noch nicht bei Spotify gefragt.",
652
+ "spotify.player.result.broken": "ein neuer Build, der nicht startet – die Box behält ihren",
653
+ "spotify.player.result.failed": "keine Antwort",
654
+ "spotify.player.result.new": "ein neuer Build",
655
+ "spotify.player.result.unchanged": "nichts Neues",
656
+ "spotify.player.state.cannot_run": "Startet nicht.",
657
+ "spotify.player.state.expired": "Abgelaufen.",
658
+ "spotify.player.state.fetching": "Wird geholt …",
659
+ "spotify.player.state.none": "Noch nicht geholt.",
660
+ "spotify.player.state.ready": "Bereit.",
661
+ "spotify.player.title": "Player",
662
+ "spotify.player.update": "Jetzt aktualisieren",
663
+ "spotify.player.updating": "Frage bei Spotify …",
664
+ "spotify.remove.confirm": "Eintrag „{name}“ löschen?",
665
+ "spotify.remove.linked": "„{name}“ ist mit {tags} verknüpft – erst die Verknüpfung lösen (✕).",
666
+ "spotify.removed": "Eintrag gelöscht.",
667
+ "spotify.saved": "Eintrag gespeichert.",
668
+ "spotify.state.connecting": "verbindet",
669
+ "spotify.state.elsewhere": "spielt auf einem anderen Gerät – „Play“ holt es zurück",
670
+ "spotify.state.error": "kann nicht spielen",
671
+ "spotify.state.finished": "zu Ende",
672
+ "spotify.state.paused": "pausiert",
673
+ "spotify.state.playing": "spielt",
674
+ "spotify.state.retrying": "Verbindung unterbrochen – versucht es erneut",
675
+ "spotify.state.stopped": "gestoppt",
676
+ "spotify.test.state": "Test: {name} – {state}",
677
+ "spotify.title": "Spotify",
678
+ "spotify.app.title": "Die App auf Telefonen",
679
+ "spotify.app.help": "Ein Tag von Spotify spielt auf einem Telefon in dessen Spotify-App, wenn die App von Tiny Jukebox bei Spotify registriert ist: Auf developer.spotify.com eine App anlegen mit der API „Android“, der Redirect URI tinyjukebox://spotify und dem Paketnamen und SHA-1, die die Einstellungen der App auf dem Telefon zeigen; unter „User Management“ die Spotify-Konten der Telefone eintragen (höchstens fünf). Dann hier ihre Client ID eintragen; die Telefone bekommen sie mit ihrer nächsten Synchronisation. Leer: Ein Tag von Spotify spielt nur auf einer Box.",
680
+ "spotify.app.client": "Client ID der App bei Spotify",
681
+ "state.blocked": "Box außer Betrieb – die Bibliothek ist zu alt für diese Box",
682
+ "state.broken_album": "Album defekt",
683
+ "state.check_tag": "Tag wird geprüft",
684
+ "state.end": "Beendet",
685
+ "state.fetch_album": "Album wird aus der Bibliothek geholt",
686
+ "state.idle_long": "Bereit – schon lange kein Tag aufgelegt",
687
+ "state.play_album": "Album aktiv",
688
+ "state.test_radio": "Radio-Test",
689
+ "state.spotify_speaker": "Die Spotify-App spielt auf der Box",
690
+ "state.unknown_album": "Album fehlt",
691
+ "state.unknown_tag": "Unbekannter Tag",
692
+ "state.wait_for_tag": "Bereit – kein Tag aufgelegt",
693
+ "statistics.box.all": "Alle Boxen",
694
+ "statistics.box.label": "Box",
695
+ "statistics.column.active": "Stunden Betrieb (aktiv)",
696
+ "statistics.column.box": "Box",
697
+ "statistics.column.boxes": "Boxen",
698
+ "statistics.column.day": "Tag",
699
+ "statistics.column.errors": "Fehler",
700
+ "statistics.column.fallbacks": "Rückfälle",
701
+ "statistics.column.finished": "Zu Ende gehört",
702
+ "statistics.column.hours": "Gehört zwischen",
703
+ "statistics.column.installed": "Tage installiert",
704
+ "statistics.column.last": "Zuletzt",
705
+ "statistics.column.placed": "Aufgelegt",
706
+ "statistics.column.running": "Stunden Betrieb (gesamt)",
707
+ "statistics.column.skipped": "Übersprungen",
708
+ "statistics.column.starts": "Starts",
709
+ "statistics.column.station": "Sender",
710
+ "statistics.column.tag": "Tag",
711
+ "statistics.column.time": "Hördauer",
712
+ "statistics.days.none": "Noch keine Tage.",
713
+ "statistics.days.title": "Tage",
714
+ "statistics.help.alone": "Was auf dieser Box gehört wurde. Ohne Bibliothek merkt sich die Box nur die letzten {limit} Einträge ihres Journals – so weit reicht die Statistik zurück.",
715
+ "statistics.help.box": "Was auf dieser Box gehört wurde. Gezählt wird in der Bibliothek: Was die Box ihr noch nicht geliefert hat, fehlt hier noch.",
716
+ "statistics.help.library": "Aus den Journalen der Boxen. Eine Box ohne WLAN liefert später nach – fehlende Tage heißen „noch nicht geliefert“, nicht „nichts gehört“.",
717
+ "statistics.hours": "{from}–{to} Uhr",
718
+ "statistics.missing.library_too_old": "Die Bibliothek ist älter als diese Box und gibt die Statistik einer einzelnen Box noch nicht heraus. Nach dem Update der Bibliothek steht sie hier.",
719
+ "statistics.missing.unreachable": "Was auf dieser Box gehört wurde, zählt die Bibliothek – und die ist gerade nicht erreichbar.",
720
+ "statistics.never.title": "Nie aufgelegt",
721
+ "statistics.none": "Noch nichts gehört.",
722
+ "statistics.on_box": "{box} {duration}",
723
+ "statistics.operation.help": "<b>Tage installiert</b>: so lange war die Version die einer Box, auch wenn die Box ausgeschaltet war. <b>Betrieb (gesamt)</b>: die Box war eingeschaltet. <b>Betrieb (aktiv)</b>: es wurde etwas gehört. Bei mehreren Boxen ist zusammengezählt. Versionen vor 0.23.0 haben nicht festgehalten, wie lange die Box eingeschaltet war: Bei ihnen zählt die Zeit bis zum letzten Ereignis eines Starts.",
724
+ "statistics.operation.title": "Betrieb",
725
+ "statistics.radio_skipped.title": "Radiosender und übersprungene Titel",
726
+ "statistics.skipped.none": "Kein Titel wurde übersprungen.",
727
+ "statistics.stations.none": "Kein Radio gehört.",
728
+ "statistics.time_unknown": "Uhrzeit unbekannt",
729
+ "statistics.title": "Was wurde gehört?",
730
+ "statistics.total": "Insgesamt: {duration}.",
731
+ "statistics.unknown_time": "Dazu {duration} ohne bekannte Uhrzeit: die Box hatte in dieser Zeit kein WLAN.",
732
+ "system.rebuild": "Fortschritte zurücksetzen",
733
+ "system.rebuild.confirm": "Alle Fortschritte zurücksetzen? Jedes Album beginnt danach wieder beim ersten Titel.",
734
+ "system.rebuild.done": "Fortschritte zurückgesetzt.",
735
+ "system.sanity": "Konsistenz prüfen",
736
+ "system.sanity.ok": "✔ Alles in Ordnung.",
737
+ "system.sanity.problems": "✘ Probleme gefunden:",
738
+ "system.tag": "Aufgelegter Tag",
739
+ "system.user": "Angemeldet als",
740
+ "tabs.albums": "Alben",
741
+ "tabs.bluetooth": "Bluetooth",
742
+ "tabs.boxes": "Boxen",
743
+ "tabs.log": "Log",
744
+ "tabs.now": "Jetzt",
745
+ "tabs.radio": "Radio",
746
+ "tabs.spotify": "Spotify",
747
+ "tabs.statistics": "Statistik",
748
+ "tabs.system": "System",
749
+ "tabs.tagman": "Tag-Verwaltung",
750
+ "tabs.tags": "Tags",
751
+ "tabs.upload": "Hochladen",
752
+ "tabs.versions": "Versionen",
753
+ "tagman.column.cover": "Titelbild",
754
+ "tagman.created": "Tag {uid} angelegt.",
755
+ "tagman.help": "Neue Tags erscheinen hier, sobald sie einmal auf die Box gelegt wurden.",
756
+ "tagman.link_saved": "Verknüpfung gespeichert.",
757
+ "tagman.name_saved": "Name gespeichert.",
758
+ "tagman.new.name": "Name, z. B. rote Katze",
759
+ "tagman.new.no_target": "— kein Album / Sender —",
760
+ "tagman.new.title": "Neuen Tag anlegen",
761
+ "tagman.new.uid": "UID (leer = zufällig)",
762
+ "tagman.none": "Keine Tags.",
763
+ "tagman.remove.confirm": "Tag „{name}“ entfernen?",
764
+ "tagman.remove.title": "Tag entfernen",
765
+ "tagman.removed": "Tag entfernt.",
766
+ "tagman.unlink.confirm": "Verknüpfung von Tag „{name}“ lösen?",
767
+ "tagman.unlinked": "Verknüpfung gelöst.",
768
+ "tagman.unlinked_only": "nur unverknüpfte",
769
+ "tags.filter.album": "Alben",
770
+ "tags.filter.all": "Alle",
771
+ "tags.filter.label": "Anzeigen",
772
+ "tags.filter.radio": "Radio",
773
+ "tags.filter.spotify": "Spotify",
774
+ "tags.help.box": "Ein Klick legt den Tag auf die Box, so als läge er auf dem Leser. Ein zweiter Klick nimmt ihn wieder ab.",
775
+ "tags.help.library": "Alle Tags der Bibliothek. Aufgelegt werden sie auf einer Box.",
776
+ "tags.none.box": "Keine Tags – lege unten eine UID auf oder lege unter Tag-Verwaltung einen an.",
777
+ "tags.none.filtered": "Keine Tags dieser Art.",
778
+ "tags.none.library": "Keine Tags – sie erscheinen hier, sobald eine Box sie kennt oder unter Tag-Verwaltung einer angelegt wurde.",
779
+ "tags.place": "Auflegen",
780
+ "tags.remove": "Tag abnehmen",
781
+ "tags.title.box": "Tag auflegen",
782
+ "tags.uid.placeholder": "beliebige UID auflegen, z. B. 136:4:99:1",
783
+ "tags.view.label": "Ansicht",
784
+ "tags.view.list": "Liste",
785
+ "tags.view.tiles": "Kacheln",
786
+ "target.album_missing": "Album {id} fehlt",
787
+ "target.album_without_tag": "{title} (ohne Tag)",
788
+ "target.choose": "— Album oder Sender wählen —",
789
+ "target.label": "Album oder Sender",
790
+ "target.missing_option": "fehlt ({id})",
791
+ "target.none": "— nicht verknüpft —",
792
+ "target.radio_missing": "Sender {id} fehlt",
793
+ "target.required": "Bitte ein Album oder einen Sender wählen.",
794
+ "target.spotify_missing": "Spotify-Eintrag {id} fehlt",
795
+ "title.library": "Tiny Jukebox Bibliothek",
796
+ "upload.abort.confirm": "Upload abbrechen und hochgeladene Dateien verwerfen?",
797
+ "upload.album_title": "Titel des Albums (der Ordner bekommt denselben Namen)",
798
+ "upload.album_title.placeholder": "z. B. Die drei ??? – Folge 1",
799
+ "upload.choose_files": "Dateien wählen",
800
+ "upload.choose_folder": "Ordner wählen",
801
+ "upload.connection_lost": "Verbindung abgebrochen",
802
+ "upload.cover": "Titelbild (JPEG, PNG oder WebP, kann auch später gewählt werden)",
803
+ "upload.created": "Album „{title}“ angelegt.",
804
+ "upload.created_linked": "Album „{title}“ angelegt und mit Tag verknüpft.",
805
+ "upload.drop": "<strong>MP3-Dateien hierher ziehen</strong> oder",
806
+ "upload.files": {
807
+ "one": "{n} Datei",
808
+ "other": "{n} Dateien"
809
+ },
810
+ "upload.finish": "Album anlegen",
811
+ "upload.help": "MP3-Dateien auswählen – die Playlist <code>playlist.m3u</code> wird automatisch erzeugt (Reihenfolge nach Titelnummer, sonst nach Dateiname). Die Reihenfolge kann vor dem Anlegen geändert werden.",
812
+ "upload.link_later": "— später verknüpfen —",
813
+ "upload.link_tag": "Mit Tag verknüpfen",
814
+ "upload.move_down": "nach unten",
815
+ "upload.move_up": "nach oben",
816
+ "upload.no_mp3": "Keine MP3-Dateien ausgewählt.",
817
+ "upload.pending.busy": "Erst den aktuellen Upload abschließen",
818
+ "upload.pending.discard": "Verwerfen",
819
+ "upload.pending.discard.confirm": "Upload „{folder}“ verwerfen?",
820
+ "upload.pending.resume": "Fortsetzen",
821
+ "upload.pending.title": "Unfertige Uploads",
822
+ "upload.present_tag": "Aufgelegter Tag: {name}",
823
+ "upload.progress": {
824
+ "one": "{done} von {n} Datei hochgeladen.",
825
+ "other": "{done} von {n} Dateien hochgeladen."
826
+ },
827
+ "upload.remove": "entfernen",
828
+ "upload.title": "Neues Album hochladen",
829
+ "upload.title_required": "Bitte zuerst den Titel des Albums eingeben.",
830
+ "upload.waiting": "wartet",
831
+ "users.created": "Benutzer „{name}“ angelegt.",
832
+ "users.help": "„admin“ darf alles, „user“ darf die Box bedienen, aber nichts ändern. Ein neues Passwort meldet den Benutzer überall ab.",
833
+ "users.new.password": "Passwort (mindestens 8 Zeichen)",
834
+ "users.new.title": "Neuen Benutzer anlegen",
835
+ "users.password.done": "Passwort von „{name}“ gesetzt.",
836
+ "users.password.label": "Neues Passwort für {name}",
837
+ "users.password.placeholder": "neues Passwort",
838
+ "users.password.submit": "Setzen",
839
+ "users.remove.confirm": "Benutzer „{name}“ löschen?",
840
+ "users.remove.self": "Der eigene Benutzer lässt sich nicht löschen",
841
+ "users.removed": "Benutzer gelöscht.",
842
+ "users.role": "Rolle",
843
+ "users.self": "(du)",
844
+ "users.set_password": "Passwort setzen",
845
+ "users.title": "Benutzer",
846
+ "version.banner": "Version {version} ist verfügbar.",
847
+ "version.check": "Nach neuer Version suchen",
848
+ "version.column.slot": "Slot",
849
+ "version.degraded": "Ausgelassene Daten",
850
+ "version.done": "erledigt",
851
+ "version.failed": "Das hat nicht geklappt – siehe Ausgabe.",
852
+ "version.fallback": "Notfall-Modus starten",
853
+ "version.fallback.confirm": "Den Notfall-Modus starten? Die Box startet sofort neu und spielt nichts, bis sie eine Version installiert hat, die läuft.",
854
+ "version.help.library": "Die Box holt neue Versionen selbst aus der Bibliothek und probiert sie beim nächsten Start aus. Läuft eine neue Version nicht, startet wieder die vorige.",
855
+ "version.help.none": "Die Box hat keine Bibliothek und kennt keine Adresse für Releases: Eine neue Version kommt aus einer Datei, mit dem Installer oder dem Playbook.",
856
+ "version.help.releases": "Die Box hat keine Bibliothek: Sie sieht einmal am Tag selbst nach, ob es ein neues Release gibt, und probiert es beim nächsten Start aus. Läuft eine neue Version nicht, startet wieder die vorige.",
857
+ "version.install": "Installieren",
858
+ "version.install_now": "Jetzt installieren",
859
+ "version.installing": "Version {version} wird im Hintergrund installiert und startet beim nächsten Einschalten der Box.",
860
+ "version.mode.ask": "nachfragen",
861
+ "version.mode.automatic": "automatisch",
862
+ "version.mode.label": "Updates dieser Box",
863
+ "version.mode.manual": "nur von Hand",
864
+ "version.mode.off": "aus",
865
+ "version.new": "Neu",
866
+ "version.no_slots": "Diese Box wurde ohne Slots eingerichtet – ihre Version ändert das Playbook.",
867
+ "version.note": "Hinweis",
868
+ "version.offer": "Version {version} vom {date}, {size}",
869
+ "version.offer.notes": "Was ist neu",
870
+ "version.offer.soon": "Version {version} vom {date}, {size} – wird installiert, sobald die Box das nächste Mal nachsieht",
871
+ "version.offer.waiting": {
872
+ "one": "Version {version} vom {date}, {size} – wird am {due} von selbst installiert ({n} Tag Wartezeit)",
873
+ "other": "Version {version} vom {date}, {size} – wird am {due} von selbst installiert ({n} Tage Wartezeit)"
874
+ },
875
+ "version.promote": "Als Notfall-Version merken",
876
+ "version.promote.confirm": "Die laufende Version als Notfall-Version merken?",
877
+ "version.revert": "Zurück zur vorigen Version",
878
+ "version.revert.confirm": "Zur vorigen Version zurückgehen? Die Box startet sofort neu, auch wenn gerade etwas spielt.",
879
+ "version.running": "Läuft",
880
+ "version.running_slot": "{version} (Slot {slot}, {state})",
881
+ "version.skip": "Überspringen",
882
+ "version.skipped": "Version {version} wird nicht mehr angeboten – das nächste Release wieder.",
883
+ "version.source": "Quelle",
884
+ "version.source.library": "Bibliothek {address}. Solange die Box mit ihr verbunden ist, kommen neue Versionen nur von dort – nicht von GitHub. Lösen: Abschnitt „Bibliothek“.",
885
+ "version.source.none": "keine Bibliothek – eine neue Version kommt aus einer Datei, mit dem Installer oder dem Playbook",
886
+ "version.source.releases": {
887
+ "one": "Releases von {address}. Ein Release wartet {n} Tag, bevor die Box es von selbst installiert.",
888
+ "other": "Releases von {address}. Ein Release wartet {n} Tage, bevor die Box es von selbst installiert."
889
+ },
890
+ "version.update_now": "Jetzt aktualisieren",
891
+ "version.updates": "Updates"
892
+ }