feat: show the bubble on gnome

This commit is contained in:
Felitendo committed 2026-09-26 19:34:17 +02:00
1 parent f232f796fc
commit 2a9b0d3f91
28 files changed
+2277 -1076

No files matched your search

+1
View File
@@ -149,6 +149,7 @@ if(FU_BUILD_AGENT)
src/agent/agentsocket.cpp
src/agent/bubblewindow.cpp
src/agent/bubblecontroller.cpp
src/agent/bubbleservice.cpp
src/agent/lockcontroller.cpp
src/agent/lockwatcher.cpp
src/agent/lockers.cpp
+6
View File
@@ -23,6 +23,8 @@ MANDIR ?= $(DATADIR)/man
APPDIR ?= $(DATADIR)/applications
POLKITDIR ?= $(DATADIR)/polkit-1/actions
ICONDIR ?= $(DATADIR)/icons/hicolor/scalable/apps
GNOMEEXTDIR ?= $(DATADIR)/gnome-shell/extensions
GNOMEEXT := face-unlock@loonixtools.github.io
# Where systemd looks for units, asked of systemd itself for a normal install.
# A build with a prefix of its own keeps them under that prefix.
@@ -182,6 +184,9 @@ install: build
"$(DESTDIR)$(POLKITDIR)/io.github.loonixtools.face-unlock.policy"
install -Dm644 res/face-unlock.svg "$(DESTDIR)$(ICONDIR)/face-unlock.svg"
# the GNOME Shell extension that draws the bubble on GNOME
install -Dm644 -t "$(DESTDIR)$(GNOMEEXTDIR)/$(GNOMEEXT)" res/gnome-shell/$(GNOMEEXT)/*
# translations
@for l in $(LINGUAS); do \
if [ -f "po/$$l.mo" ]; then \
@@ -207,6 +212,7 @@ uninstall:
rm -f "$(DESTDIR)$(APPDIR)/io.github.loonixtools.face-unlock-agent.desktop"
rm -f "$(DESTDIR)$(POLKITDIR)/io.github.loonixtools.face-unlock.policy"
rm -f "$(DESTDIR)$(ICONDIR)/face-unlock.svg"
rm -rf "$(DESTDIR)$(GNOMEEXTDIR)/$(GNOMEEXT)"
rm -f "$(DESTDIR)$(MANDIR)/man1/face-unlock.1"
rm -rf "$(DESTDIR)$(DATADIR)/doc/face-unlock"
@for l in $(LINGUAS); do rm -f "$(DESTDIR)$(LOCALEDIR)/$$l/LC_MESSAGES/face-unlock.mo"; done
+4 -1
View File
@@ -73,10 +73,13 @@ desktops, on Wayland:
| | Lock screen | sudo and admin prompts | Bubble |
|---|---|---|---|
| KDE Plasma 6 | ✅ | ✅ | ✅ above the lock screen too |
| GNOME | ✅ | ✅ | ❌ GNOME does not allow it |
| GNOME | ✅ | ✅ | ✅ above the lock screen too |
| Hyprland | ✅ with hyprlock or swaylock | ✅ | ✅ once the lock screen is gone |
| Niri | ✅ with swaylock or hyprlock | ✅ | ✅ once the lock screen is gone |
On GNOME a small GNOME extension draws the bubble. Turning face unlock on
switches it on; right after installing, log out and back in once.
On Hyprland and Niri, admin prompts and setting up a face need a polkit agent
(for example hyprpolkitagent). Hyprland without uwsm does not start the lock
screen part by itself: the menu shows what to add to its config.
+23 -14
View File
@@ -12,13 +12,15 @@ face-unlock - face unlock for Plasma, GNOME, Hyprland and Niri
Look at the screen and it unlocks, the way a phone does. The lock screen, sudo
in a terminal and the admin password prompts can all take a face instead of a
password, on KDE Plasma, GNOME, Hyprland and Niri (see *DESKTOPS*). A photo of somebody on a phone or tablet does not get
in, and with the strict photo check a printed one does not either.
password, on KDE Plasma, GNOME, Hyprland and Niri (see *DESKTOPS*). A photo of
somebody on a phone or tablet does not get in, and with the strict photo check
a printed one does not either.
A bubble at the top of the screen shows what is going on: it drops down when
the camera starts looking, the face in it looks around, and when it recognises
somebody two green rings spin and land around a tick. On Plasma it shows above
the lock screen too. *Animation speed* makes all of it faster or slower.
somebody two green rings spin and land around a tick. On Plasma and GNOME it
shows above the lock screen too. *Animation speed* makes all of it faster or
slower.
Run without a command it shows an interactive menu. Everything it can be told
is reachable from there; the settings files behind it do not need to be edited
@@ -31,7 +33,8 @@ It is a convenience, not a security upgrade. See *HOW SAFE IS THIS*.
*enable*
Turn face unlock on for this user. Sets up a face first if there is none,
starts the lock screen agent, and turns sudo and admin prompts back on if
they were on before.
they were on before. On GNOME it switches on the extension that draws the
bubble.
*disable*
Turn it off: the agent stops and sudo and the admin prompts go back to the
@@ -199,23 +202,26 @@ and counts that as a wrong password. After a face unlock the daemon resets the
failed logins of *pam_faillock*(8), as a correct password does, so face unlocks
never lock the account.
The bubble is a layer-shell surface that KWin keeps above the lock screen
(kde_lockscreen_overlay_v1). KWin only allows that for a program whose desktop
file asks for it, which is
_io.github.loonixtools.face-unlock-agent.desktop_.
On Plasma the bubble is a layer-shell surface that KWin keeps above the lock
screen (kde_lockscreen_overlay_v1). KWin only allows that for a program whose
desktop file asks for it, which is
_io.github.loonixtools.face-unlock-agent.desktop_. How it gets there elsewhere
is under *DESKTOPS*.
# DESKTOPS
All of them on Wayland. sudo and admin prompts work the same everywhere.
*KDE Plasma 6*
Everything. The lock is seen through org.freedesktop.ScreenSaver and
logind, and the bubble shows above the lock screen.
The lock is seen through org.freedesktop.ScreenSaver and logind, and
the bubble shows above the lock screen (kde_lockscreen_overlay_v1).
*GNOME*
The lock is seen through logind, where GNOME sets *LockedHint*. There is
no bubble: GNOME has no layer-shell, and a normal window can neither stay
on top nor pick its place.
The lock is seen through logind, where GNOME sets *LockedHint*. GNOME
lets no program draw above its windows, so a GNOME Shell extension
(_face-unlock@loonixtools.github.io_) draws the bubble, from what the
agent says on the session bus. *enable* switches it on; GNOME loads an
extension that was installed after the login at the next one.
*Hyprland*
With hyprlock or swaylock. Hyprland does not set logind's *LockedHint*,
@@ -297,6 +303,9 @@ _$XDG_RUNTIME_DIR/face-unlock/agent.socket_
Where the daemon tells the agent about scans it did not start, for the
bubble.
_/usr/share/gnome-shell/extensions/face-unlock@loonixtools.github.io/_
The GNOME Shell extension that draws the bubble on GNOME.
# ENVIRONMENT
*NO_COLOR*
+1
View File
@@ -105,6 +105,7 @@ make install DESTDIR=%{buildroot} PREFIX=%{_prefix} VERSION=%{upstream_version}
%{_datadir}/applications/io.github.loonixtools.face-unlock-agent.desktop
%{_datadir}/polkit-1/actions/io.github.loonixtools.face-unlock.policy
%{_datadir}/icons/hicolor/scalable/apps/face-unlock.svg
%{_datadir}/gnome-shell/extensions/face-unlock@loonixtools.github.io/
%{_mandir}/man1/%{name}.1*
%changelog
+85 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.0\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-23 22:32+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: German\n"
@@ -59,8 +59,8 @@ msgstr "Es wurde kein Gesicht hinzugefügt."
msgid "First, set up your face."
msgstr "Richte zuerst dein Gesicht ein."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "Einstellung konnte nicht gespeichert werden."
@@ -74,98 +74,108 @@ msgstr ""
"Keine systemd-Benutzersitzung, daher wurde der Sperrbildschirm-Dienst nicht "
"gestartet."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr ""
"Die GNOME-Erweiterung, die die Bubble zeigt, konnte nicht eingeschaltet "
"werden."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr "Melde dich einmal ab und wieder an: dann zeigt GNOME die Bubble auch."
#: src/face-unlock:124
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."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "Sie kann auch sudo und Admin-Abfragen übernehmen. Siehe Einstellungen."
#: src/face-unlock:131
#: src/face-unlock:142
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."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Es ist noch kein Gesicht eingerichtet."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "an"
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "aus"
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s Aufnahmen, %s dazugelernt"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Welches Gesicht? Die IDs zeigt `%s faces`."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "Gelöscht."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "Aufruf: face-unlock [Befehl]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "Befehle:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "Gesichtsentsperrung einschalten"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "Ausschalten (Gesichter bleiben erhalten)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "Gesicht hinzufügen"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "Gesichter auflisten"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "Ein Gesicht löschen"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "In die Kamera schauen und sehen, was sie sieht"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "Anzeigen, was eingeschaltet ist"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "Diese Hilfe anzeigen"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "Die Version anzeigen"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "Ohne Befehl wird ein interaktives Menü angezeigt."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -173,7 +183,7 @@ msgstr ""
"Starte das als dein eigener Benutzer, nicht als root. Wenn nötig, wird nach "
"deinem Passwort gefragt."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Unbekannter Befehl: %s"
@@ -352,11 +362,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[j/N]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "AN"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "AUS"
@@ -397,7 +407,7 @@ msgstr "langsam"
msgid "%s seconds"
msgstr "%s Sekunden"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "automatisch"
@@ -417,8 +427,8 @@ msgstr "läuft nicht"
msgid "Turning face unlock on again starts it."
msgstr "Die Gesichtsentsperrung erneut einzuschalten startet ihn."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "Gesichter"
@@ -473,13 +483,13 @@ msgstr "Der Sperrbildschirm-Dienst läuft nicht."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME lässt andere Programme nicht über seinen Fenstern erscheinen, daher "
"gibt es auf GNOME keine Bubble."
"Unter GNOME zeigt eine kleine GNOME-Erweiterung die Bubble. Beim Einschalten "
"der Gesichtsentsperrung wird sie mit eingeschaltet."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -487,7 +497,7 @@ msgstr ""
"Entsperrt den Sperrbildschirm, wenn er dein Gesicht sieht. Aus: Dort geht "
"nur dein Passwort."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -495,7 +505,7 @@ msgstr ""
"Scannt, wenn du auf dem Sperrbildschirm eine Taste drückst oder die Maus "
"bewegst, und wenn der Computer aufwacht."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -503,7 +513,7 @@ msgstr ""
"Scannt, sobald der Bildschirm gesperrt wird. Normalerweise aus: Sperrst du "
"selbst, würde er gleich wieder entsperren."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -511,7 +521,7 @@ msgstr ""
"sudo nimmt dein Gesicht statt des Passworts. Passt es nicht, tippst du wie "
"gewohnt dein Passwort."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -519,18 +529,18 @@ msgstr ""
"Die Passwort-Fenster deines Desktops und von Apps, zum Beispiel beim "
"Installieren. Passt das Gesicht nicht, tippst du dein Passwort."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
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:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "Keine Prüfung. Nur zum Ausprobieren einer Kamera."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -538,22 +548,22 @@ msgstr ""
"Hält Fotos auf Handy, Tablet oder Hochglanzpapier auf. Blinzeln ist nicht "
"nötig. Ein matter Ausdruck kann durchkommen."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
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:321
#: src/lib/menu.sh:322
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:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "Der Standard. Passt für die meisten."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -561,7 +571,7 @@ 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:324
#: src/lib/menu.sh:325
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)."
@@ -570,11 +580,11 @@ msgstr ""
"neu einrichten. Eine Infrarot-Kamera braucht ihr Licht (linux-enable-ir-"
"emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
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:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -582,7 +592,7 @@ 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:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -590,82 +600,82 @@ msgstr ""
"Kein Scan bei zugeklapptem Laptop, zum Beispiel am Schreibtisch mit externem "
"Bildschirm."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
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:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "Eine kleine Pille mit einem Schloss, das aufgeht."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
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:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "Wie schnell sich die Bubble bewegt."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
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:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automatisch (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(Infrarot)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(nicht angeschlossen)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "Einstellungen"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ auswählen ←→ oder Leertaste: ändern q: zurück"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "für alle Nutzer, fragt nach deinem Passwort"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
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"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
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."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "Neuer Name:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "„%s“ löschen?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "Gesichtsentsperrung ein- oder ausschalten"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "Ausprobieren"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "Beenden"
@@ -887,23 +897,23 @@ msgstr ""
msgid "The face could not be added (%1)."
msgstr "Das Gesicht konnte nicht hinzugefügt werden (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr "Gesichtsentsperrung für Sperrbildschirm, sudo und Admin-Abfragen"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "Ein Gesicht einrichten."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "Wie das neue Gesicht heißen soll."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "Die Animationen der Bubble einmal abspielen."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "Bubble-Stil für die Demo: full oder minimal."
+85 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Spanish\n"
@@ -58,8 +58,8 @@ msgstr "No se añadió ninguna cara."
msgid "First, set up your face."
msgstr "Primero, configura tu cara."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "No se pudo guardar el ajuste."
@@ -73,100 +73,110 @@ msgstr ""
"No hay sesión de usuario de systemd, así que no se inició el agente de la "
"pantalla de bloqueo."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "No se pudo activar la extensión de GNOME que muestra la burbuja."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr ""
"Cierra la sesión y vuelve a entrar una vez: entonces GNOME también muestra "
"la burbuja."
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
"El desbloqueo facial está activado. Bloquea la pantalla y mírala para "
"probarlo."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr ""
"También funciona con sudo y las solicitudes de administrador. Consulta "
"Ajustes."
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"El desbloqueo facial está desactivado. Tus caras se conservan; bórralas en "
"Caras."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Todavía no hay ninguna cara configurada."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "activado"
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "desactivado"
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s muestras, %s aprendidas"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "¿Qué cara? Consulta `%s faces` para ver los ID."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "Borrado."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "Uso: face-unlock [comando]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "Comandos:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "Activar el desbloqueo facial"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "Desactivarlo (las caras se conservan)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "Añadir una cara"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "Listar las caras"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "Borrar una cara"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "Mirar a la cámara y ver lo que ve"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "Mostrar qué está activado"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "Mostrar esta ayuda"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "Mostrar la versión"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "Sin comando se muestra un menú interactivo."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -174,7 +184,7 @@ msgstr ""
"Ejecuta esto con tu propio usuario, no como root. Pide tu contraseña cuando "
"la necesita."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Comando desconocido: %s"
@@ -353,11 +363,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[s/N]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "ACTIVADO"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "DESACTIVADO"
@@ -398,7 +408,7 @@ msgstr "lenta"
msgid "%s seconds"
msgstr "%s segundos"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "automática"
@@ -418,8 +428,8 @@ msgstr "detenido"
msgid "Turning face unlock on again starts it."
msgstr "Al volver a activar el desbloqueo facial, se inicia."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "Caras"
@@ -474,13 +484,13 @@ msgstr "El agente de la pantalla de bloqueo no se está ejecutando."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME no deja que otros programas se muestren sobre sus ventanas, así que en "
"GNOME no hay burbuja."
"En GNOME, una pequeña extensión de GNOME muestra la burbuja. Al activar el "
"desbloqueo facial se activa también."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -488,7 +498,7 @@ msgstr ""
"Desbloquea la pantalla de bloqueo cuando ve tu cara. Desactivado: ahí solo "
"sirve tu contraseña."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -496,7 +506,7 @@ msgstr ""
"Escanea cuando pulsas una tecla o mueves el ratón en la pantalla de bloqueo, "
"y cuando el equipo se despierta."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -504,7 +514,7 @@ msgstr ""
"Escanea en cuanto se bloquea la pantalla. Desactivado por defecto: si la "
"bloqueas tú, se desbloquearía enseguida."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -512,7 +522,7 @@ msgstr ""
"sudo usa tu cara en lugar de la contraseña. Si no coincide, escribes la "
"contraseña como siempre."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -520,18 +530,18 @@ msgstr ""
"Las ventanas de contraseña de tu escritorio y de las aplicaciones, por "
"ejemplo al instalar software. Si no coincide, escribes la contraseña."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Tienes que parpadear o girar un poco la cabeza. Esto también frena las fotos "
"impresas."
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "Sin comprobación. Solo para probar una cámara."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -539,24 +549,24 @@ msgstr ""
"Frena fotos en un móvil, una tableta o papel brillante. No hace falta "
"parpadear. Una foto impresa en papel mate puede pasar."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Menos coincidencias erróneas, pero puede que no te reconozca con gafas o con "
"poca luz."
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr ""
"Te reconoce con más facilidad, pero también a alguien que se parezca mucho a "
"ti."
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "El valor por defecto. Adecuado para la mayoría."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -564,7 +574,7 @@ msgstr ""
"Tus ojos tienen que estar abiertos y mirando a la pantalla. Así no se "
"desbloquea mientras miras a otro lado o duermes."
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -573,11 +583,11 @@ msgstr ""
"tu cara. Una cámara infrarroja necesita su luz encendida (linux-enable-ir-"
"emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "Cuánto tiempo busca la cámara tu cara antes de rendirse."
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -585,7 +595,7 @@ msgstr ""
"Tras una coincidencia segura, recuerda tu aspecto actual. Así, un corte de "
"pelo nuevo o unas gafas no piden configurar de nuevo."
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -593,85 +603,85 @@ msgstr ""
"Sin escaneo mientras el portátil está cerrado, por ejemplo en un escritorio "
"con una pantalla externa."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr ""
"La burbuja en la parte superior de la pantalla muestra lo que hace la cámara."
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "Una pequeña pastilla con un candado que se abre."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr ""
"Una isla con una cara que mira alrededor, luego anillos y una marca de "
"verificación."
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "La velocidad a la que se mueve la burbuja."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
"Muestra la burbuja también cuando sudo o una solicitud de administrador "
"escanea tu cara."
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automática (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(infrarroja)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(no conectada)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "Ajustes"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ elegir ←→ o Espacio: cambiar q: volver"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "para todos los usuarios, pide tu contraseña"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"Arriba/Abajo: elegir, Espacio: activar/desactivar, r: renombrar, d: borrar, "
"a: añadir, q: volver"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "Todavía no hay ninguna cara configurada. Pulsa a para añadir una."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "Nuevo nombre:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "¿Borrar «%s»?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "Activar o desactivar el desbloqueo facial"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "Probarlo"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "Salir"
@@ -890,25 +900,25 @@ msgstr ""
msgid "The face could not be added (%1)."
msgstr "No se pudo añadir la cara (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr ""
"Desbloqueo facial para la pantalla de bloqueo, sudo y las solicitudes de "
"administrador"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "Configurar una cara."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "Cómo llamar a la nueva cara."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "Reproducir una vez las animaciones de la burbuja."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "Estilo de burbuja para la demo: full o minimal."
+81 -73
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -54,8 +54,8 @@ msgstr ""
msgid "First, set up your face."
msgstr ""
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr ""
@@ -67,100 +67,108 @@ msgstr ""
msgid "No systemd user session, so the lock screen agent was not started."
msgstr ""
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr ""
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr ""
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr ""
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr ""
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr ""
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr ""
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr ""
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr ""
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr ""
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr ""
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr ""
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr ""
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr ""
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr ""
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr ""
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr ""
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr ""
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr ""
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr ""
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr ""
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr ""
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
msgstr ""
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr ""
@@ -335,11 +343,11 @@ msgstr ""
msgid "[y/N]"
msgstr ""
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr ""
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr ""
@@ -380,7 +388,7 @@ msgstr ""
msgid "%s seconds"
msgstr ""
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr ""
@@ -400,8 +408,8 @@ msgstr ""
msgid "Turning face unlock on again starts it."
msgstr ""
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr ""
@@ -456,168 +464,168 @@ msgstr ""
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
msgstr ""
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
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:314
#: src/lib/menu.sh:315
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:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
msgstr ""
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
msgstr ""
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr ""
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
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:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr ""
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr ""
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
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:324
#: src/lib/menu.sh:325
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:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr ""
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
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:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
msgstr ""
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr ""
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr ""
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr ""
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr ""
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr ""
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr ""
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr ""
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr ""
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr ""
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr ""
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr ""
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr ""
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr ""
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr ""
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr ""
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr ""
@@ -829,23 +837,23 @@ msgstr ""
msgid "The face could not be added (%1)."
msgstr ""
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr ""
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr ""
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr ""
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr ""
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr ""
+85 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: French\n"
@@ -60,8 +60,8 @@ msgstr "Aucun visage n'a été ajouté."
msgid "First, set up your face."
msgstr "Configurez d'abord votre visage."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "Impossible d'enregistrer le réglage."
@@ -75,100 +75,110 @@ msgstr ""
"Pas de session utilisateur systemd, l'agent de l'écran de verrouillage n'a "
"donc pas été démarré."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "Impossible d'activer l'extension GNOME qui affiche la bulle."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr ""
"Déconnectez-vous puis reconnectez-vous une fois : GNOME affichera alors "
"aussi la bulle."
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
"Le déverrouillage facial est activé. Verrouillez l'écran et regardez-le pour "
"essayer."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr ""
"Il fonctionne aussi pour sudo et les demandes d'administration. Voir "
"Réglages."
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"Le déverrouillage facial est désactivé. Vos visages sont conservés ; "
"supprimez-les dans Visages."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Aucun visage n'est encore configuré."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "activé"
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "désactivé"
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s échantillons, %s appris"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Quel visage ? Voir `%s faces` pour les identifiants."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "Supprimé."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "Utilisation : face-unlock [commande]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "Commandes :"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "Activer le déverrouillage facial"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "Le désactiver (les visages sont conservés)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "Ajouter un visage"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "Lister les visages"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "Supprimer un visage"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "Regarder la caméra et voir ce qu'elle voit"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "Afficher ce qui est activé"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "Afficher cette aide"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "Afficher la version"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "Sans commande, un menu interactif s'affiche."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -176,7 +186,7 @@ msgstr ""
"Lancez ceci avec votre propre utilisateur, pas en root. Le mot de passe est "
"demandé quand il le faut."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Commande inconnue : %s"
@@ -357,11 +367,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[o/N]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "ACTIVÉ"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "DÉSACTIVÉ"
@@ -402,7 +412,7 @@ msgstr "lent"
msgid "%s seconds"
msgstr "%s secondes"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "automatique"
@@ -422,8 +432,8 @@ msgstr "arrêté"
msgid "Turning face unlock on again starts it."
msgstr "Réactiver le déverrouillage facial le démarre."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "Visages"
@@ -478,13 +488,13 @@ msgstr "L'agent de l'écran de verrouillage ne tourne pas."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME ne laisse pas d'autres programmes s'afficher au-dessus de ses "
"fenêtres, il n'y a donc pas de bulle sous GNOME."
"Sous GNOME, une petite extension GNOME affiche la bulle. Activer le "
"déverrouillage facial l'active aussi."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -492,7 +502,7 @@ msgstr ""
"Déverrouille l'écran de verrouillage quand il voit votre visage. Désactivé : "
"seul votre mot de passe fonctionne."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -500,7 +510,7 @@ msgstr ""
"Scanne quand vous appuyez sur une touche ou bougez la souris sur l'écran de "
"verrouillage, et au réveil de l'ordinateur."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -508,7 +518,7 @@ msgstr ""
"Scanne dès que l'écran se verrouille. Désactivé par défaut : si vous "
"verrouillez vous-même, il se déverrouillerait aussitôt."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -516,7 +526,7 @@ msgstr ""
"sudo prend votre visage au lieu du mot de passe. Sinon, vous tapez le mot de "
"passe comme d'habitude."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -524,18 +534,18 @@ msgstr ""
"Les fenêtres de mot de passe de votre bureau et des applications, par "
"exemple pour installer un logiciel. Sinon, vous tapez le mot de passe."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Vous devez cligner des yeux ou tourner un peu la tête. Cela bloque aussi les "
"photos imprimées."
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "Aucun contrôle. Seulement pour essayer une caméra."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -543,24 +553,24 @@ msgstr ""
"Bloque les photos sur un téléphone, une tablette ou du papier brillant. Pas "
"besoin de cligner des yeux. Une photo imprimée mate peut passer."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Moins d'erreurs de correspondance, mais il peut ne pas vous reconnaître avec "
"des lunettes ou sous une mauvaise lumière."
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr ""
"Vous reconnaît plus facilement, mais aussi quelqu'un qui vous ressemble "
"beaucoup."
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "La valeur par défaut. Convient à la plupart des gens."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -568,7 +578,7 @@ msgstr ""
"Vos yeux doivent être ouverts et tournés vers l'écran. Ainsi, rien ne se "
"déverrouille quand vous regardez ailleurs ou dormez."
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -577,11 +587,11 @@ msgstr ""
"reconfigurez votre visage. Une caméra infrarouge doit avoir sa lumière "
"allumée (linux-enable-ir-emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "Combien de temps la caméra cherche votre visage avant d'abandonner."
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -590,7 +600,7 @@ msgstr ""
"nouvelle coupe ou des lunettes ne demandent donc pas de nouvelle "
"configuration."
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -598,84 +608,84 @@ msgstr ""
"Pas de scan quand le portable est fermé, par exemple à un bureau avec un "
"écran externe."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "La bulle en haut de l'écran montre ce que fait la caméra."
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "Une petite pilule avec un cadenas qui s'ouvre."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr ""
"Un îlot avec un visage qui regarde autour de lui, puis des anneaux et une "
"coche."
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "La vitesse à laquelle la bulle bouge."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
"Affiche aussi la bulle quand sudo ou une demande d'administration scanne "
"votre visage."
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automatique (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(infrarouge)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(non branchée)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "Réglages"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ choisir ←→ ou Espace : changer q : retour"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "pour tous, demande votre mot de passe"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"Haut/Bas : choisir, Espace : activer/désactiver, r : renommer, d : "
"supprimer, a : ajouter, q : retour"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "Aucun visage n'est encore configuré. Appuyez sur a pour en ajouter un."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "Nouveau nom :"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Supprimer « %s » ?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "Activer ou désactiver le déverrouillage facial"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "Essayer"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "Quitter"
@@ -895,25 +905,25 @@ msgstr "La caméra est occupée par un autre scan. Réessayez dans un instant."
msgid "The face could not be added (%1)."
msgstr "Le visage n'a pas pu être ajouté (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr ""
"Déverrouillage facial pour l'écran de verrouillage, sudo et les demandes "
"d'administration"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "Configurer un visage."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "Le nom du nouveau visage."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "Jouer une fois les animations de la bulle."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "Style de bulle pour la démo : full ou minimal."
+83 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Italian\n"
@@ -58,8 +58,8 @@ msgstr "Nessun volto aggiunto."
msgid "First, set up your face."
msgstr "Per prima cosa, configura il tuo volto."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "Impossibile salvare l'impostazione."
@@ -73,98 +73,106 @@ msgstr ""
"Nessuna sessione utente di systemd, quindi l'agente della schermata di "
"blocco non è stato avviato."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "Impossibile attivare l'estensione di GNOME che mostra la bolla."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr "Esci e rientra una volta: poi GNOME mostra anche la bolla."
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
"Lo sblocco con il volto è attivo. Blocca lo schermo e guardalo per provarlo."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr ""
"Funziona anche con sudo e le richieste di amministratore. Vedi Impostazioni."
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"Lo sblocco con il volto è disattivato. I tuoi volti restano salvati; "
"eliminali in Volti."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Nessun volto ancora configurato."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "attivo"
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "disattivo"
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s campioni, %s appresi"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Quale volto? Vedi `%s faces` per gli ID."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "Eliminato."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "Uso: face-unlock [comando]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "Comandi:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "Attiva lo sblocco con il volto"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "Disattivalo (i volti restano salvati)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "Aggiungi un volto"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "Elenca i volti"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "Elimina un volto"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "Guarda la fotocamera e vedi cosa vede"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "Mostra cosa è attivo"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "Mostra questo aiuto"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "Mostra la versione"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "Senza comando viene mostrato un menu interattivo."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -172,7 +180,7 @@ msgstr ""
"Esegui questo con il tuo utente, non come root. Chiede la password quando "
"serve."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Comando sconosciuto: %s"
@@ -352,11 +360,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[s/N]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "ATTIVO"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "DISATTIVO"
@@ -397,7 +405,7 @@ msgstr "lenta"
msgid "%s seconds"
msgstr "%s secondi"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "automatica"
@@ -417,8 +425,8 @@ msgstr "non in esecuzione"
msgid "Turning face unlock on again starts it."
msgstr "Riattivare lo sblocco con il volto lo avvia."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "Volti"
@@ -473,13 +481,13 @@ msgstr "L'agente della schermata di blocco non è in esecuzione."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME non permette ad altri programmi di comparire sopra le sue finestre, "
"quindi su GNOME non c'è la bolla."
"Su GNOME una piccola estensione di GNOME mostra la bolla. Attivando lo "
"sblocco con il volto si attiva anche lei."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -487,7 +495,7 @@ msgstr ""
"Sblocca la schermata di blocco quando vede il tuo volto. Disattivo: lì "
"funziona solo la password."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -495,7 +503,7 @@ msgstr ""
"Esegue la scansione quando premi un tasto o muovi il mouse sulla schermata "
"di blocco, e quando il computer si riattiva."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -503,7 +511,7 @@ msgstr ""
"Esegue la scansione appena lo schermo si blocca. Disattivo di norma: se lo "
"blocchi tu, si sbloccherebbe subito."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -511,7 +519,7 @@ msgstr ""
"sudo usa il tuo volto al posto della password. Se non corrisponde, digiti la "
"password come al solito."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -519,18 +527,18 @@ msgstr ""
"Le finestre della password del tuo desktop e delle app, per esempio quando "
"installi software. Se non corrisponde, digiti la password."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Devi sbattere le palpebre o girare un po' la testa. Questo ferma anche le "
"foto stampate."
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "Nessun controllo. Solo per provare una fotocamera."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -538,22 +546,22 @@ msgstr ""
"Ferma le foto su un telefono, un tablet o carta lucida. Non serve sbattere "
"le palpebre. Una foto stampata opaca può passare."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Meno scambi di persona, ma potrebbe non riconoscerti con gli occhiali o con "
"poca luce."
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Ti riconosce più facilmente, ma anche qualcuno che ti somiglia molto."
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "Il valore predefinito. Va bene per la maggior parte delle persone."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -561,7 +569,7 @@ msgstr ""
"I tuoi occhi devono essere aperti e rivolti allo schermo. Così non si "
"sblocca mentre guardi altrove o dormi."
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -570,11 +578,11 @@ msgstr ""
"nuovo il tuo volto. Una fotocamera a infrarossi ha bisogno della sua luce "
"(linux-enable-ir-emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "Per quanto tempo la fotocamera cerca il tuo volto prima di arrendersi."
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -583,7 +591,7 @@ msgstr ""
"nuovo taglio di capelli o gli occhiali non richiedono una nuova "
"configurazione."
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -591,82 +599,82 @@ msgstr ""
"Nessuna scansione quando il portatile è chiuso, per esempio alla scrivania "
"con uno schermo esterno."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "La bolla in cima allo schermo mostra cosa sta facendo la fotocamera."
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "Una piccola pillola con un lucchetto che si apre."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Un'isola con un volto che si guarda intorno, poi anelli e una spunta."
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "Quanto velocemente si muove la bolla."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
"Mostra la bolla anche quando sudo o una richiesta di amministratore "
"scansiona il tuo volto."
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automatica (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(infrarossi)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(non collegata)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "Impostazioni"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ scegli ←→ o Spazio: cambia q: indietro"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "per tutti gli utenti, chiede la tua password"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"Su/Giù: scegli, Spazio: attiva/disattiva, r: rinomina, d: elimina, a: "
"aggiungi, q: indietro"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "Nessun volto ancora configurato. Premi a per aggiungerne uno."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "Nuovo nome:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Eliminare «%s»?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "Attiva o disattiva lo sblocco con il volto"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "Provalo"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "Esci"
@@ -886,25 +894,25 @@ msgstr ""
msgid "The face could not be added (%1)."
msgstr "Impossibile aggiungere il volto (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr ""
"Sblocco con il volto per la schermata di blocco, sudo e le richieste di "
"amministratore"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "Configura un volto."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "Come chiamare il nuovo volto."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "Riproduci una volta le animazioni della bolla."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "Stile della bolla per la demo: full o minimal."
+84 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Japanese\n"
@@ -57,8 +57,8 @@ msgstr "顔は追加されませんでした。"
msgid "First, set up your face."
msgstr "まず顔を登録してください。"
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "設定を保存できませんでした。"
@@ -72,94 +72,103 @@ msgstr ""
"systemd のユーザーセッションがないため、ロック画面エージェントは起動されませ"
"んでした。"
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "バブルを表示する GNOME 拡張機能を有効にできませんでした。"
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr ""
"一度ログアウトしてログインし直してください。GNOME でもバブルが表示されます。"
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr "顔認証はオンです。画面をロックして、画面を見て試してください。"
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "sudo や管理者の認証にも使えます。「設定」を参照してください。"
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr "顔認証はオフです。顔データは残っています。「顔」から削除できます。"
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "まだ顔が登録されていません。"
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "オン"
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "オフ"
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "サンプル %s 件、学習 %s 件"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "どの顔ですか? ID は `%s faces` で確認できます。"
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "削除しました。"
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "使い方: face-unlock [コマンド]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "コマンド:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "顔認証をオンにする"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "オフにする(顔データは残ります)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "顔を追加"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "顔の一覧"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "顔を削除"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "カメラを見て、カメラに映るものを確認する"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "オンになっている機能を表示"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "このヘルプを表示"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "バージョンを表示"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "コマンドなしで起動すると、対話式メニューが表示されます。"
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -167,7 +176,7 @@ msgstr ""
"root ではなく、自分のユーザーで実行してください。必要なときはパスワードを尋ね"
"ます。"
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "不明なコマンド: %s"
@@ -346,11 +355,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[y/N]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "オン"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "オフ"
@@ -391,7 +400,7 @@ msgstr "遅い"
msgid "%s seconds"
msgstr "%s 秒"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "自動"
@@ -411,8 +420,8 @@ msgstr "停止中"
msgid "Turning face unlock on again starts it."
msgstr "顔認証をもう一度オンにすると起動します。"
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "顔"
@@ -467,13 +476,13 @@ msgstr "ロック画面エージェントが動いていません。"
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME はほかのプログラムを自分のウィンドウの上に表示させないため、GNOME では"
"バブルは表示されません。"
"GNOME では小さな GNOME 拡張機能がバブルを表示します。顔認証をオンにすると一緒"
"に有効になります。"
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -481,7 +490,7 @@ msgstr ""
"顔を認識するとロック画面を解除します。オフ: ロック画面ではパスワードだけが使"
"えます。"
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -489,7 +498,7 @@ msgstr ""
"ロック画面でキーを押すかマウスを動かしたとき、そしてコンピューターがスリープ"
"から復帰したときにスキャンします。"
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -497,7 +506,7 @@ msgstr ""
"画面がロックされるとすぐにスキャンします。既定はオフ: 自分でロックすると、す"
"ぐに解除されてしまうためです。"
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -505,7 +514,7 @@ msgstr ""
"sudo でパスワードの代わりに顔を使います。一致しなければ、いつも通りパスワード"
"を入力します。"
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -513,16 +522,16 @@ msgstr ""
"デスクトップやアプリのパスワード画面です(ソフトウェアのインストール時な"
"ど)。一致しなければパスワードを入力します。"
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr "まばたきするか、少し顔を動かす必要があります。印刷した写真も防げます。"
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "チェックしません。カメラを試すときだけ使ってください。"
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -530,22 +539,22 @@ msgstr ""
"スマホ、タブレット、光沢紙に映った写真を防ぎます。まばたきは不要です。つや消"
"しの印刷写真は通ることがあります。"
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"誤認識は減りますが、眼鏡をかけているときや暗いときに認識されないことがありま"
"す。"
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "認識されやすくなりますが、あなたによく似た人も認識されやすくなります。"
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "既定値です。ほとんどの人に適しています。"
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -553,7 +562,7 @@ msgstr ""
"目を開けて画面を見ている必要があります。よそ見や居眠りの間にロック解除されま"
"せん。"
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -561,11 +570,11 @@ msgstr ""
"「自動」は最初の通常のカメラを使います。変更したら顔を登録し直してください。"
"赤外線カメラはライトをオンにする必要があります(linux-enable-ir-emitter)。"
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "カメラが顔を探してからあきらめるまでの時間です。"
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -573,7 +582,7 @@ msgstr ""
"確実に一致したとき、今の見た目を覚えます。髪型を変えたり眼鏡をかけたりして"
"も、登録し直す必要はありません。"
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -581,79 +590,79 @@ msgstr ""
"ノートパソコンを閉じているときはスキャンしません。外部モニターにつないで机で"
"使う場合などです。"
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "画面上部のバブルに、カメラの状態が表示されます。"
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "鍵が開く小さなピルです。"
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr "あたりを見回す顔のアイランド。そのあとリングとチェックマークが出ます。"
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "バブルが動く速さです。"
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr "sudo や管理者の認証で顔をスキャンするときにもバブルを表示します。"
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "自動(%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(赤外線)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(未接続)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "設定"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ 選択 ←→ またはスペース: 変更 q: 戻る"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "全ユーザー共通、パスワードが必要"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"上/下: 選択、スペース: オン/オフ、r: 名前を変更、d: 削除、a: 追加、q: 戻る"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "まだ顔が登録されていません。a を押して追加してください。"
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "新しい名前:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "「%s」を削除しますか?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "顔認証のオン/オフ"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "試す"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "終了"
@@ -868,23 +877,23 @@ msgstr "カメラは別のスキャン中です。少ししてからもう一度
msgid "The face could not be added (%1)."
msgstr "顔を追加できませんでした(%1)。"
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr "ロック画面、sudo、管理者の認証のための顔認証"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "顔を登録します。"
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "新しい顔の名前。"
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "バブルのアニメーションを一度再生します。"
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "デモのバブルスタイル: full または minimal。"
+84 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Korean\n"
@@ -57,8 +57,8 @@ msgstr "얼굴이 추가되지 않았습니다."
msgid "First, set up your face."
msgstr "먼저 얼굴을 등록하세요."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "설정을 저장하지 못했습니다."
@@ -70,103 +70,112 @@ msgstr "잠금 화면 에이전트를 시작하지 못했습니다."
msgid "No systemd user session, so the lock screen agent was not started."
msgstr "systemd 사용자 세션이 없어 잠금 화면 에이전트를 시작하지 않았습니다."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "버블을 보여 주는 GNOME 확장을 켜지 못했습니다."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr ""
"한 번 로그아웃했다가 다시 로그인하세요. 그러면 GNOME에서도 버블이 보입니다."
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
"얼굴 잠금 해제가 켜졌습니다. 화면을 잠그고 화면을 바라보며 사용해 보세요."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "sudo와 관리자 인증 창에서도 쓸 수 있습니다. 설정을 참고하세요."
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"얼굴 잠금 해제가 꺼졌습니다. 얼굴 데이터는 남아 있으며, 얼굴 메뉴에서 삭제할 "
"수 있습니다."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "아직 등록된 얼굴이 없습니다."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "켜짐"
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "꺼짐"
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "샘플 %s개, 학습 %s개"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "어떤 얼굴인가요? ID는 `%s faces`에서 확인하세요."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "삭제했습니다."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "사용법: face-unlock [명령]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "명령:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "얼굴 잠금 해제 켜기"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "끄기 (얼굴 데이터는 유지)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "얼굴 추가"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "얼굴 목록"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "얼굴 삭제"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "카메라를 보고 카메라에 보이는 것을 확인"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "켜져 있는 기능 보기"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "이 도움말 보기"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "버전 보기"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "명령 없이 실행하면 대화형 메뉴가 나옵니다."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
msgstr "root가 아닌 본인 사용자로 실행하세요. 필요하면 비밀번호를 묻습니다."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "알 수 없는 명령: %s"
@@ -345,11 +354,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[y/N]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "켜짐"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "꺼짐"
@@ -390,7 +399,7 @@ msgstr "느리게"
msgid "%s seconds"
msgstr "%s초"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "자동"
@@ -410,8 +419,8 @@ msgstr "실행 중 아님"
msgid "Turning face unlock on again starts it."
msgstr "얼굴 잠금 해제를 다시 켜면 시작됩니다."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "얼굴"
@@ -466,20 +475,20 @@ msgstr "잠금 화면 에이전트가 실행 중이 아닙니다."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME은 다른 프로그램이 자기 창 위에 표시되는 것을 허용하지 않으므로 GNOME에"
"서는 버블이 없습니다."
"GNOME에서는 작은 GNOME 확장이 버블을 보여 줍니다. 얼굴 잠금 해제를 켜면 함께 "
"켜집니다."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
msgstr ""
"얼굴을 보면 잠금 화면을 해제합니다. 꺼짐: 잠금 화면에서는 비밀번호만 됩니다."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -487,7 +496,7 @@ msgstr ""
"잠금 화면에서 키를 누르거나 마우스를 움직일 때, 그리고 컴퓨터가 깨어날 때 스"
"캔합니다."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -495,7 +504,7 @@ msgstr ""
"화면이 잠기자마자 스캔합니다. 기본값은 꺼짐: 직접 잠그면 곧바로 다시 풀려 버"
"리기 때문입니다."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -503,7 +512,7 @@ msgstr ""
"sudo가 비밀번호 대신 얼굴을 사용합니다. 일치하지 않으면 평소처럼 비밀번호를 "
"입력합니다."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -511,16 +520,16 @@ msgstr ""
"데스크톱과 앱의 비밀번호 창입니다. 예를 들어 소프트웨어를 설치할 때입니다. 일"
"치하지 않으면 비밀번호를 입력합니다."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr "눈을 깜빡이거나 고개를 살짝 돌려야 합니다. 인쇄한 사진도 막아 줍니다."
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "검사하지 않습니다. 카메라를 시험할 때만 쓰세요."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -528,22 +537,22 @@ msgstr ""
"휴대폰, 태블릿, 광택지에 있는 사진을 막습니다. 눈을 깜빡일 필요는 없습니다. "
"무광 인쇄 사진은 통과할 수 있습니다."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"잘못 일치하는 경우가 줄지만, 안경을 쓰거나 조명이 나쁘면 알아보지 못할 수 있"
"습니다."
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "더 쉽게 알아보지만, 당신과 많이 닮은 사람도 알아볼 수 있습니다."
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "기본값입니다. 대부분의 사람에게 알맞습니다."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -551,7 +560,7 @@ msgstr ""
"눈을 뜨고 화면을 보고 있어야 합니다. 그래서 다른 곳을 보거나 자는 동안에는 풀"
"리지 않습니다."
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -559,11 +568,11 @@ msgstr ""
"자동은 첫 번째 일반 카메라를 사용합니다. 바꾼 뒤에는 얼굴을 다시 등록하세요. "
"적외선 카메라는 조명을 켜야 합니다 (linux-enable-ir-emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "카메라가 포기하기 전까지 얼굴을 찾는 시간입니다."
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -571,7 +580,7 @@ msgstr ""
"확실히 일치하면 지금 모습을 기억합니다. 그래서 머리 모양이 바뀌거나 안경을 써"
"도 다시 등록할 필요가 없습니다."
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -579,79 +588,79 @@ msgstr ""
"노트북을 덮었을 때는 스캔하지 않습니다. 예를 들어 외부 모니터를 연결해 책상에"
"서 쓸 때입니다."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "화면 위쪽의 버블이 카메라가 하는 일을 보여 줍니다."
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "자물쇠가 열리는 작은 알약입니다."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr "주위를 둘러보는 얼굴이 있는 아일랜드, 그다음 링과 체크 표시입니다."
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "버블이 움직이는 속도입니다."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr "sudo나 관리자 인증 창이 얼굴을 스캔할 때도 버블을 보여 줍니다."
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "자동 (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(적외선)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(연결 안 됨)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "설정"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ 선택 ←→ 또는 스페이스: 변경 q: 뒤로"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "모든 사용자에게 적용, 비밀번호 필요"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"위/아래: 선택, 스페이스: 켜기/끄기, r: 이름 바꾸기, d: 삭제, a: 추가, q: 뒤로"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "아직 등록된 얼굴이 없습니다. a를 눌러 추가하세요."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "새 이름:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "\"%s\" 항목을 삭제할까요?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "얼굴 잠금 해제 켜기/끄기"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "사용해 보기"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "끝내기"
@@ -868,23 +877,23 @@ msgstr "카메라가 다른 스캔으로 사용 중입니다. 잠시 후 다시
msgid "The face could not be added (%1)."
msgstr "얼굴을 추가하지 못했습니다 (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr "잠금 화면, sudo, 관리자 인증 창을 위한 얼굴 잠금 해제"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "얼굴을 등록합니다."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "새 얼굴의 이름."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "버블 애니메이션을 한 번 재생합니다."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "데모용 버블 스타일: full 또는 minimal."
+83 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Dutch\n"
@@ -58,8 +58,8 @@ msgstr "Er is geen gezicht toegevoegd."
msgid "First, set up your face."
msgstr "Stel eerst je gezicht in."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "Kon de instelling niet opslaan."
@@ -73,98 +73,106 @@ msgstr ""
"Geen systemd-gebruikerssessie, dus de agent voor het vergrendelscherm is "
"niet gestart."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "Kon de GNOME-extensie die de bubbel toont niet inschakelen."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr "Meld je één keer af en weer aan: dan toont GNOME de bubbel ook."
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
"Gezichtsontgrendeling staat aan. Vergrendel het scherm en kijk ernaar om het "
"te proberen."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "Het werkt ook voor sudo en beheerdersvragen. Zie Instellingen."
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"Gezichtsontgrendeling staat uit. Je gezichten blijven bewaard; verwijder ze "
"onder Gezichten."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Er is nog geen gezicht ingesteld."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "aan"
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "uit"
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s opnames, %s bijgeleerd"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Welk gezicht? Zie `%s faces` voor de ID's."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "Verwijderd."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "Gebruik: face-unlock [opdracht]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "Opdrachten:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "Gezichtsontgrendeling aanzetten"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "Uitzetten (gezichten blijven bewaard)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "Een gezicht toevoegen"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "De gezichten tonen"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "Een gezicht verwijderen"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "In de camera kijken en zien wat hij ziet"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "Tonen wat er aan staat"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "Deze hulp tonen"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "De versie tonen"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "Zonder opdracht verschijnt een interactief menu."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -172,7 +180,7 @@ msgstr ""
"Voer dit uit als je eigen gebruiker, niet als root. Het vraagt om je "
"wachtwoord als dat nodig is."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Onbekende opdracht: %s"
@@ -351,11 +359,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[j/N]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "AAN"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "UIT"
@@ -396,7 +404,7 @@ msgstr "langzaam"
msgid "%s seconds"
msgstr "%s seconden"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "automatisch"
@@ -416,8 +424,8 @@ msgstr "draait niet"
msgid "Turning face unlock on again starts it."
msgstr "Gezichtsontgrendeling opnieuw aanzetten start hem."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "Gezichten"
@@ -472,13 +480,13 @@ msgstr "De agent voor het vergrendelscherm draait niet."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME laat andere programma's niet boven zijn vensters verschijnen, dus op "
"GNOME is er geen bubbel."
"Op GNOME toont een kleine GNOME-extensie de bubbel. Als je "
"gezichtsontgrendeling inschakelt, gaat die ook aan."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -486,7 +494,7 @@ msgstr ""
"Ontgrendelt het vergrendelscherm als het je gezicht ziet. Uit: daar werkt "
"alleen je wachtwoord."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -494,7 +502,7 @@ msgstr ""
"Scant als je op het vergrendelscherm een toets indrukt of de muis beweegt, "
"en als de computer ontwaakt."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -502,7 +510,7 @@ msgstr ""
"Scant zodra het scherm vergrendelt. Standaard uit: vergrendel je zelf, dan "
"zou het meteen weer ontgrendelen."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -510,7 +518,7 @@ msgstr ""
"sudo neemt je gezicht in plaats van het wachtwoord. Geen match: je typt "
"zoals gewoonlijk je wachtwoord."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -518,18 +526,18 @@ msgstr ""
"De wachtwoordvensters van je bureaublad en apps, bijvoorbeeld bij het "
"installeren van software. Geen match: je typt je wachtwoord."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Je moet knipperen of je hoofd een beetje draaien. Dat houdt ook geprinte "
"foto's tegen."
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "Helemaal geen controle. Alleen om een camera uit te proberen."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -537,22 +545,22 @@ msgstr ""
"Houdt foto's op een telefoon, tablet of glanzend papier tegen. Knipperen is "
"niet nodig. Een matte geprinte foto kan erdoor komen."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Minder verwisselingen, maar met een bril of bij slecht licht herkent het je "
"misschien niet."
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Herkent je makkelijker, maar ook iemand die veel op je lijkt."
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "De standaard. Goed voor de meeste mensen."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -560,7 +568,7 @@ msgstr ""
"Je ogen moeten open zijn en naar het scherm kijken. Zo ontgrendelt het niet "
"als je wegkijkt of slaapt."
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -569,11 +577,11 @@ msgstr ""
"opnieuw in. Een infraroodcamera heeft zijn lampje nodig (linux-enable-ir-"
"emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "Hoe lang de camera naar je gezicht zoekt voordat hij opgeeft."
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -581,7 +589,7 @@ msgstr ""
"Na een zekere match onthoudt het hoe je er nu uitziet. Een nieuw kapsel of "
"een bril vraagt dus niet om opnieuw instellen."
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -589,80 +597,80 @@ msgstr ""
"Geen scan als de laptop dicht is, bijvoorbeeld aan een bureau met een extern "
"scherm."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "De bubbel boven aan het scherm laat zien wat de camera doet."
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "Een kleine pil met een slot dat opengaat."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Een eiland met een gezicht dat rondkijkt, daarna ringen en een vinkje."
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "Hoe snel de bubbel beweegt."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr "Toont de bubbel ook als sudo of een beheerdersvraag je gezicht scant."
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automatisch (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(infrarood)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(niet aangesloten)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "Instellingen"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ kiezen ←→ of Spatie: wijzigen q: terug"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "voor alle gebruikers, vraagt om je wachtwoord"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"Omhoog/Omlaag: kiezen, Spatie: aan/uit, r: hernoemen, d: verwijderen, a: "
"toevoegen, q: terug"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "Er is nog geen gezicht ingesteld. Druk op a om er een toe te voegen."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "Nieuwe naam:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "“%s” verwijderen?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "Gezichtsontgrendeling aan- of uitzetten"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "Uitproberen"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "Afsluiten"
@@ -883,24 +891,24 @@ msgstr "De camera is bezig met een andere scan. Probeer het zo opnieuw."
msgid "The face could not be added (%1)."
msgstr "Het gezicht kon niet worden toegevoegd (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr ""
"Gezichtsontgrendeling voor het vergrendelscherm, sudo en beheerdersvragen"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "Een gezicht instellen."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "Hoe het nieuwe gezicht moet heten."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "De animaties van de bubbel één keer afspelen."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "Bubbelstijl voor de demo: full of minimal."
+83 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Polish\n"
@@ -59,8 +59,8 @@ msgstr "Nie dodano żadnej twarzy."
msgid "First, set up your face."
msgstr "Najpierw skonfiguruj swoją twarz."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "Nie udało się zapisać ustawienia."
@@ -74,98 +74,106 @@ msgstr ""
"Brak sesji użytkownika systemd, więc agent ekranu blokady nie został "
"uruchomiony."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "Nie udało się włączyć rozszerzenia GNOME, które pokazuje dymek."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr "Wyloguj się i zaloguj ponownie raz: wtedy GNOME też pokaże dymek."
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
"Odblokowywanie twarzą jest włączone. Zablokuj ekran i spójrz na niego, aby "
"wypróbować."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "Działa też dla sudo i okien administratora. Zobacz Ustawienia."
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"Odblokowywanie twarzą jest wyłączone. Twoje twarze zostają zachowane; "
"usuniesz je w Twarzach."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Nie skonfigurowano jeszcze żadnej twarzy."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "wł."
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "wył."
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "próbki: %s, wyuczone: %s"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Która twarz? Identyfikatory pokazuje `%s faces`."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "Usunięto."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "Użycie: face-unlock [polecenie]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "Polecenia:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "Włącz odblokowywanie twarzą"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "Wyłącz je (twarze zostają zachowane)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "Dodaj twarz"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "Pokaż listę twarzy"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "Usuń twarz"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "Spójrz w kamerę i zobacz, co widzi"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "Pokaż, co jest włączone"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "Pokaż tę pomoc"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "Pokaż wersję"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "Bez polecenia wyświetla się interaktywne menu."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -173,7 +181,7 @@ msgstr ""
"Uruchom to jako swój użytkownik, nie jako root. Hasło zostanie zapytane, gdy "
"będzie potrzebne."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Nieznane polecenie: %s"
@@ -352,11 +360,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[t/N]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "WŁ."
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "WYŁ."
@@ -397,7 +405,7 @@ msgstr "wolna"
msgid "%s seconds"
msgstr "%s s"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "automatyczna"
@@ -417,8 +425,8 @@ msgstr "nie działa"
msgid "Turning face unlock on again starts it."
msgstr "Ponowne włączenie odblokowywania twarzą ją uruchomi."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "Twarze"
@@ -473,13 +481,13 @@ msgstr "Agent ekranu blokady nie działa."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME nie pozwala innym programom wyświetlać się nad swoimi oknami, więc w "
"GNOME nie ma dymka."
"W GNOME dymek pokazuje małe rozszerzenie GNOME. Włączenie odblokowywania "
"twarzą włącza też je."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -487,7 +495,7 @@ msgstr ""
"Odblokowuje ekran blokady, gdy widzi twoją twarz. Wyłączone: działa tam "
"tylko hasło."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -495,7 +503,7 @@ msgstr ""
"Skanuje, gdy naciśniesz klawisz lub poruszysz myszą na ekranie blokady, oraz "
"gdy komputer się wybudzi."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -503,7 +511,7 @@ msgstr ""
"Skanuje od razu po zablokowaniu ekranu. Domyślnie wyłączone: gdy zablokujesz "
"sam, od razu by się odblokował."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -511,7 +519,7 @@ msgstr ""
"sudo przyjmuje twarz zamiast hasła. Gdy nie pasuje, wpisujesz hasło jak "
"zwykle."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -519,18 +527,18 @@ msgstr ""
"Okna haseł pulpitu i aplikacji, na przykład przy instalowaniu programów. Gdy "
"twarz nie pasuje, wpisujesz hasło."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Musisz mrugnąć albo lekko obrócić głowę. To zatrzymuje też wydrukowane "
"zdjęcia."
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "Bez żadnej kontroli. Tylko do wypróbowania kamery."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -538,22 +546,22 @@ msgstr ""
"Zatrzymuje zdjęcia na telefonie, tablecie lub błyszczącym papierze. Nie "
"trzeba mrugać. Matowy wydruk może przejść."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Mniej pomyłek, ale może cię nie rozpoznać w okularach albo przy słabym "
"świetle."
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Łatwiej cię rozpoznaje, ale też kogoś bardzo do ciebie podobnego."
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "Domyślna. Pasuje większości osób."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -561,7 +569,7 @@ msgstr ""
"Twoje oczy muszą być otwarte i patrzeć na ekran. Dzięki temu nie odblokuje, "
"gdy patrzysz w bok lub śpisz."
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -570,11 +578,11 @@ msgstr ""
"nowa. Kamera na podczerwień potrzebuje włączonego światła (linux-enable-ir-"
"emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "Jak długo kamera szuka twojej twarzy, zanim się podda."
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -582,7 +590,7 @@ msgstr ""
"Po pewnym dopasowaniu zapamiętuje, jak teraz wyglądasz. Nowa fryzura czy "
"okulary nie wymagają więc ponownej konfiguracji."
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -590,81 +598,81 @@ msgstr ""
"Bez skanowania, gdy laptop jest zamknięty, na przykład przy biurku z "
"zewnętrznym ekranem."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "Dymek u góry ekranu pokazuje, co robi kamera."
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "Mała pigułka z kłódką, która się otwiera."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Wyspa z twarzą, która się rozgląda, potem pierścienie i ptaszek."
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "Jak szybko porusza się dymek."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
"Pokazuje dymek także wtedy, gdy sudo lub okno administratora skanuje twarz."
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automatyczna (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(podczerwień)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(niepodłączona)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "Ustawienia"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ wybierz ←→ lub Spacja: zmień q: wstecz"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "dla wszystkich użytkowników, pyta o hasło"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"Góra/Dół: wybierz, Spacja: wł./wył., r: zmień nazwę, d: usuń, a: dodaj, q: "
"wstecz"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "Nie skonfigurowano jeszcze żadnej twarzy. Naciśnij a, aby dodać."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "Nowa nazwa:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Usunąć „%s”?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "Włącz lub wyłącz odblokowywanie twarzą"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "Wypróbuj"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "Zakończ"
@@ -879,23 +887,23 @@ msgstr "Kamera jest zajęta innym skanowaniem. Spróbuj ponownie za chwilę."
msgid "The face could not be added (%1)."
msgstr "Nie udało się dodać twarzy (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr "Odblokowywanie twarzą dla ekranu blokady, sudo i okien administratora"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "Skonfiguruj twarz."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "Jak nazwać nową twarz."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "Odtwórz raz animacje dymka."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "Styl dymka w demo: full lub minimal."
+83 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Brazilian Portuguese\n"
@@ -58,8 +58,8 @@ msgstr "Nenhum rosto foi adicionado."
msgid "First, set up your face."
msgstr "Primeiro, configure o seu rosto."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "Não foi possível salvar a configuração."
@@ -73,99 +73,107 @@ msgstr ""
"Sem sessão de usuário do systemd, então o agente da tela de bloqueio não foi "
"iniciado."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "Não foi possível ativar a extensão do GNOME que mostra a bolha."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr "Saia e entre de novo uma vez: aí o GNOME também mostra a bolha."
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
"O desbloqueio facial está ativado. Bloqueie a tela e olhe para ela para "
"testar."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr ""
"Ele também funciona com sudo e pedidos de administrador. Veja Configurações."
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"O desbloqueio facial está desativado. Seus rostos são mantidos; apague-os em "
"Rostos."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Nenhum rosto configurado ainda."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "ativado"
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "desativado"
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s amostras, %s aprendidas"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Qual rosto? Veja `%s faces` para os IDs."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "Apagado."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "Uso: face-unlock [comando]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "Comandos:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "Ativar o desbloqueio facial"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "Desativar (os rostos são mantidos)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "Adicionar um rosto"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "Listar os rostos"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "Apagar um rosto"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "Olhar para a câmera e ver o que ela vê"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "Mostrar o que está ativado"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "Mostrar esta ajuda"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "Mostrar a versão"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "Sem comando, um menu interativo é exibido."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -173,7 +181,7 @@ msgstr ""
"Execute isto com o seu próprio usuário, não como root. Ele pede a sua senha "
"quando precisa."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Comando desconhecido: %s"
@@ -352,11 +360,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[s/N]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "ATIVADO"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "DESATIVADO"
@@ -397,7 +405,7 @@ msgstr "lenta"
msgid "%s seconds"
msgstr "%s segundos"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "automática"
@@ -417,8 +425,8 @@ msgstr "parado"
msgid "Turning face unlock on again starts it."
msgstr "Ativar o desbloqueio facial de novo o inicia."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "Rostos"
@@ -473,13 +481,13 @@ msgstr "O agente da tela de bloqueio não está em execução."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"O GNOME não deixa outros programas aparecerem sobre as janelas dele, então "
"no GNOME não há bolha."
"No GNOME, uma pequena extensão do GNOME mostra a bolha. Ativar o desbloqueio "
"facial também a ativa."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -487,7 +495,7 @@ msgstr ""
"Desbloqueia a tela de bloqueio quando vê o seu rosto. Desativado: lá só a "
"sua senha funciona."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -495,7 +503,7 @@ msgstr ""
"Faz a leitura quando você aperta uma tecla ou mexe o mouse na tela de "
"bloqueio, e quando o computador acorda."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -503,7 +511,7 @@ msgstr ""
"Faz a leitura assim que a tela é bloqueada. Desativado por padrão: se você "
"mesmo bloquear, ela desbloquearia logo em seguida."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -511,7 +519,7 @@ msgstr ""
"O sudo usa o seu rosto em vez da senha. Se não corresponder, você digita a "
"senha como sempre."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -519,18 +527,18 @@ msgstr ""
"As janelas de senha da sua área de trabalho e dos apps, por exemplo ao "
"instalar programas. Se não corresponder, você digita a senha."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Você precisa piscar ou virar um pouco a cabeça. Isso também barra fotos "
"impressas."
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "Nenhuma verificação. Só para testar uma câmera."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -538,23 +546,23 @@ msgstr ""
"Barra fotos em celular, tablet ou papel brilhante. Não é preciso piscar. Uma "
"foto impressa em papel fosco pode passar."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Menos confusões, mas talvez não reconheça você de óculos ou com pouca luz."
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr ""
"Reconhece você com mais facilidade, mas também alguém muito parecido com "
"você."
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "O padrão. Serve para a maioria das pessoas."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -562,7 +570,7 @@ msgstr ""
"Seus olhos precisam estar abertos e voltados para a tela. Assim não "
"desbloqueia enquanto você olha para outro lado ou dorme."
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -571,11 +579,11 @@ msgstr ""
"rosto de novo. Uma câmera infravermelha precisa da luz ligada (linux-enable-"
"ir-emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "Quanto tempo a câmera procura o seu rosto antes de desistir."
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -583,7 +591,7 @@ msgstr ""
"Após uma correspondência segura, ele guarda a sua aparência atual. Assim, um "
"corte de cabelo novo ou óculos não exigem nova configuração."
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -591,82 +599,82 @@ msgstr ""
"Nenhuma leitura com o notebook fechado, por exemplo numa mesa com uma tela "
"externa."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "A bolha no topo da tela mostra o que a câmera está fazendo."
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "Uma pequena pílula com um cadeado que se abre."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Uma ilha com um rosto que olha em volta, depois anéis e um visto."
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "A velocidade com que a bolha se move."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
"Mostra a bolha também quando o sudo ou um pedido de administrador lê o seu "
"rosto."
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "automática (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(infravermelha)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(não conectada)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "Configurações"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ escolher ←→ ou Espaço: mudar q: voltar"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "para todos os usuários, pede a sua senha"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"Cima/Baixo: escolher, Espaço: ativar/desativar, r: renomear, d: apagar, a: "
"adicionar, q: voltar"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "Nenhum rosto configurado ainda. Aperte a para adicionar um."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "Novo nome:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Apagar \"%s\"?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "Ativar ou desativar o desbloqueio facial"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "Testar"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "Sair"
@@ -885,25 +893,25 @@ msgstr "A câmera está ocupada com outra leitura. Tente de novo em instantes."
msgid "The face could not be added (%1)."
msgstr "Não foi possível adicionar o rosto (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr ""
"Desbloqueio facial para a tela de bloqueio, o sudo e os pedidos de "
"administrador"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "Configurar um rosto."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "Como chamar o novo rosto."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "Reproduzir as animações da bolha uma vez."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "Estilo da bolha para a demonstração: full ou minimal."
+83 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Russian\n"
@@ -59,8 +59,8 @@ msgstr "Лицо не добавлено."
msgid "First, set up your face."
msgstr "Сначала настройте своё лицо."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "Не удалось сохранить настройку."
@@ -74,98 +74,106 @@ msgstr ""
"Нет пользовательского сеанса systemd, поэтому агент экрана блокировки не "
"запущен."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "Не удалось включить расширение GNOME, которое показывает пузырь."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr "Выйдите и войдите снова один раз: тогда GNOME тоже покажет пузырь."
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
"Разблокировка по лицу включена. Заблокируйте экран и посмотрите на него, "
"чтобы попробовать."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "Она работает и для sudo, и для запросов администратора. См. Настройки."
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"Разблокировка по лицу выключена. Ваши лица сохранены; удалить их можно в "
"разделе Лица."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Ещё не настроено ни одного лица."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "вкл."
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "выкл."
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "образцов: %s, выучено: %s"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Какое лицо? Номера показывает `%s faces`."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "Удалено."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "Использование: face-unlock [команда]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "Команды:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "Включить разблокировку по лицу"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "Выключить её (лица сохраняются)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "Добавить лицо"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "Показать список лиц"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "Удалить лицо"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "Посмотреть в камеру и увидеть, что она видит"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "Показать, что включено"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "Показать эту справку"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "Показать версию"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "Без команды открывается интерактивное меню."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -173,7 +181,7 @@ msgstr ""
"Запускайте это от своего пользователя, не от root. Пароль будет запрошен, "
"когда он понадобится."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Неизвестная команда: %s"
@@ -352,11 +360,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[д/Н]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "ВКЛ"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "ВЫКЛ"
@@ -397,7 +405,7 @@ msgstr "медленная"
msgid "%s seconds"
msgstr "%s с"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "автоматически"
@@ -417,8 +425,8 @@ msgstr "не запущена"
msgid "Turning face unlock on again starts it."
msgstr "Повторное включение разблокировки по лицу запустит её."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "Лица"
@@ -473,13 +481,13 @@ msgstr "Агент экрана блокировки не запущен."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME не позволяет другим программам показываться поверх своих окон, поэтому "
"в GNOME пузыря нет."
"В GNOME пузырь показывает небольшое расширение GNOME. Оно включается вместе "
"с разблокировкой по лицу."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -487,7 +495,7 @@ msgstr ""
"Снимает блокировку экрана, когда видит ваше лицо. Выкл.: там работает только "
"пароль."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -495,7 +503,7 @@ msgstr ""
"Сканирует, когда вы нажимаете клавишу или двигаете мышь на экране "
"блокировки, и когда компьютер просыпается."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -503,7 +511,7 @@ msgstr ""
"Сканирует сразу после блокировки экрана. По умолчанию выкл.: если вы "
"блокируете сами, он тут же разблокировался бы."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -511,7 +519,7 @@ msgstr ""
"sudo принимает ваше лицо вместо пароля. Не совпало: вы вводите пароль как "
"обычно."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -519,18 +527,18 @@ msgstr ""
"Окна ввода пароля рабочего стола и приложений, например при установке "
"программ. Не совпало: вы вводите пароль."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Нужно моргнуть или слегка повернуть голову. Это также останавливает "
"распечатанные фото."
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "Никакой проверки. Только чтобы опробовать камеру."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -538,22 +546,22 @@ msgstr ""
"Останавливает фото на телефоне, планшете или глянцевой бумаге. Моргать не "
"нужно. Матовое распечатанное фото может пройти."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Меньше ошибочных совпадений, но может не узнать вас в очках или при плохом "
"свете."
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Узнаёт вас легче, но и того, кто очень на вас похож."
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "По умолчанию. Подходит большинству."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -561,7 +569,7 @@ msgstr ""
"Ваши глаза должны быть открыты и смотреть на экран. Так он не "
"разблокируется, пока вы смотрите в сторону или спите."
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -570,11 +578,11 @@ msgstr ""
"заново. Инфракрасной камере нужна включённая подсветка (linux-enable-ir-"
"emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "Как долго камера ищет ваше лицо, прежде чем сдаться."
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -582,7 +590,7 @@ msgstr ""
"После уверенного совпадения запоминает, как вы выглядите сейчас. Новая "
"стрижка или очки не требуют новой настройки."
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -590,82 +598,82 @@ msgstr ""
"Без сканирования, когда ноутбук закрыт, например за столом с внешним "
"монитором."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "Пузырь вверху экрана показывает, что делает камера."
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "Маленькая таблетка с замком, который открывается."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Остров с лицом, которое оглядывается, затем кольца и галочка."
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "Как быстро движется пузырь."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
"Показывает пузырь и тогда, когда sudo или запрос администратора сканирует "
"ваше лицо."
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "автоматически (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(инфракрасная)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(не подключена)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "Настройки"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ выбор ←→ или Пробел: изменить q: назад"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "для всех пользователей, запрашивает пароль"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"Вверх/Вниз: выбор, Пробел: вкл./выкл., r: переименовать, d: удалить, a: "
"добавить, q: назад"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "Ещё не настроено ни одного лица. Нажмите a, чтобы добавить."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "Новое имя:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Удалить «%s»?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "Включить или выключить разблокировку по лицу"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "Попробовать"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "Выход"
@@ -882,24 +890,24 @@ msgstr "Камера занята другим сканированием. По
msgid "The face could not be added (%1)."
msgstr "Не удалось добавить лицо (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr ""
"Разблокировка по лицу для экрана блокировки, sudo и запросов администратора"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "Настроить лицо."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "Как назвать новое лицо."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "Один раз проиграть анимации пузыря."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "Стиль пузыря для демо: full или minimal."
+84 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Turkish\n"
@@ -57,8 +57,8 @@ msgstr "Hiç yüz eklenmedi."
msgid "First, set up your face."
msgstr "Önce yüzünüzü kurun."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "Ayar kaydedilemedi."
@@ -71,96 +71,105 @@ msgid "No systemd user session, so the lock screen agent was not started."
msgstr ""
"systemd kullanıcı oturumu yok, bu yüzden kilit ekranı aracısı başlatılmadı."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "Baloncuğu gösteren GNOME uzantısı açılamadı."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr ""
"Bir kez oturumu kapatıp yeniden açın: o zaman GNOME de baloncuğu gösterir."
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr "Yüzle kilit açma açık. Denemek için ekranı kilitleyin ve ona bakın."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "sudo ve yönetici istemlerinde de çalışabilir. Ayarlar'a bakın."
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"Yüzle kilit açma kapalı. Yüzleriniz saklanıyor; Yüzler bölümünden "
"silebilirsiniz."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Henüz hiç yüz kurulmadı."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "açık"
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "kapalı"
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s örnek, %s öğrenilen"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Hangi yüz? Kimlikler için `%s faces` komutuna bakın."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "Silindi."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "Kullanım: face-unlock [komut]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "Komutlar:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "Yüzle kilit açmayı aç"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "Kapat (yüzler saklanır)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "Yüz ekle"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "Yüzleri listele"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "Bir yüzü sil"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "Kameraya bak ve onun ne gördüğünü gör"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "Neyin açık olduğunu göster"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "Bu yardımı göster"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "Sürümü göster"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "Komut verilmezse etkileşimli bir menü gösterilir."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -168,7 +177,7 @@ msgstr ""
"Bunu root olarak değil, kendi kullanıcınızla çalıştırın. Gerektiğinde "
"parolanızı sorar."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Bilinmeyen komut: %s"
@@ -347,11 +356,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[e/H]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "AÇIK"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "KAPALI"
@@ -392,7 +401,7 @@ msgstr "yavaş"
msgid "%s seconds"
msgstr "%s saniye"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "otomatik"
@@ -412,8 +421,8 @@ msgstr "çalışmıyor"
msgid "Turning face unlock on again starts it."
msgstr "Yüzle kilit açmayı yeniden açmak onu başlatır."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "Yüzler"
@@ -468,13 +477,13 @@ msgstr "Kilit ekranı aracısı çalışmıyor."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME başka programların kendi pencerelerinin üstünde görünmesine izin "
"vermez, bu yüzden GNOME'da baloncuk yoktur."
"GNOME'da baloncuğu küçük bir GNOME uzantısı gösterir. Yüzle kilit açmayı "
"açınca o da açılır."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -482,7 +491,7 @@ msgstr ""
"Yüzünüzü görünce kilit ekranını açar. Kapalı: orada yalnızca parolanız "
"çalışır."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -490,7 +499,7 @@ msgstr ""
"Kilit ekranında bir tuşa bastığınızda ya da fareyi oynattığınızda ve "
"bilgisayar uyandığında tarar."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -498,7 +507,7 @@ msgstr ""
"Ekran kilitlenir kilitlenmez tarar. Varsayılan olarak kapalı: kendiniz "
"kilitlerseniz hemen yeniden açılırdı."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -506,7 +515,7 @@ msgstr ""
"sudo parola yerine yüzünüzü kullanır. Eşleşmezse parolayı her zamanki gibi "
"yazarsınız."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -514,18 +523,18 @@ msgstr ""
"Masaüstünüzün ve uygulamaların parola pencereleri, örneğin yazılım kurarken. "
"Eşleşmezse parolayı yazarsınız."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Göz kırpmanız ya da başınızı biraz çevirmeniz gerekir. Bu, basılı "
"fotoğrafları da durdurur."
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "Hiç denetim yok. Yalnızca bir kamerayı denemek için."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -533,21 +542,21 @@ msgstr ""
"Telefon, tablet ya da parlak kâğıttaki fotoğrafları durdurur. Göz kırpmanız "
"gerekmez. Mat basılı bir fotoğraf geçebilir."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Daha az yanlış eşleşme, ama gözlükle ya da kötü ışıkta sizi tanımayabilir."
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Sizi daha kolay tanır, ama size çok benzeyen birini de."
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "Varsayılan. Çoğu kişi için uygun."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -555,7 +564,7 @@ msgstr ""
"Gözleriniz açık ve ekrana dönük olmalı. Böylece başka yere bakarken ya da "
"uyurken kilit açılmaz."
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -564,11 +573,11 @@ msgstr ""
"kurun. Kızılötesi kameranın ışığının açık olması gerekir (linux-enable-ir-"
"emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "Kameranın vazgeçmeden önce yüzünüzü ne kadar aradığı."
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -576,88 +585,88 @@ msgstr ""
"Kesin bir eşleşmeden sonra şu anki görünüşünüzü hatırlar. Böylece yeni saç "
"kesimi ya da gözlük yeniden kurulum gerektirmez."
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
msgstr "Dizüstü kapalıyken tarama yok, örneğin harici ekranlı bir masada."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "Ekranın üstündeki baloncuk kameranın ne yaptığını gösterir."
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "Açılan bir kilidi olan küçük bir hap."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr ""
"Etrafına bakan bir yüzü olan bir ada, ardından halkalar ve bir onay işareti."
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "Baloncuğun ne kadar hızlı hareket ettiği."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
"sudo ya da bir yönetici istemi yüzünüzü taradığında da baloncuğu gösterir."
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "otomatik (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(kızılötesi)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(bağlı değil)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "Ayarlar"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ seç ←→ ya da Boşluk: değiştir q: geri"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "tüm kullanıcılar için, parolanızı sorar"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"Yukarı/Aşağı: seç, Boşluk: aç/kapat, r: yeniden adlandır, d: sil, a: ekle, "
"q: geri"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "Henüz hiç yüz kurulmadı. Eklemek için a tuşuna basın."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "Yeni ad:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "\"%s\" silinsin mi?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "Yüzle kilit açmayı aç ya da kapat"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "Dene"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "Çık"
@@ -873,23 +882,23 @@ msgstr "Kamera başka bir taramayla meşgul. Birazdan yeniden deneyin."
msgid "The face could not be added (%1)."
msgstr "Yüz eklenemedi (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr "Kilit ekranı, sudo ve yönetici istemleri için yüzle kilit açma"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "Bir yüz kur."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "Yeni yüzün adı."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "Baloncuğun animasyonlarını bir kez oynat."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "Demo için baloncuk stili: full ya da minimal."
+83 -75
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Ukrainian\n"
@@ -59,8 +59,8 @@ msgstr "Обличчя не додано."
msgid "First, set up your face."
msgstr "Спершу налаштуйте своє обличчя."
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "Не вдалося зберегти налаштування."
@@ -74,99 +74,107 @@ msgstr ""
"Немає користувацького сеансу systemd, тому агент екрана блокування не "
"запущено."
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "Не вдалося увімкнути розширення GNOME, яке показує бульбашку."
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr "Вийдіть і увійдіть знову один раз: тоді GNOME теж покаже бульбашку."
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr ""
"Розблокування обличчям увімкнено. Заблокуйте екран і подивіться на нього, "
"щоб спробувати."
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr ""
"Воно працює і для sudo, і для запитів адміністратора. Див. Налаштування."
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr ""
"Розблокування обличчям вимкнено. Ваші обличчя збережено; видалити їх можна в "
"розділі Обличчя."
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "Ще не налаштовано жодного обличчя."
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "увімк."
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "вимк."
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "зразків: %s, вивчено: %s"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "Яке обличчя? Номери показує `%s faces`."
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "Видалено."
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "Використання: face-unlock [команда]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "Команди:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "Увімкнути розблокування обличчям"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "Вимкнути його (обличчя зберігаються)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "Додати обличчя"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "Показати список облич"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "Видалити обличчя"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "Подивитися в камеру і побачити, що вона бачить"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "Показати, що увімкнено"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "Показати цю довідку"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "Показати версію"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "Без команди відкривається інтерактивне меню."
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
@@ -174,7 +182,7 @@ msgstr ""
"Запускайте це від свого користувача, не від root. Пароль буде запитано, коли "
"він знадобиться."
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "Невідома команда: %s"
@@ -353,11 +361,11 @@ msgstr ""
msgid "[y/N]"
msgstr "[т/Н]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "УВІМК"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "ВИМК"
@@ -398,7 +406,7 @@ msgstr "повільна"
msgid "%s seconds"
msgstr "%s с"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "автоматично"
@@ -418,8 +426,8 @@ msgstr "не запущена"
msgid "Turning face unlock on again starts it."
msgstr "Повторне ввімкнення розблокування обличчям запустить її."
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "Обличчя"
@@ -474,13 +482,13 @@ msgstr "Агент екрана блокування не запущено."
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"GNOME не дозволяє іншим програмам показуватися поверх своїх вікон, тому в "
"GNOME бульбашки немає."
"У GNOME бульбашку показує невелике розширення GNOME. Воно вмикається разом "
"із розблокуванням обличчям."
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
@@ -488,7 +496,7 @@ msgstr ""
"Розблоковує екран блокування, коли бачить ваше обличчя. Вимк.: там працює "
"лише пароль."
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
msgid ""
"Scans when you press a key or move the mouse on the lock screen, and when "
"the computer wakes up."
@@ -496,7 +504,7 @@ msgstr ""
"Сканує, коли ви натискаєте клавішу або рухаєте мишею на екрані блокування, і "
"коли комп'ютер прокидається."
#: src/lib/menu.sh:314
#: src/lib/menu.sh:315
msgid ""
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
"it would unlock again right away."
@@ -504,7 +512,7 @@ msgstr ""
"Сканує одразу після блокування екрана. Типово вимк.: якщо ви блокуєте самі, "
"він одразу б розблокувався."
#: src/lib/menu.sh:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
@@ -512,7 +520,7 @@ msgstr ""
"sudo приймає ваше обличчя замість пароля. Не збіглося: ви вводите пароль як "
"зазвичай."
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
@@ -520,17 +528,17 @@ msgstr ""
"Вікна введення пароля робочого столу і програм, наприклад під час "
"встановлення програм. Не збіглося: ви вводите пароль."
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr ""
"Треба кліпнути або трохи повернути голову. Це також зупиняє надруковані фото."
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "Жодної перевірки. Лише щоб випробувати камеру."
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
msgid ""
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
"A matte printed photo can get through."
@@ -538,22 +546,22 @@ msgstr ""
"Зупиняє фото на телефоні, планшеті чи глянцевому папері. Кліпати не треба. "
"Матове надруковане фото може пройти."
#: src/lib/menu.sh:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr ""
"Менше хибних збігів, але може не впізнати вас в окулярах або при поганому "
"світлі."
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "Впізнає вас легше, але й того, хто дуже на вас схожий."
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "Типове значення. Підходить більшості."
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
msgid ""
"Your eyes have to be open and on the screen. So it does not unlock while you "
"look away or sleep."
@@ -561,7 +569,7 @@ msgstr ""
"Ваші очі мають бути розплющені й дивитися на екран. Так він не "
"розблокується, коли ви дивитеся вбік або спите."
#: src/lib/menu.sh:324
#: src/lib/menu.sh:325
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)."
@@ -570,11 +578,11 @@ msgstr ""
"знову. Інфрачервоній камері потрібне ввімкнене підсвічування (linux-enable-"
"ir-emitter)."
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "Як довго камера шукає ваше обличчя, перш ніж здатися."
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
msgid ""
"After a sure match it keeps how you look now. So a new haircut or glasses "
"need no new setup."
@@ -582,7 +590,7 @@ msgstr ""
"Після впевненого збігу запам'ятовує, як ви виглядаєте зараз. Нова зачіска чи "
"окуляри не потребують нового налаштування."
#: src/lib/menu.sh:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
@@ -590,82 +598,82 @@ msgstr ""
"Без сканування, коли ноутбук закрито, наприклад за столом із зовнішнім "
"монітором."
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "Бульбашка вгорі екрана показує, що робить камера."
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "Маленька пігулка із замком, що відкривається."
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr "Острів з обличчям, яке озирається, потім кільця і галочка."
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "Як швидко рухається бульбашка."
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr ""
"Показує бульбашку й тоді, коли sudo або запит адміністратора сканує ваше "
"обличчя."
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "автоматично (%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(інфрачервона)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(не під'єднана)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "Налаштування"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ вибір ←→ або Пробіл: змінити q: назад"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "для всіх користувачів, запитує пароль"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr ""
"Вгору/Вниз: вибір, Пробіл: увімк./вимк., r: перейменувати, d: видалити, a: "
"додати, q: назад"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "Ще не налаштовано жодного обличчя. Натисніть a, щоб додати."
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "Нова назва:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "Видалити «%s»?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "Увімкнути або вимкнути розблокування обличчям"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "Спробувати"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "Вийти"
@@ -881,24 +889,24 @@ msgstr "Камера зайнята іншим скануванням. Спро
msgid "The face could not be added (%1)."
msgstr "Не вдалося додати обличчя (%1)."
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr ""
"Розблокування обличчям для екрана блокування, sudo і запитів адміністратора"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "Налаштувати обличчя."
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "Як назвати нове обличчя."
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "Один раз програти анімації бульбашки."
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "Стиль бульбашки для демо: full або minimal."
+83 -74
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: face-unlock 1.0.1\n"
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
"POT-Creation-Date: 2026-09-26 19:32+0200\n"
"POT-Creation-Date: 2026-09-26 19:33+0200\n"
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
"Last-Translator: Felitendo\n"
"Language-Team: Chinese (simplified)\n"
@@ -53,8 +53,8 @@ msgstr "没有添加人脸。"
msgid "First, set up your face."
msgstr "请先设置你的人脸。"
#: src/face-unlock:100 src/face-unlock:121 src/lib/menu.sh:446
#: src/lib/menu.sh:450 src/lib/menu.sh:456 src/lib/menu.sh:458
#: src/face-unlock:100 src/face-unlock:131 src/lib/menu.sh:447
#: src/lib/menu.sh:451 src/lib/menu.sh:457 src/lib/menu.sh:459
msgid "Could not save the setting."
msgstr "无法保存设置。"
@@ -66,100 +66,108 @@ msgstr "无法启动锁屏代理。"
msgid "No systemd user session, so the lock screen agent was not started."
msgstr "没有 systemd 用户会话,因此未启动锁屏代理。"
#: src/face-unlock:114
#: src/face-unlock:118
msgid "Could not switch on the GNOME extension that shows the bubble."
msgstr "无法启用显示气泡的 GNOME 扩展。"
#: src/face-unlock:119
msgid "Log out and back in once: then GNOME shows the bubble too."
msgstr "请注销并重新登录一次:之后 GNOME 也会显示气泡。"
#: src/face-unlock:124
msgid "Face unlock is on. Lock the screen and look at it to try."
msgstr "人脸解锁已开启。锁定屏幕并看着它来试试。"
#: src/face-unlock:116
#: src/face-unlock:126
msgid "It can do sudo and admin prompts too. See Settings."
msgstr "它也可以用于 sudo 和管理员授权。见“设置”。"
#: src/face-unlock:131
#: src/face-unlock:142
msgid "Face unlock is off. Your faces are kept; delete them under Faces."
msgstr "人脸解锁已关闭。你的人脸会保留;可在“人脸”中删除。"
#: src/face-unlock:145 src/lib/daemon.sh:109
#: src/face-unlock:156 src/lib/daemon.sh:109
msgid "No face is set up yet."
msgstr "尚未设置任何人脸。"
#: src/face-unlock:149 src/lib/menu.sh:180 src/lib/menu.sh:608
#: src/face-unlock:160 src/lib/menu.sh:180 src/lib/menu.sh:607
msgid "on"
msgstr "开"
#: src/face-unlock:149 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:609
#: src/face-unlock:160 src/lib/menu.sh:182 src/lib/menu.sh:192
#: src/lib/menu.sh:608
msgid "off"
msgstr "关"
#: src/face-unlock:151 src/lib/menu.sh:626
#: src/face-unlock:162 src/lib/menu.sh:625
#, sh-printf-format
msgid "%s samples, %s learned"
msgstr "%s 个样本,已学习 %s 个"
#: src/face-unlock:157
#: src/face-unlock:168
#, sh-printf-format
msgid "Which face? See `%s faces` for the ids."
msgstr "哪张人脸?用 `%s faces` 查看 ID。"
#: src/face-unlock:161
#: src/face-unlock:172
msgid "Deleted."
msgstr "已删除。"
#: src/face-unlock:172
#: src/face-unlock:183
msgid "Usage: face-unlock [command]"
msgstr "用法:face-unlock [命令]"
#: src/face-unlock:174
#: src/face-unlock:185
msgid "Commands:"
msgstr "命令:"
#: src/face-unlock:175
#: src/face-unlock:186
msgid "Turn face unlock on"
msgstr "开启人脸解锁"
#: src/face-unlock:176
#: src/face-unlock:187
msgid "Turn it off (faces are kept)"
msgstr "关闭(保留人脸)"
#: src/face-unlock:177 src/lib/menu.sh:692
#: src/face-unlock:188 src/lib/menu.sh:691
msgid "Add a face"
msgstr "添加人脸"
#: src/face-unlock:178
#: src/face-unlock:189
msgid "List the faces"
msgstr "列出人脸"
#: src/face-unlock:179
#: src/face-unlock:190
msgid "Delete a face"
msgstr "删除人脸"
#: src/face-unlock:180
#: src/face-unlock:191
msgid "Look at the camera and see what it sees"
msgstr "看着摄像头,查看它看到的画面"
#: src/face-unlock:181
#: src/face-unlock:192
msgid "Show what is on"
msgstr "显示已开启的功能"
#: src/face-unlock:182
#: src/face-unlock:193
msgid "Show this help"
msgstr "显示此帮助"
#: src/face-unlock:183
#: src/face-unlock:194
msgid "Show the version"
msgstr "显示版本"
#: src/face-unlock:185
#: src/face-unlock:196
msgid "Without a command an interactive menu is shown."
msgstr "不带命令时显示交互式菜单。"
#: src/face-unlock:204
#: src/face-unlock:215
msgid ""
"Run this as your own user, not as root. It asks for your password when it "
"needs to."
msgstr "请以你自己的用户运行,不要用 root。需要时会询问你的密码。"
#: src/face-unlock:226 src/lib/system.sh:93
#: src/face-unlock:237 src/lib/system.sh:93
#, sh-printf-format
msgid "Unknown command: %s"
msgstr "未知命令:%s"
@@ -334,11 +342,11 @@ msgstr "尝试次数过多。人脸解锁已暂停,直到你用密码解锁。
msgid "[y/N]"
msgstr "[y/N]"
#: src/lib/menu.sh:172 src/lib/menu.sh:509
#: src/lib/menu.sh:172 src/lib/menu.sh:510
msgid "ON"
msgstr "开启"
#: src/lib/menu.sh:174 src/lib/menu.sh:510
#: src/lib/menu.sh:174 src/lib/menu.sh:511
msgid "OFF"
msgstr "关闭"
@@ -379,7 +387,7 @@ msgstr "慢"
msgid "%s seconds"
msgstr "%s 秒"
#: src/lib/menu.sh:202 src/lib/menu.sh:421
#: src/lib/menu.sh:202 src/lib/menu.sh:422
msgid "automatic"
msgstr "自动"
@@ -399,8 +407,8 @@ msgstr "未运行"
msgid "Turning face unlock on again starts it."
msgstr "重新开启人脸解锁即可启动它。"
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:604
#: src/lib/menu.sh:693
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:603
#: src/lib/menu.sh:692
msgid "Faces"
msgstr "人脸"
@@ -455,75 +463,76 @@ msgstr "锁屏代理没有运行。"
#: src/lib/menu.sh:308
msgid ""
"GNOME does not let other programs show above its windows, so there is no "
"bubble on GNOME."
msgstr "GNOME 不允许其他程序显示在它的窗口之上,所以 GNOME 上没有气泡。"
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
"switches it on."
msgstr ""
"在 GNOME 上,由一个小的 GNOME 扩展显示气泡。开启人脸解锁时会一并开启它。"
#: src/lib/menu.sh:312
#: src/lib/menu.sh:313
msgid ""
"Unlocks the lock screen when it sees your face. Off: only your password "
"works there."
msgstr "看到你的脸时解锁锁屏。关闭:锁屏只能用密码。"
#: src/lib/menu.sh:313
#: src/lib/menu.sh:314
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:314
#: src/lib/menu.sh:315
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:315
#: src/lib/menu.sh:316
msgid ""
"sudo takes your face instead of the password. No match: you type the "
"password as usual."
msgstr "sudo 用你的脸代替密码。不匹配时,照常输入密码。"
#: src/lib/menu.sh:316
#: src/lib/menu.sh:317
msgid ""
"The password windows of your desktop and apps, for example when you install "
"software. No match: you type the password."
msgstr "桌面和应用的密码窗口,例如安装软件时。不匹配时,输入密码即可。"
#: src/lib/menu.sh:317
#: src/lib/menu.sh:318
msgid ""
"You have to blink or turn your head a little. This also stops printed photos."
msgstr "你需要眨眼或稍微转头。这也能挡住打印的照片。"
#: src/lib/menu.sh:318
#: src/lib/menu.sh:319
msgid "No check at all. Only for trying out a camera."
msgstr "完全不检测。仅用于试用摄像头。"
#: src/lib/menu.sh:319
#: src/lib/menu.sh:320
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:320
#: src/lib/menu.sh:321
msgid ""
"Fewer wrong matches, but it may not know you with glasses or in bad light."
msgstr "误认更少,但戴眼镜或光线不好时可能认不出你。"
#: src/lib/menu.sh:321
#: src/lib/menu.sh:322
msgid "Knows you more easily, but also somebody who looks a lot like you."
msgstr "更容易认出你,但也更容易认出和你长得很像的人。"
#: src/lib/menu.sh:322
#: src/lib/menu.sh:323
msgid "The default. Right for most people."
msgstr "默认值。适合大多数人。"
#: src/lib/menu.sh:323
#: src/lib/menu.sh:324
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:324
#: src/lib/menu.sh:325
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)."
@@ -531,94 +540,94 @@ msgstr ""
"“自动”会使用第一个普通摄像头。更换后请重新设置人脸。红外摄像头需要打开它的补"
"光灯(linux-enable-ir-emitter)。"
#: src/lib/menu.sh:325
#: src/lib/menu.sh:326
msgid "How long the camera looks for your face before it gives up."
msgstr "摄像头寻找你的脸多久后放弃。"
#: src/lib/menu.sh:326
#: src/lib/menu.sh:327
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:327
#: src/lib/menu.sh:328
msgid ""
"No scan while the laptop is closed, for example at a desk with an external "
"screen."
msgstr "笔记本合上时不扫描,例如在接了外接显示器的桌前。"
#: src/lib/menu.sh:328
#: src/lib/menu.sh:329
msgid "The bubble at the top of the screen shows what the camera is doing."
msgstr "屏幕顶部的气泡显示摄像头正在做什么。"
#: src/lib/menu.sh:329
#: src/lib/menu.sh:330
msgid "A small pill with a lock that opens."
msgstr "一个带锁的小药丸,锁会打开。"
#: src/lib/menu.sh:330
#: src/lib/menu.sh:331
msgid "An island with a face that looks around, then rings and a tick."
msgstr "一个岛,里面有一张四处张望的脸,然后是圆环和一个对勾。"
#: src/lib/menu.sh:331
#: src/lib/menu.sh:332
msgid "How fast the bubble moves."
msgstr "气泡移动的速度。"
#: src/lib/menu.sh:332
#: src/lib/menu.sh:333
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
msgstr "sudo 或管理员授权扫描你的脸时也显示气泡。"
#: src/lib/menu.sh:417
#: src/lib/menu.sh:418
#, sh-printf-format
msgid "automatic (%s)"
msgstr "自动(%s)"
#: src/lib/menu.sh:427
#: src/lib/menu.sh:428
msgid "(infrared)"
msgstr "(红外)"
#: src/lib/menu.sh:431
#: src/lib/menu.sh:432
msgid "(not connected)"
msgstr "(未连接)"
#: src/lib/menu.sh:506 src/lib/menu.sh:694
#: src/lib/menu.sh:507 src/lib/menu.sh:693
msgid "Settings"
msgstr "设置"
#: src/lib/menu.sh:507
#: src/lib/menu.sh:508
msgid "↑↓ select ←→ or Space: change q: back"
msgstr "↑↓ 选择 ←→ 或空格:更改 q:返回"
#: src/lib/menu.sh:508
#: src/lib/menu.sh:509
msgid "for all users, asks for your password"
msgstr "对所有用户生效,需要你的密码"
#. TRANSLATORS: keep the letters, they are the keys.
#: src/lib/menu.sh:606
#: src/lib/menu.sh:605
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
msgstr "上/下:选择,空格:开/关,r:重命名,d:删除,a:添加,q:返回"
#: src/lib/menu.sh:607
#: src/lib/menu.sh:606
msgid "No face is set up yet. Press a to add one."
msgstr "尚未设置任何人脸。按 a 添加。"
#: src/lib/menu.sh:653
#: src/lib/menu.sh:652
msgid "New name:"
msgstr "新名称:"
#: src/lib/menu.sh:660
#: src/lib/menu.sh:659
#, sh-printf-format
msgid "Delete \"%s\"?"
msgstr "删除“%s”?"
#: src/lib/menu.sh:691
#: src/lib/menu.sh:690
msgid "Turn face unlock on or off"
msgstr "开启或关闭人脸解锁"
#: src/lib/menu.sh:695
#: src/lib/menu.sh:694
msgid "Try it"
msgstr "试一试"
#: src/lib/menu.sh:696
#: src/lib/menu.sh:695
msgid "Quit"
msgstr "退出"
@@ -830,23 +839,23 @@ msgstr "摄像头正忙于另一次扫描。请稍后重试。"
msgid "The face could not be added (%1)."
msgstr "无法添加人脸(%1)。"
#: src/agent/main.cpp:86
#: src/agent/main.cpp:87
msgid "Face unlock for the lock screen, sudo and admin prompts"
msgstr "用于锁屏、sudo 和管理员授权的人脸解锁"
#: src/agent/main.cpp:89
#: src/agent/main.cpp:90
msgid "Set up a face."
msgstr "设置一张人脸。"
#: src/agent/main.cpp:90
#: src/agent/main.cpp:91
msgid "What to call the new face."
msgstr "新人脸的名称。"
#: src/agent/main.cpp:91
#: src/agent/main.cpp:92
msgid "Play the bubble's animations once."
msgstr "播放一次气泡动画。"
#: src/agent/main.cpp:93
#: src/agent/main.cpp:94
msgid "Bubble style for the demo: full or minimal."
msgstr "演示用的气泡样式:full 或 minimal。"
@@ -0,0 +1,926 @@
// SPDX-License-Identifier: GPL-3.0-or-later
//
// face-unlock's bubble on GNOME.
//
// GNOME lets no program draw above its windows, and nothing at all above its
// lock screen. An extension runs inside GNOME Shell and may. This one draws
// the bubble the agent draws everywhere else, with the same shapes and the
// same timing: a port of src/agent/qml (Bubble, FaceGlyph, LockGlyph,
// Checkmark). What to show comes from the agent over the session bus.
import Clutter from 'gi://Clutter';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import Pango from 'gi://Pango';
import PangoCairo from 'gi://PangoCairo';
import St from 'gi://St';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
const BUS_NAME = 'io.github.loonixtools.FaceUnlock';
const OBJECT_PATH = '/io/github/loonixtools/FaceUnlock';
const BubbleProxy = Gio.DBusProxy.makeProxyWrapper(`
<node>
<interface name="io.github.loonixtools.FaceUnlock.Bubble">
<method name="GetState"><arg type="a{sv}" direction="out"/></method>
<signal name="StateChanged"><arg type="a{sv}"/></signal>
</interface>
</node>`);
// Theme.qml
const Theme = {
success: [0x30, 0xd1, 0x58],
failure: [0xff, 0x45, 0x3a],
panel: [0, 0, 0],
textPrimary: [0xff, 0xff, 0xff],
textSecondary: [0x94, 0x94, 0x94],
textDetail: [0xbd, 0xbd, 0xbd],
closedWidth: 80,
closedHeight: 24,
openWidth: 180,
openHeight: 180,
openRadius: 48,
minimalWidth: 150,
minimalHeight: 40,
topGap: 6,
slideInDuration: 280,
expandDelay: 150,
growDuration: 460,
shrinkDuration: 280,
slideOutDelay: 150,
slideOutDuration: 240,
};
const WIDTH = 420;
const HEIGHT = 300;
// Qt's easing curves, as the QML uses them.
const Ease = {
linear: p => p,
outQuad: p => 1 - (1 - p) * (1 - p),
inOutQuad: p => p < 0.5 ? 2 * p * p : 1 - (-2 * p + 2) ** 2 / 2,
outCubic: p => 1 - (1 - p) ** 3,
inCubic: p => p ** 3,
inOutSine: p => -(Math.cos(Math.PI * p) - 1) / 2,
outBack: s => p => {
const q = p - 1;
return q * q * ((s + 1) * q + s) + 1;
},
};
const OUT_BACK = Ease.outBack(1.70158);
function now() {
return GLib.get_monotonic_time() / 1000;
}
function smooth(from, to, p) {
const x = Math.max(0, Math.min(1, (p - from) / (to - from)));
return x * x * (3 - 2 * x);
}
// A value that eases to a new target from wherever it is, like a QML
// Behavior. Colours are arrays and ease per channel.
class Tween {
constructor(value) {
this._from = value;
this._to = value;
this._start = 0;
this._duration = 0;
this._ease = Ease.linear;
}
set(to, duration, ease, at) {
if (this._same(to, this._to))
return;
this._from = this.get(at);
this._to = to;
this._start = at;
this._duration = duration;
this._ease = ease;
}
jump(value) {
this._from = this._to = value;
this._duration = 0;
}
get(at) {
const p = this._duration > 0 ? Math.min(1, (at - this._start) / this._duration) : 1;
const e = this._ease(p);
if (Array.isArray(this._to))
return this._to.map((t, i) => this._from[i] + (t - this._from[i]) * e);
return this._from + (this._to - this._from) * e;
}
busy(at) {
return this._duration > 0 && at - this._start < this._duration;
}
_same(a, b) {
return Array.isArray(a) ? a.every((v, i) => v === b[i]) : a === b;
}
}
// A run of steps from 0, like a QML SequentialAnimation of NumberAnimations:
// [target, duration, easing]...
function sequence(steps, start, at, pace) {
if (start === null)
return [0, false];
let t = at - start;
let from = 0;
for (const [to, duration, ease] of steps) {
const d = duration * pace;
if (t < d)
return [from + (to - from) * ease(t / d), true];
t -= d;
from = to;
}
return [from, false];
}
function rgba(cr, color, alpha = 1) {
cr.setSourceRGBA(color[0] / 255, color[1] / 255, color[2] / 255, alpha);
}
// A quadratic curve in cairo, which only knows cubic ones.
function quadTo(cr, x0, y0, cx, cy, x, y) {
cr.curveTo(x0 + 2 / 3 * (cx - x0), y0 + 2 / 3 * (cy - y0),
x + 2 / 3 * (cx - x), y + 2 / 3 * (cy - y), x, y);
}
function polyline(cr, points) {
if (points.length < 2)
return;
cr.moveTo(points[0][0], points[0][1]);
for (let i = 1; i < points.length; ++i)
cr.lineTo(points[i][0], points[i][1]);
}
function roundedRect(cr, x, y, w, h, r) {
r = Math.max(0, Math.min(r, w / 2, h / 2));
cr.newSubPath();
cr.arc(x + w - r, y + r, r, -Math.PI / 2, 0);
cr.arc(x + w - r, y + h - r, r, 0, Math.PI / 2);
cr.arc(x + r, y + h - r, r, Math.PI / 2, Math.PI);
cr.arc(x + r, y + r, r, Math.PI, 3 * Math.PI / 2);
cr.closePath();
}
// Draws what draw() draws into its own layer, at the given opacity and
// scaled about the middle of the square it sits in.
function layer(cr, opacity, scale, cx, cy, draw) {
if (opacity <= 0.001)
return;
cr.save();
cr.pushGroup();
cr.translate(cx, cy);
cr.scale(scale, scale);
cr.translate(-cx, -cy);
draw();
cr.popGroupToSource();
cr.paintWithAlpha(Math.min(1, opacity));
cr.restore();
}
// LockGlyph.qml: a padlock that opens.
class LockGlyph {
constructor() {
this._openness = new Tween(0);
this.open = false;
this.pace = 1;
}
setOpen(open, at) {
if (open === this.open)
return;
this.open = open;
if (open) {
this._openness.jump(0);
this._openness.set(1, 560 * this.pace, Ease.linear, at);
} else {
this._openness.jump(0);
}
}
busy(at) {
return this._openness.busy(at);
}
draw(cr, x, y, size, color, at) {
const u = size / 100;
const openness = this._openness.get(at);
const lift = 12 * smooth(0, 0.3, openness);
const p = Math.max(0, Math.min(1, (openness - 0.22) / 0.78));
const s = 1.4;
const swing = 180 * (1 + (s + 1) * (p - 1) ** 3 + s * (p - 1) ** 2);
const beat = 1 + 0.14 * Math.sin(Math.PI * smooth(0.55, 1, openness));
cr.save();
cr.translate(x + size / 2, y + size / 2);
cr.scale(beat, beat);
cr.translate(-size / 2, -size / 2);
rgba(cr, color);
roundedRect(cr, 14 * u, 46 * u, 72 * u, 50 * u, 12 * u);
cr.fill();
const right = 68.5;
const radius = 18.5;
const top = 28 - lift;
const narrow = Math.cos(swing * Math.PI / 180);
const points = [];
const add = (px, py) => points.push([(right + (px - right) * narrow) * u, py * u]);
add(31.5, 56 - 18 * smooth(0, 0.3, openness));
add(31.5, top);
for (let i = 1; i < 24; ++i) {
const a = Math.PI + Math.PI * i / 24;
add(50 + radius * Math.cos(a), top + radius * Math.sin(a));
}
add(right, top);
add(right, 56);
cr.setLineWidth(11 * u);
cr.setLineCap(1 /* round */);
cr.setLineJoin(1 /* round */);
polyline(cr, points);
cr.stroke();
cr.restore();
}
}
// FaceGlyph.qml: brackets round a face that looks around, then the rings and
// a tick, or a red shake of the head.
class FaceGlyph {
constructor(lineWidth = null) {
this.lineWidth = lineWidth;
this.color = Theme.textPrimary;
this.pace = 1;
this.mode = 'idle';
this.onSettled = null;
this._lookStart = 0;
this._lookFrozen = 0;
this._lookAmount = new Tween(0);
this._smile = new Tween(1);
this._bracket = new Tween(1);
this._bracketColor = new Tween(Theme.textPrimary);
this._shown = new Tween(1);
this._lockOpacity = new Tween(0);
this._lockScale = new Tween(0.7);
this._lock = new LockGlyph();
this._successStart = null;
this._shakeStart = null;
this._settle = 0;
}
_looking() {
return this.mode === 'scanning';
}
_lookAngle(at) {
if (!this._looking())
return this._lookFrozen;
const period = 2000 * this.pace;
return 2 * Math.PI * (((at - this._lookStart) % period) / period);
}
_breathe(at) {
if (!this._looking())
return 0;
const half = 700 * this.pace;
const p = ((at - this._lookStart) % (2 * half)) / half;
return p < 1 ? Ease.inOutSine(p) : 1 - Ease.inOutSine(p - 1);
}
setMode(mode, at) {
if (mode === this.mode)
return;
const wasLooking = this._looking();
if (wasLooking)
this._lookFrozen = this._lookAngle(at);
this.mode = mode;
const pace = this.pace;
if (this._looking() && !wasLooking)
this._lookStart = at;
this._lookAmount.set(this._looking() ? 1 : 0, 350 * pace, Ease.inOutQuad, at);
this._smile.set(mode === 'failure' ? 0 : 1, 220 * pace, Ease.outQuad, at);
this._bracket.set(mode === 'tracking' ? 0.9 : 1, 260 * pace, OUT_BACK, at);
this._bracketColor.set(this._colorFor(mode), 220 * pace, Ease.linear, at);
this._shown.set(mode === 'lockout' ? 0 : 1, 180 * pace, Ease.linear, at);
this._lockOpacity.set(mode === 'lockout' ? 1 : 0, 200 * pace, Ease.linear, at);
this._lockScale.set(mode === 'lockout' ? 1 : 0.7, 260 * pace, OUT_BACK, at);
this._successStart = null;
if (this._settle) {
GLib.source_remove(this._settle);
this._settle = 0;
}
if (mode === 'failure') {
this._shakeStart = at;
this.onSettled?.(false);
} else if (mode === 'success') {
this._successStart = at;
this._settle = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 850 * pace, () => {
this._settle = 0;
this.onSettled?.(true);
return GLib.SOURCE_REMOVE;
});
}
}
_colorFor(mode) {
if (mode === 'success')
return Theme.success;
if (mode === 'failure')
return Theme.failure;
return this.color;
}
destroy() {
if (this._settle)
GLib.source_remove(this._settle);
this._settle = 0;
}
busy(at) {
return this._looking() || this._lookAmount.busy(at) || this._smile.busy(at) ||
this._bracket.busy(at) || this._bracketColor.busy(at) || this._shown.busy(at) ||
this._lockOpacity.busy(at) || this._lockScale.busy(at) ||
(this._successStart !== null && at - this._successStart < 900 * this.pace) ||
sequence(FaceGlyph.SHAKE, this._shakeStart, at, this.pace)[1];
}
draw(cr, x, y, size, at) {
const u = size / 100;
const lw = this.lineWidth ?? size * 0.055;
const pace = this.pace;
const color = this._bracketColor.get(at);
const lookAmount = this._lookAmount.get(at);
const angle = this._lookAngle(at);
const yaw = 0.34 * Math.cos(angle) * lookAmount;
const pitch = 0.2 * Math.sin(angle) * lookAmount;
const fx = (px, py, pz) => (50 + px * Math.cos(yaw) + pz * Math.sin(yaw)) * u;
const fy = (px, py, pz) => {
const depth = pz * Math.cos(yaw) - px * Math.sin(yaw);
return (50 + py * Math.cos(pitch) - depth * Math.sin(pitch)) * u;
};
const t = this._successStart === null ? 0 : Math.min(1, (at - this._successStart) / (850 * pace));
const tickStart = this._successStart === null ? null : this._successStart + 470 * pace;
const tick = tickStart === null || at < tickStart ? 0 : Ease.outQuad(Math.min(1, (at - tickStart) / (260 * pace)));
const [shake] = sequence(FaceGlyph.SHAKE, this._shakeStart, at, pace);
const faceGone = smooth(0, 0.22, t);
const ringsIn = smooth(0.04, 0.26, t);
const turn = FaceGlyph.turned(Math.min(1, t / 0.7));
const ringSize = 40 * (0.7 + 0.3 * ringsIn);
const ringA = FaceGlyph.ring(0, -360 * turn, 90 * turn, ringSize);
const ringB = FaceGlyph.ring(70 + 360 * turn, 30 + 360 * turn, -90 * turn, ringSize);
const ringBShown = 1 - smooth(0.36, 0.58, t);
const ringABack = 1 - 0.6 * FaceGlyph.tilt(ringA);
const ringBBack = 1 - 0.6 * FaceGlyph.tilt(ringB);
const glow = 1 - smooth(0.42, 0.75, t);
const onScreen = p => [(50 + p[0]) * u, (50 + p[1]) * u];
const bracketScale = this._bracket.get(at) - 0.04 * this._breathe(at);
const c = 50 * u;
cr.save();
cr.translate(x + shake * u, y);
cr.setLineCap(1);
cr.setLineJoin(1);
// Brackets, giving way to the rings
layer(cr, 1 - faceGone, 1 - 0.15 * faceGone, c, c, () => {
cr.translate(c, c);
cr.scale(bracketScale, bracketScale);
cr.translate(-c, -c);
rgba(cr, color);
cr.setLineWidth(lw);
const corner = (sx, sy, lx, ly, qx, qy, cx, cy, ex, ey) => {
cr.moveTo(sx * u, sy * u);
cr.lineTo(lx * u, ly * u);
quadTo(cr, lx * u, ly * u, cx * u, cy * u, qx * u, qy * u);
cr.lineTo(ex * u, ey * u);
};
corner(6, 30, 6, 19, 19, 6, 6, 6, 30, 6);
corner(70, 6, 81, 6, 94, 19, 94, 6, 94, 30);
corner(94, 70, 94, 81, 81, 94, 94, 94, 70, 94);
corner(30, 94, 19, 94, 6, 81, 6, 94, 6, 70);
cr.stroke();
});
// The rings: a soft glow under them, their far halves dimmed, the
// near halves on top.
if (t > 0) {
layer(cr, ringsIn, 1, c, c, () => {
if (glow > 0) {
// MultiEffect's blur, drawn as wider and fainter strokes.
for (let i = 0; i < 6; ++i) {
cr.setLineWidth(lw * 1.6 + i * lw * 0.9);
const a = 0.8 * glow * 0.16;
rgba(cr, color, a);
polyline(cr, [...ringA.map(onScreen), onScreen(ringA[0])]);
cr.stroke();
rgba(cr, color, a * ringBShown);
polyline(cr, [...ringB.map(onScreen), onScreen(ringB[0])]);
cr.stroke();
}
}
cr.setLineWidth(lw);
const half = (points, front) => FaceGlyph.half(points, front).map(onScreen);
rgba(cr, color, ringABack);
polyline(cr, half(ringA, false));
cr.stroke();
rgba(cr, color, ringBBack * ringBShown);
polyline(cr, half(ringB, false));
cr.stroke();
rgba(cr, color, ringBShown);
polyline(cr, half(ringB, true));
cr.stroke();
rgba(cr, color);
polyline(cr, half(ringA, true));
cr.stroke();
});
}
// The face itself
layer(cr, this._shown.get(at) * (1 - faceGone), 1 - 0.2 * faceGone, c, c, () => {
rgba(cr, color);
cr.setLineWidth(lw);
const smile = this._smile.get(at);
cr.moveTo(fx(-16, -14, 26), fy(-16, -14, 26));
cr.lineTo(fx(-16, -5, 26), fy(-16, -5, 26));
cr.moveTo(fx(16, -14, 26), fy(16, -14, 26));
cr.lineTo(fx(16, -5, 26), fy(16, -5, 26));
cr.moveTo(fx(0, -13, 29), fy(0, -13, 29));
cr.lineTo(fx(0, 6, 37), fy(0, 6, 37));
quadTo(cr, fx(0, 6, 37), fy(0, 6, 37), fx(0, 11, 35), fy(0, 11, 35), fx(-5, 11, 31), fy(-5, 11, 31));
cr.moveTo(fx(-15, 20, 21), fy(-15, 20, 21));
quadTo(cr, fx(-15, 20, 21), fy(-15, 20, 21), fx(0, 20 + 11 * smile, 24), fy(0, 20 + 11 * smile, 24),
fx(15, 20, 21), fy(15, 20, 21));
cr.stroke();
});
// The tick, drawn inside the ring as it comes to rest
if (tick > 0.001) {
layer(cr, Math.min(1, tick * 8), 0.75, c, c, () => {
cr.translate(1.5 * u, 0);
rgba(cr, Theme.success);
cr.setLineWidth(lw / 0.75);
const a = [28 * u, 52 * u];
const b = [43 * u, 67 * u];
const e = [73 * u, 35 * u];
const lerp = (p, q, k) => [p[0] + (q[0] - p[0]) * k, p[1] + (q[1] - p[1]) * k];
const split = 0.33;
polyline(cr, tick <= split ? [a, lerp(a, b, tick / split)]
: [a, b, lerp(b, e, (tick - split) / (1 - split))]);
cr.stroke();
});
}
// A lock instead of the face, after too many tries
const lockSize = size * 0.42;
layer(cr, this._lockOpacity.get(at), this._lockScale.get(at), c, c, () => {
this._lock.draw(cr, c - lockSize / 2, c - lockSize / 2, lockSize, this.color, at);
});
cr.restore();
}
// How far the rings have turned at p: speeding up from rest, fastest a
// quarter of the way in, then settling softly, facing forward.
static turned(p) {
return p * p * (10 - p * (20 - p * (15 - 4 * p)));
}
// A ring turned in 3D (degrees about x, then y, then z).
static ring(ax, ay, az, radius) {
const d = Math.PI / 180;
const ca = Math.cos(ax * d), sa = Math.sin(ax * d);
const cb = Math.cos(ay * d), sb = Math.sin(ay * d);
const cg = Math.cos(az * d), sg = Math.sin(az * d);
const points = [];
for (let i = 0; i < 64; ++i) {
const phi = 2 * Math.PI * i / 64;
let px = radius * Math.cos(phi);
let py = radius * Math.sin(phi) * ca;
let pz = radius * Math.sin(phi) * sa;
const x1 = px * cb + pz * sb;
pz = pz * cb - px * sb;
px = x1;
const x2 = px * cg - py * sg;
py = px * sg + py * cg;
px = x2;
points.push([px, py, pz]);
}
return points;
}
static tilt(points) {
let most = 0;
for (const p of points)
most = Math.max(most, Math.abs(p[2]));
return most / Math.max(1, Math.hypot(points[0][0], points[0][1], points[0][2]));
}
// The half of a ring in front of the middle, or behind it, in one piece
// and reaching one point into the other half so the two meet.
static half(points, front) {
const n = points.length;
const inFront = i => points[(i + n) % n][2] >= -1e-6;
let start = -1;
for (let i = 0; i < n; ++i) {
if (inFront(i) === front && inFront(i - 1) !== front) {
start = i;
break;
}
}
const out = [];
if (start < 0) {
if (inFront(0) === front) {
for (let i = 0; i <= n; ++i)
out.push(points[i % n]);
}
return out;
}
out.push(points[(start + n - 1) % n]);
let i = start;
while (inFront(i) === front && i < start + n) {
out.push(points[i % n]);
++i;
}
out.push(points[i % n]);
return out;
}
}
FaceGlyph.SHAKE = [
[-9, 55, Ease.outQuad], [8, 70, Ease.inOutQuad], [-6, 65, Ease.inOutQuad],
[4, 60, Ease.inOutQuad], [-2, 55, Ease.inOutQuad], [0, 50, Ease.outQuad],
];
const PILL_SHAKE = [
[-10, 55, Ease.outQuad], [9, 70, Ease.linear], [-6, 65, Ease.linear],
[4, 60, Ease.linear], [0, 55, Ease.outQuad],
];
// Bubble.qml: the island that slides down, opens up, shows the face and
// closes again.
class Bubble {
constructor() {
this.actor = new St.DrawingArea({reactive: false, visible: false});
this.actor.connect('repaint', area => this._repaint(area));
this._timeline = new Clutter.Timeline({actor: this.actor, duration: 1000, repeat_count: -1});
this._timeline.connect('new-frame', () => this._frame());
this.phase = 'hidden';
this.message = '';
this.faceSeen = false;
this.style = 'full';
this.pace = 1;
this._shownPhase = 'idle';
this._positioned = false;
this._expanded = false;
this._opening = false;
this._timers = {};
this._width = new Tween(Theme.closedWidth);
this._height = new Tween(Theme.closedHeight);
this._y = new Tween(-Theme.closedHeight - 20);
this._shadow = new Tween(0);
this._fullOpacity = new Tween(0);
this._smallOpacity = new Tween(0);
this._glyphY = new Tween(40);
this._messageOpacity = new Tween(0);
this._pulseStart = null;
this._settle = new Tween(0);
this._pillShakeStart = null;
this._face = new FaceGlyph();
this._smallFace = new FaceGlyph(2.4);
this._smallFace.onSettled = ok => {
if (!ok)
this._pillShakeStart = now();
};
this._lock = new LockGlyph();
}
destroy() {
for (const id of Object.values(this._timers))
GLib.source_remove(id);
this._timers = {};
this._face.destroy();
this._smallFace.destroy();
this._timeline.stop();
this.actor.destroy();
}
setState(state) {
const at = now();
const wasOpen = this.phase !== 'hidden';
this.phase = state.phase ?? 'hidden';
this.message = state.message ?? '';
this.faceSeen = !!state.faceSeen;
this.style = state.style === 'minimal' ? 'minimal' : 'full';
const pace = state.pace ?? 1;
if (pace !== this.pace) {
this.pace = pace;
this._face.pace = this._smallFace.pace = this._lock.pace = pace;
}
if (this.phase !== 'hidden')
this._shownPhase = this.phase;
const glyphMode = this._shownPhase === 'scanning'
? this.faceSeen ? 'tracking' : 'scanning'
: this._shownPhase;
this._face.setMode(glyphMode, at);
this._smallFace.setMode(glyphMode === 'lockout' ? 'failure' : glyphMode, at);
this._lock.setOpen(this._shownPhase === 'success', at);
const hasMessage = this.message.length > 0;
this._glyphY.set(hasMessage ? 28 : 40, 220 * this.pace, Ease.outCubic, at);
this._messageOpacity.set(hasMessage ? 1 : 0, 200 * this.pace, Ease.linear, at);
this._updatePulse(at);
const wantOpen = this.phase !== 'hidden';
if (wantOpen !== wasOpen)
this._choreograph(wantOpen, at);
this._wake();
}
_timer(name, ms, callback) {
if (this._timers[name])
GLib.source_remove(this._timers[name]);
this._timers[name] = GLib.timeout_add(GLib.PRIORITY_DEFAULT, Math.max(0, Math.round(ms)), () => {
delete this._timers[name];
callback(now());
this._wake();
return GLib.SOURCE_REMOVE;
});
}
_cancel(name) {
if (this._timers[name]) {
GLib.source_remove(this._timers[name]);
delete this._timers[name];
}
}
_choreograph(wantOpen, at) {
if (wantOpen) {
this._opening = true;
this._cancel('slideOut');
this._cancel('closeDone');
this._setPositioned(true, at);
if (!this._expanded)
this._timer('expand', Theme.expandDelay * this.pace, t => this._setExpanded(true, t));
this.actor.show();
} else {
this._opening = false;
this._cancel('expand');
this._setExpanded(false, at);
this._timer('slideOut', Theme.slideOutDelay * this.pace, t => {
this._setPositioned(false, t);
this._timer('closeDone', Theme.slideOutDuration * this.pace + 60, () => {
this.actor.hide();
this._timeline.stop();
});
});
}
}
_setPositioned(positioned, at) {
this._positioned = positioned;
this._y.set(positioned ? Theme.topGap : -Theme.closedHeight - 20,
(this._opening ? Theme.slideInDuration : Theme.slideOutDuration) * this.pace,
this._opening ? Ease.outCubic : Ease.inCubic, at);
}
_setExpanded(expanded, at) {
this._expanded = expanded;
const minimal = this.style === 'minimal';
const w = expanded ? minimal ? Theme.minimalWidth : Theme.openWidth : Theme.closedWidth;
const h = expanded ? minimal ? Theme.minimalHeight : Theme.openHeight : Theme.closedHeight;
const duration = (this._opening ? Theme.growDuration : Theme.shrinkDuration) * this.pace;
// Growing overshoots sideways more than down, so the bottom edge does
// not sag.
this._width.set(w, duration, this._opening ? Ease.outBack(1.6) : Ease.outCubic, at);
this._height.set(h, duration, this._opening ? Ease.outBack(0.9) : Ease.outCubic, at);
this._shadow.set(expanded ? 0.35 : 0, (this._opening ? 200 : 120) * this.pace, Ease.linear, at);
this._fullOpacity.set(expanded ? 1 : 0, (this._opening ? 260 : 120) * this.pace, Ease.linear, at);
this._smallOpacity.set(expanded ? 1 : 0, (this._opening ? 200 : 120) * this.pace, Ease.linear, at);
this._updatePulse(at);
}
// The breathing while it scans: 1500 ms a breath, settling when it stops.
_updatePulse(at) {
const running = this.phase === 'scanning' && this._expanded;
if (running && this._pulseStart === null) {
this._pulseStart = at;
} else if (!running && this._pulseStart !== null) {
this._settle.jump(this._pulse(at));
this._settle.set(0, 200 * this.pace, Ease.outQuad, at);
this._pulseStart = null;
}
}
_pulse(at) {
if (this._pulseStart === null)
return this._settle.get(at);
const p = this.pace;
let t = (at - this._pulseStart) % (1500 * p);
if (t < 600 * p)
return 0;
t -= 600 * p;
if (t < 400 * p)
return Ease.inOutQuad(t / (400 * p));
t -= 400 * p;
if (t < 50 * p)
return 1;
t -= 50 * p;
if (t < 400 * p)
return 1 - Ease.inOutQuad(t / (400 * p));
return 0;
}
_wake() {
if (!this.actor.visible)
return;
if (!this._timeline.is_playing())
this._timeline.start();
this.actor.queue_repaint();
}
_frame() {
const at = now();
this.actor.queue_repaint();
const busy = this.phase !== 'hidden' || Object.keys(this._timers).length > 0 ||
this._width.busy(at) || this._y.busy(at) || this._face.busy(at) || this._smallFace.busy(at);
if (!busy)
this._timeline.stop();
}
_repaint(area) {
const cr = area.get_context();
const scale = St.ThemeContext.get_for_stage(global.stage).scale_factor;
const at = now();
cr.save();
cr.setOperator(0 /* clear */);
cr.paint();
cr.restore();
cr.scale(scale, scale);
try {
this._draw(cr, at);
} catch (e) {
logError(e, 'face-unlock bubble');
}
cr.$dispose();
}
_draw(cr, at) {
const minimal = this.style === 'minimal';
const w = this._width.get(at);
const h = this._height.get(at);
const [pillShake] = sequence(PILL_SHAKE, this._pillShakeStart, at, this.pace);
const x = (WIDTH - w) / 2 + pillShake;
const y = this._y.get(at);
const radius = minimal ? h / 2 : Math.min(Theme.openRadius, h / 2);
// The shadow: MultiEffect's soft one, as rings that fade outwards.
const shadow = this._shadow.get(at);
if (shadow > 0.001) {
for (let i = 8; i >= 1; --i) {
const grow = i * 2;
rgba(cr, [0, 0, 0], shadow * 0.18 * (1 - i / 9));
roundedRect(cr, x - grow, y + 3 - grow, w + 2 * grow, h + 2 * grow, radius + grow);
cr.fill();
}
}
rgba(cr, Theme.panel);
roundedRect(cr, x, y, w, h, radius);
cr.fill();
const pulse = this._pulse(at);
if (!minimal) {
// The face and a line of text, laid out at the open size and
// scaled with the island.
const fit = Math.min(w / Theme.openWidth, h / Theme.openHeight);
const ox = x + w / 2 - Theme.openWidth / 2;
const oy = y + h / 2 - Theme.openHeight / 2;
const cx = ox + Theme.openWidth / 2;
const cy = oy + Theme.openHeight / 2;
layer(cr, this._fullOpacity.get(at), fit, cx, cy, () => {
layer(cr, 1 - 0.35 * pulse, 1 - 0.03 * pulse, cx, cy, () => {
this._face.draw(cr, ox + 40, oy + this._glyphY.get(at), 100, at);
this._drawMessage(cr, ox, oy, at);
});
});
} else {
layer(cr, this._smallOpacity.get(at), 1, x + w / 2, y + h / 2, () => {
const failed = this._shownPhase === 'failure' || this._shownPhase === 'lockout';
this._lock.draw(cr, x + 16, y + (h - 18) / 2, 18, failed ? Theme.failure : Theme.textPrimary, at);
const fx = x + w - 14 - 24;
const fy = y + (h - 24) / 2;
layer(cr, 1 - 0.35 * pulse, 1 - 0.03 * pulse, fx + 12, fy + 12, () => {
this._smallFace.draw(cr, fx, fy, 24, at);
});
});
}
}
_drawMessage(cr, ox, oy, at) {
const opacity = this._messageOpacity.get(at);
if (opacity <= 0.001 || !this.message)
return;
const layout = PangoCairo.create_layout(cr);
const font = Pango.FontDescription.from_string(Bubble._fontName());
font.set_absolute_size(13 * Pango.SCALE);
font.set_weight(Pango.Weight.MEDIUM);
layout.set_font_description(font);
layout.set_width((Theme.openWidth - 32) * Pango.SCALE);
layout.set_ellipsize(Pango.EllipsizeMode.END);
layout.set_alignment(Pango.Alignment.CENTER);
layout.set_text(this.message, -1);
const [, logical] = layout.get_pixel_extents();
const failed = this._shownPhase === 'failure' || this._shownPhase === 'lockout';
rgba(cr, failed ? Theme.textDetail : Theme.textSecondary, opacity);
cr.moveTo(ox + 16, oy + Theme.openHeight - 20 - logical.height);
PangoCairo.show_layout(cr, layout);
}
static _fontName() {
if (!Bubble._font) {
const name = new Gio.Settings({schema_id: 'org.gnome.desktop.interface'}).get_string('font-name');
Bubble._font = name.replace(/\s+[\d.]+$/, '');
}
return Bubble._font;
}
}
export default class FaceUnlockExtension extends Extension {
enable() {
this._bubble = new Bubble();
const ui = Main.layoutManager.uiGroup;
ui.add_child(this._bubble.actor);
// Above everything, the lock screen and its dialogs included.
this._raise = ui.connect('child-added', () => ui.set_child_above_sibling(this._bubble.actor, null));
this._monitors = Main.layoutManager.connect('monitors-changed', () => this._place());
this._scale = St.ThemeContext.get_for_stage(global.stage).connect('notify::scale-factor', () => this._place());
this._place();
this._watch = Gio.bus_watch_name(Gio.BusType.SESSION, BUS_NAME, Gio.BusNameWatcherFlags.NONE,
() => this._connect(), () => this._disconnect());
}
disable() {
Gio.bus_unwatch_name(this._watch);
this._disconnect();
Main.layoutManager.uiGroup.disconnect(this._raise);
Main.layoutManager.disconnect(this._monitors);
St.ThemeContext.get_for_stage(global.stage).disconnect(this._scale);
this._bubble.destroy();
this._bubble = null;
}
_place() {
const monitor = Main.layoutManager.primaryMonitor;
if (!monitor)
return;
const scale = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._bubble.actor.set_size(WIDTH * scale, HEIGHT * scale);
this._bubble.actor.set_position(monitor.x + Math.round((monitor.width - WIDTH * scale) / 2), monitor.y);
Main.layoutManager.uiGroup.set_child_above_sibling(this._bubble.actor, null);
}
_connect() {
this._disconnect();
const unpack = state => {
const out = {};
for (const [key, value] of Object.entries(state))
out[key] = value instanceof GLib.Variant ? value.recursiveUnpack() : value;
return out;
};
this._proxy = new BubbleProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH, (proxy, error) => {
if (error) {
logError(error, 'face-unlock');
return;
}
this._signal = proxy.connectSignal('StateChanged', (p, sender, [state]) => {
this._place();
this._bubble?.setState(unpack(state));
});
proxy.GetStateRemote(([state], getError) => {
if (!getError)
this._bubble?.setState(unpack(state));
});
}, null, Gio.DBusProxyFlags.DO_NOT_AUTO_START);
}
_disconnect() {
if (this._proxy && this._signal)
this._proxy.disconnectSignal(this._signal);
this._proxy = null;
this._signal = null;
this._bubble?.setState({phase: 'hidden'});
}
}
@@ -0,0 +1,8 @@
{
"uuid": "face-unlock@loonixtools.github.io",
"name": "Face Unlock",
"description": "The bubble of face-unlock: shows what the camera is doing, on the lock screen too.",
"shell-version": ["45", "46", "47", "48", "49", "50"],
"session-modes": ["user", "unlock-dialog"],
"url": "https://github.com/LoonixTools/face-unlock"
}
+39
View File
@@ -0,0 +1,39 @@
// SPDX-License-Identifier: GPL-3.0-or-later
#include "bubbleservice.h"
#include "bubblecontroller.h"
#include <QDBusConnection>
#include <QDBusError>
BubbleService::BubbleService(BubbleController *bubble, QObject *parent)
: QObject(parent)
, m_bubble(bubble)
{
const auto changed = [this] {
Q_EMIT StateChanged(GetState());
};
connect(bubble, &BubbleController::phaseChanged, this, changed);
connect(bubble, &BubbleController::messageChanged, this, changed);
connect(bubble, &BubbleController::faceSeenChanged, this, changed);
connect(bubble, &BubbleController::styleChanged, this, changed);
connect(bubble, &BubbleController::paceChanged, this, changed);
QDBusConnection bus = QDBusConnection::sessionBus();
if (!bus.registerService(QStringLiteral("io.github.loonixtools.FaceUnlock"))
|| !bus.registerObject(QStringLiteral("/io/github/loonixtools/FaceUnlock"), this, QDBusConnection::ExportScriptableContents)) {
qWarning("cannot offer the bubble on the session bus: %s", qPrintable(bus.lastError().message()));
}
}
QVariantMap BubbleService::GetState() const
{
return {
{QStringLiteral("phase"), m_bubble->phase()},
{QStringLiteral("message"), m_bubble->message()},
{QStringLiteral("faceSeen"), m_bubble->faceSeen()},
{QStringLiteral("style"), m_bubble->style()},
{QStringLiteral("pace"), m_bubble->pace()},
};
}
+30
View File
@@ -0,0 +1,30 @@
// SPDX-License-Identifier: GPL-3.0-or-later
//
// The bubble's state on the session bus, for GNOME. GNOME lets no program
// draw above its windows or its lock screen; only a GNOME Shell extension
// may. face-unlock's extension (res/gnome-shell) draws the bubble from what
// this says: io.github.loonixtools.FaceUnlock, /io/github/loonixtools/FaceUnlock.
#pragma once
#include <QObject>
#include <QVariantMap>
class BubbleController;
class BubbleService : public QObject
{
Q_OBJECT
Q_CLASSINFO("D-Bus Interface", "io.github.loonixtools.FaceUnlock.Bubble")
public:
explicit BubbleService(BubbleController *bubble, QObject *parent = nullptr);
// phase, message, faceSeen, style, pace: what BubbleController has.
Q_SCRIPTABLE QVariantMap GetState() const;
Q_SIGNALS:
Q_SCRIPTABLE void StateChanged(const QVariantMap &state);
private:
BubbleController *m_bubble;
};
+4 -3
View File
@@ -12,9 +12,10 @@
// request has to be made for every new surface role, before it is mapped, so
// it is repeated each time the window is shown again.
//
// Other compositors have no such thing. On Hyprland and Niri the lock screen
// covers the bubble, which shows again with the tick once it is gone. GNOME
// has no layer-shell at all, so there is no bubble there (see main.cpp).
// Other compositors have no such thing: on Hyprland and Niri the lock screen
// covers the bubble, which shows the tick once it is gone. GNOME has no
// layer-shell at all; there face-unlock's GNOME Shell extension draws the
// bubble (BubbleService).
#pragma once
+8 -3
View File
@@ -10,6 +10,7 @@
#include "agentsocket.h"
#include "bubblecontroller.h"
#include "bubbleservice.h"
#include "bubblewindow.h"
#include "enrollcontroller.h"
#include "lockcontroller.h"
@@ -112,8 +113,8 @@ int main(int argc, char **argv)
}
BubbleController bubble(&config);
// The bubble floats above everything as a layer-shell surface. GNOME has
// none, and a normal window cannot stay on top or pick its place, so
// there it does without.
// none, and a normal window cannot stay on top or pick its place: there
// face-unlock's GNOME Shell extension draws it, from what this tells it.
std::unique_ptr<BubbleWindow> window;
if (Wayland::hasGlobal("zwlr_layer_shell_v1")) {
window = std::make_unique<BubbleWindow>(&engine, &bubble);
@@ -121,7 +122,7 @@ int main(int argc, char **argv)
if (parser.isSet(demoOpt)) {
if (!window) {
qWarning("this desktop has no layer-shell, so there is no bubble to show");
qWarning("this desktop has no layer-shell; on GNOME the extension draws the bubble");
return 1;
}
scheduleDemo(&bubble);
@@ -135,6 +136,10 @@ int main(int argc, char **argv)
}
socket.listen();
QObject::connect(&socket, &AgentSocket::scanEvent, &bubble, &BubbleController::daemonEvent);
std::unique_ptr<BubbleService> service;
if (!window) {
service = std::make_unique<BubbleService>(&bubble);
}
LockController lock(&bubble, &config);
return app.exec();
+11
View File
@@ -111,6 +111,16 @@ fu_do_enable() {
[[ $CFG_SUDO == yes ]] && ! fu_pam_enabled sudo && fu_root pam-enable sudo
[[ $CFG_POLKIT == yes ]] && ! fu_pam_enabled polkit-1 && fu_root pam-enable polkit-1
case "$FU_DESKTOP" in
gnome)
fu_gnome_extension_enable
case $? in
1) fu_bad "$(fu_msg "Could not switch on the GNOME extension that shows the bubble.")" ;;
2) fu_note "$(fu_msg "Log out and back in once: then GNOME shows the bubble too.")" ;;
esac
;;
esac
fu_ok "$(fu_msg "Face unlock is on. Lock the screen and look at it to try.")"
if [[ $CFG_SUDO != yes && $CFG_POLKIT != yes ]]; then
fu_note "$(fu_msg "It can do sudo and admin prompts too. See Settings.")"
@@ -120,6 +130,7 @@ fu_do_enable() {
fu_do_disable() {
fu_config_set Enabled no || { fu_bad "$(fu_msg "Could not save the setting.")"; return 1; }
fu_agent_available && fu_agent_disable
[[ $FU_DESKTOP == gnome ]] && fu_gnome_extension_disable
local service
for service in "${FU_PAM_SERVICES[@]}"; do
+7 -8
View File
@@ -276,8 +276,7 @@ fu_ui_status() {
# 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. Layers is no setting: whether the desktop can show
# the bubble at all (GNOME cannot).
# that is off
FU_SETTINGS=(
"group|Lock screen"
"user|LockScreen|bool|yes|Unlock with your face"
@@ -295,7 +294,7 @@ FU_SETTINGS=(
"sys|Adapt|bool|yes|Learn from every unlock"
"sys|SkipLidClosed|bool|yes|Not when the lid is closed"
"group|Bubble"
"user|Bubble|bool|yes|Show the bubble||Layers"
"user|Bubble|bool|yes|Show the bubble"
"user|BubbleStyle|choice|full|Style|full,minimal|Bubble"
"user|AnimationSpeed|choice|normal|Animation speed|slow,normal,fast|Bubble"
"user|BubbleForPrompts|bool|yes|Also for sudo and admin prompts||Bubble"
@@ -304,10 +303,12 @@ FU_SETTINGS=(
# fu_setting_help <Key> <value>
# What a setting does, shown under the list for the selected one.
fu_setting_help() {
if [[ $FU_DESKTOP == gnome && $1 =~ ^(Bubble|BubbleStyle|AnimationSpeed|BubbleForPrompts)$ ]]; then
fu_msg "GNOME does not let other programs show above its windows, so there is no bubble on GNOME."
case "$FU_DESKTOP:$1" in
gnome:Bubble)
fu_msg "On GNOME a small GNOME extension shows the bubble. Turning face unlock on switches it on."
return
fi
;;
esac
case "$1:$2" in
LockScreen:*) fu_msg "Unlocks the lock screen when it sees your face. Off: only your password works there." ;;
ScanOnWake:*) fu_msg "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up." ;;
@@ -523,8 +524,6 @@ fu_ui_settings() {
values[i]="$FU_SETTING_VALUE"
current[${keys[i]}]="$FU_SETTING_VALUE"
done
current[Layers]=yes
[[ $FU_DESKTOP == gnome ]] && current[Layers]=no current[Bubble]=no
dirty=0
fi
+40
View File
@@ -145,6 +145,46 @@ fu_agent_hint() {
fi
}
# ---------------------------------------------------------------------------
# The bubble's GNOME Shell extension
# ---------------------------------------------------------------------------
# GNOME lets no program draw above its windows; its extensions may. The
# package brings one, and turning face unlock on switches it on.
FU_GNOME_EXTENSION="face-unlock@loonixtools.github.io"
# fu_gnome_extension_enable
# gnome-extensions only knows the extensions GNOME found when the session
# started. One that came with the package later goes straight into the
# setting, and GNOME loads it at the next login: returns 2 then.
fu_gnome_extension_enable() {
local list new
fu_have gsettings || return 1
if gnome-extensions info "$FU_GNOME_EXTENSION" > /dev/null 2>&1; then
gnome-extensions enable "$FU_GNOME_EXTENSION" > /dev/null 2>&1 && return 0
fi
list="$(gsettings get org.gnome.shell enabled-extensions 2>/dev/null)" || return 1
case "$list" in
*"'$FU_GNOME_EXTENSION'"*) return 2 ;;
'@as []'|'[]') new="['$FU_GNOME_EXTENSION']" ;;
*) new="${list%]}, '$FU_GNOME_EXTENSION']" ;;
esac
gsettings set org.gnome.shell enabled-extensions "$new" || return 1
return 2
}
fu_gnome_extension_disable() {
local list
fu_have gsettings || return 0
gnome-extensions disable "$FU_GNOME_EXTENSION" > /dev/null 2>&1 && return 0
list="$(gsettings get org.gnome.shell enabled-extensions 2>/dev/null)" || return 0
list="${list//, \'$FU_GNOME_EXTENSION\'/}"
list="${list//\'$FU_GNOME_EXTENSION\', /}"
list="${list//\'$FU_GNOME_EXTENSION\'/}"
[[ $list == '[]' ]] && list='@as []'
gsettings set org.gnome.shell enabled-extensions "$list" > /dev/null 2>&1 || true
}
fu_agent_disable() {
systemctl --user disable --now "$FU_UNIT_AGENT" > /dev/null 2>&1 || true
}