feat: group the settings and explain the selected one

This commit is contained in:
Felitendo committed 2026-09-23 22:36:00 +02:00
1 parent 4db3bcef9c
commit bcbaaf74bc
5 files changed
+631 -264

No files matched your search

+3 -3
View File
@@ -100,7 +100,7 @@ threshold count, so the samples cannot drift towards somebody else one
borderline unlock at a time. borderline unlock at a time.
A match has to hold for two frames. The face has to look at the screen with A match has to hold for two frames. The face has to look at the screen with
its eyes open (*Only while looking at the screen*), and it has to be the same its eyes open (*Only when you look at the screen*), and it has to be the same
face that shows the sign of life: a face that jumps in the picture, disappears face that shows the sign of life: a face that jumps in the picture, disappears
or stops matching starts the whole check again. or stops matching starts the whole check again.
@@ -180,7 +180,7 @@ scans when somebody comes back:
field is a key like any other. This works while a video or an app keeps the field is a key like any other. This works while a video or an app keeps the
screen on, too (ext_idle_notifier_v1, input notification); screen on, too (ext_idle_notifier_v1, input notification);
- when the machine wakes from sleep; - when the machine wakes from sleep;
- right after locking, if *Look right after the screen locks* is on. Off by - right after locking, if *Scan right after locking* is on. Off by
default: whoever locks their screen on purpose is usually still in front of default: whoever locks their screen on purpose is usually still in front of
it. it.
@@ -228,7 +228,7 @@ emitter has to be switched on with a tool such as linux-enable-ir-emitter.
In infrared a phone screen shows up black, which makes the photo check's job In infrared a phone screen shows up black, which makes the photo check's job
easier. A face set up with one camera should be set up again for another. easier. A face set up with one camera should be set up again for another.
A laptop with its lid shut is not scanned (*Not while the lid is closed*). A laptop with its lid shut is not scanned (*Not when the lid is closed*).
# FILES # FILES
+301 -133
View File
@@ -7,8 +7,8 @@ msgstr ""
"Project-Id-Version: plasma-face-unlock 1.0.0\n" "Project-Id-Version: plasma-face-unlock 1.0.0\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/plasma-face-unlock/" "Report-Msgid-Bugs-To: https://github.com/LoonixTools/plasma-face-unlock/"
"issues\n" "issues\n"
"POT-Creation-Date: 2026-09-22 18:45+0200\n" "POT-Creation-Date: 2026-09-23 22:32+0200\n"
"PO-Revision-Date: 2026-09-22 18:45+0200\n" "PO-Revision-Date: 2026-09-23 22:32+0200\n"
"Last-Translator: Felitendo\n" "Last-Translator: Felitendo\n"
"Language-Team: German\n" "Language-Team: German\n"
"Language: de\n" "Language: de\n"
@@ -20,7 +20,9 @@ msgstr ""
msgid "" msgid ""
"Face unlock's service has to be switched on once for this computer. That " "Face unlock's service has to be switched on once for this computer. That "
"needs your password." "needs your password."
msgstr "Der Dienst für die Gesichtsentsperrung muss auf diesem Computer einmal eingeschaltet werden. Dafür wird dein Passwort gebraucht." msgstr ""
"Der Dienst für die Gesichtsentsperrung muss auf diesem Computer einmal "
"eingeschaltet werden. Dafür wird dein Passwort gebraucht."
#: src/plasma-face-unlock:57 #: src/plasma-face-unlock:57
#, sh-printf-format #, sh-printf-format
@@ -31,7 +33,9 @@ msgstr "Prüfen mit: systemctl status %s"
msgid "" msgid ""
"Setting up a face needs the camera picture on screen. Run this inside your " "Setting up a face needs the camera picture on screen. Run this inside your "
"Plasma session." "Plasma session."
msgstr "Zum Einrichten eines Gesichts muss das Kamerabild auf dem Bildschirm zu sehen sein. Starte das in deiner Plasma-Sitzung." msgstr ""
"Zum Einrichten eines Gesichts muss das Kamerabild auf dem Bildschirm zu "
"sehen sein. Starte das in deiner Plasma-Sitzung."
#: src/plasma-face-unlock:71 #: src/plasma-face-unlock:71
msgid "The setup window is open. Follow it there." msgid "The setup window is open. Follow it there."
@@ -44,7 +48,9 @@ msgstr "Das Gesicht ist eingerichtet."
#: src/plasma-face-unlock:83 #: src/plasma-face-unlock:83
#, sh-printf-format #, sh-printf-format
msgid "Face unlock is still off. Turn it on with [1] or `%s enable`." msgid "Face unlock is still off. Turn it on with [1] or `%s enable`."
msgstr "Die Gesichtsentsperrung ist noch aus. Schalte sie mit [1] oder `%s enable` ein." msgstr ""
"Die Gesichtsentsperrung ist noch aus. Schalte sie mit [1] oder `%s enable` "
"ein."
#: src/plasma-face-unlock:87 #: src/plasma-face-unlock:87
msgid "No face was added." msgid "No face was added."
@@ -54,7 +60,8 @@ msgstr "Es wurde kein Gesicht hinzugefügt."
msgid "First, set up your face." msgid "First, set up your face."
msgstr "Richte zuerst dein Gesicht ein." msgstr "Richte zuerst dein Gesicht ein."
#: src/plasma-face-unlock:100 src/plasma-face-unlock:120 src/lib/menu.sh:338 #: src/plasma-face-unlock:100 src/plasma-face-unlock:120 src/lib/menu.sh:406
#: src/lib/menu.sh:410 src/lib/menu.sh:416 src/lib/menu.sh:418
msgid "Could not save the setting." msgid "Could not save the setting."
msgstr "Einstellung konnte nicht gespeichert werden." msgstr "Einstellung konnte nicht gespeichert werden."
@@ -64,11 +71,15 @@ msgstr "Der Sperrbildschirm-Dienst konnte nicht gestartet werden."
#: src/plasma-face-unlock:106 #: src/plasma-face-unlock:106
msgid "No systemd user session, so the lock screen agent was not started." msgid "No systemd user session, so the lock screen agent was not started."
msgstr "Keine systemd-Benutzersitzung, daher wurde der Sperrbildschirm-Dienst nicht gestartet." msgstr ""
"Keine systemd-Benutzersitzung, daher wurde der Sperrbildschirm-Dienst nicht "
"gestartet."
#: src/plasma-face-unlock:113 #: src/plasma-face-unlock:113
msgid "Face unlock is on. Lock the screen and look at it to try." msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr "Die Gesichtsentsperrung ist an. Sperre den Bildschirm und schau ihn an, um es auszuprobieren." msgstr ""
"Die Gesichtsentsperrung ist an. Sperre den Bildschirm und schau ihn an, um "
"es auszuprobieren."
#: src/plasma-face-unlock:115 #: src/plasma-face-unlock:115
msgid "It can do sudo and admin prompts too. See Settings." msgid "It can do sudo and admin prompts too. See Settings."
@@ -76,22 +87,24 @@ msgstr "Sie kann auch sudo und Admin-Abfragen übernehmen. Siehe Einstellungen."
#: src/plasma-face-unlock:130 #: src/plasma-face-unlock:130
msgid "Face unlock is off. Your faces are kept; delete them under Faces." msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr "Die Gesichtsentsperrung ist aus. Deine Gesichter bleiben erhalten; löschen kannst du sie unter Gesichter." msgstr ""
"Die Gesichtsentsperrung ist aus. Deine Gesichter bleiben erhalten; löschen "
"kannst du sie unter Gesichter."
#: src/plasma-face-unlock:144 src/lib/daemon.sh:109 #: src/plasma-face-unlock:144 src/lib/daemon.sh:109
msgid "No face is set up yet." msgid "No face is set up yet."
msgstr "Es ist noch kein Gesicht eingerichtet." msgstr "Es ist noch kein Gesicht eingerichtet."
#: src/plasma-face-unlock:148 src/lib/menu.sh:157 src/lib/menu.sh:460 #: src/plasma-face-unlock:148 src/lib/menu.sh:167 src/lib/menu.sh:563
msgid "on" msgid "on"
msgstr "an" msgstr "an"
#: src/plasma-face-unlock:148 src/lib/menu.sh:159 src/lib/menu.sh:169 #: src/plasma-face-unlock:148 src/lib/menu.sh:169 src/lib/menu.sh:179
#: src/lib/menu.sh:461 #: src/lib/menu.sh:564
msgid "off" msgid "off"
msgstr "aus" msgstr "aus"
#: src/plasma-face-unlock:150 src/lib/menu.sh:478 #: src/plasma-face-unlock:150 src/lib/menu.sh:581
#, sh-printf-format #, sh-printf-format
msgid "%s samples, %s learned" msgid "%s samples, %s learned"
msgstr "%s Aufnahmen, %s dazugelernt" msgstr "%s Aufnahmen, %s dazugelernt"
@@ -121,7 +134,7 @@ msgstr "Gesichtsentsperrung einschalten"
msgid "Turn it off (faces are kept)" msgid "Turn it off (faces are kept)"
msgstr "Ausschalten (Gesichter bleiben erhalten)" msgstr "Ausschalten (Gesichter bleiben erhalten)"
#: src/plasma-face-unlock:176 src/lib/menu.sh:540 #: src/plasma-face-unlock:176 src/lib/menu.sh:646
msgid "Add a face" msgid "Add a face"
msgstr "Gesicht hinzufügen" msgstr "Gesicht hinzufügen"
@@ -157,7 +170,9 @@ msgstr "Ohne Befehl wird ein interaktives Menü angezeigt."
msgid "" msgid ""
"Run this as your own user, not as root. It asks for your password when it " "Run this as your own user, not as root. It asks for your password when it "
"needs to." "needs to."
msgstr "Starte das als dein eigener Benutzer, nicht als root. Wenn nötig, wird nach deinem Passwort gefragt." msgstr ""
"Starte das als dein eigener Benutzer, nicht als root. Wenn nötig, wird nach "
"deinem Passwort gefragt."
#: src/plasma-face-unlock:221 src/lib/system.sh:89 #: src/plasma-face-unlock:221 src/lib/system.sh:89
#, sh-printf-format #, sh-printf-format
@@ -214,13 +229,15 @@ msgstr "Kein Gesicht zu sehen."
#: src/lib/daemon.sh:108 #: src/lib/daemon.sh:108
msgid "" msgid ""
"Face unlock is paused after too many tries. Unlock once with your password." "Face unlock is paused after too many tries. Unlock once with your password."
msgstr "Die Gesichtsentsperrung ist nach zu vielen Versuchen pausiert. Entsperre einmal mit deinem Passwort." msgstr ""
"Die Gesichtsentsperrung ist nach zu vielen Versuchen pausiert. Entsperre "
"einmal mit deinem Passwort."
#: src/lib/daemon.sh:110 #: src/lib/daemon.sh:110
msgid "The camera could not be used." msgid "The camera could not be used."
msgstr "Die Kamera konnte nicht benutzt werden." msgstr "Die Kamera konnte nicht benutzt werden."
#: src/lib/daemon.sh:111 src/lib/menu.sh:233 #: src/lib/daemon.sh:111 src/lib/menu.sh:246
msgid "The recognition models are missing. Reinstall the package." msgid "The recognition models are missing. Reinstall the package."
msgstr "Die Erkennungsmodelle fehlen. Installiere das Paket neu." msgstr "Die Erkennungsmodelle fehlen. Installiere das Paket neu."
@@ -315,175 +332,315 @@ msgstr "Lebenszeichen: %s"
msgid "" msgid ""
"That was too many tries. Face unlock is paused until you unlock with your " "That was too many tries. Face unlock is paused until you unlock with your "
"password." "password."
msgstr "Das waren zu viele Versuche. Die Gesichtsentsperrung ist pausiert, bis du mit deinem Passwort entsperrst." msgstr ""
"Das waren zu viele Versuche. Die Gesichtsentsperrung ist pausiert, bis du "
"mit deinem Passwort entsperrst."
#: src/lib/menu.sh:140
#: src/lib/menu.sh:130
msgid "[y/N]" msgid "[y/N]"
msgstr "[j/N]" msgstr "[j/N]"
#: src/lib/menu.sh:149 src/lib/menu.sh:382 #: src/lib/menu.sh:159 src/lib/menu.sh:467
msgid "ON" msgid "ON"
msgstr "AN" msgstr "AN"
#: src/lib/menu.sh:151 src/lib/menu.sh:383 #: src/lib/menu.sh:161 src/lib/menu.sh:468
msgid "OFF" msgid "OFF"
msgstr "AUS" msgstr "AUS"
#: src/lib/menu.sh:167 #: src/lib/menu.sh:177 src/lib/menu.sh:181
msgid "strict (blink or turn your head)"
msgstr "streng (blinzeln oder Kopf drehen)"
#: src/lib/menu.sh:168
msgid "basic (screens and phone edges)"
msgstr "einfach (Bildschirme und Handyränder)"
#: src/lib/menu.sh:170
msgid "normal"
msgstr "normal"
#: src/lib/menu.sh:171
msgid "strict" msgid "strict"
msgstr "streng" msgstr "streng"
#: src/lib/menu.sh:172 #: src/lib/menu.sh:178
msgid "basic"
msgstr "einfach"
#: src/lib/menu.sh:180 src/lib/menu.sh:185
msgid "normal"
msgstr "normal"
#: src/lib/menu.sh:182
msgid "relaxed" msgid "relaxed"
msgstr "locker" msgstr "locker"
#: src/lib/menu.sh:173 #: src/lib/menu.sh:183
msgid "island with the face" msgid "island with the face"
msgstr "Insel mit Gesicht" msgstr "Insel mit Gesicht"
#: src/lib/menu.sh:174 #: src/lib/menu.sh:184
msgid "small pill with a lock" msgid "small pill with a lock"
msgstr "kleine Pille mit Schloss" msgstr "kleine Pille mit Schloss"
#: src/lib/menu.sh:175 #: src/lib/menu.sh:186
msgid "fast"
msgstr "schnell"
#: src/lib/menu.sh:187
msgid "slow"
msgstr "langsam"
#: src/lib/menu.sh:188
#, sh-printf-format #, sh-printf-format
msgid "%s seconds" msgid "%s seconds"
msgstr "%s Sekunden" msgstr "%s Sekunden"
#: src/lib/menu.sh:176 src/lib/menu.sh:313 #: src/lib/menu.sh:189 src/lib/menu.sh:381
msgid "automatic" msgid "automatic"
msgstr "automatisch" msgstr "automatisch"
#: src/lib/menu.sh:193 #: src/lib/menu.sh:206
msgid "Face unlock" msgid "Face unlock"
msgstr "Gesichtsentsperrung" msgstr "Gesichtsentsperrung"
#: src/lib/menu.sh:197 #: src/lib/menu.sh:210
msgid "Service" msgid "Service"
msgstr "Dienst" msgstr "Dienst"
#: src/lib/menu.sh:197 #: src/lib/menu.sh:210
msgid "not running" msgid "not running"
msgstr "läuft nicht" msgstr "läuft nicht"
#: src/lib/menu.sh:199 #: src/lib/menu.sh:212
msgid "Turning face unlock on again starts it." msgid "Turning face unlock on again starts it."
msgstr "Die Gesichtsentsperrung erneut einzuschalten startet ihn." msgstr "Die Gesichtsentsperrung erneut einzuschalten startet ihn."
#: src/lib/menu.sh:210 src/lib/menu.sh:212 src/lib/menu.sh:457 #: src/lib/menu.sh:223 src/lib/menu.sh:225 src/lib/menu.sh:560
#: src/lib/menu.sh:541 #: src/lib/menu.sh:647
msgid "Faces" msgid "Faces"
msgstr "Gesichter" msgstr "Gesichter"
#: src/lib/menu.sh:210 #: src/lib/menu.sh:223
msgid "none set up yet" msgid "none set up yet"
msgstr "noch keins eingerichtet" msgstr "noch keins eingerichtet"
#: src/lib/menu.sh:212 #: src/lib/menu.sh:225
msgid "all turned off" msgid "all turned off"
msgstr "alle ausgeschaltet" msgstr "alle ausgeschaltet"
#: src/lib/menu.sh:218 #: src/lib/menu.sh:231
msgid "none found" msgid "none found"
msgstr "keine gefunden" msgstr "keine gefunden"
#: src/lib/menu.sh:220 /tmp/tmp.q9gMIu3Tjj/settings.sh:9 #: src/lib/menu.sh:233 /tmp/tmp.jqZ9OxnSvo/settings.sh:12
msgid "Camera" msgid "Camera"
msgstr "Kamera" msgstr "Kamera"
#: src/lib/menu.sh:222 #: src/lib/menu.sh:235 /tmp/tmp.jqZ9OxnSvo/settings.sh:1
msgid "Lock screen" msgid "Lock screen"
msgstr "Sperrbildschirm" msgstr "Sperrbildschirm"
#: src/lib/menu.sh:223 #: src/lib/menu.sh:236
msgid "sudo" msgid "sudo"
msgstr "sudo" msgstr "sudo"
#: src/lib/menu.sh:224 #: src/lib/menu.sh:237 /tmp/tmp.jqZ9OxnSvo/settings.sh:7
msgid "Admin prompts" msgid "Admin prompts"
msgstr "Admin-Abfragen" msgstr "Admin-Abfragen"
#: src/lib/menu.sh:225 /tmp/tmp.q9gMIu3Tjj/settings.sh:6 #: src/lib/menu.sh:238 /tmp/tmp.jqZ9OxnSvo/settings.sh:9
msgid "Photo check" msgid "Photo check"
msgstr "Foto-Prüfung" msgstr "Foto-Prüfung"
#: src/lib/menu.sh:228 #: src/lib/menu.sh:241
msgid "Paused" msgid "Paused"
msgstr "Pausiert" msgstr "Pausiert"
#: src/lib/menu.sh:228 #: src/lib/menu.sh:241
#, sh-printf-format #, sh-printf-format
msgid "for %d more minutes, or until the password is used" msgid "for %d more minutes, or until the password is used"
msgstr "noch %d Minuten, oder bis das Passwort benutzt wird" msgstr "noch %d Minuten, oder bis das Passwort benutzt wird"
#: src/lib/menu.sh:230 #: src/lib/menu.sh:243
msgid "Last unlock" msgid "Last unlock"
msgstr "Letzte Entsperrung" msgstr "Letzte Entsperrung"
#: src/lib/menu.sh:309 #: src/lib/menu.sh:287
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
msgstr ""
"Entsperrt den Sperrbildschirm, wenn er dein Gesicht sieht. Aus: Dort geht "
"nur dein Passwort."
#: src/lib/menu.sh:288
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
msgstr ""
"Scannt, wenn du auf dem Sperrbildschirm eine Taste drückst oder die Maus "
"bewegst, und wenn der Computer aufwacht."
#: src/lib/menu.sh:289
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
msgstr ""
"Scannt, sobald der Bildschirm gesperrt wird. Normalerweise aus: Sperrst du "
"selbst, würde er gleich wieder entsperren."
#: src/lib/menu.sh:290
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
msgstr ""
"sudo nimmt dein Gesicht statt des Passworts. Passt es nicht, tippst du wie "
"gewohnt dein Passwort."
#: src/lib/menu.sh:291
msgid ""
"The password windows of Plasma and apps, for example when you install "
"software. No match: you type the password."
msgstr ""
"Die Passwort-Fenster von Plasma und Apps, zum Beispiel beim Installieren. "
"Passt das Gesicht nicht, tippst du dein Passwort."
#: src/lib/menu.sh:292
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Du musst blinzeln oder den Kopf leicht drehen. Das hält auch ausgedruckte "
"Fotos auf."
#: src/lib/menu.sh:293
msgid "No check at all. Only for trying out a camera."
msgstr "Keine Prüfung. Nur zum Ausprobieren einer Kamera."
#: src/lib/menu.sh:294
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
msgstr ""
"Hält Fotos auf Handy, Tablet oder Hochglanzpapier auf. Blinzeln ist nicht "
"nötig. Ein matter Ausdruck kann durchkommen."
#: src/lib/menu.sh:295
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Seltener Verwechslungen, aber mit Brille oder bei schlechtem Licht erkennt "
"es dich vielleicht nicht."
#: src/lib/menu.sh:296
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Erkennt dich leichter, aber auch jemanden, der dir sehr ähnlich sieht."
#: src/lib/menu.sh:297
msgid "The default. Right for most people."
msgstr "Der Standard. Passt für die meisten."
#: src/lib/menu.sh:298
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
msgstr ""
"Deine Augen müssen offen sein und auf den Bildschirm schauen. So entsperrt "
"es nicht, wenn du wegschaust oder schläfst."
#: src/lib/menu.sh:299
msgid ""
"Automatic takes the first normal camera. After a change, set up your face "
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
msgstr ""
"Automatisch nimmt die erste normale Kamera. Nach einem Wechsel dein Gesicht "
"neu einrichten. Eine Infrarot-Kamera braucht ihr Licht (linux-enable-ir-"
"emitter)."
#: src/lib/menu.sh:300
msgid "How long the camera looks for your face before it gives up."
msgstr "Wie lange die Kamera nach deinem Gesicht sucht, bevor sie aufgibt."
#: src/lib/menu.sh:301
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
msgstr ""
"Nach einem sicheren Treffer merkt es sich, wie du gerade aussiehst. So musst "
"du nach neuer Frisur oder Brille nichts neu einrichten."
#: src/lib/menu.sh:302
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
msgstr ""
"Kein Scan bei zugeklapptem Laptop, zum Beispiel am Schreibtisch mit externem "
"Bildschirm."
#: src/lib/menu.sh:303
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "Die Bubble oben am Bildschirm zeigt, was die Kamera gerade macht."
#: src/lib/menu.sh:304
msgid "A small pill with a lock that opens."
msgstr "Eine kleine Pille mit einem Schloss, das aufgeht."
#: src/lib/menu.sh:305
msgid "An island with a face that looks around, then rings and a tick."
msgstr ""
"Eine Insel mit einem Gesicht, das sich umschaut, danach Ringe und ein Haken."
#: src/lib/menu.sh:306
msgid "How fast the bubble moves."
msgstr "Wie schnell sich die Bubble bewegt."
#: src/lib/menu.sh:307
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
"Zeigt die Bubble auch, wenn sudo oder eine Admin-Abfrage dein Gesicht scannt."
#: src/lib/menu.sh:377
#, sh-printf-format #, sh-printf-format
msgid "automatic (%s)" msgid "automatic (%s)"
msgstr "automatisch (%s)" msgstr "automatisch (%s)"
#: src/lib/menu.sh:319 #: src/lib/menu.sh:387
msgid "(infrared)" msgid "(infrared)"
msgstr "(Infrarot)" msgstr "(Infrarot)"
#: src/lib/menu.sh:323 #: src/lib/menu.sh:391
msgid "(not connected)" msgid "(not connected)"
msgstr "(nicht angeschlossen)" msgstr "(nicht angeschlossen)"
#: src/lib/menu.sh:379 src/lib/menu.sh:542 #: src/lib/menu.sh:464 src/lib/menu.sh:648
msgid "Settings" msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
#: src/lib/menu.sh:380 #: src/lib/menu.sh:465
msgid "Up/Down: select, Space or Right: change, q: back" msgid "↑↓ select ←→ or Space: change q: back"
msgstr "Hoch/Runter: wählen, Leertaste oder Rechts: ändern, q: zurück" msgstr "↑↓ auswählen ←→ oder Leertaste: ändern q: zurück"
#: src/lib/menu.sh:381 #: src/lib/menu.sh:466
msgid "Settings marked * are for the whole computer and ask for your password." msgid "for all users, asks for your password"
msgstr "Mit * markierte Einstellungen gelten für den ganzen Computer und fragen nach deinem Passwort." msgstr "für alle Nutzer, fragt nach deinem Passwort"
#: src/lib/menu.sh:458 #: src/lib/menu.sh:561
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back" msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr "Hoch/Runter: wählen, Leertaste: an/aus, r: umbenennen, d: löschen, a: hinzufügen, q: zurück" msgstr ""
"Hoch/Runter: wählen, Leertaste: an/aus, r: umbenennen, d: löschen, a: "
"hinzufügen, q: zurück"
#: src/lib/menu.sh:459 #: src/lib/menu.sh:562
msgid "No face is set up yet. Press a to add one." msgid "No face is set up yet. Press a to add one."
msgstr "Es ist noch kein Gesicht eingerichtet. Drück a, um eins hinzuzufügen." msgstr "Es ist noch kein Gesicht eingerichtet. Drück a, um eins hinzuzufügen."
#: src/lib/menu.sh:502 #: src/lib/menu.sh:607
msgid "New name:" msgid "New name:"
msgstr "Neuer Name:" msgstr "Neuer Name:"
#: src/lib/menu.sh:509 #: src/lib/menu.sh:614
#, sh-printf-format #, sh-printf-format
msgid "Delete \"%s\"?" msgid "Delete \"%s\"?"
msgstr "„%s“ löschen?" msgstr "„%s“ löschen?"
#: src/lib/menu.sh:539 #: src/lib/menu.sh:645
msgid "Turn face unlock on or off" msgid "Turn face unlock on or off"
msgstr "Gesichtsentsperrung ein- oder ausschalten" msgstr "Gesichtsentsperrung ein- oder ausschalten"
#: src/lib/menu.sh:543 #: src/lib/menu.sh:649
msgid "Try it" msgid "Try it"
msgstr "Ausprobieren" msgstr "Ausprobieren"
#: src/lib/menu.sh:544 #: src/lib/menu.sh:650
msgid "Quit" msgid "Quit"
msgstr "Beenden" msgstr "Beenden"
@@ -499,7 +656,8 @@ msgstr "Auf diesem System gibt es keine PAM-Konfiguration für %s."
#: src/lib/system.sh:47 #: src/lib/system.sh:47
msgid "This needs root, and neither sudo, run0 nor doas is installed." msgid "This needs root, and neither sudo, run0 nor doas is installed."
msgstr "Dafür braucht es root, aber weder sudo noch run0 noch doas ist installiert." msgstr ""
"Dafür braucht es root, aber weder sudo noch run0 noch doas ist installiert."
#: src/lib/system.sh:56 #: src/lib/system.sh:56
msgid "This command has to run as root." msgid "This command has to run as root."
@@ -516,86 +674,98 @@ msgid "Not a service this can be used for: %s"
msgstr "Dafür kann es nicht verwendet werden: %s" msgstr "Dafür kann es nicht verwendet werden: %s"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Unlock the lock screen" msgid "Unlock with your face"
msgstr "Sperrbildschirm entsperren" msgstr "Mit dem Gesicht entsperren"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Look when somebody comes back to the screen" msgid "Scan when you come back"
msgstr "Schauen, wenn jemand zum Bildschirm zurückkommt" msgstr "Scannen, wenn du zurückkommst"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Look right after the screen locks" msgid "Scan right after locking"
msgstr "Gleich nach dem Sperren schauen" msgstr "Gleich nach dem Sperren scannen"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Use for sudo in a terminal" msgid "Password prompts"
msgstr "Für sudo im Terminal verwenden" msgstr "Passwort-Abfragen"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Use for admin prompts" msgid "sudo in a terminal"
msgstr "Für Admin-Abfragen verwenden" msgstr "sudo im Terminal"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "How closely a face has to match" msgid "Recognition"
msgstr "Wie genau ein Gesicht passen muss" msgstr "Erkennung"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Only while looking at the screen" msgid "How closely the face has to match"
msgstr "Nur beim Blick auf den Bildschirm" msgstr "Wie genau das Gesicht passen muss"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "How long one look lasts" msgid "Only when you look at the screen"
msgstr "Wie lange ein Blick dauert" msgstr "Nur wenn du auf den Bildschirm schaust"
#: src/lib/menu.sh
msgid "How long a scan lasts"
msgstr "Wie lange ein Scan dauert"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Learn from every unlock" msgid "Learn from every unlock"
msgstr "Bei jeder Entsperrung dazulernen" msgstr "Bei jeder Entsperrung dazulernen"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Not while the lid is closed" msgid "Not when the lid is closed"
msgstr "Nicht bei geschlossenem Deckel" msgstr "Nicht bei zugeklapptem Laptop"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Show the bubble at the top" msgid "Bubble"
msgstr "Die Bubble oben anzeigen" msgstr "Bubble"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Bubble style" msgid "Show the bubble"
msgstr "Bubble-Stil" msgstr "Bubble anzeigen"
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Bubble for sudo and admin prompts too" msgid "Style"
msgstr "Bubble auch für sudo und Admin-Abfragen" msgstr "Stil"
#: src/agent/bubblecontroller.cpp:91 #: src/lib/menu.sh
msgid "Animation speed"
msgstr "Animationsgeschwindigkeit"
#: src/lib/menu.sh
msgid "Also for sudo and admin prompts"
msgstr "Auch bei sudo und Admin-Abfragen"
#: src/agent/bubblecontroller.cpp:98
msgid "Blink once" msgid "Blink once"
msgstr "Einmal blinzeln" msgstr "Einmal blinzeln"
#: src/agent/bubblecontroller.cpp:93 #: src/agent/bubblecontroller.cpp:100
msgid "Look at the screen" msgid "Look at the screen"
msgstr "Auf den Bildschirm schauen" msgstr "Auf den Bildschirm schauen"
#: src/agent/bubblecontroller.cpp:95 #: src/agent/bubblecontroller.cpp:102
msgid "Move closer" msgid "Move closer"
msgstr "Näher kommen" msgstr "Näher kommen"
#: src/agent/bubblecontroller.cpp:97 #: src/agent/bubblecontroller.cpp:104
msgid "Too dark" msgid "Too dark"
msgstr "Zu dunkel" msgstr "Zu dunkel"
#: src/agent/bubblecontroller.cpp:117 #: src/agent/bubblecontroller.cpp:124
msgid "Use your password" msgid "Use your password"
msgstr "Nutze dein Passwort" msgstr "Nutze dein Passwort"
#: src/agent/bubblecontroller.cpp:123 #: src/agent/bubblecontroller.cpp:130
msgid "Not recognized" msgid "Not recognized"
msgstr "Nicht erkannt" msgstr "Nicht erkannt"
#: src/agent/bubblecontroller.cpp:125 #: src/agent/bubblecontroller.cpp:132
msgid "Try again and blink" msgid "Try again and blink"
msgstr "Nochmal, und blinzeln" msgstr "Nochmal, und blinzeln"
#: src/agent/bubblecontroller.cpp:127 #: src/agent/bubblecontroller.cpp:134
msgid "Camera unavailable" msgid "Camera unavailable"
msgstr "Kamera nicht verfügbar" msgstr "Kamera nicht verfügbar"
@@ -653,7 +823,8 @@ msgstr "Die Kamera konnte nicht benutzt werden: %1"
#: src/agent/enrollcontroller.cpp:197 #: src/agent/enrollcontroller.cpp:197
msgid "The face recognition models are missing. Reinstall the package." msgid "The face recognition models are missing. Reinstall the package."
msgstr "Die Modelle für die Gesichtserkennung fehlen. Installiere das Paket neu." msgstr ""
"Die Modelle für die Gesichtserkennung fehlen. Installiere das Paket neu."
#: src/agent/enrollcontroller.cpp:199 #: src/agent/enrollcontroller.cpp:199
msgid "That took too long. Try again, in good light." msgid "That took too long. Try again, in good light."
@@ -661,11 +832,15 @@ msgstr "Das hat zu lange gedauert. Versuch es nochmal, bei gutem Licht."
#: src/agent/enrollcontroller.cpp:201 #: src/agent/enrollcontroller.cpp:201
msgid "The face unlock service is not running. Turn face unlock on first." msgid "The face unlock service is not running. Turn face unlock on first."
msgstr "Der Dienst für die Gesichtsentsperrung läuft nicht. Schalte die Gesichtsentsperrung zuerst ein." msgstr ""
"Der Dienst für die Gesichtsentsperrung läuft nicht. Schalte die "
"Gesichtsentsperrung zuerst ein."
#: src/agent/enrollcontroller.cpp:203 #: src/agent/enrollcontroller.cpp:203
msgid "The camera is busy with another scan. Try again in a moment." msgid "The camera is busy with another scan. Try again in a moment."
msgstr "Die Kamera ist gerade mit einem anderen Scan beschäftigt. Versuch es gleich nochmal." msgstr ""
"Die Kamera ist gerade mit einem anderen Scan beschäftigt. Versuch es gleich "
"nochmal."
#: src/agent/enrollcontroller.cpp:205 #: src/agent/enrollcontroller.cpp:205
msgid "The face could not be added (%1)." msgid "The face could not be added (%1)."
@@ -701,7 +876,9 @@ msgstr "Blinzle oder dreh den Kopf ein wenig."
#: src/pam/pam_plasma_face_unlock.c:312 #: src/pam/pam_plasma_face_unlock.c:312
msgid "Face unlock is paused after too many tries. Use your password." msgid "Face unlock is paused after too many tries. Use your password."
msgstr "Die Gesichtsentsperrung ist nach zu vielen Versuchen pausiert. Nutze dein Passwort." msgstr ""
"Die Gesichtsentsperrung ist nach zu vielen Versuchen pausiert. Nutze dein "
"Passwort."
#: src/pam/pam_plasma_face_unlock.c:316 #: src/pam/pam_plasma_face_unlock.c:316
msgid "Face not recognised." msgid "Face not recognised."
@@ -731,47 +908,38 @@ msgstr "Die Einrichtung wurde nicht abgeschlossen"
msgid "" msgid ""
"Look at the camera, then move your head slowly in a circle. Your face is " "Look at the camera, then move your head slowly in a circle. Your face is "
"turned into numbers on this computer and never stored as a picture." "turned into numbers on this computer and never stored as a picture."
msgstr "Schau in die Kamera und beweg dann den Kopf langsam im Kreis. Dein Gesicht wird auf diesem Computer in Zahlen umgewandelt und nie als Bild gespeichert." msgstr ""
"Schau in die Kamera und beweg dann den Kopf langsam im Kreis. Dein Gesicht "
"wird auf diesem Computer in Zahlen umgewandelt und nie als Bild gespeichert."
#: src/agent/qml/Enroll.qml:123 #: src/agent/qml/Enroll.qml:123
msgid "" msgid ""
"Lock the screen and look at it to try it out. You can add a second look, " "Lock the screen and look at it to try it out. You can add a second look, "
"with glasses for example, from the menu." "with glasses for example, from the menu."
msgstr "Sperre den Bildschirm und schau ihn an, um es auszuprobieren. Einen zweiten Look, zum Beispiel mit Brille, kannst du im Menü hinzufügen." msgstr ""
"Sperre den Bildschirm und schau ihn an, um es auszuprobieren. Einen zweiten "
"Look, zum Beispiel mit Brille, kannst du im Menü hinzufügen."
#: src/agent/qml/Enroll.qml:156 #: src/agent/qml/Enroll.qml:157
msgid "Name (optional)" msgid "Name (optional)"
msgstr "Name (optional)" msgstr "Name (optional)"
#: src/agent/qml/Enroll.qml:171 #: src/agent/qml/Enroll.qml:172
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
#: src/agent/qml/Enroll.qml:177 #: src/agent/qml/Enroll.qml:178
msgid "Finish now" msgid "Finish now"
msgstr "Jetzt abschließen" msgstr "Jetzt abschließen"
#: src/agent/qml/Enroll.qml:182 #: src/agent/qml/Enroll.qml:183
msgid "Try again" msgid "Try again"
msgstr "Nochmal versuchen" msgstr "Nochmal versuchen"
#: src/agent/qml/Enroll.qml:182 #: src/agent/qml/Enroll.qml:183
msgid "Get started" msgid "Get started"
msgstr "Los geht's" msgstr "Los geht's"
#: src/agent/qml/Enroll.qml:187 #: src/agent/qml/Enroll.qml:188
msgid "Done" msgid "Done"
msgstr "Fertig" msgstr "Fertig"
#: src/lib/menu.sh
msgid "Animation speed"
msgstr "Animationsgeschwindigkeit"
#: src/lib/menu.sh
msgid "fast"
msgstr "schnell"
#: src/lib/menu.sh
msgid "slow"
msgstr "langsam"
+160 -50
View File
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: plasma-face-unlock 1.0.0\n" "Project-Id-Version: plasma-face-unlock 1.0.0\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/plasma-face-unlock/" "Report-Msgid-Bugs-To: https://github.com/LoonixTools/plasma-face-unlock/"
"issues\n" "issues\n"
"POT-Creation-Date: 2026-09-22 23:12+0200\n" "POT-Creation-Date: 2026-09-23 22:32+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -55,8 +55,8 @@ msgstr ""
msgid "First, set up your face." msgid "First, set up your face."
msgstr "" msgstr ""
#: src/plasma-face-unlock:100 src/plasma-face-unlock:120 src/lib/menu.sh:352 #: src/plasma-face-unlock:100 src/plasma-face-unlock:120 src/lib/menu.sh:406
#: src/lib/menu.sh:356 src/lib/menu.sh:362 src/lib/menu.sh:364 #: src/lib/menu.sh:410 src/lib/menu.sh:416 src/lib/menu.sh:418
msgid "Could not save the setting." msgid "Could not save the setting."
msgstr "" msgstr ""
@@ -84,16 +84,16 @@ msgstr ""
msgid "No face is set up yet." msgid "No face is set up yet."
msgstr "" msgstr ""
#: src/plasma-face-unlock:148 src/lib/menu.sh:167 src/lib/menu.sh:476 #: src/plasma-face-unlock:148 src/lib/menu.sh:167 src/lib/menu.sh:563
msgid "on" msgid "on"
msgstr "" msgstr ""
#: src/plasma-face-unlock:148 src/lib/menu.sh:169 src/lib/menu.sh:179 #: src/plasma-face-unlock:148 src/lib/menu.sh:169 src/lib/menu.sh:179
#: src/lib/menu.sh:477 #: src/lib/menu.sh:564
msgid "off" msgid "off"
msgstr "" msgstr ""
#: src/plasma-face-unlock:150 src/lib/menu.sh:494 #: src/plasma-face-unlock:150 src/lib/menu.sh:581
#, sh-printf-format #, sh-printf-format
msgid "%s samples, %s learned" msgid "%s samples, %s learned"
msgstr "" msgstr ""
@@ -123,7 +123,7 @@ msgstr ""
msgid "Turn it off (faces are kept)" msgid "Turn it off (faces are kept)"
msgstr "" msgstr ""
#: src/plasma-face-unlock:176 src/lib/menu.sh:559 #: src/plasma-face-unlock:176 src/lib/menu.sh:646
msgid "Add a face" msgid "Add a face"
msgstr "" msgstr ""
@@ -323,30 +323,26 @@ msgstr ""
msgid "[y/N]" msgid "[y/N]"
msgstr "" msgstr ""
#: src/lib/menu.sh:159 src/lib/menu.sh:396 #: src/lib/menu.sh:159 src/lib/menu.sh:467
msgid "ON" msgid "ON"
msgstr "" msgstr ""
#: src/lib/menu.sh:161 src/lib/menu.sh:397 #: src/lib/menu.sh:161 src/lib/menu.sh:468
msgid "OFF" msgid "OFF"
msgstr "" msgstr ""
#: src/lib/menu.sh:177 #: src/lib/menu.sh:177 src/lib/menu.sh:181
msgid "strict (blink or turn your head)" msgid "strict"
msgstr "" msgstr ""
#: src/lib/menu.sh:178 #: src/lib/menu.sh:178
msgid "basic (screens and phone edges)" msgid "basic"
msgstr "" msgstr ""
#: src/lib/menu.sh:180 src/lib/menu.sh:185 #: src/lib/menu.sh:180 src/lib/menu.sh:185
msgid "normal" msgid "normal"
msgstr "" msgstr ""
#: src/lib/menu.sh:181
msgid "strict"
msgstr ""
#: src/lib/menu.sh:182 #: src/lib/menu.sh:182
msgid "relaxed" msgid "relaxed"
msgstr "" msgstr ""
@@ -372,7 +368,7 @@ msgstr ""
msgid "%s seconds" msgid "%s seconds"
msgstr "" msgstr ""
#: src/lib/menu.sh:189 src/lib/menu.sh:327 #: src/lib/menu.sh:189 src/lib/menu.sh:381
msgid "automatic" msgid "automatic"
msgstr "" msgstr ""
@@ -392,8 +388,8 @@ msgstr ""
msgid "Turning face unlock on again starts it." msgid "Turning face unlock on again starts it."
msgstr "" msgstr ""
#: src/lib/menu.sh:223 src/lib/menu.sh:225 src/lib/menu.sh:473 #: src/lib/menu.sh:223 src/lib/menu.sh:225 src/lib/menu.sh:560
#: src/lib/menu.sh:560 #: src/lib/menu.sh:647
msgid "Faces" msgid "Faces"
msgstr "" msgstr ""
@@ -409,11 +405,11 @@ msgstr ""
msgid "none found" msgid "none found"
msgstr "" msgstr ""
#: src/lib/menu.sh:233 /tmp/tmp.PgsbSPb4Sv/settings.sh:9 #: src/lib/menu.sh:233 /tmp/tmp.jqZ9OxnSvo/settings.sh:12
msgid "Camera" msgid "Camera"
msgstr "" msgstr ""
#: src/lib/menu.sh:235 #: src/lib/menu.sh:235 /tmp/tmp.jqZ9OxnSvo/settings.sh:1
msgid "Lock screen" msgid "Lock screen"
msgstr "" msgstr ""
@@ -421,11 +417,11 @@ msgstr ""
msgid "sudo" msgid "sudo"
msgstr "" msgstr ""
#: src/lib/menu.sh:237 #: src/lib/menu.sh:237 /tmp/tmp.jqZ9OxnSvo/settings.sh:7
msgid "Admin prompts" msgid "Admin prompts"
msgstr "" msgstr ""
#: src/lib/menu.sh:238 /tmp/tmp.PgsbSPb4Sv/settings.sh:6 #: src/lib/menu.sh:238 /tmp/tmp.jqZ9OxnSvo/settings.sh:9
msgid "Photo check" msgid "Photo check"
msgstr "" msgstr ""
@@ -442,57 +438,163 @@ msgstr ""
msgid "Last unlock" msgid "Last unlock"
msgstr "" msgstr ""
#: src/lib/menu.sh:323 #: src/lib/menu.sh:287
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
msgstr ""
#: src/lib/menu.sh:288
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
msgstr ""
#: src/lib/menu.sh:289
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
msgstr ""
#: src/lib/menu.sh:290
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
msgstr ""
#: src/lib/menu.sh:291
msgid ""
"The password windows of Plasma and apps, for example when you install "
"software. No match: you type the password."
msgstr ""
#: src/lib/menu.sh:292
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
#: src/lib/menu.sh:293
msgid "No check at all. Only for trying out a camera."
msgstr ""
#: src/lib/menu.sh:294
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
msgstr ""
#: src/lib/menu.sh:295
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
#: src/lib/menu.sh:296
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr ""
#: src/lib/menu.sh:297
msgid "The default. Right for most people."
msgstr ""
#: src/lib/menu.sh:298
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
msgstr ""
#: src/lib/menu.sh:299
msgid ""
"Automatic takes the first normal camera. After a change, set up your face "
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
msgstr ""
#: src/lib/menu.sh:300
msgid "How long the camera looks for your face before it gives up."
msgstr ""
#: src/lib/menu.sh:301
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
msgstr ""
#: src/lib/menu.sh:302
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
msgstr ""
#: src/lib/menu.sh:303
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr ""
#: src/lib/menu.sh:304
msgid "A small pill with a lock that opens."
msgstr ""
#: src/lib/menu.sh:305
msgid "An island with a face that looks around, then rings and a tick."
msgstr ""
#: src/lib/menu.sh:306
msgid "How fast the bubble moves."
msgstr ""
#: src/lib/menu.sh:307
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
#: src/lib/menu.sh:377
#, sh-printf-format #, sh-printf-format
msgid "automatic (%s)" msgid "automatic (%s)"
msgstr "" msgstr ""
#: src/lib/menu.sh:333 #: src/lib/menu.sh:387
msgid "(infrared)" msgid "(infrared)"
msgstr "" msgstr ""
#: src/lib/menu.sh:337 #: src/lib/menu.sh:391
msgid "(not connected)" msgid "(not connected)"
msgstr "" msgstr ""
#: src/lib/menu.sh:393 src/lib/menu.sh:561 #: src/lib/menu.sh:464 src/lib/menu.sh:648
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: src/lib/menu.sh:394 #: src/lib/menu.sh:465
msgid "Up/Down: select, Space or Right: change, q: back" msgid "↑↓ select ←→ or Space: change q: back"
msgstr "" msgstr ""
#: src/lib/menu.sh:395 #: src/lib/menu.sh:466
msgid "Settings marked * are for the whole computer and ask for your password." msgid "for all users, asks for your password"
msgstr "" msgstr ""
#: src/lib/menu.sh:474 #: src/lib/menu.sh:561
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back" msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr "" msgstr ""
#: src/lib/menu.sh:475 #: src/lib/menu.sh:562
msgid "No face is set up yet. Press a to add one." msgid "No face is set up yet. Press a to add one."
msgstr "" msgstr ""
#: src/lib/menu.sh:520 #: src/lib/menu.sh:607
msgid "New name:" msgid "New name:"
msgstr "" msgstr ""
#: src/lib/menu.sh:527 #: src/lib/menu.sh:614
#, sh-printf-format #, sh-printf-format
msgid "Delete \"%s\"?" msgid "Delete \"%s\"?"
msgstr "" msgstr ""
#: src/lib/menu.sh:558 #: src/lib/menu.sh:645
msgid "Turn face unlock on or off" msgid "Turn face unlock on or off"
msgstr "" msgstr ""
#: src/lib/menu.sh:562 #: src/lib/menu.sh:649
msgid "Try it" msgid "Try it"
msgstr "" msgstr ""
#: src/lib/menu.sh:563 #: src/lib/menu.sh:650
msgid "Quit" msgid "Quit"
msgstr "" msgstr ""
@@ -525,35 +627,39 @@ msgid "Not a service this can be used for: %s"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Unlock the lock screen" msgid "Unlock with your face"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Look when somebody comes back to the screen" msgid "Scan when you come back"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Look right after the screen locks" msgid "Scan right after locking"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Use for sudo in a terminal" msgid "Password prompts"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Use for admin prompts" msgid "sudo in a terminal"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "How closely a face has to match" msgid "Recognition"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Only while looking at the screen" msgid "How closely the face has to match"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "How long one look lasts" msgid "Only when you look at the screen"
msgstr ""
#: src/lib/menu.sh
msgid "How long a scan lasts"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
@@ -561,15 +667,19 @@ msgid "Learn from every unlock"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Not while the lid is closed" msgid "Not when the lid is closed"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Show the bubble at the top" msgid "Bubble"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Bubble style" msgid "Show the bubble"
msgstr ""
#: src/lib/menu.sh
msgid "Style"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
@@ -577,7 +687,7 @@ msgid "Animation speed"
msgstr "" msgstr ""
#: src/lib/menu.sh #: src/lib/menu.sh
msgid "Bubble for sudo and admin prompts too" msgid "Also for sudo and admin prompts"
msgstr "" msgstr ""
#: src/agent/bubblecontroller.cpp:98 #: src/agent/bubblecontroller.cpp:98
+5 -3
View File
@@ -5,8 +5,9 @@
# the shell code (pfu_msg), the agent (i18n in C++ and QML) and the PAM module # the shell code (pfu_msg), the agent (i18n in C++ and QML) and the PAM module
# (dgettext), so a word is translated once wherever it shows up. # (dgettext), so a word is translated once wherever it shows up.
# #
# The settings labels live in an array in menu.sh and reach gettext at run # The settings labels and headings live in an array in menu.sh and reach
# time, so xgettext cannot see them; they are pulled out here first. # gettext at run time, so xgettext cannot see them; they are pulled out here
# first.
set -euo pipefail set -euo pipefail
@@ -17,7 +18,8 @@ trap 'rm -rf -- "$tmp"' EXIT
version="$(make -s version)" version="$(make -s version)"
# The labels, as calls xgettext understands, pointing back at menu.sh. # The labels, as calls xgettext understands, pointing back at menu.sh.
awk -F'|' '/^\t"(user|sys|pam)\|/ { sub(/"$/, "", $5); print "pfu_msg \"" $5 "\"" }' src/lib/menu.sh > "$tmp/settings.sh" awk -F'|' '/^\t"(user|sys|pam)\|/ { sub(/"$/, "", $5); print "pfu_msg \"" $5 "\"" }
/^\t"group\|/ { sub(/"$/, "", $2); print "pfu_msg \"" $2 "\"" }' src/lib/menu.sh > "$tmp/settings.sh"
common=(--from-code=UTF-8 --add-comments=TRANSLATORS --package-name=plasma-face-unlock --package-version="$version" common=(--from-code=UTF-8 --add-comments=TRANSLATORS --package-name=plasma-face-unlock --package-version="$version"
--msgid-bugs-address=https://github.com/LoonixTools/plasma-face-unlock/issues) --msgid-bugs-address=https://github.com/LoonixTools/plasma-face-unlock/issues)
+162 -75
View File
@@ -174,8 +174,8 @@ _pfu_small_onoff() {
# How a setting's value reads in the menu. # How a setting's value reads in the menu.
pfu_value_label() { pfu_value_label() {
case "$1:$2" in case "$1:$2" in
Liveness:heavy) pfu_msg "strict (blink or turn your head)" ;; Liveness:heavy) pfu_msg "strict" ;;
Liveness:light) pfu_msg "basic (screens and phone edges)" ;; Liveness:light) pfu_msg "basic" ;;
Liveness:off) pfu_msg "off" ;; Liveness:off) pfu_msg "off" ;;
Strictness:normal) pfu_msg "normal" ;; Strictness:normal) pfu_msg "normal" ;;
Strictness:strict) pfu_msg "strict" ;; Strictness:strict) pfu_msg "strict" ;;
@@ -250,29 +250,85 @@ pfu_ui_status() {
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Settings # Settings
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Format: scope|Key|type|default|label-msgid|choices # Format: scope|Key|type|default|label-msgid|choices|needs
# scope user (this user's file), sys (the system file, through sudo) or # scope user (this user's file), sys (the system file, through sudo),
# pam (the service of that name, through sudo) # pam (the service of that name, through sudo), or group for a
# type bool, choice (cycles through the choices) or camera # heading, with only the label after it
# type bool, choice (steps through the choices) or camera
# needs a bool setting this one does nothing without; it is dimmed while
# that is off
PFU_SETTINGS=( PFU_SETTINGS=(
"user|LockScreen|bool|yes|Unlock the lock screen" "group|Lock screen"
"user|ScanOnWake|bool|yes|Look when somebody comes back to the screen" "user|LockScreen|bool|yes|Unlock with your face"
"user|ScanOnLock|bool|no|Look right after the screen locks" "user|ScanOnWake|bool|yes|Scan when you come back||LockScreen"
"pam|sudo|bool|no|Use for sudo in a terminal" "user|ScanOnLock|bool|no|Scan right after locking||LockScreen"
"pam|polkit-1|bool|no|Use for admin prompts" "group|Password prompts"
"sys|Liveness|choice|light|Photo check|light,heavy,off" "pam|sudo|bool|no|sudo in a terminal"
"sys|Strictness|choice|normal|How closely a face has to match|normal,strict,relaxed" "pam|polkit-1|bool|no|Admin prompts"
"sys|Attention|bool|yes|Only while looking at the screen" "group|Recognition"
"sys|Liveness|choice|light|Photo check|off,light,heavy"
"sys|Strictness|choice|normal|How closely the face has to match|relaxed,normal,strict"
"sys|Attention|bool|yes|Only when you look at the screen"
"sys|Camera|camera|auto|Camera" "sys|Camera|camera|auto|Camera"
"sys|ScanSeconds|choice|5|How long one look lasts|3,4,5,6,8,10" "sys|ScanSeconds|choice|5|How long a scan lasts|3,4,5,6,8,10"
"sys|Adapt|bool|yes|Learn from every unlock" "sys|Adapt|bool|yes|Learn from every unlock"
"sys|SkipLidClosed|bool|yes|Not while the lid is closed" "sys|SkipLidClosed|bool|yes|Not when the lid is closed"
"user|Bubble|bool|yes|Show the bubble at the top" "group|Bubble"
"user|BubbleStyle|choice|full|Bubble style|full,minimal" "user|Bubble|bool|yes|Show the bubble"
"user|AnimationSpeed|choice|normal|Animation speed|normal,fast,slow" "user|BubbleStyle|choice|full|Style|full,minimal|Bubble"
"user|BubbleForPrompts|bool|yes|Bubble for sudo and admin prompts too" "user|AnimationSpeed|choice|normal|Animation speed|slow,normal,fast|Bubble"
"user|BubbleForPrompts|bool|yes|Also for sudo and admin prompts||Bubble"
) )
# pfu_setting_help <Key> <value>
# What a setting does, shown under the list for the selected one.
pfu_setting_help() {
case "$1:$2" in
LockScreen:*) pfu_msg "Unlocks the lock screen when it sees your face. Off: only your password works there." ;;
ScanOnWake:*) pfu_msg "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up." ;;
ScanOnLock:*) pfu_msg "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away." ;;
sudo:*) pfu_msg "sudo takes your face instead of the password. No match: you type the password as usual." ;;
polkit-1:*) pfu_msg "The password windows of Plasma and apps, for example when you install software. No match: you type the password." ;;
Liveness:heavy) pfu_msg "You have to blink or turn your head a little. This also stops printed photos." ;;
Liveness:off) pfu_msg "No check at all. Only for trying out a camera." ;;
Liveness:*) pfu_msg "Stops photos on a phone, a tablet or glossy paper. You do not have to blink. A matte printed photo can get through." ;;
Strictness:strict) pfu_msg "Fewer wrong matches, but it may not know you with glasses or in bad light." ;;
Strictness:relaxed) pfu_msg "Knows you more easily, but also somebody who looks a lot like you." ;;
Strictness:*) pfu_msg "The default. Right for most people." ;;
Attention:*) pfu_msg "Your eyes have to be open and on the screen. So it does not unlock while you look away or sleep." ;;
Camera:*) pfu_msg "Automatic takes the first normal camera. After a change, set up your face again. An infrared camera needs its light on (linux-enable-ir-emitter)." ;;
ScanSeconds:*) pfu_msg "How long the camera looks for your face before it gives up." ;;
Adapt:*) pfu_msg "After a sure match it keeps how you look now. So a new haircut or glasses need no new setup." ;;
SkipLidClosed:*) pfu_msg "No scan while the laptop is closed, for example at a desk with an external screen." ;;
Bubble:*) pfu_msg "The bubble at the top of the screen shows what the camera is doing." ;;
BubbleStyle:minimal) pfu_msg "A small pill with a lock that opens." ;;
BubbleStyle:*) pfu_msg "An island with a face that looks around, then rings and a tick." ;;
AnimationSpeed:*) pfu_msg "How fast the bubble moves." ;;
BubbleForPrompts:*) pfu_msg "Shows the bubble when sudo or an admin prompt scans your face, too." ;;
esac
}
# _pfu_wrap <width> <text>
# Word wrap, into PFU_WRAP_LINES.
PFU_WRAP_LINES=()
_pfu_wrap() {
local width="$1" word line=''
local -a words
PFU_WRAP_LINES=()
read -r -a words <<< "$2"
for word in "${words[@]}"; do
if [[ -n $line ]] && (( ${#line} + 1 + ${#word} > width )); then
PFU_WRAP_LINES+=("$line")
line="$word"
else
line="${line:+$line }$word"
fi
done
[[ -n $line ]] && PFU_WRAP_LINES+=("$line")
return 0
}
# _pfu_setting_value <scope> <Key> <default> # _pfu_setting_value <scope> <Key> <default>
# The current value, in PFU_SETTING_VALUE. # The current value, in PFU_SETTING_VALUE.
PFU_SETTING_VALUE='' PFU_SETTING_VALUE=''
@@ -285,34 +341,32 @@ _pfu_setting_value() {
esac esac
} }
# _pfu_next_choice <current> <a,b,c> # _pfu_step <current> <step> <choice>...
_pfu_next_choice() { # The choice <step> (1 or -1) away from the current one, round at the ends.
local current="$1" list="$2" first='' found=0 c _pfu_step() {
local -a choices local current="$1" step="$2" i
IFS=',' read -r -a choices <<< "$list" shift 2
for c in "${choices[@]}"; do local -a all=("$@")
[[ -z $first ]] && first="$c"
if (( found )); then
printf '%s\n' "$c"
return
fi
[[ $c == "$current" ]] && found=1
done
printf '%s\n' "$first"
}
# _pfu_next_camera <current>
_pfu_next_camera() {
local current="$1" i
pfu_cameras_load
local -a all=(auto "${PFU_CAM_PATHS[@]}")
for i in "${!all[@]}"; do for i in "${!all[@]}"; do
if [[ ${all[i]} == "$current" ]]; then if [[ ${all[i]} == "$current" ]]; then
printf '%s\n' "${all[(i + 1) % ${#all[@]}]}" printf '%s\n' "${all[(i + step + ${#all[@]}) % ${#all[@]}]}"
return return
fi fi
done done
printf 'auto\n' printf '%s\n' "${all[0]}"
}
# _pfu_next_choice <current> <a,b,c> <step>
_pfu_next_choice() {
local -a choices
IFS=',' read -r -a choices <<< "$2"
_pfu_step "$1" "$3" "${choices[@]}"
}
# _pfu_next_camera <current> <step>
_pfu_next_camera() {
pfu_cameras_load
_pfu_step "$1" "$2" auto "${PFU_CAM_PATHS[@]}"
} }
_pfu_camera_label() { _pfu_camera_label() {
@@ -337,14 +391,14 @@ _pfu_camera_label() {
printf '%s %s' "$value" "$(pfu_msg "(not connected)")" printf '%s %s' "$value" "$(pfu_msg "(not connected)")"
} }
# _pfu_setting_change <scope> <Key> <type> <current> <choices> # _pfu_setting_change <scope> <Key> <type> <current> <choices> <step>
_pfu_setting_change() { _pfu_setting_change() {
local scope="$1" key="$2" type="$3" current="$4" choices="$5" next local scope="$1" key="$2" type="$3" current="$4" choices="$5" step="$6" next
case "$type" in case "$type" in
bool) if pfu_is_true "$current"; then next=no; else next=yes; fi ;; bool) if pfu_is_true "$current"; then next=no; else next=yes; fi ;;
choice) next="$(_pfu_next_choice "$current" "$choices")" ;; choice) next="$(_pfu_next_choice "$current" "$choices" "$step")" ;;
camera) next="$(_pfu_next_camera "$current")" ;; camera) next="$(_pfu_next_camera "$current" "$step")" ;;
esac esac
case "$scope" in case "$scope" in
@@ -374,25 +428,42 @@ _pfu_setting_change() {
} }
# pfu_ui_settings # pfu_ui_settings
# A cursor list rather than a numbered menu. The frame is assembled in memory # A cursor list in groups, with what the selected setting does under it. The
# and written once, and everything constant is resolved before the loop. # frame is assembled in memory and written once, and everything constant is
# resolved before the loop.
pfu_ui_settings() { pfu_ui_settings() {
local count=${#PFU_SETTINGS[@]} local -a scopes=() keys=() types=() defaults=() labels=() choices=() needs=() values=() rows=()
local -a scopes=() keys=() types=() defaults=() labels=() choices=() values=() local spec scope key type default label choice need locale i j frame row pad dirty=1 cursor=0 shown
local spec scope key type default label choice locale i frame row pad dirty=1 cursor=0 shown local width=0 wrap cols
locale="$(pfu_ui_locale)" locale="$(pfu_ui_locale)"
for spec in "${PFU_SETTINGS[@]}"; do for spec in "${PFU_SETTINGS[@]}"; do
IFS='|' read -r scope key type default label choice <<< "$spec" IFS='|' read -r scope key type default label choice need <<< "$spec"
scopes+=("$scope"); keys+=("$key"); types+=("$type"); defaults+=("$default"); choices+=("$choice") # A heading has its label where the key would be.
[[ $scope == group ]] && label="$key" key=''
scopes+=("$scope"); keys+=("$key"); types+=("$type"); defaults+=("$default")
choices+=("$choice"); needs+=("$need")
pfu_msg_into "$locale" "$label" pfu_msg_into "$locale" "$label"
labels+=("$PFU_MSG_RESULT") labels+=("$PFU_MSG_RESULT")
if [[ $scope != group ]]; then
rows+=($(( ${#keys[@]} - 1 )))
(( ${#PFU_MSG_RESULT} > width )) && width=${#PFU_MSG_RESULT}
fi
done done
local count=${#rows[@]}
local title hint legend l_on l_off cols="$(tput cols 2>/dev/null)" || cols=80
[[ $cols =~ ^[0-9]+$ ]] || cols=80
wrap=$(( cols - 4 ))
(( wrap > 72 )) && wrap=72
local rule
printf -v rule '%*s' "$wrap" ''
rule="${rule// /─}"
local title hint shared l_on l_off
pfu_msg_into "$locale" "Settings"; title="$PFU_MSG_RESULT" pfu_msg_into "$locale" "Settings"; title="$PFU_MSG_RESULT"
pfu_msg_into "$locale" "Up/Down: select, Space or Right: change, q: back"; hint="$PFU_MSG_RESULT" pfu_msg_into "$locale" "↑↓ select ←→ or Space: change q: back"; hint="$PFU_MSG_RESULT"
pfu_msg_into "$locale" "Settings marked * are for the whole computer and ask for your password."; legend="$PFU_MSG_RESULT" pfu_msg_into "$locale" "for all users, asks for your password"; shared="$PFU_MSG_RESULT"
pfu_msg_into "$locale" "ON"; l_on="$PFU_MSG_RESULT" pfu_msg_into "$locale" "ON"; l_on="$PFU_MSG_RESULT"
pfu_msg_into "$locale" "OFF"; l_off="$PFU_MSG_RESULT" pfu_msg_into "$locale" "OFF"; l_off="$PFU_MSG_RESULT"
@@ -404,17 +475,26 @@ pfu_ui_settings() {
while true; do while true; do
if (( dirty )); then if (( dirty )); then
PFU_KV_CACHE=() PFU_KV_CACHE=()
for i in "${!keys[@]}"; do declare -A current=()
for i in "${rows[@]}"; do
_pfu_setting_value "${scopes[i]}" "${keys[i]}" "${defaults[i]}" _pfu_setting_value "${scopes[i]}" "${keys[i]}" "${defaults[i]}"
values[i]="$PFU_SETTING_VALUE" values[i]="$PFU_SETTING_VALUE"
current[${keys[i]}]="$PFU_SETTING_VALUE"
done done
dirty=0 dirty=0
fi fi
frame="$clearseq"$'\n'"${PFU_C_BOLD}${PFU_C_BLUE} ${title}${PFU_C_RESET}"$'\n\n' frame="$clearseq"$'\n'"${PFU_C_BOLD}${PFU_C_BLUE} ${title}${PFU_C_RESET}"$'\n'
local marker selected="${PFU_C_BLUE}▸${PFU_C_RESET} " star local selected=${rows[cursor]} marker before after dim
for i in "${!keys[@]}"; do for i in "${!keys[@]}"; do
if [[ ${scopes[i]} == group ]]; then
frame+=$'\n'" ${PFU_C_BOLD}${labels[i]}${PFU_C_RESET}"
# The next row says whose settings these are.
[[ ${scopes[i + 1]} != user ]] && frame+=" ${PFU_C_DIM}${shared}${PFU_C_RESET}"
frame+=$'\n'
continue
fi
case "${types[i]}" in case "${types[i]}" in
bool) bool)
if pfu_is_true "${values[i]}"; then if pfu_is_true "${values[i]}"; then
@@ -426,22 +506,27 @@ pfu_ui_settings() {
camera) shown="$(_pfu_camera_label "${values[i]}")" ;; camera) shown="$(_pfu_camera_label "${values[i]}")" ;;
*) shown="$(pfu_value_label "${keys[i]}" "${values[i]}")" ;; *) shown="$(pfu_value_label "${keys[i]}" "${values[i]}")" ;;
esac esac
star=' ' # Arrows on the selected choice: left and right step through it.
[[ ${scopes[i]} != user ]] && star='*' before=' ' after=''
pad=$(( 44 - ${#labels[i]} )) if (( i == selected )) && [[ ${types[i]} != bool ]]; then
(( pad < 0 )) && pad=0 before="${PFU_C_BLUE}◂${PFU_C_RESET} " after=" ${PFU_C_BLUE}▸${PFU_C_RESET}"
if (( i == cursor )); then marker="$selected"; else marker=' '; fi fi
printf -v row ' %s%s%s%*s %s' "$marker" "${labels[i]}" "${PFU_C_DIM}${star}${PFU_C_RESET}" "$pad" '' "$shown" dim=''
[[ -n ${needs[i]} ]] && ! pfu_is_true "${current[${needs[i]}]}" && dim="$PFU_C_DIM"
pad=$(( width + 2 - ${#labels[i]} ))
if (( i == selected )); then marker="${PFU_C_BLUE}▸${PFU_C_RESET} "; else marker=' '; fi
printf -v row ' %s%s%s%s%*s%s%s%s' "$marker" "$dim" "${labels[i]}" "$PFU_C_RESET" "$pad" '' "$before" "$dim$shown$PFU_C_RESET" "$after"
frame+="$row"$'\n' frame+="$row"$'\n'
# A gap between the groups: the lock screen, other prompts, how it
# checks, the bubble.
case "${keys[i]}" in
ScanOnLock|polkit-1|SkipLidClosed) frame+=$'\n' ;;
esac
done done
frame+=$'\n'" ${PFU_C_DIM}${legend}${PFU_C_RESET}"$'\n' # What the selected setting does, in a box of fixed height so the
frame+=" ${PFU_C_DIM}${hint}${PFU_C_RESET}"$'\n' # screen does not jump while moving through the list.
_pfu_wrap "$wrap" "$(pfu_setting_help "${keys[selected]}" "${values[selected]}")"
frame+=$'\n'" ${PFU_C_DIM}${rule}${PFU_C_RESET}"$'\n'
for j in 0 1 2; do
frame+=" ${PFU_WRAP_LINES[j]:-}"$'\n'
done
frame+=$'\n'" ${PFU_C_DIM}${hint}${PFU_C_RESET}"$'\n'
_pfu_ui_take_notices _pfu_ui_take_notices
frame+="$PFU_UI_NOTICE_TEXT" frame+="$PFU_UI_NOTICE_TEXT"
printf '%s' "$frame" printf '%s' "$frame"
@@ -451,8 +536,10 @@ pfu_ui_settings() {
case "$key" in case "$key" in
up|k) cursor=$(( (cursor - 1 + count) % count )) ;; up|k) cursor=$(( (cursor - 1 + count) % count )) ;;
down|j) cursor=$(( (cursor + 1) % count )) ;; down|j) cursor=$(( (cursor + 1) % count )) ;;
space|enter|right|l) space|enter|right|l|left|h)
_pfu_setting_change "${scopes[cursor]}" "${keys[cursor]}" "${types[cursor]}" "${values[cursor]}" "${choices[cursor]}" local step=1
[[ $key == left || $key == h ]] && step=-1
_pfu_setting_change "${scopes[selected]}" "${keys[selected]}" "${types[selected]}" "${values[selected]}" "${choices[selected]}" "$step"
dirty=1 dirty=1
;; ;;
q|Q|escape) return 0 ;; q|Q|escape) return 0 ;;