feat: add an own lock screen with the bubble and your wallpaper
This commit is contained in:
1 parent
c693ca216c
commit
c228291520
44 files changed
+3890
-1032
No files matched your search
@@ -89,4 +89,7 @@ Never test against the real setup: enrolling and the PAM files belong to the use
|
|||||||
- A development daemon needs no root: `face-unlockd --socket $XDG_RUNTIME_DIR/fu/socket
|
- A development daemon needs no root: `face-unlockd --socket $XDG_RUNTIME_DIR/fu/socket
|
||||||
--state-dir DIR --config FILE --models DIR`. It skips polkit when it does not run as root. Point
|
--state-dir DIR --config FILE --models DIR`. It skips polkit when it does not run as root. Point
|
||||||
the other parts at it with `FU_SOCKET`.
|
the other parts at it with `FU_SOCKET`.
|
||||||
|
- face-unlock's own lock screen checks the password with PAM. `FU_PAM_CONFDIR=DIR` points it at a
|
||||||
|
`face-unlock-lock` file of its own (pam_permit, pam_deny), so no test counts as a wrong password
|
||||||
|
for the real account.
|
||||||
- `make check` after every change. New strings: `po/update-pot.sh`, then translate them in every `po/*.po`.
|
- `make check` after every change. New strings: `po/update-pot.sh`, then translate them in every `po/*.po`.
|
||||||
+22
-3
@@ -102,9 +102,11 @@ install(TARGETS face-unlock-ctl DESTINATION ${FU_LIBEXECDIR})
|
|||||||
# The PAM module
|
# The PAM module
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
if(FU_BUILD_PAM)
|
# The PAM module, and the agent's own lock screen, which checks the password.
|
||||||
find_path(PAM_INCLUDE_DIR security/pam_modules.h REQUIRED)
|
find_path(PAM_INCLUDE_DIR security/pam_modules.h REQUIRED)
|
||||||
find_library(PAM_LIBRARY pam REQUIRED)
|
find_library(PAM_LIBRARY pam REQUIRED)
|
||||||
|
|
||||||
|
if(FU_BUILD_PAM)
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
pkg_check_modules(SYSTEMD IMPORTED_TARGET libsystemd)
|
pkg_check_modules(SYSTEMD IMPORTED_TARGET libsystemd)
|
||||||
|
|
||||||
@@ -155,6 +157,9 @@ if(FU_BUILD_AGENT)
|
|||||||
src/agent/lockers.cpp
|
src/agent/lockers.cpp
|
||||||
src/agent/inputwatcher.cpp
|
src/agent/inputwatcher.cpp
|
||||||
src/agent/wayland.cpp
|
src/agent/wayland.cpp
|
||||||
|
src/agent/sessionlock.cpp
|
||||||
|
src/agent/lockscreencontroller.cpp
|
||||||
|
src/agent/wallpaper.cpp
|
||||||
src/agent/enrollcontroller.cpp
|
src/agent/enrollcontroller.cpp
|
||||||
)
|
)
|
||||||
target_include_directories(face-unlock-agent PRIVATE src/agent)
|
target_include_directories(face-unlock-agent PRIVATE src/agent)
|
||||||
@@ -164,13 +169,14 @@ if(FU_BUILD_AGENT)
|
|||||||
|
|
||||||
qt6_generate_wayland_protocol_client_sources(face-unlock-agent
|
qt6_generate_wayland_protocol_client_sources(face-unlock-agent
|
||||||
FILES ${CMAKE_CURRENT_SOURCE_DIR}/protocols/kde-lockscreen-overlay-v1.xml
|
FILES ${CMAKE_CURRENT_SOURCE_DIR}/protocols/kde-lockscreen-overlay-v1.xml
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/protocols/ext-idle-notify-v1.xml)
|
${CMAKE_CURRENT_SOURCE_DIR}/protocols/ext-idle-notify-v1.xml
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/protocols/ext-session-lock-v1.xml)
|
||||||
|
|
||||||
# The QML files sit next to the module's qmldir in the resources, so they
|
# The QML files sit next to the module's qmldir in the resources, so they
|
||||||
# see each other (and the Theme singleton) without importing anything.
|
# see each other (and the Theme singleton) without importing anything.
|
||||||
# Under /qt/qml, which the engine searches, or an installed agent finds no
|
# Under /qt/qml, which the engine searches, or an installed agent finds no
|
||||||
# types (the build directory only works by its FaceUnlock/qmldir).
|
# types (the build directory only works by its FaceUnlock/qmldir).
|
||||||
set(FU_QML_FILES Theme FaceGlyph LockGlyph Checkmark Bubble TickRing Enroll PillButton)
|
set(FU_QML_FILES Theme FaceGlyph LockGlyph Checkmark Bubble TickRing Enroll PillButton LockScreen)
|
||||||
foreach(f ${FU_QML_FILES})
|
foreach(f ${FU_QML_FILES})
|
||||||
set_source_files_properties(src/agent/qml/${f}.qml PROPERTIES QT_RESOURCE_ALIAS ${f}.qml)
|
set_source_files_properties(src/agent/qml/${f}.qml PROPERTIES QT_RESOURCE_ALIAS ${f}.qml)
|
||||||
endforeach()
|
endforeach()
|
||||||
@@ -192,6 +198,7 @@ if(FU_BUILD_AGENT)
|
|||||||
src/agent/qml/TickRing.qml
|
src/agent/qml/TickRing.qml
|
||||||
src/agent/qml/Enroll.qml
|
src/agent/qml/Enroll.qml
|
||||||
src/agent/qml/PillButton.qml
|
src/agent/qml/PillButton.qml
|
||||||
|
src/agent/qml/LockScreen.qml
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(face-unlock-agent PRIVATE
|
target_link_libraries(face-unlock-agent PRIVATE
|
||||||
@@ -200,7 +207,9 @@ if(FU_BUILD_AGENT)
|
|||||||
LayerShellQt::Interface
|
LayerShellQt::Interface
|
||||||
KF6::I18n KF6::I18nQml
|
KF6::I18n KF6::I18nQml
|
||||||
fu_common
|
fu_common
|
||||||
|
${PAM_LIBRARY}
|
||||||
)
|
)
|
||||||
|
target_include_directories(face-unlock-agent PRIVATE ${PAM_INCLUDE_DIR})
|
||||||
install(TARGETS face-unlock-agent DESTINATION ${FU_LIBEXECDIR})
|
install(TARGETS face-unlock-agent DESTINATION ${FU_LIBEXECDIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -223,6 +232,16 @@ if(FU_BUILD_TESTS)
|
|||||||
target_link_libraries(test_images PRIVATE fu_core)
|
target_link_libraries(test_images PRIVATE fu_core)
|
||||||
|
|
||||||
if(FU_BUILD_AGENT)
|
if(FU_BUILD_AGENT)
|
||||||
|
add_executable(test_lockscreen tests/test_lockscreen.cpp src/agent/lockscreencontroller.cpp)
|
||||||
|
target_include_directories(test_lockscreen PRIVATE src/agent ${PAM_INCLUDE_DIR})
|
||||||
|
target_link_libraries(test_lockscreen PRIVATE Qt6::Core KF6::I18n ${PAM_LIBRARY})
|
||||||
|
add_test(NAME lockscreen COMMAND test_lockscreen)
|
||||||
|
|
||||||
|
add_executable(test_wallpaper tests/test_wallpaper.cpp src/agent/wallpaper.cpp)
|
||||||
|
target_include_directories(test_wallpaper PRIVATE src/agent)
|
||||||
|
target_link_libraries(test_wallpaper PRIVATE Qt6::Core)
|
||||||
|
add_test(NAME wallpaper COMMAND test_wallpaper)
|
||||||
|
|
||||||
add_executable(test_lockers tests/test_lockers.cpp src/agent/lockers.cpp)
|
add_executable(test_lockers tests/test_lockers.cpp src/agent/lockers.cpp)
|
||||||
target_include_directories(test_lockers PRIVATE src/agent)
|
target_include_directories(test_lockers PRIVATE src/agent)
|
||||||
target_link_libraries(test_lockers PRIVATE Qt6::Core)
|
target_link_libraries(test_lockers PRIVATE Qt6::Core)
|
||||||
|
|||||||
@@ -74,8 +74,8 @@ desktops, on Wayland:
|
|||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| KDE Plasma 6 | ✅ | ✅ | ✅ above the lock screen too |
|
| KDE Plasma 6 | ✅ | ✅ | ✅ above the lock screen too |
|
||||||
| GNOME | ✅ | ✅ | ✅ above the lock screen too |
|
| GNOME | ✅ | ✅ | ✅ above the lock screen too |
|
||||||
| Hyprland | ✅ hyprlock, swaylock, gtklock or waylock | ✅ | ✅ once the lock screen is gone |
|
| Hyprland | ✅ hyprlock, swaylock, gtklock, waylock, or face-unlock's own | ✅ | ✅ on face-unlock's own lock screen too |
|
||||||
| Niri | ✅ swaylock, hyprlock, gtklock or waylock | ✅ | ✅ once the lock screen is gone |
|
| Niri | ✅ swaylock, hyprlock, gtklock, waylock, or face-unlock's own | ✅ | ✅ on face-unlock's own lock screen too |
|
||||||
|
|
||||||
On GNOME a small GNOME extension draws the bubble. Turning face unlock on
|
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.
|
switches it on; right after installing, log out and back in once.
|
||||||
@@ -86,10 +86,43 @@ press Enter on the empty password field to scan. hyprlock and swaylock also
|
|||||||
scan by themselves when you come back. Those lock screens cover the bubble,
|
scan by themselves when you come back. Those lock screens cover the bubble,
|
||||||
which shows the tick once they are gone.
|
which shows the tick once they are gone.
|
||||||
|
|
||||||
|
For the bubble on the lock screen, use face-unlock's own: `face-unlock lock`.
|
||||||
|
It shows the wallpaper of your desktop (from swaybg, awww, hyprpaper or
|
||||||
|
wpaperd). Under **Settings** you can pick a picture instead, or a folder to take
|
||||||
|
one from at random, blurred if you like.
|
||||||
|
|
||||||
Admin prompts and setting up a face need a polkit agent there (for example
|
Admin prompts and setting up a face need a polkit agent there (for example
|
||||||
hyprpolkitagent). Hyprland without uwsm does not start the part that watches
|
hyprpolkitagent). Hyprland without uwsm does not start the part that watches
|
||||||
the lock screen by itself: the menu shows what to add to its config.
|
the lock screen by itself: the menu shows what to add to its config.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Hyprland and Niri: face-unlock's lock screen on a key</summary>
|
||||||
|
|
||||||
|
`~/.config/hypr/hyprland.conf`, and `lock_cmd` in `hypridle.conf`:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
bind = SUPER, L, exec, face-unlock lock
|
||||||
|
```
|
||||||
|
|
||||||
|
`~/.config/hypr/hyprland.lua` (Hyprland 0.56 and newer):
|
||||||
|
|
||||||
|
```lua
|
||||||
|
hl.bind("SUPER + L", hl.dsp.exec_cmd("face-unlock lock"))
|
||||||
|
```
|
||||||
|
|
||||||
|
`~/.config/niri/config.kdl`, and `face-unlock lock` in swayidle:
|
||||||
|
|
||||||
|
```kdl
|
||||||
|
binds {
|
||||||
|
Mod+Alt+L { spawn "face-unlock" "lock"; }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`face-unlock lock` returns as soon as the screen is locked, so it also works
|
||||||
|
for locking before sleep.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Coming from plasma-face-unlock?</summary>
|
<summary>Coming from plasma-face-unlock?</summary>
|
||||||
|
|
||||||
|
|||||||
+27
-7
@@ -18,9 +18,8 @@ a printed one does not either.
|
|||||||
|
|
||||||
A bubble at the top of the screen shows what is going on: it drops down when
|
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
|
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 and GNOME it
|
somebody two green rings spin and land around a tick. It shows above the lock
|
||||||
shows above the lock screen too. *Animation speed* makes all of it faster or
|
screen too. *Animation speed* makes all of it faster or slower.
|
||||||
slower.
|
|
||||||
|
|
||||||
Run without a command it shows an interactive menu. Everything it can be told
|
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
|
is reachable from there; the settings files behind it do not need to be edited
|
||||||
@@ -60,6 +59,12 @@ It is a convenience, not a security upgrade. See *HOW SAFE IS THIS*.
|
|||||||
*status*
|
*status*
|
||||||
What is on, and when the last unlock was.
|
What is on, and when the last unlock was.
|
||||||
|
|
||||||
|
*lock*
|
||||||
|
Lock the screen. On Hyprland, Niri and other compositors whose lock
|
||||||
|
screen is a program of its own, with face-unlock's own lock screen,
|
||||||
|
which shows the bubble (see *DESKTOPS*). Elsewhere with the desktop's
|
||||||
|
lock screen. Returns once the screen is locked.
|
||||||
|
|
||||||
*-h*, *--help*
|
*-h*, *--help*
|
||||||
Show a summary of the commands.
|
Show a summary of the commands.
|
||||||
|
|
||||||
@@ -196,8 +201,8 @@ does not start a scan with every key.
|
|||||||
|
|
||||||
When the face matches, the agent unlocks the session the way its lock screen
|
When the face matches, the agent unlocks the session the way its lock screen
|
||||||
wants it: through logind, as *loginctl unlock-session* does, on Plasma and
|
wants it: through logind, as *loginctl unlock-session* does, on Plasma and
|
||||||
GNOME, and with SIGUSR1 for hyprlock and swaylock. Any other lock screen
|
GNOME, by itself on its own lock screen, and with SIGUSR1 for hyprlock and
|
||||||
opens itself, through PAM (see *DESKTOPS*).
|
swaylock. Any other lock screen opens itself, through PAM (see *DESKTOPS*).
|
||||||
|
|
||||||
Unlocked through logind, Plasma's lock screen cuts off its own password prompt
|
Unlocked through logind, Plasma's lock screen cuts off its own password prompt
|
||||||
and counts that as a wrong password. After a face unlock the daemon resets the
|
and counts that as a wrong password. After a face unlock the daemon resets the
|
||||||
@@ -212,7 +217,8 @@ is under *DESKTOPS*.
|
|||||||
|
|
||||||
# DESKTOPS
|
# DESKTOPS
|
||||||
|
|
||||||
All of them on Wayland. sudo and admin prompts work the same everywhere.
|
All of them on Wayland. sudo and admin prompts work the same everywhere, and
|
||||||
|
so does the bubble, above the lock screen too.
|
||||||
|
|
||||||
*KDE Plasma 6*
|
*KDE Plasma 6*
|
||||||
The lock is seen through org.freedesktop.ScreenSaver and logind, and
|
The lock is seen through org.freedesktop.ScreenSaver and logind, and
|
||||||
@@ -240,6 +246,17 @@ All of them on Wayland. sudo and admin prompts work the same everywhere.
|
|||||||
when somebody comes back, and opens them with SIGUSR1. Those lock
|
when somebody comes back, and opens them with SIGUSR1. Those lock
|
||||||
screens cover the bubble, which shows the tick once they are gone.
|
screens cover the bubble, which shows the tick once they are gone.
|
||||||
|
|
||||||
|
For the bubble on the lock screen there is face-unlock's own: *lock*.
|
||||||
|
It shows the time, a password field (PAM service _face-unlock-lock_
|
||||||
|
when an administrator wrote one, else the distribution's password-auth,
|
||||||
|
common-auth or login) and the bubble, and a face opens it straight
|
||||||
|
away. Behind it is the picture on the desktop, as swaybg, awww (swww),
|
||||||
|
hyprpaper or wpaperd show it. *Wallpaper* under *Settings* puts another
|
||||||
|
picture there, one at random from a folder, or _none_; *Blur the
|
||||||
|
wallpaper* blurs it. If the agent dies while this screen is locked, the
|
||||||
|
compositor keeps it locked, and the agent takes the lock back when it
|
||||||
|
starts again.
|
||||||
|
|
||||||
Hyprland only starts the agent's user service under uwsm. Without it,
|
Hyprland only starts the agent's user service under uwsm. Without it,
|
||||||
*enable* and *status* show what to add to its config.
|
*enable* and *status* show what to add to its config.
|
||||||
|
|
||||||
@@ -310,7 +327,10 @@ _/run/face-unlock/socket_
|
|||||||
|
|
||||||
_$XDG_RUNTIME_DIR/face-unlock/agent.socket_
|
_$XDG_RUNTIME_DIR/face-unlock/agent.socket_
|
||||||
Where the daemon tells the agent about scans it did not start, for the
|
Where the daemon tells the agent about scans it did not start, for the
|
||||||
bubble.
|
bubble, and where *lock* asks it to lock.
|
||||||
|
|
||||||
|
_$XDG_RUNTIME_DIR/face-unlock/locked_
|
||||||
|
There while face-unlock's own lock screen is up.
|
||||||
|
|
||||||
_/usr/share/gnome-shell/extensions/face-unlock@loonixtools.github.io/_
|
_/usr/share/gnome-shell/extensions/face-unlock@loonixtools.github.io/_
|
||||||
The GNOME Shell extension that draws the bubble on GNOME.
|
The GNOME Shell extension that draws the bubble on GNOME.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.0\n"
|
"Project-Id-Version: face-unlock 1.0.0\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-23 22:32+0200\n"
|
"PO-Revision-Date: 2026-09-23 22:32+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
@@ -59,8 +59,8 @@ msgstr "Es wurde kein Gesicht hinzugefügt."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "Richte zuerst dein Gesicht ein."
|
msgstr "Richte zuerst dein Gesicht ein."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "Einstellung konnte nicht gespeichert werden."
|
msgstr "Einstellung konnte nicht gespeichert werden."
|
||||||
|
|
||||||
@@ -113,16 +113,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "Es ist noch kein Gesicht eingerichtet."
|
msgstr "Es ist noch kein Gesicht eingerichtet."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "an"
|
msgstr "an"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "aus"
|
msgstr "aus"
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "%s Aufnahmen, %s dazugelernt"
|
msgstr "%s Aufnahmen, %s dazugelernt"
|
||||||
@@ -152,7 +152,7 @@ msgstr "Gesichtsentsperrung einschalten"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "Ausschalten (Gesichter bleiben erhalten)"
|
msgstr "Ausschalten (Gesichter bleiben erhalten)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "Gesicht hinzufügen"
|
msgstr "Gesicht hinzufügen"
|
||||||
|
|
||||||
@@ -169,22 +169,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "In die Kamera schauen und sehen, was sie sieht"
|
msgstr "In die Kamera schauen und sehen, was sie sieht"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "Bildschirm sperren"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "Anzeigen, was eingeschaltet ist"
|
msgstr "Anzeigen, was eingeschaltet ist"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "Diese Hilfe anzeigen"
|
msgstr "Diese Hilfe anzeigen"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "Die Version anzeigen"
|
msgstr "Die Version anzeigen"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "Ohne Befehl wird ein interaktives Menü angezeigt."
|
msgstr "Ohne Befehl wird ein interaktives Menü angezeigt."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -192,42 +196,42 @@ msgstr ""
|
|||||||
"Starte das als dein eigener Benutzer, nicht als root. Wenn nötig, wird nach "
|
"Starte das als dein eigener Benutzer, nicht als root. Wenn nötig, wird nach "
|
||||||
"deinem Passwort gefragt."
|
"deinem Passwort gefragt."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "Unbekannter Befehl: %s"
|
msgstr "Unbekannter Befehl: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "nie"
|
msgstr "nie"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "gerade eben"
|
msgstr "gerade eben"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "vor 1 Minute"
|
msgstr "vor 1 Minute"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "vor %d Minuten"
|
msgstr "vor %d Minuten"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "vor 1 Stunde"
|
msgstr "vor 1 Stunde"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "vor %d Stunden"
|
msgstr "vor %d Stunden"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "vor 1 Tag"
|
msgstr "vor 1 Tag"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "vor %d Tagen"
|
msgstr "vor %d Tagen"
|
||||||
@@ -371,11 +375,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[j/N]"
|
msgstr "[j/N]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "AN"
|
msgstr "AN"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "AUS"
|
msgstr "AUS"
|
||||||
|
|
||||||
@@ -416,7 +420,7 @@ msgstr "langsam"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s Sekunden"
|
msgstr "%s Sekunden"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "automatisch"
|
msgstr "automatisch"
|
||||||
|
|
||||||
@@ -436,8 +440,8 @@ msgstr "läuft nicht"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "Die Gesichtsentsperrung erneut einzuschalten startet ihn."
|
msgstr "Die Gesichtsentsperrung erneut einzuschalten startet ihn."
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "Gesichter"
|
msgstr "Gesichter"
|
||||||
|
|
||||||
@@ -494,7 +498,7 @@ msgstr "Letzte Entsperrung"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "Der Sperrbildschirm-Dienst läuft nicht."
|
msgstr "Der Sperrbildschirm-Dienst läuft nicht."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -502,16 +506,17 @@ msgstr ""
|
|||||||
"Unter GNOME zeigt eine kleine GNOME-Erweiterung die Bubble. Beim Einschalten "
|
"Unter GNOME zeigt eine kleine GNOME-Erweiterung die Bubble. Beim Einschalten "
|
||||||
"der Gesichtsentsperrung wird sie mit eingeschaltet."
|
"der Gesichtsentsperrung wird sie mit eingeschaltet."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Scannt, wenn du zu hyprlock oder swaylock zurückkommst, und öffnet sie. "
|
"Scannt, wenn du zu hyprlock, swaylock oder zum Sperrbildschirm von face-"
|
||||||
"Jeder andere Sperrbildschirm scannt, wenn du Enter im leeren Passwortfeld "
|
"unlock zurückkommst (`face-unlock lock`, mit der Bubble), und öffnet sie. "
|
||||||
"drückst."
|
"Andere Sperrbildschirme scannen mit Enter."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -519,7 +524,7 @@ msgstr ""
|
|||||||
"Entsperrt den Sperrbildschirm, wenn er dein Gesicht sieht. Aus: Dort geht "
|
"Entsperrt den Sperrbildschirm, wenn er dein Gesicht sieht. Aus: Dort geht "
|
||||||
"nur dein Passwort."
|
"nur dein Passwort."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -527,7 +532,7 @@ msgstr ""
|
|||||||
"Scannt, wenn du auf dem Sperrbildschirm eine Taste drückst oder die Maus "
|
"Scannt, wenn du auf dem Sperrbildschirm eine Taste drückst oder die Maus "
|
||||||
"bewegst, und wenn der Computer aufwacht."
|
"bewegst, und wenn der Computer aufwacht."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -535,7 +540,7 @@ msgstr ""
|
|||||||
"Scannt, sobald der Bildschirm gesperrt wird. Normalerweise aus: Sperrst du "
|
"Scannt, sobald der Bildschirm gesperrt wird. Normalerweise aus: Sperrst du "
|
||||||
"selbst, würde er gleich wieder entsperren."
|
"selbst, würde er gleich wieder entsperren."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -543,7 +548,21 @@ msgstr ""
|
|||||||
"sudo nimmt dein Gesicht statt des Passworts. Passt es nicht, tippst du wie "
|
"sudo nimmt dein Gesicht statt des Passworts. Passt es nicht, tippst du wie "
|
||||||
"gewohnt dein Passwort."
|
"gewohnt dein Passwort."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"Das Bild hinter dem Sperrbildschirm von face-unlock (`face-unlock lock`). "
|
||||||
|
"Leer: das von deinem Desktop. Oder eine Datei, ein Ordner, aus dem zufällig "
|
||||||
|
"eins genommen wird, oder `none`. Enter zum Eintippen."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "Zeichnet das Bild hinter dem Sperrbildschirm von face-unlock weich."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -552,7 +571,7 @@ msgstr ""
|
|||||||
"Der Sperrbildschirm nimmt dein Gesicht in seiner Passwortprüfung. Drück "
|
"Der Sperrbildschirm nimmt dein Gesicht in seiner Passwortprüfung. Drück "
|
||||||
"Enter im leeren Feld für einen Scan. Hier gefunden: %s."
|
"Enter im leeren Feld für einen Scan. Hier gefunden: %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -560,18 +579,18 @@ msgstr ""
|
|||||||
"Die Passwort-Fenster deines Desktops und von Apps, zum Beispiel beim "
|
"Die Passwort-Fenster deines Desktops und von Apps, zum Beispiel beim "
|
||||||
"Installieren. Passt das Gesicht nicht, tippst du dein Passwort."
|
"Installieren. Passt das Gesicht nicht, tippst du dein Passwort."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Du musst blinzeln oder den Kopf leicht drehen. Das hält auch ausgedruckte "
|
"Du musst blinzeln oder den Kopf leicht drehen. Das hält auch ausgedruckte "
|
||||||
"Fotos auf."
|
"Fotos auf."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "Keine Prüfung. Nur zum Ausprobieren einer Kamera."
|
msgstr "Keine Prüfung. Nur zum Ausprobieren einer Kamera."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -579,22 +598,22 @@ msgstr ""
|
|||||||
"Hält Fotos auf Handy, Tablet oder Hochglanzpapier auf. Blinzeln ist nicht "
|
"Hält Fotos auf Handy, Tablet oder Hochglanzpapier auf. Blinzeln ist nicht "
|
||||||
"nötig. Ein matter Ausdruck kann durchkommen."
|
"nötig. Ein matter Ausdruck kann durchkommen."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Seltener Verwechslungen, aber mit Brille oder bei schlechtem Licht erkennt "
|
"Seltener Verwechslungen, aber mit Brille oder bei schlechtem Licht erkennt "
|
||||||
"es dich vielleicht nicht."
|
"es dich vielleicht nicht."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
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."
|
msgstr "Erkennt dich leichter, aber auch jemanden, der dir sehr ähnlich sieht."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "Der Standard. Passt für die meisten."
|
msgstr "Der Standard. Passt für die meisten."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -602,7 +621,7 @@ msgstr ""
|
|||||||
"Deine Augen müssen offen sein und auf den Bildschirm schauen. So entsperrt "
|
"Deine Augen müssen offen sein und auf den Bildschirm schauen. So entsperrt "
|
||||||
"es nicht, wenn du wegschaust oder schläfst."
|
"es nicht, wenn du wegschaust oder schläfst."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -611,11 +630,11 @@ msgstr ""
|
|||||||
"neu einrichten. Eine Infrarot-Kamera braucht ihr Licht (linux-enable-ir-"
|
"neu einrichten. Eine Infrarot-Kamera braucht ihr Licht (linux-enable-ir-"
|
||||||
"emitter)."
|
"emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
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."
|
msgstr "Wie lange die Kamera nach deinem Gesicht sucht, bevor sie aufgibt."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -623,7 +642,7 @@ msgstr ""
|
|||||||
"Nach einem sicheren Treffer merkt es sich, wie du gerade aussiehst. So musst "
|
"Nach einem sicheren Treffer merkt es sich, wie du gerade aussiehst. So musst "
|
||||||
"du nach neuer Frisur oder Brille nichts neu einrichten."
|
"du nach neuer Frisur oder Brille nichts neu einrichten."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -631,82 +650,99 @@ msgstr ""
|
|||||||
"Kein Scan bei zugeklapptem Laptop, zum Beispiel am Schreibtisch mit externem "
|
"Kein Scan bei zugeklapptem Laptop, zum Beispiel am Schreibtisch mit externem "
|
||||||
"Bildschirm."
|
"Bildschirm."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
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."
|
msgstr "Die Bubble oben am Bildschirm zeigt, was die Kamera gerade macht."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "Eine kleine Pille mit einem Schloss, das aufgeht."
|
msgstr "Eine kleine Pille mit einem Schloss, das aufgeht."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
msgid "An island with a face that looks around, then rings and a tick."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Eine Insel mit einem Gesicht, das sich umschaut, danach Ringe und ein Haken."
|
"Eine Insel mit einem Gesicht, das sich umschaut, danach Ringe und ein Haken."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "Wie schnell sich die Bubble bewegt."
|
msgstr "Wie schnell sich die Bubble bewegt."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Zeigt die Bubble auch, wenn sudo oder eine Admin-Abfrage dein Gesicht scannt."
|
"Zeigt die Bubble auch, wenn sudo oder eine Admin-Abfrage dein Gesicht scannt."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "automatisch (%s)"
|
msgstr "automatisch (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(Infrarot)"
|
msgstr "(Infrarot)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(nicht angeschlossen)"
|
msgstr "(nicht angeschlossen)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "wie Desktop"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "keins"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "Bild oder Ordner:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "Nicht gefunden: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Einstellungen"
|
msgstr "Einstellungen"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ auswählen ←→ oder Leertaste: ändern q: zurück"
|
msgstr "↑↓ auswählen ←→ oder Leertaste: ändern q: zurück"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "für alle Nutzer, fragt nach deinem Passwort"
|
msgstr "für alle Nutzer, fragt nach deinem Passwort"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Hoch/Runter: wählen, Leertaste: an/aus, r: umbenennen, d: löschen, a: "
|
"Hoch/Runter: wählen, Leertaste: an/aus, r: umbenennen, d: löschen, a: "
|
||||||
"hinzufügen, q: zurück"
|
"hinzufügen, q: zurück"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "Es ist noch kein Gesicht eingerichtet. Drück a, um eins hinzuzufügen."
|
msgstr "Es ist noch kein Gesicht eingerichtet. Drück a, um eins hinzuzufügen."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "Neuer Name:"
|
msgstr "Neuer Name:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "„%s“ löschen?"
|
msgstr "„%s“ löschen?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "Gesichtsentsperrung ein- oder ausschalten"
|
msgstr "Gesichtsentsperrung ein- oder ausschalten"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "Ausprobieren"
|
msgstr "Ausprobieren"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Beenden"
|
msgstr "Beenden"
|
||||||
|
|
||||||
@@ -767,6 +803,14 @@ msgstr "Scannen, wenn du zurückkommst"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "Gleich nach dem Sperren scannen"
|
msgstr "Gleich nach dem Sperren scannen"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "Hintergrundbild"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "Hintergrundbild weichzeichnen"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "Passwort-Abfragen"
|
msgstr "Passwort-Abfragen"
|
||||||
@@ -928,23 +972,31 @@ msgstr ""
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "Das Gesicht konnte nicht hinzugefügt werden (%1)."
|
msgstr "Das Gesicht konnte nicht hinzugefügt werden (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "Falsches Passwort"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr "Gesichtsentsperrung für Sperrbildschirm, sudo und Admin-Abfragen"
|
msgstr "Gesichtsentsperrung für Sperrbildschirm, sudo und Admin-Abfragen"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "Ein Gesicht einrichten."
|
msgstr "Ein Gesicht einrichten."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "Wie das neue Gesicht heißen soll."
|
msgstr "Wie das neue Gesicht heißen soll."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "Den Bildschirm sperren."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "Die Animationen der Bubble einmal abspielen."
|
msgstr "Die Animationen der Bubble einmal abspielen."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "Bubble-Stil für die Demo: full oder minimal."
|
msgstr "Bubble-Stil für die Demo: full oder minimal."
|
||||||
|
|
||||||
@@ -1025,3 +1077,15 @@ msgstr "Los geht's"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Fertig"
|
msgstr "Fertig"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Passwort"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "Schau in die Kamera oder tippe dein Passwort"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "Tippe dein Passwort"
|
||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Spanish\n"
|
"Language-Team: Spanish\n"
|
||||||
@@ -58,8 +58,8 @@ msgstr "No se añadió ninguna cara."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "Primero, configura tu cara."
|
msgstr "Primero, configura tu cara."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "No se pudo guardar el ajuste."
|
msgstr "No se pudo guardar el ajuste."
|
||||||
|
|
||||||
@@ -114,16 +114,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "Todavía no hay ninguna cara configurada."
|
msgstr "Todavía no hay ninguna cara configurada."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "activado"
|
msgstr "activado"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "desactivado"
|
msgstr "desactivado"
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "%s muestras, %s aprendidas"
|
msgstr "%s muestras, %s aprendidas"
|
||||||
@@ -153,7 +153,7 @@ msgstr "Activar el desbloqueo facial"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "Desactivarlo (las caras se conservan)"
|
msgstr "Desactivarlo (las caras se conservan)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "Añadir una cara"
|
msgstr "Añadir una cara"
|
||||||
|
|
||||||
@@ -170,22 +170,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "Mirar a la cámara y ver lo que ve"
|
msgstr "Mirar a la cámara y ver lo que ve"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "Bloquear la pantalla"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "Mostrar qué está activado"
|
msgstr "Mostrar qué está activado"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "Mostrar esta ayuda"
|
msgstr "Mostrar esta ayuda"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "Mostrar la versión"
|
msgstr "Mostrar la versión"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "Sin comando se muestra un menú interactivo."
|
msgstr "Sin comando se muestra un menú interactivo."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -193,42 +197,42 @@ msgstr ""
|
|||||||
"Ejecuta esto con tu propio usuario, no como root. Pide tu contraseña cuando "
|
"Ejecuta esto con tu propio usuario, no como root. Pide tu contraseña cuando "
|
||||||
"la necesita."
|
"la necesita."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "Comando desconocido: %s"
|
msgstr "Comando desconocido: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "nunca"
|
msgstr "nunca"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "ahora mismo"
|
msgstr "ahora mismo"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "hace 1 minuto"
|
msgstr "hace 1 minuto"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "hace %d minutos"
|
msgstr "hace %d minutos"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "hace 1 hora"
|
msgstr "hace 1 hora"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "hace %d horas"
|
msgstr "hace %d horas"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "hace 1 día"
|
msgstr "hace 1 día"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "hace %d días"
|
msgstr "hace %d días"
|
||||||
@@ -372,11 +376,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[s/N]"
|
msgstr "[s/N]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "ACTIVADO"
|
msgstr "ACTIVADO"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "DESACTIVADO"
|
msgstr "DESACTIVADO"
|
||||||
|
|
||||||
@@ -417,7 +421,7 @@ msgstr "lenta"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s segundos"
|
msgstr "%s segundos"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "automática"
|
msgstr "automática"
|
||||||
|
|
||||||
@@ -437,8 +441,8 @@ msgstr "detenido"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "Al volver a activar el desbloqueo facial, se inicia."
|
msgstr "Al volver a activar el desbloqueo facial, se inicia."
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "Caras"
|
msgstr "Caras"
|
||||||
|
|
||||||
@@ -495,7 +499,7 @@ msgstr "Último desbloqueo"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "El agente de la pantalla de bloqueo no se está ejecutando."
|
msgstr "El agente de la pantalla de bloqueo no se está ejecutando."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -503,15 +507,17 @@ msgstr ""
|
|||||||
"En GNOME, una pequeña extensión de GNOME muestra la burbuja. Al activar el "
|
"En GNOME, una pequeña extensión de GNOME muestra la burbuja. Al activar el "
|
||||||
"desbloqueo facial se activa también."
|
"desbloqueo facial se activa también."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Escanea cuando vuelves a hyprlock o swaylock y los abre. Cualquier otra "
|
"Escanea cuando vuelves a hyprlock, swaylock o la pantalla de bloqueo propia "
|
||||||
"pantalla de bloqueo escanea al pulsar Intro en el campo de contraseña vacío."
|
"de face-unlock (`face-unlock lock`, con la burbuja) y los abre. Las demás "
|
||||||
|
"pantallas de bloqueo escanean con Intro."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -519,7 +525,7 @@ msgstr ""
|
|||||||
"Desbloquea la pantalla de bloqueo cuando ve tu cara. Desactivado: ahí solo "
|
"Desbloquea la pantalla de bloqueo cuando ve tu cara. Desactivado: ahí solo "
|
||||||
"sirve tu contraseña."
|
"sirve tu contraseña."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -527,7 +533,7 @@ msgstr ""
|
|||||||
"Escanea cuando pulsas una tecla o mueves el ratón en la pantalla de bloqueo, "
|
"Escanea cuando pulsas una tecla o mueves el ratón en la pantalla de bloqueo, "
|
||||||
"y cuando el equipo se despierta."
|
"y cuando el equipo se despierta."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -535,7 +541,7 @@ msgstr ""
|
|||||||
"Escanea en cuanto se bloquea la pantalla. Desactivado por defecto: si la "
|
"Escanea en cuanto se bloquea la pantalla. Desactivado por defecto: si la "
|
||||||
"bloqueas tú, se desbloquearía enseguida."
|
"bloqueas tú, se desbloquearía enseguida."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -543,7 +549,21 @@ msgstr ""
|
|||||||
"sudo usa tu cara en lugar de la contraseña. Si no coincide, escribes la "
|
"sudo usa tu cara en lugar de la contraseña. Si no coincide, escribes la "
|
||||||
"contraseña como siempre."
|
"contraseña como siempre."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"La imagen detrás de la pantalla de bloqueo de face-unlock (`face-unlock "
|
||||||
|
"lock`). Vacío: la de tu escritorio. O un archivo, una carpeta de la que se "
|
||||||
|
"elige una al azar, o `none`. Intro para escribirla."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "Desenfoca la imagen detrás de la pantalla de bloqueo de face-unlock."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -552,7 +572,7 @@ msgstr ""
|
|||||||
"La pantalla de bloqueo acepta tu cara en su comprobación de contraseña. "
|
"La pantalla de bloqueo acepta tu cara en su comprobación de contraseña. "
|
||||||
"Pulsa Intro en el campo vacío para escanear. Encontradas aquí: %s."
|
"Pulsa Intro en el campo vacío para escanear. Encontradas aquí: %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -560,18 +580,18 @@ msgstr ""
|
|||||||
"Las ventanas de contraseña de tu escritorio y de las aplicaciones, por "
|
"Las ventanas de contraseña de tu escritorio y de las aplicaciones, por "
|
||||||
"ejemplo al instalar software. Si no coincide, escribes la contraseña."
|
"ejemplo al instalar software. Si no coincide, escribes la contraseña."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Tienes que parpadear o girar un poco la cabeza. Esto también frena las fotos "
|
"Tienes que parpadear o girar un poco la cabeza. Esto también frena las fotos "
|
||||||
"impresas."
|
"impresas."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "Sin comprobación. Solo para probar una cámara."
|
msgstr "Sin comprobación. Solo para probar una cámara."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -579,24 +599,24 @@ msgstr ""
|
|||||||
"Frena fotos en un móvil, una tableta o papel brillante. No hace falta "
|
"Frena fotos en un móvil, una tableta o papel brillante. No hace falta "
|
||||||
"parpadear. Una foto impresa en papel mate puede pasar."
|
"parpadear. Una foto impresa en papel mate puede pasar."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Menos coincidencias erróneas, pero puede que no te reconozca con gafas o con "
|
"Menos coincidencias erróneas, pero puede que no te reconozca con gafas o con "
|
||||||
"poca luz."
|
"poca luz."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Te reconoce con más facilidad, pero también a alguien que se parezca mucho a "
|
"Te reconoce con más facilidad, pero también a alguien que se parezca mucho a "
|
||||||
"ti."
|
"ti."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "El valor por defecto. Adecuado para la mayoría."
|
msgstr "El valor por defecto. Adecuado para la mayoría."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -604,7 +624,7 @@ msgstr ""
|
|||||||
"Tus ojos tienen que estar abiertos y mirando a la pantalla. Así no se "
|
"Tus ojos tienen que estar abiertos y mirando a la pantalla. Así no se "
|
||||||
"desbloquea mientras miras a otro lado o duermes."
|
"desbloquea mientras miras a otro lado o duermes."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -613,11 +633,11 @@ msgstr ""
|
|||||||
"tu cara. Una cámara infrarroja necesita su luz encendida (linux-enable-ir-"
|
"tu cara. Una cámara infrarroja necesita su luz encendida (linux-enable-ir-"
|
||||||
"emitter)."
|
"emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
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."
|
msgstr "Cuánto tiempo busca la cámara tu cara antes de rendirse."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -625,7 +645,7 @@ msgstr ""
|
|||||||
"Tras una coincidencia segura, recuerda tu aspecto actual. Así, un corte de "
|
"Tras una coincidencia segura, recuerda tu aspecto actual. Así, un corte de "
|
||||||
"pelo nuevo o unas gafas no piden configurar de nuevo."
|
"pelo nuevo o unas gafas no piden configurar de nuevo."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -633,85 +653,102 @@ msgstr ""
|
|||||||
"Sin escaneo mientras el portátil está cerrado, por ejemplo en un escritorio "
|
"Sin escaneo mientras el portátil está cerrado, por ejemplo en un escritorio "
|
||||||
"con una pantalla externa."
|
"con una pantalla externa."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
msgid "The bubble at the top of the screen shows what the camera is doing."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"La burbuja en la parte superior de la pantalla muestra lo que hace la cámara."
|
"La burbuja en la parte superior de la pantalla muestra lo que hace la cámara."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "Una pequeña pastilla con un candado que se abre."
|
msgstr "Una pequeña pastilla con un candado que se abre."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
msgid "An island with a face that looks around, then rings and a tick."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Una isla con una cara que mira alrededor, luego anillos y una marca de "
|
"Una isla con una cara que mira alrededor, luego anillos y una marca de "
|
||||||
"verificación."
|
"verificación."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "La velocidad a la que se mueve la burbuja."
|
msgstr "La velocidad a la que se mueve la burbuja."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Muestra la burbuja también cuando sudo o una solicitud de administrador "
|
"Muestra la burbuja también cuando sudo o una solicitud de administrador "
|
||||||
"escanea tu cara."
|
"escanea tu cara."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "automática (%s)"
|
msgstr "automática (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(infrarroja)"
|
msgstr "(infrarroja)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(no conectada)"
|
msgstr "(no conectada)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "como el escritorio"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "ninguna"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "Imagen o carpeta:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "No encontrado: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Ajustes"
|
msgstr "Ajustes"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ elegir ←→ o Espacio: cambiar q: volver"
|
msgstr "↑↓ elegir ←→ o Espacio: cambiar q: volver"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "para todos los usuarios, pide tu contraseña"
|
msgstr "para todos los usuarios, pide tu contraseña"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Arriba/Abajo: elegir, Espacio: activar/desactivar, r: renombrar, d: borrar, "
|
"Arriba/Abajo: elegir, Espacio: activar/desactivar, r: renombrar, d: borrar, "
|
||||||
"a: añadir, q: volver"
|
"a: añadir, q: volver"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "Todavía no hay ninguna cara configurada. Pulsa a para añadir una."
|
msgstr "Todavía no hay ninguna cara configurada. Pulsa a para añadir una."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "Nuevo nombre:"
|
msgstr "Nuevo nombre:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "¿Borrar «%s»?"
|
msgstr "¿Borrar «%s»?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "Activar o desactivar el desbloqueo facial"
|
msgstr "Activar o desactivar el desbloqueo facial"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "Probarlo"
|
msgstr "Probarlo"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Salir"
|
msgstr "Salir"
|
||||||
|
|
||||||
@@ -771,6 +808,14 @@ msgstr "Escanear cuando vuelvas"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "Escanear justo después de bloquear"
|
msgstr "Escanear justo después de bloquear"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "Fondo de pantalla"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "Desenfocar el fondo"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "Solicitudes de contraseña"
|
msgstr "Solicitudes de contraseña"
|
||||||
@@ -930,25 +975,33 @@ msgstr ""
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "No se pudo añadir la cara (%1)."
|
msgstr "No se pudo añadir la cara (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "Contraseña incorrecta"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Desbloqueo facial para la pantalla de bloqueo, sudo y las solicitudes de "
|
"Desbloqueo facial para la pantalla de bloqueo, sudo y las solicitudes de "
|
||||||
"administrador"
|
"administrador"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "Configurar una cara."
|
msgstr "Configurar una cara."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "Cómo llamar a la nueva cara."
|
msgstr "Cómo llamar a la nueva cara."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "Bloquear la pantalla."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "Reproducir una vez las animaciones de la burbuja."
|
msgstr "Reproducir una vez las animaciones de la burbuja."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "Estilo de burbuja para la demo: full o minimal."
|
msgstr "Estilo de burbuja para la demo: full o minimal."
|
||||||
|
|
||||||
@@ -1029,3 +1082,15 @@ msgstr "Empezar"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Hecho"
|
msgstr "Hecho"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Contraseña"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "Mira a la cámara o escribe tu contraseña"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "Escribe tu contraseña"
|
||||||
+130
-69
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -54,8 +54,8 @@ msgstr ""
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -98,16 +98,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -137,7 +137,7 @@ msgstr ""
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -154,63 +154,67 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
msgid "Show what is on"
|
msgid "Lock the screen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:201
|
||||||
msgid "Show this help"
|
msgid "Show what is on"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:202
|
||||||
|
msgid "Show this help"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -350,11 +354,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -395,7 +399,7 @@ msgstr ""
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -415,8 +419,8 @@ msgstr ""
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -473,183 +477,212 @@ msgstr ""
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
"empty field to scan. Found here: %s."
|
"empty field to scan. Found here: %s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
msgid "How long the camera looks for your face before it gives up."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
msgid "The bubble at the top of the screen shows what the camera is doing."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
msgid "An island with a face that looks around, then rings and a tick."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -705,6 +738,14 @@ msgstr ""
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -861,23 +902,31 @@ msgstr ""
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -952,3 +1001,15 @@ msgstr ""
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr ""
|
||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: French\n"
|
"Language-Team: French\n"
|
||||||
@@ -60,8 +60,8 @@ msgstr "Aucun visage n'a été ajouté."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "Configurez d'abord votre visage."
|
msgstr "Configurez d'abord votre visage."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "Impossible d'enregistrer le réglage."
|
msgstr "Impossible d'enregistrer le réglage."
|
||||||
|
|
||||||
@@ -116,16 +116,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "Aucun visage n'est encore configuré."
|
msgstr "Aucun visage n'est encore configuré."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "activé"
|
msgstr "activé"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "désactivé"
|
msgstr "désactivé"
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "%s échantillons, %s appris"
|
msgstr "%s échantillons, %s appris"
|
||||||
@@ -155,7 +155,7 @@ msgstr "Activer le déverrouillage facial"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "Le désactiver (les visages sont conservés)"
|
msgstr "Le désactiver (les visages sont conservés)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "Ajouter un visage"
|
msgstr "Ajouter un visage"
|
||||||
|
|
||||||
@@ -172,22 +172,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "Regarder la caméra et voir ce qu'elle voit"
|
msgstr "Regarder la caméra et voir ce qu'elle voit"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "Verrouiller l'écran"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "Afficher ce qui est activé"
|
msgstr "Afficher ce qui est activé"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "Afficher cette aide"
|
msgstr "Afficher cette aide"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "Afficher la version"
|
msgstr "Afficher la version"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "Sans commande, un menu interactif s'affiche."
|
msgstr "Sans commande, un menu interactif s'affiche."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -195,42 +199,42 @@ msgstr ""
|
|||||||
"Lancez ceci avec votre propre utilisateur, pas en root. Le mot de passe est "
|
"Lancez ceci avec votre propre utilisateur, pas en root. Le mot de passe est "
|
||||||
"demandé quand il le faut."
|
"demandé quand il le faut."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "Commande inconnue : %s"
|
msgstr "Commande inconnue : %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "jamais"
|
msgstr "jamais"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "à l'instant"
|
msgstr "à l'instant"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "il y a 1 minute"
|
msgstr "il y a 1 minute"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "il y a %d minutes"
|
msgstr "il y a %d minutes"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "il y a 1 heure"
|
msgstr "il y a 1 heure"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "il y a %d heures"
|
msgstr "il y a %d heures"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "il y a 1 jour"
|
msgstr "il y a 1 jour"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "il y a %d jours"
|
msgstr "il y a %d jours"
|
||||||
@@ -376,11 +380,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[o/N]"
|
msgstr "[o/N]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "ACTIVÉ"
|
msgstr "ACTIVÉ"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "DÉSACTIVÉ"
|
msgstr "DÉSACTIVÉ"
|
||||||
|
|
||||||
@@ -421,7 +425,7 @@ msgstr "lent"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s secondes"
|
msgstr "%s secondes"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "automatique"
|
msgstr "automatique"
|
||||||
|
|
||||||
@@ -441,8 +445,8 @@ msgstr "arrêté"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "Réactiver le déverrouillage facial le démarre."
|
msgstr "Réactiver le déverrouillage facial le démarre."
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "Visages"
|
msgstr "Visages"
|
||||||
|
|
||||||
@@ -499,7 +503,7 @@ msgstr "Dernier déverrouillage"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "L'agent de l'écran de verrouillage ne tourne pas."
|
msgstr "L'agent de l'écran de verrouillage ne tourne pas."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -507,16 +511,17 @@ msgstr ""
|
|||||||
"Sous GNOME, une petite extension GNOME affiche la bulle. Activer le "
|
"Sous GNOME, une petite extension GNOME affiche la bulle. Activer le "
|
||||||
"déverrouillage facial l'active aussi."
|
"déverrouillage facial l'active aussi."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Scanne quand vous revenez à hyprlock ou swaylock et les ouvre. Tout autre "
|
"Scanne quand vous revenez à hyprlock, swaylock ou à l'écran de verrouillage "
|
||||||
"écran de verrouillage scanne quand vous appuyez sur Entrée dans le champ du "
|
"de face-unlock (`face-unlock lock`, avec la bulle) et les ouvre. Les autres "
|
||||||
"mot de passe vide."
|
"écrans de verrouillage scannent avec Entrée."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -524,7 +529,7 @@ msgstr ""
|
|||||||
"Déverrouille l'écran de verrouillage quand il voit votre visage. Désactivé : "
|
"Déverrouille l'écran de verrouillage quand il voit votre visage. Désactivé : "
|
||||||
"seul votre mot de passe fonctionne."
|
"seul votre mot de passe fonctionne."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -532,7 +537,7 @@ msgstr ""
|
|||||||
"Scanne quand vous appuyez sur une touche ou bougez la souris sur l'écran de "
|
"Scanne quand vous appuyez sur une touche ou bougez la souris sur l'écran de "
|
||||||
"verrouillage, et au réveil de l'ordinateur."
|
"verrouillage, et au réveil de l'ordinateur."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -540,7 +545,7 @@ msgstr ""
|
|||||||
"Scanne dès que l'écran se verrouille. Désactivé par défaut : si vous "
|
"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."
|
"verrouillez vous-même, il se déverrouillerait aussitôt."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -548,7 +553,21 @@ msgstr ""
|
|||||||
"sudo prend votre visage au lieu du mot de passe. Sinon, vous tapez le mot de "
|
"sudo prend votre visage au lieu du mot de passe. Sinon, vous tapez le mot de "
|
||||||
"passe comme d'habitude."
|
"passe comme d'habitude."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"L'image derrière l'écran de verrouillage de face-unlock (`face-unlock "
|
||||||
|
"lock`). Vide : celle de votre bureau. Ou un fichier, un dossier où en "
|
||||||
|
"prendre une au hasard, ou `none`. Entrée pour la saisir."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "Floute l'image derrière l'écran de verrouillage de face-unlock."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -557,7 +576,7 @@ msgstr ""
|
|||||||
"L'écran de verrouillage accepte votre visage dans sa vérification du mot de "
|
"L'écran de verrouillage accepte votre visage dans sa vérification du mot de "
|
||||||
"passe. Appuyez sur Entrée dans le champ vide pour scanner. Trouvés ici : %s."
|
"passe. Appuyez sur Entrée dans le champ vide pour scanner. Trouvés ici : %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -565,18 +584,18 @@ msgstr ""
|
|||||||
"Les fenêtres de mot de passe de votre bureau et des applications, par "
|
"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."
|
"exemple pour installer un logiciel. Sinon, vous tapez le mot de passe."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous devez cligner des yeux ou tourner un peu la tête. Cela bloque aussi les "
|
"Vous devez cligner des yeux ou tourner un peu la tête. Cela bloque aussi les "
|
||||||
"photos imprimées."
|
"photos imprimées."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "Aucun contrôle. Seulement pour essayer une caméra."
|
msgstr "Aucun contrôle. Seulement pour essayer une caméra."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -584,24 +603,24 @@ msgstr ""
|
|||||||
"Bloque les photos sur un téléphone, une tablette ou du papier brillant. Pas "
|
"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."
|
"besoin de cligner des yeux. Une photo imprimée mate peut passer."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Moins d'erreurs de correspondance, mais il peut ne pas vous reconnaître avec "
|
"Moins d'erreurs de correspondance, mais il peut ne pas vous reconnaître avec "
|
||||||
"des lunettes ou sous une mauvaise lumière."
|
"des lunettes ou sous une mauvaise lumière."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous reconnaît plus facilement, mais aussi quelqu'un qui vous ressemble "
|
"Vous reconnaît plus facilement, mais aussi quelqu'un qui vous ressemble "
|
||||||
"beaucoup."
|
"beaucoup."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "La valeur par défaut. Convient à la plupart des gens."
|
msgstr "La valeur par défaut. Convient à la plupart des gens."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -609,7 +628,7 @@ msgstr ""
|
|||||||
"Vos yeux doivent être ouverts et tournés vers l'écran. Ainsi, rien ne se "
|
"Vos yeux doivent être ouverts et tournés vers l'écran. Ainsi, rien ne se "
|
||||||
"déverrouille quand vous regardez ailleurs ou dormez."
|
"déverrouille quand vous regardez ailleurs ou dormez."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -618,11 +637,11 @@ msgstr ""
|
|||||||
"reconfigurez votre visage. Une caméra infrarouge doit avoir sa lumière "
|
"reconfigurez votre visage. Une caméra infrarouge doit avoir sa lumière "
|
||||||
"allumée (linux-enable-ir-emitter)."
|
"allumée (linux-enable-ir-emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
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."
|
msgstr "Combien de temps la caméra cherche votre visage avant d'abandonner."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -631,7 +650,7 @@ msgstr ""
|
|||||||
"nouvelle coupe ou des lunettes ne demandent donc pas de nouvelle "
|
"nouvelle coupe ou des lunettes ne demandent donc pas de nouvelle "
|
||||||
"configuration."
|
"configuration."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -639,84 +658,101 @@ msgstr ""
|
|||||||
"Pas de scan quand le portable est fermé, par exemple à un bureau avec un "
|
"Pas de scan quand le portable est fermé, par exemple à un bureau avec un "
|
||||||
"écran externe."
|
"écran externe."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
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."
|
msgstr "La bulle en haut de l'écran montre ce que fait la caméra."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "Une petite pilule avec un cadenas qui s'ouvre."
|
msgstr "Une petite pilule avec un cadenas qui s'ouvre."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
msgid "An island with a face that looks around, then rings and a tick."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Un îlot avec un visage qui regarde autour de lui, puis des anneaux et une "
|
"Un îlot avec un visage qui regarde autour de lui, puis des anneaux et une "
|
||||||
"coche."
|
"coche."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "La vitesse à laquelle la bulle bouge."
|
msgstr "La vitesse à laquelle la bulle bouge."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Affiche aussi la bulle quand sudo ou une demande d'administration scanne "
|
"Affiche aussi la bulle quand sudo ou une demande d'administration scanne "
|
||||||
"votre visage."
|
"votre visage."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "automatique (%s)"
|
msgstr "automatique (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(infrarouge)"
|
msgstr "(infrarouge)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(non branchée)"
|
msgstr "(non branchée)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "comme le bureau"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "aucun"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "Image ou dossier :"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "Introuvable : %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Réglages"
|
msgstr "Réglages"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ choisir ←→ ou Espace : changer q : retour"
|
msgstr "↑↓ choisir ←→ ou Espace : changer q : retour"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "pour tous, demande votre mot de passe"
|
msgstr "pour tous, demande votre mot de passe"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Haut/Bas : choisir, Espace : activer/désactiver, r : renommer, d : "
|
"Haut/Bas : choisir, Espace : activer/désactiver, r : renommer, d : "
|
||||||
"supprimer, a : ajouter, q : retour"
|
"supprimer, a : ajouter, q : retour"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "Aucun visage n'est encore configuré. Appuyez sur a pour en ajouter un."
|
msgstr "Aucun visage n'est encore configuré. Appuyez sur a pour en ajouter un."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "Nouveau nom :"
|
msgstr "Nouveau nom :"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "Supprimer « %s » ?"
|
msgstr "Supprimer « %s » ?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "Activer ou désactiver le déverrouillage facial"
|
msgstr "Activer ou désactiver le déverrouillage facial"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "Essayer"
|
msgstr "Essayer"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Quitter"
|
msgstr "Quitter"
|
||||||
|
|
||||||
@@ -777,6 +813,14 @@ msgstr "Scanner à votre retour"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "Scanner juste après le verrouillage"
|
msgstr "Scanner juste après le verrouillage"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "Fond d'écran"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "Flouter le fond d'écran"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "Demandes de mot de passe"
|
msgstr "Demandes de mot de passe"
|
||||||
@@ -936,25 +980,33 @@ msgstr "La caméra est occupée par un autre scan. Réessayez dans un instant."
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "Le visage n'a pas pu être ajouté (%1)."
|
msgstr "Le visage n'a pas pu être ajouté (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "Mot de passe incorrect"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Déverrouillage facial pour l'écran de verrouillage, sudo et les demandes "
|
"Déverrouillage facial pour l'écran de verrouillage, sudo et les demandes "
|
||||||
"d'administration"
|
"d'administration"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "Configurer un visage."
|
msgstr "Configurer un visage."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "Le nom du nouveau visage."
|
msgstr "Le nom du nouveau visage."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "Verrouiller l'écran."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "Jouer une fois les animations de la bulle."
|
msgstr "Jouer une fois les animations de la bulle."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "Style de bulle pour la démo : full ou minimal."
|
msgstr "Style de bulle pour la démo : full ou minimal."
|
||||||
|
|
||||||
@@ -1036,3 +1088,15 @@ msgstr "Commencer"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Terminé"
|
msgstr "Terminé"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Mot de passe"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "Regardez la caméra ou tapez votre mot de passe"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "Tapez votre mot de passe"
|
||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Italian\n"
|
"Language-Team: Italian\n"
|
||||||
@@ -58,8 +58,8 @@ msgstr "Nessun volto aggiunto."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "Per prima cosa, configura il tuo volto."
|
msgstr "Per prima cosa, configura il tuo volto."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "Impossibile salvare l'impostazione."
|
msgstr "Impossibile salvare l'impostazione."
|
||||||
|
|
||||||
@@ -110,16 +110,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "Nessun volto ancora configurato."
|
msgstr "Nessun volto ancora configurato."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "attivo"
|
msgstr "attivo"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "disattivo"
|
msgstr "disattivo"
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "%s campioni, %s appresi"
|
msgstr "%s campioni, %s appresi"
|
||||||
@@ -149,7 +149,7 @@ msgstr "Attiva lo sblocco con il volto"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "Disattivalo (i volti restano salvati)"
|
msgstr "Disattivalo (i volti restano salvati)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "Aggiungi un volto"
|
msgstr "Aggiungi un volto"
|
||||||
|
|
||||||
@@ -166,22 +166,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "Guarda la fotocamera e vedi cosa vede"
|
msgstr "Guarda la fotocamera e vedi cosa vede"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "Blocca lo schermo"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "Mostra cosa è attivo"
|
msgstr "Mostra cosa è attivo"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "Mostra questo aiuto"
|
msgstr "Mostra questo aiuto"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "Mostra la versione"
|
msgstr "Mostra la versione"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "Senza comando viene mostrato un menu interattivo."
|
msgstr "Senza comando viene mostrato un menu interattivo."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -189,42 +193,42 @@ msgstr ""
|
|||||||
"Esegui questo con il tuo utente, non come root. Chiede la password quando "
|
"Esegui questo con il tuo utente, non come root. Chiede la password quando "
|
||||||
"serve."
|
"serve."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "Comando sconosciuto: %s"
|
msgstr "Comando sconosciuto: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "mai"
|
msgstr "mai"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "proprio ora"
|
msgstr "proprio ora"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "1 minuto fa"
|
msgstr "1 minuto fa"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "%d minuti fa"
|
msgstr "%d minuti fa"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "1 ora fa"
|
msgstr "1 ora fa"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "%d ore fa"
|
msgstr "%d ore fa"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "1 giorno fa"
|
msgstr "1 giorno fa"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "%d giorni fa"
|
msgstr "%d giorni fa"
|
||||||
@@ -369,11 +373,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[s/N]"
|
msgstr "[s/N]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "ATTIVO"
|
msgstr "ATTIVO"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "DISATTIVO"
|
msgstr "DISATTIVO"
|
||||||
|
|
||||||
@@ -414,7 +418,7 @@ msgstr "lenta"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s secondi"
|
msgstr "%s secondi"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "automatica"
|
msgstr "automatica"
|
||||||
|
|
||||||
@@ -434,8 +438,8 @@ msgstr "non in esecuzione"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "Riattivare lo sblocco con il volto lo avvia."
|
msgstr "Riattivare lo sblocco con il volto lo avvia."
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "Volti"
|
msgstr "Volti"
|
||||||
|
|
||||||
@@ -492,7 +496,7 @@ msgstr "Ultimo sblocco"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "L'agente della schermata di blocco non è in esecuzione."
|
msgstr "L'agente della schermata di blocco non è in esecuzione."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -500,15 +504,17 @@ msgstr ""
|
|||||||
"Su GNOME una piccola estensione di GNOME mostra la bolla. Attivando lo "
|
"Su GNOME una piccola estensione di GNOME mostra la bolla. Attivando lo "
|
||||||
"sblocco con il volto si attiva anche lei."
|
"sblocco con il volto si attiva anche lei."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Scansiona quando torni a hyprlock o swaylock e li apre. Ogni altra schermata "
|
"Scansiona quando torni a hyprlock, swaylock o alla schermata di blocco di "
|
||||||
"di blocco scansiona quando premi Invio nel campo password vuoto."
|
"face-unlock (`face-unlock lock`, con la bolla) e li apre. Le altre schermate "
|
||||||
|
"di blocco scansionano con Invio."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -516,7 +522,7 @@ msgstr ""
|
|||||||
"Sblocca la schermata di blocco quando vede il tuo volto. Disattivo: lì "
|
"Sblocca la schermata di blocco quando vede il tuo volto. Disattivo: lì "
|
||||||
"funziona solo la password."
|
"funziona solo la password."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -524,7 +530,7 @@ msgstr ""
|
|||||||
"Esegue la scansione quando premi un tasto o muovi il mouse sulla schermata "
|
"Esegue la scansione quando premi un tasto o muovi il mouse sulla schermata "
|
||||||
"di blocco, e quando il computer si riattiva."
|
"di blocco, e quando il computer si riattiva."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -532,7 +538,7 @@ msgstr ""
|
|||||||
"Esegue la scansione appena lo schermo si blocca. Disattivo di norma: se lo "
|
"Esegue la scansione appena lo schermo si blocca. Disattivo di norma: se lo "
|
||||||
"blocchi tu, si sbloccherebbe subito."
|
"blocchi tu, si sbloccherebbe subito."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -540,7 +546,21 @@ msgstr ""
|
|||||||
"sudo usa il tuo volto al posto della password. Se non corrisponde, digiti la "
|
"sudo usa il tuo volto al posto della password. Se non corrisponde, digiti la "
|
||||||
"password come al solito."
|
"password come al solito."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"L'immagine dietro la schermata di blocco di face-unlock (`face-unlock "
|
||||||
|
"lock`). Vuoto: quella del tuo desktop. Oppure un file, una cartella da cui "
|
||||||
|
"prenderne una a caso, o `none`. Invio per scriverla."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "Sfoca l'immagine dietro la schermata di blocco di face-unlock."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -549,7 +569,7 @@ msgstr ""
|
|||||||
"La schermata di blocco accetta il tuo volto nel controllo della password. "
|
"La schermata di blocco accetta il tuo volto nel controllo della password. "
|
||||||
"Premi Invio nel campo vuoto per scansionare. Trovate qui: %s."
|
"Premi Invio nel campo vuoto per scansionare. Trovate qui: %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -557,18 +577,18 @@ msgstr ""
|
|||||||
"Le finestre della password del tuo desktop e delle app, per esempio quando "
|
"Le finestre della password del tuo desktop e delle app, per esempio quando "
|
||||||
"installi software. Se non corrisponde, digiti la password."
|
"installi software. Se non corrisponde, digiti la password."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Devi sbattere le palpebre o girare un po' la testa. Questo ferma anche le "
|
"Devi sbattere le palpebre o girare un po' la testa. Questo ferma anche le "
|
||||||
"foto stampate."
|
"foto stampate."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "Nessun controllo. Solo per provare una fotocamera."
|
msgstr "Nessun controllo. Solo per provare una fotocamera."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -576,22 +596,22 @@ msgstr ""
|
|||||||
"Ferma le foto su un telefono, un tablet o carta lucida. Non serve sbattere "
|
"Ferma le foto su un telefono, un tablet o carta lucida. Non serve sbattere "
|
||||||
"le palpebre. Una foto stampata opaca può passare."
|
"le palpebre. Una foto stampata opaca può passare."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Meno scambi di persona, ma potrebbe non riconoscerti con gli occhiali o con "
|
"Meno scambi di persona, ma potrebbe non riconoscerti con gli occhiali o con "
|
||||||
"poca luce."
|
"poca luce."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
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."
|
msgstr "Ti riconosce più facilmente, ma anche qualcuno che ti somiglia molto."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "Il valore predefinito. Va bene per la maggior parte delle persone."
|
msgstr "Il valore predefinito. Va bene per la maggior parte delle persone."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -599,7 +619,7 @@ msgstr ""
|
|||||||
"I tuoi occhi devono essere aperti e rivolti allo schermo. Così non si "
|
"I tuoi occhi devono essere aperti e rivolti allo schermo. Così non si "
|
||||||
"sblocca mentre guardi altrove o dormi."
|
"sblocca mentre guardi altrove o dormi."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -608,11 +628,11 @@ msgstr ""
|
|||||||
"nuovo il tuo volto. Una fotocamera a infrarossi ha bisogno della sua luce "
|
"nuovo il tuo volto. Una fotocamera a infrarossi ha bisogno della sua luce "
|
||||||
"(linux-enable-ir-emitter)."
|
"(linux-enable-ir-emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
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."
|
msgstr "Per quanto tempo la fotocamera cerca il tuo volto prima di arrendersi."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -621,7 +641,7 @@ msgstr ""
|
|||||||
"nuovo taglio di capelli o gli occhiali non richiedono una nuova "
|
"nuovo taglio di capelli o gli occhiali non richiedono una nuova "
|
||||||
"configurazione."
|
"configurazione."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -629,82 +649,99 @@ msgstr ""
|
|||||||
"Nessuna scansione quando il portatile è chiuso, per esempio alla scrivania "
|
"Nessuna scansione quando il portatile è chiuso, per esempio alla scrivania "
|
||||||
"con uno schermo esterno."
|
"con uno schermo esterno."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
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."
|
msgstr "La bolla in cima allo schermo mostra cosa sta facendo la fotocamera."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "Una piccola pillola con un lucchetto che si apre."
|
msgstr "Una piccola pillola con un lucchetto che si apre."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
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."
|
msgstr "Un'isola con un volto che si guarda intorno, poi anelli e una spunta."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "Quanto velocemente si muove la bolla."
|
msgstr "Quanto velocemente si muove la bolla."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Mostra la bolla anche quando sudo o una richiesta di amministratore "
|
"Mostra la bolla anche quando sudo o una richiesta di amministratore "
|
||||||
"scansiona il tuo volto."
|
"scansiona il tuo volto."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "automatica (%s)"
|
msgstr "automatica (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(infrarossi)"
|
msgstr "(infrarossi)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(non collegata)"
|
msgstr "(non collegata)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "come il desktop"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "nessuno"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "Immagine o cartella:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "Non trovato: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Impostazioni"
|
msgstr "Impostazioni"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ scegli ←→ o Spazio: cambia q: indietro"
|
msgstr "↑↓ scegli ←→ o Spazio: cambia q: indietro"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "per tutti gli utenti, chiede la tua password"
|
msgstr "per tutti gli utenti, chiede la tua password"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Su/Giù: scegli, Spazio: attiva/disattiva, r: rinomina, d: elimina, a: "
|
"Su/Giù: scegli, Spazio: attiva/disattiva, r: rinomina, d: elimina, a: "
|
||||||
"aggiungi, q: indietro"
|
"aggiungi, q: indietro"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "Nessun volto ancora configurato. Premi a per aggiungerne uno."
|
msgstr "Nessun volto ancora configurato. Premi a per aggiungerne uno."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "Nuovo nome:"
|
msgstr "Nuovo nome:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "Eliminare «%s»?"
|
msgstr "Eliminare «%s»?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "Attiva o disattiva lo sblocco con il volto"
|
msgstr "Attiva o disattiva lo sblocco con il volto"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "Provalo"
|
msgstr "Provalo"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Esci"
|
msgstr "Esci"
|
||||||
|
|
||||||
@@ -765,6 +802,14 @@ msgstr "Scansiona quando torni"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "Scansiona subito dopo il blocco"
|
msgstr "Scansiona subito dopo il blocco"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "Sfondo"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "Sfoca lo sfondo"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "Richieste di password"
|
msgstr "Richieste di password"
|
||||||
@@ -924,25 +969,33 @@ msgstr ""
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "Impossibile aggiungere il volto (%1)."
|
msgstr "Impossibile aggiungere il volto (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "Password errata"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sblocco con il volto per la schermata di blocco, sudo e le richieste di "
|
"Sblocco con il volto per la schermata di blocco, sudo e le richieste di "
|
||||||
"amministratore"
|
"amministratore"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "Configura un volto."
|
msgstr "Configura un volto."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "Come chiamare il nuovo volto."
|
msgstr "Come chiamare il nuovo volto."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "Blocca lo schermo."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "Riproduci una volta le animazioni della bolla."
|
msgstr "Riproduci una volta le animazioni della bolla."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "Stile della bolla per la demo: full o minimal."
|
msgstr "Stile della bolla per la demo: full o minimal."
|
||||||
|
|
||||||
@@ -1024,3 +1077,15 @@ msgstr "Iniziamo"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Fatto"
|
msgstr "Fatto"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Password"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "Guarda la fotocamera o digita la password"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "Digita la password"
|
||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Japanese\n"
|
"Language-Team: Japanese\n"
|
||||||
@@ -57,8 +57,8 @@ msgstr "顔は追加されませんでした。"
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "まず顔を登録してください。"
|
msgstr "まず顔を登録してください。"
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "設定を保存できませんでした。"
|
msgstr "設定を保存できませんでした。"
|
||||||
|
|
||||||
@@ -106,16 +106,16 @@ msgstr "顔認証はオフです。顔データは残っています。「顔」
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "まだ顔が登録されていません。"
|
msgstr "まだ顔が登録されていません。"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "オン"
|
msgstr "オン"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "オフ"
|
msgstr "オフ"
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "サンプル %s 件、学習 %s 件"
|
msgstr "サンプル %s 件、学習 %s 件"
|
||||||
@@ -145,7 +145,7 @@ msgstr "顔認証をオンにする"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "オフにする(顔データは残ります)"
|
msgstr "オフにする(顔データは残ります)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "顔を追加"
|
msgstr "顔を追加"
|
||||||
|
|
||||||
@@ -162,22 +162,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "カメラを見て、カメラに映るものを確認する"
|
msgstr "カメラを見て、カメラに映るものを確認する"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "画面をロック"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "オンになっている機能を表示"
|
msgstr "オンになっている機能を表示"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "このヘルプを表示"
|
msgstr "このヘルプを表示"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "バージョンを表示"
|
msgstr "バージョンを表示"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "コマンドなしで起動すると、対話式メニューが表示されます。"
|
msgstr "コマンドなしで起動すると、対話式メニューが表示されます。"
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -185,42 +189,42 @@ msgstr ""
|
|||||||
"root ではなく、自分のユーザーで実行してください。必要なときはパスワードを尋ね"
|
"root ではなく、自分のユーザーで実行してください。必要なときはパスワードを尋ね"
|
||||||
"ます。"
|
"ます。"
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "不明なコマンド: %s"
|
msgstr "不明なコマンド: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "なし"
|
msgstr "なし"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "たった今"
|
msgstr "たった今"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "1 分前"
|
msgstr "1 分前"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "%d 分前"
|
msgstr "%d 分前"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "1 時間前"
|
msgstr "1 時間前"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "%d 時間前"
|
msgstr "%d 時間前"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "1 日前"
|
msgstr "1 日前"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "%d 日前"
|
msgstr "%d 日前"
|
||||||
@@ -364,11 +368,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[y/N]"
|
msgstr "[y/N]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "オン"
|
msgstr "オン"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "オフ"
|
msgstr "オフ"
|
||||||
|
|
||||||
@@ -409,7 +413,7 @@ msgstr "遅い"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s 秒"
|
msgstr "%s 秒"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "自動"
|
msgstr "自動"
|
||||||
|
|
||||||
@@ -429,8 +433,8 @@ msgstr "停止中"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "顔認証をもう一度オンにすると起動します。"
|
msgstr "顔認証をもう一度オンにすると起動します。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "顔"
|
msgstr "顔"
|
||||||
|
|
||||||
@@ -487,7 +491,7 @@ msgstr "最後のロック解除"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "ロック画面エージェントが動いていません。"
|
msgstr "ロック画面エージェントが動いていません。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -495,15 +499,17 @@ msgstr ""
|
|||||||
"GNOME では小さな GNOME 拡張機能がバブルを表示します。顔認証をオンにすると一緒"
|
"GNOME では小さな GNOME 拡張機能がバブルを表示します。顔認証をオンにすると一緒"
|
||||||
"に有効になります。"
|
"に有効になります。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"hyprlock や swaylock に戻ってきたときにスキャンして開きます。それ以外のロック"
|
"hyprlock、swaylock、face-unlock のロック画面(`face-unlock lock`、バブル付"
|
||||||
"画面は、空のパスワード欄で Enter を押すとスキャンします。"
|
"き)に戻ってきたときにスキャンして開きます。ほかのロック画面は Enter でスキャ"
|
||||||
|
"ンします。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -511,7 +517,7 @@ msgstr ""
|
|||||||
"顔を認識するとロック画面を解除します。オフ: ロック画面ではパスワードだけが使"
|
"顔を認識するとロック画面を解除します。オフ: ロック画面ではパスワードだけが使"
|
||||||
"えます。"
|
"えます。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -519,7 +525,7 @@ msgstr ""
|
|||||||
"ロック画面でキーを押すかマウスを動かしたとき、そしてコンピューターがスリープ"
|
"ロック画面でキーを押すかマウスを動かしたとき、そしてコンピューターがスリープ"
|
||||||
"から復帰したときにスキャンします。"
|
"から復帰したときにスキャンします。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -527,7 +533,7 @@ msgstr ""
|
|||||||
"画面がロックされるとすぐにスキャンします。既定はオフ: 自分でロックすると、す"
|
"画面がロックされるとすぐにスキャンします。既定はオフ: 自分でロックすると、す"
|
||||||
"ぐに解除されてしまうためです。"
|
"ぐに解除されてしまうためです。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -535,7 +541,20 @@ msgstr ""
|
|||||||
"sudo でパスワードの代わりに顔を使います。一致しなければ、いつも通りパスワード"
|
"sudo でパスワードの代わりに顔を使います。一致しなければ、いつも通りパスワード"
|
||||||
"を入力します。"
|
"を入力します。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"face-unlock のロック画面(`face-unlock lock`)の背景画像。空欄: デスクトップ"
|
||||||
|
"と同じ画像。またはファイル、ランダムに選ぶフォルダー、`none`。Enter で入力。"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "face-unlock のロック画面の背景画像をぼかします。"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -544,7 +563,7 @@ msgstr ""
|
|||||||
"ロック画面のパスワード確認で顔が使えます。空の欄で Enter を押すとスキャンしま"
|
"ロック画面のパスワード確認で顔が使えます。空の欄で Enter を押すとスキャンしま"
|
||||||
"す。見つかったもの: %s。"
|
"す。見つかったもの: %s。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -552,16 +571,16 @@ msgstr ""
|
|||||||
"デスクトップやアプリのパスワード画面です(ソフトウェアのインストール時な"
|
"デスクトップやアプリのパスワード画面です(ソフトウェアのインストール時な"
|
||||||
"ど)。一致しなければパスワードを入力します。"
|
"ど)。一致しなければパスワードを入力します。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr "まばたきするか、少し顔を動かす必要があります。印刷した写真も防げます。"
|
msgstr "まばたきするか、少し顔を動かす必要があります。印刷した写真も防げます。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "チェックしません。カメラを試すときだけ使ってください。"
|
msgstr "チェックしません。カメラを試すときだけ使ってください。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -569,22 +588,22 @@ msgstr ""
|
|||||||
"スマホ、タブレット、光沢紙に映った写真を防ぎます。まばたきは不要です。つや消"
|
"スマホ、タブレット、光沢紙に映った写真を防ぎます。まばたきは不要です。つや消"
|
||||||
"しの印刷写真は通ることがあります。"
|
"しの印刷写真は通ることがあります。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"誤認識は減りますが、眼鏡をかけているときや暗いときに認識されないことがありま"
|
"誤認識は減りますが、眼鏡をかけているときや暗いときに認識されないことがありま"
|
||||||
"す。"
|
"す。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
||||||
msgstr "認識されやすくなりますが、あなたによく似た人も認識されやすくなります。"
|
msgstr "認識されやすくなりますが、あなたによく似た人も認識されやすくなります。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "既定値です。ほとんどの人に適しています。"
|
msgstr "既定値です。ほとんどの人に適しています。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -592,7 +611,7 @@ msgstr ""
|
|||||||
"目を開けて画面を見ている必要があります。よそ見や居眠りの間にロック解除されま"
|
"目を開けて画面を見ている必要があります。よそ見や居眠りの間にロック解除されま"
|
||||||
"せん。"
|
"せん。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -600,11 +619,11 @@ msgstr ""
|
|||||||
"「自動」は最初の通常のカメラを使います。変更したら顔を登録し直してください。"
|
"「自動」は最初の通常のカメラを使います。変更したら顔を登録し直してください。"
|
||||||
"赤外線カメラはライトをオンにする必要があります(linux-enable-ir-emitter)。"
|
"赤外線カメラはライトをオンにする必要があります(linux-enable-ir-emitter)。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
msgid "How long the camera looks for your face before it gives up."
|
||||||
msgstr "カメラが顔を探してからあきらめるまでの時間です。"
|
msgstr "カメラが顔を探してからあきらめるまでの時間です。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -612,7 +631,7 @@ msgstr ""
|
|||||||
"確実に一致したとき、今の見た目を覚えます。髪型を変えたり眼鏡をかけたりして"
|
"確実に一致したとき、今の見た目を覚えます。髪型を変えたり眼鏡をかけたりして"
|
||||||
"も、登録し直す必要はありません。"
|
"も、登録し直す必要はありません。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -620,79 +639,96 @@ msgstr ""
|
|||||||
"ノートパソコンを閉じているときはスキャンしません。外部モニターにつないで机で"
|
"ノートパソコンを閉じているときはスキャンしません。外部モニターにつないで机で"
|
||||||
"使う場合などです。"
|
"使う場合などです。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
msgid "The bubble at the top of the screen shows what the camera is doing."
|
||||||
msgstr "画面上部のバブルに、カメラの状態が表示されます。"
|
msgstr "画面上部のバブルに、カメラの状態が表示されます。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "鍵が開く小さなピルです。"
|
msgstr "鍵が開く小さなピルです。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
msgid "An island with a face that looks around, then rings and a tick."
|
||||||
msgstr "あたりを見回す顔のアイランド。そのあとリングとチェックマークが出ます。"
|
msgstr "あたりを見回す顔のアイランド。そのあとリングとチェックマークが出ます。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "バブルが動く速さです。"
|
msgstr "バブルが動く速さです。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr "sudo や管理者の認証で顔をスキャンするときにもバブルを表示します。"
|
msgstr "sudo や管理者の認証で顔をスキャンするときにもバブルを表示します。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "自動(%s)"
|
msgstr "自動(%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(赤外線)"
|
msgstr "(赤外線)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(未接続)"
|
msgstr "(未接続)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "デスクトップと同じ"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "なし"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "画像またはフォルダー:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "見つかりません: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "設定"
|
msgstr "設定"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ 選択 ←→ またはスペース: 変更 q: 戻る"
|
msgstr "↑↓ 選択 ←→ またはスペース: 変更 q: 戻る"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "全ユーザー共通、パスワードが必要"
|
msgstr "全ユーザー共通、パスワードが必要"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"上/下: 選択、スペース: オン/オフ、r: 名前を変更、d: 削除、a: 追加、q: 戻る"
|
"上/下: 選択、スペース: オン/オフ、r: 名前を変更、d: 削除、a: 追加、q: 戻る"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "まだ顔が登録されていません。a を押して追加してください。"
|
msgstr "まだ顔が登録されていません。a を押して追加してください。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "新しい名前:"
|
msgstr "新しい名前:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "「%s」を削除しますか?"
|
msgstr "「%s」を削除しますか?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "顔認証のオン/オフ"
|
msgstr "顔認証のオン/オフ"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "試す"
|
msgstr "試す"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "終了"
|
msgstr "終了"
|
||||||
|
|
||||||
@@ -751,6 +787,14 @@ msgstr "戻ってきたらスキャン"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "ロック直後にスキャン"
|
msgstr "ロック直後にスキャン"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "壁紙"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "壁紙をぼかす"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "パスワードの入力画面"
|
msgstr "パスワードの入力画面"
|
||||||
@@ -907,23 +951,31 @@ msgstr "カメラは別のスキャン中です。少ししてからもう一度
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "顔を追加できませんでした(%1)。"
|
msgstr "顔を追加できませんでした(%1)。"
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "パスワードが違います"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr "ロック画面、sudo、管理者の認証のための顔認証"
|
msgstr "ロック画面、sudo、管理者の認証のための顔認証"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "顔を登録します。"
|
msgstr "顔を登録します。"
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "新しい顔の名前。"
|
msgstr "新しい顔の名前。"
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "画面をロックします。"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "バブルのアニメーションを一度再生します。"
|
msgstr "バブルのアニメーションを一度再生します。"
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "デモのバブルスタイル: full または minimal。"
|
msgstr "デモのバブルスタイル: full または minimal。"
|
||||||
|
|
||||||
@@ -1004,3 +1056,15 @@ msgstr "はじめる"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "完了"
|
msgstr "完了"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "パスワード"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "カメラを見るか、パスワードを入力してください"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "パスワードを入力してください"
|
||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
@@ -57,8 +57,8 @@ msgstr "얼굴이 추가되지 않았습니다."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "먼저 얼굴을 등록하세요."
|
msgstr "먼저 얼굴을 등록하세요."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "설정을 저장하지 못했습니다."
|
msgstr "설정을 저장하지 못했습니다."
|
||||||
|
|
||||||
@@ -107,16 +107,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "아직 등록된 얼굴이 없습니다."
|
msgstr "아직 등록된 얼굴이 없습니다."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "켜짐"
|
msgstr "켜짐"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "꺼짐"
|
msgstr "꺼짐"
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "샘플 %s개, 학습 %s개"
|
msgstr "샘플 %s개, 학습 %s개"
|
||||||
@@ -146,7 +146,7 @@ msgstr "얼굴 잠금 해제 켜기"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "끄기 (얼굴 데이터는 유지)"
|
msgstr "끄기 (얼굴 데이터는 유지)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "얼굴 추가"
|
msgstr "얼굴 추가"
|
||||||
|
|
||||||
@@ -163,63 +163,67 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "카메라를 보고 카메라에 보이는 것을 확인"
|
msgstr "카메라를 보고 카메라에 보이는 것을 확인"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "화면 잠그기"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "켜져 있는 기능 보기"
|
msgstr "켜져 있는 기능 보기"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "이 도움말 보기"
|
msgstr "이 도움말 보기"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "버전 보기"
|
msgstr "버전 보기"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "명령 없이 실행하면 대화형 메뉴가 나옵니다."
|
msgstr "명령 없이 실행하면 대화형 메뉴가 나옵니다."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
msgstr "root가 아닌 본인 사용자로 실행하세요. 필요하면 비밀번호를 묻습니다."
|
msgstr "root가 아닌 본인 사용자로 실행하세요. 필요하면 비밀번호를 묻습니다."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "알 수 없는 명령: %s"
|
msgstr "알 수 없는 명령: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "없음"
|
msgstr "없음"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "방금"
|
msgstr "방금"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "1분 전"
|
msgstr "1분 전"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "%d분 전"
|
msgstr "%d분 전"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "1시간 전"
|
msgstr "1시간 전"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "%d시간 전"
|
msgstr "%d시간 전"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "1일 전"
|
msgstr "1일 전"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "%d일 전"
|
msgstr "%d일 전"
|
||||||
@@ -363,11 +367,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[y/N]"
|
msgstr "[y/N]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "켜짐"
|
msgstr "켜짐"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "꺼짐"
|
msgstr "꺼짐"
|
||||||
|
|
||||||
@@ -408,7 +412,7 @@ msgstr "느리게"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s초"
|
msgstr "%s초"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "자동"
|
msgstr "자동"
|
||||||
|
|
||||||
@@ -428,8 +432,8 @@ msgstr "실행 중 아님"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "얼굴 잠금 해제를 다시 켜면 시작됩니다."
|
msgstr "얼굴 잠금 해제를 다시 켜면 시작됩니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "얼굴"
|
msgstr "얼굴"
|
||||||
|
|
||||||
@@ -486,7 +490,7 @@ msgstr "마지막 잠금 해제"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "잠금 화면 에이전트가 실행 중이 아닙니다."
|
msgstr "잠금 화면 에이전트가 실행 중이 아닙니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -494,22 +498,23 @@ msgstr ""
|
|||||||
"GNOME에서는 작은 GNOME 확장이 버블을 보여 줍니다. 얼굴 잠금 해제를 켜면 함께 "
|
"GNOME에서는 작은 GNOME 확장이 버블을 보여 줍니다. 얼굴 잠금 해제를 켜면 함께 "
|
||||||
"켜집니다."
|
"켜집니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"hyprlock이나 swaylock으로 돌아오면 스캔해서 엽니다. 다른 잠금 화면은 빈 비밀"
|
"hyprlock, swaylock 또는 face-unlock 자체 잠금 화면(`face-unlock lock`, 버블 "
|
||||||
"번호 칸에서 Enter를 누르면 스캔합니다."
|
"포함)으로 돌아오면 스캔해서 엽니다. 다른 잠금 화면은 Enter로 스캔합니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"얼굴을 보면 잠금 화면을 해제합니다. 꺼짐: 잠금 화면에서는 비밀번호만 됩니다."
|
"얼굴을 보면 잠금 화면을 해제합니다. 꺼짐: 잠금 화면에서는 비밀번호만 됩니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -517,7 +522,7 @@ msgstr ""
|
|||||||
"잠금 화면에서 키를 누르거나 마우스를 움직일 때, 그리고 컴퓨터가 깨어날 때 스"
|
"잠금 화면에서 키를 누르거나 마우스를 움직일 때, 그리고 컴퓨터가 깨어날 때 스"
|
||||||
"캔합니다."
|
"캔합니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -525,7 +530,7 @@ msgstr ""
|
|||||||
"화면이 잠기자마자 스캔합니다. 기본값은 꺼짐: 직접 잠그면 곧바로 다시 풀려 버"
|
"화면이 잠기자마자 스캔합니다. 기본값은 꺼짐: 직접 잠그면 곧바로 다시 풀려 버"
|
||||||
"리기 때문입니다."
|
"리기 때문입니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -533,7 +538,20 @@ msgstr ""
|
|||||||
"sudo가 비밀번호 대신 얼굴을 사용합니다. 일치하지 않으면 평소처럼 비밀번호를 "
|
"sudo가 비밀번호 대신 얼굴을 사용합니다. 일치하지 않으면 평소처럼 비밀번호를 "
|
||||||
"입력합니다."
|
"입력합니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"face-unlock 잠금 화면(`face-unlock lock`)의 배경 그림. 비워 두면 바탕 화면의 "
|
||||||
|
"그림. 또는 파일, 무작위로 고를 폴더, `none`. Enter로 입력."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "face-unlock 잠금 화면의 배경 그림을 흐리게 합니다."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -542,7 +560,7 @@ msgstr ""
|
|||||||
"잠금 화면의 비밀번호 확인에서 얼굴을 받습니다. 빈 칸에서 Enter를 누르면 스캔"
|
"잠금 화면의 비밀번호 확인에서 얼굴을 받습니다. 빈 칸에서 Enter를 누르면 스캔"
|
||||||
"합니다. 찾은 것: %s."
|
"합니다. 찾은 것: %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -550,16 +568,16 @@ msgstr ""
|
|||||||
"데스크톱과 앱의 비밀번호 창입니다. 예를 들어 소프트웨어를 설치할 때입니다. 일"
|
"데스크톱과 앱의 비밀번호 창입니다. 예를 들어 소프트웨어를 설치할 때입니다. 일"
|
||||||
"치하지 않으면 비밀번호를 입력합니다."
|
"치하지 않으면 비밀번호를 입력합니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr "눈을 깜빡이거나 고개를 살짝 돌려야 합니다. 인쇄한 사진도 막아 줍니다."
|
msgstr "눈을 깜빡이거나 고개를 살짝 돌려야 합니다. 인쇄한 사진도 막아 줍니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "검사하지 않습니다. 카메라를 시험할 때만 쓰세요."
|
msgstr "검사하지 않습니다. 카메라를 시험할 때만 쓰세요."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -567,22 +585,22 @@ msgstr ""
|
|||||||
"휴대폰, 태블릿, 광택지에 있는 사진을 막습니다. 눈을 깜빡일 필요는 없습니다. "
|
"휴대폰, 태블릿, 광택지에 있는 사진을 막습니다. 눈을 깜빡일 필요는 없습니다. "
|
||||||
"무광 인쇄 사진은 통과할 수 있습니다."
|
"무광 인쇄 사진은 통과할 수 있습니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"잘못 일치하는 경우가 줄지만, 안경을 쓰거나 조명이 나쁘면 알아보지 못할 수 있"
|
"잘못 일치하는 경우가 줄지만, 안경을 쓰거나 조명이 나쁘면 알아보지 못할 수 있"
|
||||||
"습니다."
|
"습니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
||||||
msgstr "더 쉽게 알아보지만, 당신과 많이 닮은 사람도 알아볼 수 있습니다."
|
msgstr "더 쉽게 알아보지만, 당신과 많이 닮은 사람도 알아볼 수 있습니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "기본값입니다. 대부분의 사람에게 알맞습니다."
|
msgstr "기본값입니다. 대부분의 사람에게 알맞습니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -590,7 +608,7 @@ msgstr ""
|
|||||||
"눈을 뜨고 화면을 보고 있어야 합니다. 그래서 다른 곳을 보거나 자는 동안에는 풀"
|
"눈을 뜨고 화면을 보고 있어야 합니다. 그래서 다른 곳을 보거나 자는 동안에는 풀"
|
||||||
"리지 않습니다."
|
"리지 않습니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -598,11 +616,11 @@ msgstr ""
|
|||||||
"자동은 첫 번째 일반 카메라를 사용합니다. 바꾼 뒤에는 얼굴을 다시 등록하세요. "
|
"자동은 첫 번째 일반 카메라를 사용합니다. 바꾼 뒤에는 얼굴을 다시 등록하세요. "
|
||||||
"적외선 카메라는 조명을 켜야 합니다 (linux-enable-ir-emitter)."
|
"적외선 카메라는 조명을 켜야 합니다 (linux-enable-ir-emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
msgid "How long the camera looks for your face before it gives up."
|
||||||
msgstr "카메라가 포기하기 전까지 얼굴을 찾는 시간입니다."
|
msgstr "카메라가 포기하기 전까지 얼굴을 찾는 시간입니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -610,7 +628,7 @@ msgstr ""
|
|||||||
"확실히 일치하면 지금 모습을 기억합니다. 그래서 머리 모양이 바뀌거나 안경을 써"
|
"확실히 일치하면 지금 모습을 기억합니다. 그래서 머리 모양이 바뀌거나 안경을 써"
|
||||||
"도 다시 등록할 필요가 없습니다."
|
"도 다시 등록할 필요가 없습니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -618,79 +636,96 @@ msgstr ""
|
|||||||
"노트북을 덮었을 때는 스캔하지 않습니다. 예를 들어 외부 모니터를 연결해 책상에"
|
"노트북을 덮었을 때는 스캔하지 않습니다. 예를 들어 외부 모니터를 연결해 책상에"
|
||||||
"서 쓸 때입니다."
|
"서 쓸 때입니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
msgid "The bubble at the top of the screen shows what the camera is doing."
|
||||||
msgstr "화면 위쪽의 버블이 카메라가 하는 일을 보여 줍니다."
|
msgstr "화면 위쪽의 버블이 카메라가 하는 일을 보여 줍니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "자물쇠가 열리는 작은 알약입니다."
|
msgstr "자물쇠가 열리는 작은 알약입니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
msgid "An island with a face that looks around, then rings and a tick."
|
||||||
msgstr "주위를 둘러보는 얼굴이 있는 아일랜드, 그다음 링과 체크 표시입니다."
|
msgstr "주위를 둘러보는 얼굴이 있는 아일랜드, 그다음 링과 체크 표시입니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "버블이 움직이는 속도입니다."
|
msgstr "버블이 움직이는 속도입니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr "sudo나 관리자 인증 창이 얼굴을 스캔할 때도 버블을 보여 줍니다."
|
msgstr "sudo나 관리자 인증 창이 얼굴을 스캔할 때도 버블을 보여 줍니다."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "자동 (%s)"
|
msgstr "자동 (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(적외선)"
|
msgstr "(적외선)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(연결 안 됨)"
|
msgstr "(연결 안 됨)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "바탕 화면과 같음"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "없음"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "그림 또는 폴더:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "찾을 수 없음: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "설정"
|
msgstr "설정"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ 선택 ←→ 또는 스페이스: 변경 q: 뒤로"
|
msgstr "↑↓ 선택 ←→ 또는 스페이스: 변경 q: 뒤로"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "모든 사용자에게 적용, 비밀번호 필요"
|
msgstr "모든 사용자에게 적용, 비밀번호 필요"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"위/아래: 선택, 스페이스: 켜기/끄기, r: 이름 바꾸기, d: 삭제, a: 추가, q: 뒤로"
|
"위/아래: 선택, 스페이스: 켜기/끄기, r: 이름 바꾸기, d: 삭제, a: 추가, q: 뒤로"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "아직 등록된 얼굴이 없습니다. a를 눌러 추가하세요."
|
msgstr "아직 등록된 얼굴이 없습니다. a를 눌러 추가하세요."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "새 이름:"
|
msgstr "새 이름:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "\"%s\" 항목을 삭제할까요?"
|
msgstr "\"%s\" 항목을 삭제할까요?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "얼굴 잠금 해제 켜기/끄기"
|
msgstr "얼굴 잠금 해제 켜기/끄기"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "사용해 보기"
|
msgstr "사용해 보기"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "끝내기"
|
msgstr "끝내기"
|
||||||
|
|
||||||
@@ -750,6 +785,14 @@ msgstr "돌아오면 스캔"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "잠근 직후 스캔"
|
msgstr "잠근 직후 스캔"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "배경 화면"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "배경 화면 흐리게"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "비밀번호 입력 창"
|
msgstr "비밀번호 입력 창"
|
||||||
@@ -907,23 +950,31 @@ msgstr "카메라가 다른 스캔으로 사용 중입니다. 잠시 후 다시
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "얼굴을 추가하지 못했습니다 (%1)."
|
msgstr "얼굴을 추가하지 못했습니다 (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "비밀번호가 틀렸습니다"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr "잠금 화면, sudo, 관리자 인증 창을 위한 얼굴 잠금 해제"
|
msgstr "잠금 화면, sudo, 관리자 인증 창을 위한 얼굴 잠금 해제"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "얼굴을 등록합니다."
|
msgstr "얼굴을 등록합니다."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "새 얼굴의 이름."
|
msgstr "새 얼굴의 이름."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "화면을 잠급니다."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "버블 애니메이션을 한 번 재생합니다."
|
msgstr "버블 애니메이션을 한 번 재생합니다."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "데모용 버블 스타일: full 또는 minimal."
|
msgstr "데모용 버블 스타일: full 또는 minimal."
|
||||||
|
|
||||||
@@ -1003,3 +1054,15 @@ msgstr "시작하기"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "완료"
|
msgstr "완료"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "비밀번호"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "카메라를 보거나 비밀번호를 입력하세요"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "비밀번호를 입력하세요"
|
||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
@@ -58,8 +58,8 @@ msgstr "Er is geen gezicht toegevoegd."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "Stel eerst je gezicht in."
|
msgstr "Stel eerst je gezicht in."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "Kon de instelling niet opslaan."
|
msgstr "Kon de instelling niet opslaan."
|
||||||
|
|
||||||
@@ -110,16 +110,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "Er is nog geen gezicht ingesteld."
|
msgstr "Er is nog geen gezicht ingesteld."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "aan"
|
msgstr "aan"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "uit"
|
msgstr "uit"
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "%s opnames, %s bijgeleerd"
|
msgstr "%s opnames, %s bijgeleerd"
|
||||||
@@ -149,7 +149,7 @@ msgstr "Gezichtsontgrendeling aanzetten"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "Uitzetten (gezichten blijven bewaard)"
|
msgstr "Uitzetten (gezichten blijven bewaard)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "Een gezicht toevoegen"
|
msgstr "Een gezicht toevoegen"
|
||||||
|
|
||||||
@@ -166,22 +166,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "In de camera kijken en zien wat hij ziet"
|
msgstr "In de camera kijken en zien wat hij ziet"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "Scherm vergrendelen"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "Tonen wat er aan staat"
|
msgstr "Tonen wat er aan staat"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "Deze hulp tonen"
|
msgstr "Deze hulp tonen"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "De versie tonen"
|
msgstr "De versie tonen"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "Zonder opdracht verschijnt een interactief menu."
|
msgstr "Zonder opdracht verschijnt een interactief menu."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -189,42 +193,42 @@ msgstr ""
|
|||||||
"Voer dit uit als je eigen gebruiker, niet als root. Het vraagt om je "
|
"Voer dit uit als je eigen gebruiker, niet als root. Het vraagt om je "
|
||||||
"wachtwoord als dat nodig is."
|
"wachtwoord als dat nodig is."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "Onbekende opdracht: %s"
|
msgstr "Onbekende opdracht: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "nooit"
|
msgstr "nooit"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "zojuist"
|
msgstr "zojuist"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "1 minuut geleden"
|
msgstr "1 minuut geleden"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "%d minuten geleden"
|
msgstr "%d minuten geleden"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "1 uur geleden"
|
msgstr "1 uur geleden"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "%d uur geleden"
|
msgstr "%d uur geleden"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "1 dag geleden"
|
msgstr "1 dag geleden"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "%d dagen geleden"
|
msgstr "%d dagen geleden"
|
||||||
@@ -368,11 +372,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[j/N]"
|
msgstr "[j/N]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "AAN"
|
msgstr "AAN"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "UIT"
|
msgstr "UIT"
|
||||||
|
|
||||||
@@ -413,7 +417,7 @@ msgstr "langzaam"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s seconden"
|
msgstr "%s seconden"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "automatisch"
|
msgstr "automatisch"
|
||||||
|
|
||||||
@@ -433,8 +437,8 @@ msgstr "draait niet"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "Gezichtsontgrendeling opnieuw aanzetten start hem."
|
msgstr "Gezichtsontgrendeling opnieuw aanzetten start hem."
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "Gezichten"
|
msgstr "Gezichten"
|
||||||
|
|
||||||
@@ -491,7 +495,7 @@ msgstr "Laatste ontgrendeling"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "De agent voor het vergrendelscherm draait niet."
|
msgstr "De agent voor het vergrendelscherm draait niet."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -499,15 +503,17 @@ msgstr ""
|
|||||||
"Op GNOME toont een kleine GNOME-extensie de bubbel. Als je "
|
"Op GNOME toont een kleine GNOME-extensie de bubbel. Als je "
|
||||||
"gezichtsontgrendeling inschakelt, gaat die ook aan."
|
"gezichtsontgrendeling inschakelt, gaat die ook aan."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Scant als je terugkomt bij hyprlock of swaylock en opent ze. Elk ander "
|
"Scant als je terugkomt bij hyprlock, swaylock of het eigen vergrendelscherm "
|
||||||
"vergrendelscherm scant als je op Enter drukt in het lege wachtwoordveld."
|
"van face-unlock (`face-unlock lock`, met de bubbel) en opent ze. Andere "
|
||||||
|
"vergrendelschermen scannen met Enter."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -515,7 +521,7 @@ msgstr ""
|
|||||||
"Ontgrendelt het vergrendelscherm als het je gezicht ziet. Uit: daar werkt "
|
"Ontgrendelt het vergrendelscherm als het je gezicht ziet. Uit: daar werkt "
|
||||||
"alleen je wachtwoord."
|
"alleen je wachtwoord."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -523,7 +529,7 @@ msgstr ""
|
|||||||
"Scant als je op het vergrendelscherm een toets indrukt of de muis beweegt, "
|
"Scant als je op het vergrendelscherm een toets indrukt of de muis beweegt, "
|
||||||
"en als de computer ontwaakt."
|
"en als de computer ontwaakt."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -531,7 +537,7 @@ msgstr ""
|
|||||||
"Scant zodra het scherm vergrendelt. Standaard uit: vergrendel je zelf, dan "
|
"Scant zodra het scherm vergrendelt. Standaard uit: vergrendel je zelf, dan "
|
||||||
"zou het meteen weer ontgrendelen."
|
"zou het meteen weer ontgrendelen."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -539,7 +545,21 @@ msgstr ""
|
|||||||
"sudo neemt je gezicht in plaats van het wachtwoord. Geen match: je typt "
|
"sudo neemt je gezicht in plaats van het wachtwoord. Geen match: je typt "
|
||||||
"zoals gewoonlijk je wachtwoord."
|
"zoals gewoonlijk je wachtwoord."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"De afbeelding achter het vergrendelscherm van face-unlock (`face-unlock "
|
||||||
|
"lock`). Leeg: die van je bureaublad. Of een bestand, een map waaruit er "
|
||||||
|
"willekeurig een wordt gekozen, of `none`. Enter om te typen."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "Vervaagt de afbeelding achter het vergrendelscherm van face-unlock."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -548,7 +568,7 @@ msgstr ""
|
|||||||
"Het vergrendelscherm neemt je gezicht in zijn wachtwoordcontrole. Druk op "
|
"Het vergrendelscherm neemt je gezicht in zijn wachtwoordcontrole. Druk op "
|
||||||
"Enter in het lege veld om te scannen. Hier gevonden: %s."
|
"Enter in het lege veld om te scannen. Hier gevonden: %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -556,18 +576,18 @@ msgstr ""
|
|||||||
"De wachtwoordvensters van je bureaublad en apps, bijvoorbeeld bij het "
|
"De wachtwoordvensters van je bureaublad en apps, bijvoorbeeld bij het "
|
||||||
"installeren van software. Geen match: je typt je wachtwoord."
|
"installeren van software. Geen match: je typt je wachtwoord."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Je moet knipperen of je hoofd een beetje draaien. Dat houdt ook geprinte "
|
"Je moet knipperen of je hoofd een beetje draaien. Dat houdt ook geprinte "
|
||||||
"foto's tegen."
|
"foto's tegen."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "Helemaal geen controle. Alleen om een camera uit te proberen."
|
msgstr "Helemaal geen controle. Alleen om een camera uit te proberen."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -575,22 +595,22 @@ msgstr ""
|
|||||||
"Houdt foto's op een telefoon, tablet of glanzend papier tegen. Knipperen is "
|
"Houdt foto's op een telefoon, tablet of glanzend papier tegen. Knipperen is "
|
||||||
"niet nodig. Een matte geprinte foto kan erdoor komen."
|
"niet nodig. Een matte geprinte foto kan erdoor komen."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Minder verwisselingen, maar met een bril of bij slecht licht herkent het je "
|
"Minder verwisselingen, maar met een bril of bij slecht licht herkent het je "
|
||||||
"misschien niet."
|
"misschien niet."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
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."
|
msgstr "Herkent je makkelijker, maar ook iemand die veel op je lijkt."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "De standaard. Goed voor de meeste mensen."
|
msgstr "De standaard. Goed voor de meeste mensen."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -598,7 +618,7 @@ msgstr ""
|
|||||||
"Je ogen moeten open zijn en naar het scherm kijken. Zo ontgrendelt het niet "
|
"Je ogen moeten open zijn en naar het scherm kijken. Zo ontgrendelt het niet "
|
||||||
"als je wegkijkt of slaapt."
|
"als je wegkijkt of slaapt."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -607,11 +627,11 @@ msgstr ""
|
|||||||
"opnieuw in. Een infraroodcamera heeft zijn lampje nodig (linux-enable-ir-"
|
"opnieuw in. Een infraroodcamera heeft zijn lampje nodig (linux-enable-ir-"
|
||||||
"emitter)."
|
"emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
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."
|
msgstr "Hoe lang de camera naar je gezicht zoekt voordat hij opgeeft."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -619,7 +639,7 @@ msgstr ""
|
|||||||
"Na een zekere match onthoudt het hoe je er nu uitziet. Een nieuw kapsel of "
|
"Na een zekere match onthoudt het hoe je er nu uitziet. Een nieuw kapsel of "
|
||||||
"een bril vraagt dus niet om opnieuw instellen."
|
"een bril vraagt dus niet om opnieuw instellen."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -627,80 +647,97 @@ msgstr ""
|
|||||||
"Geen scan als de laptop dicht is, bijvoorbeeld aan een bureau met een extern "
|
"Geen scan als de laptop dicht is, bijvoorbeeld aan een bureau met een extern "
|
||||||
"scherm."
|
"scherm."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
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."
|
msgstr "De bubbel boven aan het scherm laat zien wat de camera doet."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "Een kleine pil met een slot dat opengaat."
|
msgstr "Een kleine pil met een slot dat opengaat."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
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."
|
msgstr "Een eiland met een gezicht dat rondkijkt, daarna ringen en een vinkje."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "Hoe snel de bubbel beweegt."
|
msgstr "Hoe snel de bubbel beweegt."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
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."
|
msgstr "Toont de bubbel ook als sudo of een beheerdersvraag je gezicht scant."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "automatisch (%s)"
|
msgstr "automatisch (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(infrarood)"
|
msgstr "(infrarood)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(niet aangesloten)"
|
msgstr "(niet aangesloten)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "zoals bureaublad"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "geen"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "Afbeelding of map:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "Niet gevonden: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Instellingen"
|
msgstr "Instellingen"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ kiezen ←→ of Spatie: wijzigen q: terug"
|
msgstr "↑↓ kiezen ←→ of Spatie: wijzigen q: terug"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "voor alle gebruikers, vraagt om je wachtwoord"
|
msgstr "voor alle gebruikers, vraagt om je wachtwoord"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Omhoog/Omlaag: kiezen, Spatie: aan/uit, r: hernoemen, d: verwijderen, a: "
|
"Omhoog/Omlaag: kiezen, Spatie: aan/uit, r: hernoemen, d: verwijderen, a: "
|
||||||
"toevoegen, q: terug"
|
"toevoegen, q: terug"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "Er is nog geen gezicht ingesteld. Druk op a om er een toe te voegen."
|
msgstr "Er is nog geen gezicht ingesteld. Druk op a om er een toe te voegen."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "Nieuwe naam:"
|
msgstr "Nieuwe naam:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "“%s” verwijderen?"
|
msgstr "“%s” verwijderen?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "Gezichtsontgrendeling aan- of uitzetten"
|
msgstr "Gezichtsontgrendeling aan- of uitzetten"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "Uitproberen"
|
msgstr "Uitproberen"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Afsluiten"
|
msgstr "Afsluiten"
|
||||||
|
|
||||||
@@ -762,6 +799,14 @@ msgstr "Scannen als je terugkomt"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "Scannen direct na vergrendelen"
|
msgstr "Scannen direct na vergrendelen"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "Achtergrond"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "Achtergrond vervagen"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "Wachtwoordvragen"
|
msgstr "Wachtwoordvragen"
|
||||||
@@ -921,24 +966,32 @@ msgstr "De camera is bezig met een andere scan. Probeer het zo opnieuw."
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "Het gezicht kon niet worden toegevoegd (%1)."
|
msgstr "Het gezicht kon niet worden toegevoegd (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "Verkeerd wachtwoord"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Gezichtsontgrendeling voor het vergrendelscherm, sudo en beheerdersvragen"
|
"Gezichtsontgrendeling voor het vergrendelscherm, sudo en beheerdersvragen"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "Een gezicht instellen."
|
msgstr "Een gezicht instellen."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "Hoe het nieuwe gezicht moet heten."
|
msgstr "Hoe het nieuwe gezicht moet heten."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "Het scherm vergrendelen."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "De animaties van de bubbel één keer afspelen."
|
msgstr "De animaties van de bubbel één keer afspelen."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "Bubbelstijl voor de demo: full of minimal."
|
msgstr "Bubbelstijl voor de demo: full of minimal."
|
||||||
|
|
||||||
@@ -1019,3 +1072,15 @@ msgstr "Aan de slag"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Klaar"
|
msgstr "Klaar"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Wachtwoord"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "Kijk naar de camera of typ je wachtwoord"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "Typ je wachtwoord"
|
||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Polish\n"
|
"Language-Team: Polish\n"
|
||||||
@@ -59,8 +59,8 @@ msgstr "Nie dodano żadnej twarzy."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "Najpierw skonfiguruj swoją twarz."
|
msgstr "Najpierw skonfiguruj swoją twarz."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "Nie udało się zapisać ustawienia."
|
msgstr "Nie udało się zapisać ustawienia."
|
||||||
|
|
||||||
@@ -111,16 +111,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "Nie skonfigurowano jeszcze żadnej twarzy."
|
msgstr "Nie skonfigurowano jeszcze żadnej twarzy."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "wł."
|
msgstr "wł."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "wył."
|
msgstr "wył."
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "próbki: %s, wyuczone: %s"
|
msgstr "próbki: %s, wyuczone: %s"
|
||||||
@@ -150,7 +150,7 @@ msgstr "Włącz odblokowywanie twarzą"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "Wyłącz je (twarze zostają zachowane)"
|
msgstr "Wyłącz je (twarze zostają zachowane)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "Dodaj twarz"
|
msgstr "Dodaj twarz"
|
||||||
|
|
||||||
@@ -167,22 +167,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "Spójrz w kamerę i zobacz, co widzi"
|
msgstr "Spójrz w kamerę i zobacz, co widzi"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "Zablokuj ekran"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "Pokaż, co jest włączone"
|
msgstr "Pokaż, co jest włączone"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "Pokaż tę pomoc"
|
msgstr "Pokaż tę pomoc"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "Pokaż wersję"
|
msgstr "Pokaż wersję"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "Bez polecenia wyświetla się interaktywne menu."
|
msgstr "Bez polecenia wyświetla się interaktywne menu."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -190,42 +194,42 @@ msgstr ""
|
|||||||
"Uruchom to jako swój użytkownik, nie jako root. Hasło zostanie zapytane, gdy "
|
"Uruchom to jako swój użytkownik, nie jako root. Hasło zostanie zapytane, gdy "
|
||||||
"będzie potrzebne."
|
"będzie potrzebne."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "Nieznane polecenie: %s"
|
msgstr "Nieznane polecenie: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "nigdy"
|
msgstr "nigdy"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "przed chwilą"
|
msgstr "przed chwilą"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "1 minutę temu"
|
msgstr "1 minutę temu"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "%d min temu"
|
msgstr "%d min temu"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "1 godzinę temu"
|
msgstr "1 godzinę temu"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "%d godz. temu"
|
msgstr "%d godz. temu"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "1 dzień temu"
|
msgstr "1 dzień temu"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "%d dni temu"
|
msgstr "%d dni temu"
|
||||||
@@ -369,11 +373,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[t/N]"
|
msgstr "[t/N]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "WŁ."
|
msgstr "WŁ."
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "WYŁ."
|
msgstr "WYŁ."
|
||||||
|
|
||||||
@@ -414,7 +418,7 @@ msgstr "wolna"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s s"
|
msgstr "%s s"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "automatyczna"
|
msgstr "automatyczna"
|
||||||
|
|
||||||
@@ -434,8 +438,8 @@ msgstr "nie działa"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "Ponowne włączenie odblokowywania twarzą ją uruchomi."
|
msgstr "Ponowne włączenie odblokowywania twarzą ją uruchomi."
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "Twarze"
|
msgstr "Twarze"
|
||||||
|
|
||||||
@@ -492,7 +496,7 @@ msgstr "Ostatnie odblokowanie"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "Agent ekranu blokady nie działa."
|
msgstr "Agent ekranu blokady nie działa."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -500,15 +504,17 @@ msgstr ""
|
|||||||
"W GNOME dymek pokazuje małe rozszerzenie GNOME. Włączenie odblokowywania "
|
"W GNOME dymek pokazuje małe rozszerzenie GNOME. Włączenie odblokowywania "
|
||||||
"twarzą włącza też je."
|
"twarzą włącza też je."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Skanuje, gdy wracasz do hyprlock lub swaylock, i je otwiera. Każdy inny "
|
"Skanuje, gdy wracasz do hyprlock, swaylock lub własnego ekranu blokady face-"
|
||||||
"ekran blokady skanuje po naciśnięciu Enter w pustym polu hasła."
|
"unlock (`face-unlock lock`, z dymkiem), i je otwiera. Inne ekrany blokady "
|
||||||
|
"skanują po Enter."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -516,7 +522,7 @@ msgstr ""
|
|||||||
"Odblokowuje ekran blokady, gdy widzi twoją twarz. Wyłączone: działa tam "
|
"Odblokowuje ekran blokady, gdy widzi twoją twarz. Wyłączone: działa tam "
|
||||||
"tylko hasło."
|
"tylko hasło."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -524,7 +530,7 @@ msgstr ""
|
|||||||
"Skanuje, gdy naciśniesz klawisz lub poruszysz myszą na ekranie blokady, oraz "
|
"Skanuje, gdy naciśniesz klawisz lub poruszysz myszą na ekranie blokady, oraz "
|
||||||
"gdy komputer się wybudzi."
|
"gdy komputer się wybudzi."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -532,7 +538,7 @@ msgstr ""
|
|||||||
"Skanuje od razu po zablokowaniu ekranu. Domyślnie wyłączone: gdy zablokujesz "
|
"Skanuje od razu po zablokowaniu ekranu. Domyślnie wyłączone: gdy zablokujesz "
|
||||||
"sam, od razu by się odblokował."
|
"sam, od razu by się odblokował."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -540,7 +546,21 @@ msgstr ""
|
|||||||
"sudo przyjmuje twarz zamiast hasła. Gdy nie pasuje, wpisujesz hasło jak "
|
"sudo przyjmuje twarz zamiast hasła. Gdy nie pasuje, wpisujesz hasło jak "
|
||||||
"zwykle."
|
"zwykle."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"Obraz za ekranem blokady face-unlock (`face-unlock lock`). Puste: ten z "
|
||||||
|
"pulpitu. Albo plik, folder, z którego losowany jest obraz, albo `none`. "
|
||||||
|
"Enter, aby wpisać."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "Rozmywa obraz za ekranem blokady face-unlock."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -549,7 +569,7 @@ msgstr ""
|
|||||||
"Ekran blokady przyjmuje twarz przy sprawdzaniu hasła. Naciśnij Enter w "
|
"Ekran blokady przyjmuje twarz przy sprawdzaniu hasła. Naciśnij Enter w "
|
||||||
"pustym polu, aby skanować. Znalezione tutaj: %s."
|
"pustym polu, aby skanować. Znalezione tutaj: %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -557,18 +577,18 @@ msgstr ""
|
|||||||
"Okna haseł pulpitu i aplikacji, na przykład przy instalowaniu programów. Gdy "
|
"Okna haseł pulpitu i aplikacji, na przykład przy instalowaniu programów. Gdy "
|
||||||
"twarz nie pasuje, wpisujesz hasło."
|
"twarz nie pasuje, wpisujesz hasło."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Musisz mrugnąć albo lekko obrócić głowę. To zatrzymuje też wydrukowane "
|
"Musisz mrugnąć albo lekko obrócić głowę. To zatrzymuje też wydrukowane "
|
||||||
"zdjęcia."
|
"zdjęcia."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "Bez żadnej kontroli. Tylko do wypróbowania kamery."
|
msgstr "Bez żadnej kontroli. Tylko do wypróbowania kamery."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -576,22 +596,22 @@ msgstr ""
|
|||||||
"Zatrzymuje zdjęcia na telefonie, tablecie lub błyszczącym papierze. Nie "
|
"Zatrzymuje zdjęcia na telefonie, tablecie lub błyszczącym papierze. Nie "
|
||||||
"trzeba mrugać. Matowy wydruk może przejść."
|
"trzeba mrugać. Matowy wydruk może przejść."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Mniej pomyłek, ale może cię nie rozpoznać w okularach albo przy słabym "
|
"Mniej pomyłek, ale może cię nie rozpoznać w okularach albo przy słabym "
|
||||||
"świetle."
|
"świetle."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
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."
|
msgstr "Łatwiej cię rozpoznaje, ale też kogoś bardzo do ciebie podobnego."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "Domyślna. Pasuje większości osób."
|
msgstr "Domyślna. Pasuje większości osób."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -599,7 +619,7 @@ msgstr ""
|
|||||||
"Twoje oczy muszą być otwarte i patrzeć na ekran. Dzięki temu nie odblokuje, "
|
"Twoje oczy muszą być otwarte i patrzeć na ekran. Dzięki temu nie odblokuje, "
|
||||||
"gdy patrzysz w bok lub śpisz."
|
"gdy patrzysz w bok lub śpisz."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -608,11 +628,11 @@ msgstr ""
|
|||||||
"nowa. Kamera na podczerwień potrzebuje włączonego światła (linux-enable-ir-"
|
"nowa. Kamera na podczerwień potrzebuje włączonego światła (linux-enable-ir-"
|
||||||
"emitter)."
|
"emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
msgid "How long the camera looks for your face before it gives up."
|
||||||
msgstr "Jak długo kamera szuka twojej twarzy, zanim się podda."
|
msgstr "Jak długo kamera szuka twojej twarzy, zanim się podda."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -620,7 +640,7 @@ msgstr ""
|
|||||||
"Po pewnym dopasowaniu zapamiętuje, jak teraz wyglądasz. Nowa fryzura czy "
|
"Po pewnym dopasowaniu zapamiętuje, jak teraz wyglądasz. Nowa fryzura czy "
|
||||||
"okulary nie wymagają więc ponownej konfiguracji."
|
"okulary nie wymagają więc ponownej konfiguracji."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -628,81 +648,98 @@ msgstr ""
|
|||||||
"Bez skanowania, gdy laptop jest zamknięty, na przykład przy biurku z "
|
"Bez skanowania, gdy laptop jest zamknięty, na przykład przy biurku z "
|
||||||
"zewnętrznym ekranem."
|
"zewnętrznym ekranem."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
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."
|
msgstr "Dymek u góry ekranu pokazuje, co robi kamera."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "Mała pigułka z kłódką, która się otwiera."
|
msgstr "Mała pigułka z kłódką, która się otwiera."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
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."
|
msgstr "Wyspa z twarzą, która się rozgląda, potem pierścienie i ptaszek."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "Jak szybko porusza się dymek."
|
msgstr "Jak szybko porusza się dymek."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Pokazuje dymek także wtedy, gdy sudo lub okno administratora skanuje twarz."
|
"Pokazuje dymek także wtedy, gdy sudo lub okno administratora skanuje twarz."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "automatyczna (%s)"
|
msgstr "automatyczna (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(podczerwień)"
|
msgstr "(podczerwień)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(niepodłączona)"
|
msgstr "(niepodłączona)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "jak na pulpicie"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "brak"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "Obraz lub folder:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "Nie znaleziono: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Ustawienia"
|
msgstr "Ustawienia"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ wybierz ←→ lub Spacja: zmień q: wstecz"
|
msgstr "↑↓ wybierz ←→ lub Spacja: zmień q: wstecz"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "dla wszystkich użytkowników, pyta o hasło"
|
msgstr "dla wszystkich użytkowników, pyta o hasło"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Góra/Dół: wybierz, Spacja: wł./wył., r: zmień nazwę, d: usuń, a: dodaj, q: "
|
"Góra/Dół: wybierz, Spacja: wł./wył., r: zmień nazwę, d: usuń, a: dodaj, q: "
|
||||||
"wstecz"
|
"wstecz"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "Nie skonfigurowano jeszcze żadnej twarzy. Naciśnij a, aby dodać."
|
msgstr "Nie skonfigurowano jeszcze żadnej twarzy. Naciśnij a, aby dodać."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "Nowa nazwa:"
|
msgstr "Nowa nazwa:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "Usunąć „%s”?"
|
msgstr "Usunąć „%s”?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "Włącz lub wyłącz odblokowywanie twarzą"
|
msgstr "Włącz lub wyłącz odblokowywanie twarzą"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "Wypróbuj"
|
msgstr "Wypróbuj"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Zakończ"
|
msgstr "Zakończ"
|
||||||
|
|
||||||
@@ -759,6 +796,14 @@ msgstr "Skanuj, gdy wracasz"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "Skanuj zaraz po zablokowaniu"
|
msgstr "Skanuj zaraz po zablokowaniu"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "Tapeta"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "Rozmyj tapetę"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "Okna haseł"
|
msgstr "Okna haseł"
|
||||||
@@ -917,23 +962,31 @@ msgstr "Kamera jest zajęta innym skanowaniem. Spróbuj ponownie za chwilę."
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "Nie udało się dodać twarzy (%1)."
|
msgstr "Nie udało się dodać twarzy (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "Złe hasło"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr "Odblokowywanie twarzą dla ekranu blokady, sudo i okien administratora"
|
msgstr "Odblokowywanie twarzą dla ekranu blokady, sudo i okien administratora"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "Skonfiguruj twarz."
|
msgstr "Skonfiguruj twarz."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "Jak nazwać nową twarz."
|
msgstr "Jak nazwać nową twarz."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "Zablokuj ekran."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "Odtwórz raz animacje dymka."
|
msgstr "Odtwórz raz animacje dymka."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "Styl dymka w demo: full lub minimal."
|
msgstr "Styl dymka w demo: full lub minimal."
|
||||||
|
|
||||||
@@ -1014,3 +1067,15 @@ msgstr "Zaczynamy"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Gotowe"
|
msgstr "Gotowe"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Hasło"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "Spójrz w kamerę albo wpisz hasło"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "Wpisz hasło"
|
||||||
+136
-72
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Brazilian Portuguese\n"
|
"Language-Team: Brazilian Portuguese\n"
|
||||||
@@ -58,8 +58,8 @@ msgstr "Nenhum rosto foi adicionado."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "Primeiro, configure o seu rosto."
|
msgstr "Primeiro, configure o seu rosto."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "Não foi possível salvar a configuração."
|
msgstr "Não foi possível salvar a configuração."
|
||||||
|
|
||||||
@@ -111,16 +111,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "Nenhum rosto configurado ainda."
|
msgstr "Nenhum rosto configurado ainda."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "ativado"
|
msgstr "ativado"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "desativado"
|
msgstr "desativado"
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "%s amostras, %s aprendidas"
|
msgstr "%s amostras, %s aprendidas"
|
||||||
@@ -150,7 +150,7 @@ msgstr "Ativar o desbloqueio facial"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "Desativar (os rostos são mantidos)"
|
msgstr "Desativar (os rostos são mantidos)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "Adicionar um rosto"
|
msgstr "Adicionar um rosto"
|
||||||
|
|
||||||
@@ -167,22 +167,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "Olhar para a câmera e ver o que ela vê"
|
msgstr "Olhar para a câmera e ver o que ela vê"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "Bloquear a tela"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "Mostrar o que está ativado"
|
msgstr "Mostrar o que está ativado"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "Mostrar esta ajuda"
|
msgstr "Mostrar esta ajuda"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "Mostrar a versão"
|
msgstr "Mostrar a versão"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "Sem comando, um menu interativo é exibido."
|
msgstr "Sem comando, um menu interativo é exibido."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -190,42 +194,42 @@ msgstr ""
|
|||||||
"Execute isto com o seu próprio usuário, não como root. Ele pede a sua senha "
|
"Execute isto com o seu próprio usuário, não como root. Ele pede a sua senha "
|
||||||
"quando precisa."
|
"quando precisa."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "Comando desconhecido: %s"
|
msgstr "Comando desconhecido: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "nunca"
|
msgstr "nunca"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "agora mesmo"
|
msgstr "agora mesmo"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "há 1 minuto"
|
msgstr "há 1 minuto"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "há %d minutos"
|
msgstr "há %d minutos"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "há 1 hora"
|
msgstr "há 1 hora"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "há %d horas"
|
msgstr "há %d horas"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "há 1 dia"
|
msgstr "há 1 dia"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "há %d dias"
|
msgstr "há %d dias"
|
||||||
@@ -369,11 +373,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[s/N]"
|
msgstr "[s/N]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "ATIVADO"
|
msgstr "ATIVADO"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "DESATIVADO"
|
msgstr "DESATIVADO"
|
||||||
|
|
||||||
@@ -414,7 +418,7 @@ msgstr "lenta"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s segundos"
|
msgstr "%s segundos"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "automática"
|
msgstr "automática"
|
||||||
|
|
||||||
@@ -434,8 +438,8 @@ msgstr "parado"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "Ativar o desbloqueio facial de novo o inicia."
|
msgstr "Ativar o desbloqueio facial de novo o inicia."
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "Rostos"
|
msgstr "Rostos"
|
||||||
|
|
||||||
@@ -492,7 +496,7 @@ msgstr "Último desbloqueio"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "O agente da tela de bloqueio não está em execução."
|
msgstr "O agente da tela de bloqueio não está em execução."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -500,16 +504,17 @@ msgstr ""
|
|||||||
"No GNOME, uma pequena extensão do GNOME mostra a bolha. Ativar o desbloqueio "
|
"No GNOME, uma pequena extensão do GNOME mostra a bolha. Ativar o desbloqueio "
|
||||||
"facial também a ativa."
|
"facial também a ativa."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Escaneia quando você volta ao hyprlock ou swaylock e os abre. Qualquer outra "
|
"Escaneia quando você volta ao hyprlock, swaylock ou à tela de bloqueio do "
|
||||||
"tela de bloqueio escaneia quando você pressiona Enter no campo de senha "
|
"face-unlock (`face-unlock lock`, com a bolha) e os abre. As outras telas de "
|
||||||
"vazio."
|
"bloqueio escaneiam com Enter."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -517,7 +522,7 @@ msgstr ""
|
|||||||
"Desbloqueia a tela de bloqueio quando vê o seu rosto. Desativado: lá só a "
|
"Desbloqueia a tela de bloqueio quando vê o seu rosto. Desativado: lá só a "
|
||||||
"sua senha funciona."
|
"sua senha funciona."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -525,7 +530,7 @@ msgstr ""
|
|||||||
"Faz a leitura quando você aperta uma tecla ou mexe o mouse na tela de "
|
"Faz a leitura quando você aperta uma tecla ou mexe o mouse na tela de "
|
||||||
"bloqueio, e quando o computador acorda."
|
"bloqueio, e quando o computador acorda."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -533,7 +538,7 @@ msgstr ""
|
|||||||
"Faz a leitura assim que a tela é bloqueada. Desativado por padrão: se você "
|
"Faz a leitura assim que a tela é bloqueada. Desativado por padrão: se você "
|
||||||
"mesmo bloquear, ela desbloquearia logo em seguida."
|
"mesmo bloquear, ela desbloquearia logo em seguida."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -541,7 +546,21 @@ msgstr ""
|
|||||||
"O sudo usa o seu rosto em vez da senha. Se não corresponder, você digita a "
|
"O sudo usa o seu rosto em vez da senha. Se não corresponder, você digita a "
|
||||||
"senha como sempre."
|
"senha como sempre."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"A imagem atrás da tela de bloqueio do face-unlock (`face-unlock lock`). "
|
||||||
|
"Vazio: a da sua área de trabalho. Ou um arquivo, uma pasta da qual uma é "
|
||||||
|
"escolhida ao acaso, ou `none`. Enter para digitar."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "Desfoca a imagem atrás da tela de bloqueio do face-unlock."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -550,7 +569,7 @@ msgstr ""
|
|||||||
"A tela de bloqueio aceita seu rosto na verificação de senha. Pressione Enter "
|
"A tela de bloqueio aceita seu rosto na verificação de senha. Pressione Enter "
|
||||||
"no campo vazio para escanear. Encontradas aqui: %s."
|
"no campo vazio para escanear. Encontradas aqui: %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -558,18 +577,18 @@ msgstr ""
|
|||||||
"As janelas de senha da sua área de trabalho e dos apps, por exemplo ao "
|
"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."
|
"instalar programas. Se não corresponder, você digita a senha."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Você precisa piscar ou virar um pouco a cabeça. Isso também barra fotos "
|
"Você precisa piscar ou virar um pouco a cabeça. Isso também barra fotos "
|
||||||
"impressas."
|
"impressas."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "Nenhuma verificação. Só para testar uma câmera."
|
msgstr "Nenhuma verificação. Só para testar uma câmera."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -577,23 +596,23 @@ msgstr ""
|
|||||||
"Barra fotos em celular, tablet ou papel brilhante. Não é preciso piscar. Uma "
|
"Barra fotos em celular, tablet ou papel brilhante. Não é preciso piscar. Uma "
|
||||||
"foto impressa em papel fosco pode passar."
|
"foto impressa em papel fosco pode passar."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Menos confusões, mas talvez não reconheça você de óculos ou com pouca luz."
|
"Menos confusões, mas talvez não reconheça você de óculos ou com pouca luz."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Reconhece você com mais facilidade, mas também alguém muito parecido com "
|
"Reconhece você com mais facilidade, mas também alguém muito parecido com "
|
||||||
"você."
|
"você."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "O padrão. Serve para a maioria das pessoas."
|
msgstr "O padrão. Serve para a maioria das pessoas."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -601,7 +620,7 @@ msgstr ""
|
|||||||
"Seus olhos precisam estar abertos e voltados para a tela. Assim não "
|
"Seus olhos precisam estar abertos e voltados para a tela. Assim não "
|
||||||
"desbloqueia enquanto você olha para outro lado ou dorme."
|
"desbloqueia enquanto você olha para outro lado ou dorme."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -610,11 +629,11 @@ msgstr ""
|
|||||||
"rosto de novo. Uma câmera infravermelha precisa da luz ligada (linux-enable-"
|
"rosto de novo. Uma câmera infravermelha precisa da luz ligada (linux-enable-"
|
||||||
"ir-emitter)."
|
"ir-emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
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."
|
msgstr "Quanto tempo a câmera procura o seu rosto antes de desistir."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -622,7 +641,7 @@ msgstr ""
|
|||||||
"Após uma correspondência segura, ele guarda a sua aparência atual. Assim, um "
|
"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."
|
"corte de cabelo novo ou óculos não exigem nova configuração."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -630,82 +649,99 @@ msgstr ""
|
|||||||
"Nenhuma leitura com o notebook fechado, por exemplo numa mesa com uma tela "
|
"Nenhuma leitura com o notebook fechado, por exemplo numa mesa com uma tela "
|
||||||
"externa."
|
"externa."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
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."
|
msgstr "A bolha no topo da tela mostra o que a câmera está fazendo."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "Uma pequena pílula com um cadeado que se abre."
|
msgstr "Uma pequena pílula com um cadeado que se abre."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
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."
|
msgstr "Uma ilha com um rosto que olha em volta, depois anéis e um visto."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "A velocidade com que a bolha se move."
|
msgstr "A velocidade com que a bolha se move."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Mostra a bolha também quando o sudo ou um pedido de administrador lê o seu "
|
"Mostra a bolha também quando o sudo ou um pedido de administrador lê o seu "
|
||||||
"rosto."
|
"rosto."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "automática (%s)"
|
msgstr "automática (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(infravermelha)"
|
msgstr "(infravermelha)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(não conectada)"
|
msgstr "(não conectada)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "igual à área de trabalho"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "nenhum"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "Imagem ou pasta:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "Não encontrado: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Configurações"
|
msgstr "Configurações"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ escolher ←→ ou Espaço: mudar q: voltar"
|
msgstr "↑↓ escolher ←→ ou Espaço: mudar q: voltar"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "para todos os usuários, pede a sua senha"
|
msgstr "para todos os usuários, pede a sua senha"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Cima/Baixo: escolher, Espaço: ativar/desativar, r: renomear, d: apagar, a: "
|
"Cima/Baixo: escolher, Espaço: ativar/desativar, r: renomear, d: apagar, a: "
|
||||||
"adicionar, q: voltar"
|
"adicionar, q: voltar"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "Nenhum rosto configurado ainda. Aperte a para adicionar um."
|
msgstr "Nenhum rosto configurado ainda. Aperte a para adicionar um."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "Novo nome:"
|
msgstr "Novo nome:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "Apagar \"%s\"?"
|
msgstr "Apagar \"%s\"?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "Ativar ou desativar o desbloqueio facial"
|
msgstr "Ativar ou desativar o desbloqueio facial"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "Testar"
|
msgstr "Testar"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Sair"
|
msgstr "Sair"
|
||||||
|
|
||||||
@@ -765,6 +801,14 @@ msgstr "Ler quando você voltar"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "Ler logo após bloquear"
|
msgstr "Ler logo após bloquear"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "Papel de parede"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "Desfocar o papel de parede"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "Pedidos de senha"
|
msgstr "Pedidos de senha"
|
||||||
@@ -924,25 +968,33 @@ msgstr "A câmera está ocupada com outra leitura. Tente de novo em instantes."
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "Não foi possível adicionar o rosto (%1)."
|
msgstr "Não foi possível adicionar o rosto (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "Senha incorreta"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Desbloqueio facial para a tela de bloqueio, o sudo e os pedidos de "
|
"Desbloqueio facial para a tela de bloqueio, o sudo e os pedidos de "
|
||||||
"administrador"
|
"administrador"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "Configurar um rosto."
|
msgstr "Configurar um rosto."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "Como chamar o novo rosto."
|
msgstr "Como chamar o novo rosto."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "Bloquear a tela."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "Reproduzir as animações da bolha uma vez."
|
msgstr "Reproduzir as animações da bolha uma vez."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "Estilo da bolha para a demonstração: full ou minimal."
|
msgstr "Estilo da bolha para a demonstração: full ou minimal."
|
||||||
|
|
||||||
@@ -1022,3 +1074,15 @@ msgstr "Começar"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Concluído"
|
msgstr "Concluído"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Senha"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "Olhe para a câmera ou digite sua senha"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "Digite sua senha"
|
||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
@@ -59,8 +59,8 @@ msgstr "Лицо не добавлено."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "Сначала настройте своё лицо."
|
msgstr "Сначала настройте своё лицо."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "Не удалось сохранить настройку."
|
msgstr "Не удалось сохранить настройку."
|
||||||
|
|
||||||
@@ -111,16 +111,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "Ещё не настроено ни одного лица."
|
msgstr "Ещё не настроено ни одного лица."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "вкл."
|
msgstr "вкл."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "выкл."
|
msgstr "выкл."
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "образцов: %s, выучено: %s"
|
msgstr "образцов: %s, выучено: %s"
|
||||||
@@ -150,7 +150,7 @@ msgstr "Включить разблокировку по лицу"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "Выключить её (лица сохраняются)"
|
msgstr "Выключить её (лица сохраняются)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "Добавить лицо"
|
msgstr "Добавить лицо"
|
||||||
|
|
||||||
@@ -167,22 +167,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "Посмотреть в камеру и увидеть, что она видит"
|
msgstr "Посмотреть в камеру и увидеть, что она видит"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "Заблокировать экран"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "Показать, что включено"
|
msgstr "Показать, что включено"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "Показать эту справку"
|
msgstr "Показать эту справку"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "Показать версию"
|
msgstr "Показать версию"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "Без команды открывается интерактивное меню."
|
msgstr "Без команды открывается интерактивное меню."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -190,42 +194,42 @@ msgstr ""
|
|||||||
"Запускайте это от своего пользователя, не от root. Пароль будет запрошен, "
|
"Запускайте это от своего пользователя, не от root. Пароль будет запрошен, "
|
||||||
"когда он понадобится."
|
"когда он понадобится."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "Неизвестная команда: %s"
|
msgstr "Неизвестная команда: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "никогда"
|
msgstr "никогда"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "только что"
|
msgstr "только что"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "1 минуту назад"
|
msgstr "1 минуту назад"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "%d мин назад"
|
msgstr "%d мин назад"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "1 час назад"
|
msgstr "1 час назад"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "%d ч назад"
|
msgstr "%d ч назад"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "1 день назад"
|
msgstr "1 день назад"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "%d дн. назад"
|
msgstr "%d дн. назад"
|
||||||
@@ -369,11 +373,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[д/Н]"
|
msgstr "[д/Н]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "ВКЛ"
|
msgstr "ВКЛ"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "ВЫКЛ"
|
msgstr "ВЫКЛ"
|
||||||
|
|
||||||
@@ -414,7 +418,7 @@ msgstr "медленная"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s с"
|
msgstr "%s с"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "автоматически"
|
msgstr "автоматически"
|
||||||
|
|
||||||
@@ -434,8 +438,8 @@ msgstr "не запущена"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "Повторное включение разблокировки по лицу запустит её."
|
msgstr "Повторное включение разблокировки по лицу запустит её."
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "Лица"
|
msgstr "Лица"
|
||||||
|
|
||||||
@@ -492,7 +496,7 @@ msgstr "Последняя разблокировка"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "Агент экрана блокировки не запущен."
|
msgstr "Агент экрана блокировки не запущен."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -500,16 +504,17 @@ msgstr ""
|
|||||||
"В GNOME пузырь показывает небольшое расширение GNOME. Оно включается вместе "
|
"В GNOME пузырь показывает небольшое расширение GNOME. Оно включается вместе "
|
||||||
"с разблокировкой по лицу."
|
"с разблокировкой по лицу."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Сканирует, когда вы возвращаетесь к hyprlock или swaylock, и открывает их. "
|
"Сканирует, когда вы возвращаетесь к hyprlock, swaylock или к экрану "
|
||||||
"Любой другой экран блокировки сканирует, когда вы нажимаете Enter в пустом "
|
"блокировки face-unlock (`face-unlock lock`, с пузырём), и открывает их. "
|
||||||
"поле пароля."
|
"Другие экраны блокировки сканируют по Enter."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -517,7 +522,7 @@ msgstr ""
|
|||||||
"Снимает блокировку экрана, когда видит ваше лицо. Выкл.: там работает только "
|
"Снимает блокировку экрана, когда видит ваше лицо. Выкл.: там работает только "
|
||||||
"пароль."
|
"пароль."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -525,7 +530,7 @@ msgstr ""
|
|||||||
"Сканирует, когда вы нажимаете клавишу или двигаете мышь на экране "
|
"Сканирует, когда вы нажимаете клавишу или двигаете мышь на экране "
|
||||||
"блокировки, и когда компьютер просыпается."
|
"блокировки, и когда компьютер просыпается."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -533,7 +538,7 @@ msgstr ""
|
|||||||
"Сканирует сразу после блокировки экрана. По умолчанию выкл.: если вы "
|
"Сканирует сразу после блокировки экрана. По умолчанию выкл.: если вы "
|
||||||
"блокируете сами, он тут же разблокировался бы."
|
"блокируете сами, он тут же разблокировался бы."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -541,7 +546,21 @@ msgstr ""
|
|||||||
"sudo принимает ваше лицо вместо пароля. Не совпало: вы вводите пароль как "
|
"sudo принимает ваше лицо вместо пароля. Не совпало: вы вводите пароль как "
|
||||||
"обычно."
|
"обычно."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"Картинка за экраном блокировки face-unlock (`face-unlock lock`). Пусто: та, "
|
||||||
|
"что на рабочем столе. Или файл, папка, из которой берётся случайная, или "
|
||||||
|
"`none`. Нажмите Enter, чтобы ввести."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "Размывает картинку за экраном блокировки face-unlock."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -550,7 +569,7 @@ msgstr ""
|
|||||||
"Экран блокировки принимает ваше лицо при проверке пароля. Нажмите Enter в "
|
"Экран блокировки принимает ваше лицо при проверке пароля. Нажмите Enter в "
|
||||||
"пустом поле, чтобы сканировать. Найдено здесь: %s."
|
"пустом поле, чтобы сканировать. Найдено здесь: %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -558,18 +577,18 @@ msgstr ""
|
|||||||
"Окна ввода пароля рабочего стола и приложений, например при установке "
|
"Окна ввода пароля рабочего стола и приложений, например при установке "
|
||||||
"программ. Не совпало: вы вводите пароль."
|
"программ. Не совпало: вы вводите пароль."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Нужно моргнуть или слегка повернуть голову. Это также останавливает "
|
"Нужно моргнуть или слегка повернуть голову. Это также останавливает "
|
||||||
"распечатанные фото."
|
"распечатанные фото."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "Никакой проверки. Только чтобы опробовать камеру."
|
msgstr "Никакой проверки. Только чтобы опробовать камеру."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -577,22 +596,22 @@ msgstr ""
|
|||||||
"Останавливает фото на телефоне, планшете или глянцевой бумаге. Моргать не "
|
"Останавливает фото на телефоне, планшете или глянцевой бумаге. Моргать не "
|
||||||
"нужно. Матовое распечатанное фото может пройти."
|
"нужно. Матовое распечатанное фото может пройти."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Меньше ошибочных совпадений, но может не узнать вас в очках или при плохом "
|
"Меньше ошибочных совпадений, но может не узнать вас в очках или при плохом "
|
||||||
"свете."
|
"свете."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
||||||
msgstr "Узнаёт вас легче, но и того, кто очень на вас похож."
|
msgstr "Узнаёт вас легче, но и того, кто очень на вас похож."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "По умолчанию. Подходит большинству."
|
msgstr "По умолчанию. Подходит большинству."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -600,7 +619,7 @@ msgstr ""
|
|||||||
"Ваши глаза должны быть открыты и смотреть на экран. Так он не "
|
"Ваши глаза должны быть открыты и смотреть на экран. Так он не "
|
||||||
"разблокируется, пока вы смотрите в сторону или спите."
|
"разблокируется, пока вы смотрите в сторону или спите."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -609,11 +628,11 @@ msgstr ""
|
|||||||
"заново. Инфракрасной камере нужна включённая подсветка (linux-enable-ir-"
|
"заново. Инфракрасной камере нужна включённая подсветка (linux-enable-ir-"
|
||||||
"emitter)."
|
"emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
msgid "How long the camera looks for your face before it gives up."
|
||||||
msgstr "Как долго камера ищет ваше лицо, прежде чем сдаться."
|
msgstr "Как долго камера ищет ваше лицо, прежде чем сдаться."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -621,7 +640,7 @@ msgstr ""
|
|||||||
"После уверенного совпадения запоминает, как вы выглядите сейчас. Новая "
|
"После уверенного совпадения запоминает, как вы выглядите сейчас. Новая "
|
||||||
"стрижка или очки не требуют новой настройки."
|
"стрижка или очки не требуют новой настройки."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -629,82 +648,99 @@ msgstr ""
|
|||||||
"Без сканирования, когда ноутбук закрыт, например за столом с внешним "
|
"Без сканирования, когда ноутбук закрыт, например за столом с внешним "
|
||||||
"монитором."
|
"монитором."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
msgid "The bubble at the top of the screen shows what the camera is doing."
|
||||||
msgstr "Пузырь вверху экрана показывает, что делает камера."
|
msgstr "Пузырь вверху экрана показывает, что делает камера."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "Маленькая таблетка с замком, который открывается."
|
msgstr "Маленькая таблетка с замком, который открывается."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
msgid "An island with a face that looks around, then rings and a tick."
|
||||||
msgstr "Остров с лицом, которое оглядывается, затем кольца и галочка."
|
msgstr "Остров с лицом, которое оглядывается, затем кольца и галочка."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "Как быстро движется пузырь."
|
msgstr "Как быстро движется пузырь."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Показывает пузырь и тогда, когда sudo или запрос администратора сканирует "
|
"Показывает пузырь и тогда, когда sudo или запрос администратора сканирует "
|
||||||
"ваше лицо."
|
"ваше лицо."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "автоматически (%s)"
|
msgstr "автоматически (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(инфракрасная)"
|
msgstr "(инфракрасная)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(не подключена)"
|
msgstr "(не подключена)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "как на рабочем столе"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "нет"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "Картинка или папка:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "Не найдено: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Настройки"
|
msgstr "Настройки"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ выбор ←→ или Пробел: изменить q: назад"
|
msgstr "↑↓ выбор ←→ или Пробел: изменить q: назад"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "для всех пользователей, запрашивает пароль"
|
msgstr "для всех пользователей, запрашивает пароль"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Вверх/Вниз: выбор, Пробел: вкл./выкл., r: переименовать, d: удалить, a: "
|
"Вверх/Вниз: выбор, Пробел: вкл./выкл., r: переименовать, d: удалить, a: "
|
||||||
"добавить, q: назад"
|
"добавить, q: назад"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "Ещё не настроено ни одного лица. Нажмите a, чтобы добавить."
|
msgstr "Ещё не настроено ни одного лица. Нажмите a, чтобы добавить."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "Новое имя:"
|
msgstr "Новое имя:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "Удалить «%s»?"
|
msgstr "Удалить «%s»?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "Включить или выключить разблокировку по лицу"
|
msgstr "Включить или выключить разблокировку по лицу"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "Попробовать"
|
msgstr "Попробовать"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Выход"
|
msgstr "Выход"
|
||||||
|
|
||||||
@@ -762,6 +798,14 @@ msgstr "Сканировать при возвращении"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "Сканировать сразу после блокировки"
|
msgstr "Сканировать сразу после блокировки"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "Обои"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "Размыть обои"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "Запросы пароля"
|
msgstr "Запросы пароля"
|
||||||
@@ -921,24 +965,32 @@ msgstr "Камера занята другим сканированием. По
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "Не удалось добавить лицо (%1)."
|
msgstr "Не удалось добавить лицо (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "Неверный пароль"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Разблокировка по лицу для экрана блокировки, sudo и запросов администратора"
|
"Разблокировка по лицу для экрана блокировки, sudo и запросов администратора"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "Настроить лицо."
|
msgstr "Настроить лицо."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "Как назвать новое лицо."
|
msgstr "Как назвать новое лицо."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "Заблокировать экран."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "Один раз проиграть анимации пузыря."
|
msgstr "Один раз проиграть анимации пузыря."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "Стиль пузыря для демо: full или minimal."
|
msgstr "Стиль пузыря для демо: full или minimal."
|
||||||
|
|
||||||
@@ -1020,3 +1072,15 @@ msgstr "Начать"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Готово"
|
msgstr "Готово"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Пароль"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "Посмотрите в камеру или введите пароль"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "Введите пароль"
|
||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Turkish\n"
|
"Language-Team: Turkish\n"
|
||||||
@@ -57,8 +57,8 @@ msgstr "Hiç yüz eklenmedi."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "Önce yüzünüzü kurun."
|
msgstr "Önce yüzünüzü kurun."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "Ayar kaydedilemedi."
|
msgstr "Ayar kaydedilemedi."
|
||||||
|
|
||||||
@@ -107,16 +107,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "Henüz hiç yüz kurulmadı."
|
msgstr "Henüz hiç yüz kurulmadı."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "açık"
|
msgstr "açık"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "kapalı"
|
msgstr "kapalı"
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "%s örnek, %s öğrenilen"
|
msgstr "%s örnek, %s öğrenilen"
|
||||||
@@ -146,7 +146,7 @@ msgstr "Yüzle kilit açmayı aç"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "Kapat (yüzler saklanır)"
|
msgstr "Kapat (yüzler saklanır)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "Yüz ekle"
|
msgstr "Yüz ekle"
|
||||||
|
|
||||||
@@ -163,22 +163,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "Kameraya bak ve onun ne gördüğünü gör"
|
msgstr "Kameraya bak ve onun ne gördüğünü gör"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "Ekranı kilitle"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "Neyin açık olduğunu göster"
|
msgstr "Neyin açık olduğunu göster"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "Bu yardımı göster"
|
msgstr "Bu yardımı göster"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "Sürümü göster"
|
msgstr "Sürümü göster"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "Komut verilmezse etkileşimli bir menü gösterilir."
|
msgstr "Komut verilmezse etkileşimli bir menü gösterilir."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -186,42 +190,42 @@ msgstr ""
|
|||||||
"Bunu root olarak değil, kendi kullanıcınızla çalıştırın. Gerektiğinde "
|
"Bunu root olarak değil, kendi kullanıcınızla çalıştırın. Gerektiğinde "
|
||||||
"parolanızı sorar."
|
"parolanızı sorar."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "Bilinmeyen komut: %s"
|
msgstr "Bilinmeyen komut: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "hiçbir zaman"
|
msgstr "hiçbir zaman"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "az önce"
|
msgstr "az önce"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "1 dakika önce"
|
msgstr "1 dakika önce"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "%d dakika önce"
|
msgstr "%d dakika önce"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "1 saat önce"
|
msgstr "1 saat önce"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "%d saat önce"
|
msgstr "%d saat önce"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "1 gün önce"
|
msgstr "1 gün önce"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "%d gün önce"
|
msgstr "%d gün önce"
|
||||||
@@ -365,11 +369,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[e/H]"
|
msgstr "[e/H]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "AÇIK"
|
msgstr "AÇIK"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "KAPALI"
|
msgstr "KAPALI"
|
||||||
|
|
||||||
@@ -410,7 +414,7 @@ msgstr "yavaş"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s saniye"
|
msgstr "%s saniye"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "otomatik"
|
msgstr "otomatik"
|
||||||
|
|
||||||
@@ -430,8 +434,8 @@ msgstr "çalışmıyor"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "Yüzle kilit açmayı yeniden açmak onu başlatır."
|
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:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "Yüzler"
|
msgstr "Yüzler"
|
||||||
|
|
||||||
@@ -488,7 +492,7 @@ msgstr "Son kilit açma"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "Kilit ekranı aracısı çalışmıyor."
|
msgstr "Kilit ekranı aracısı çalışmıyor."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -496,15 +500,17 @@ msgstr ""
|
|||||||
"GNOME'da baloncuğu küçük bir GNOME uzantısı gösterir. Yüzle kilit açmayı "
|
"GNOME'da baloncuğu küçük bir GNOME uzantısı gösterir. Yüzle kilit açmayı "
|
||||||
"açınca o da açılır."
|
"açınca o da açılır."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"hyprlock'a ya da swaylock'a döndüğünüzde tarar ve onları açar. Diğer kilit "
|
"hyprlock'a, swaylock'a ya da face-unlock'un kendi kilit ekranına (`face-"
|
||||||
"ekranları boş parola alanında Enter'a bastığınızda tarar."
|
"unlock lock`, baloncukla) döndüğünüzde tarar ve onları açar. Diğer kilit "
|
||||||
|
"ekranları Enter ile tarar."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -512,7 +518,7 @@ msgstr ""
|
|||||||
"Yüzünüzü görünce kilit ekranını açar. Kapalı: orada yalnızca parolanız "
|
"Yüzünüzü görünce kilit ekranını açar. Kapalı: orada yalnızca parolanız "
|
||||||
"çalışır."
|
"çalışır."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -520,7 +526,7 @@ msgstr ""
|
|||||||
"Kilit ekranında bir tuşa bastığınızda ya da fareyi oynattığınızda ve "
|
"Kilit ekranında bir tuşa bastığınızda ya da fareyi oynattığınızda ve "
|
||||||
"bilgisayar uyandığında tarar."
|
"bilgisayar uyandığında tarar."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -528,7 +534,7 @@ msgstr ""
|
|||||||
"Ekran kilitlenir kilitlenmez tarar. Varsayılan olarak kapalı: kendiniz "
|
"Ekran kilitlenir kilitlenmez tarar. Varsayılan olarak kapalı: kendiniz "
|
||||||
"kilitlerseniz hemen yeniden açılırdı."
|
"kilitlerseniz hemen yeniden açılırdı."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -536,7 +542,21 @@ msgstr ""
|
|||||||
"sudo parola yerine yüzünüzü kullanır. Eşleşmezse parolayı her zamanki gibi "
|
"sudo parola yerine yüzünüzü kullanır. Eşleşmezse parolayı her zamanki gibi "
|
||||||
"yazarsınız."
|
"yazarsınız."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"face-unlock kilit ekranının (`face-unlock lock`) arkasındaki resim. Boş: "
|
||||||
|
"masaüstünüzdeki resim. Ya da bir dosya, rastgele seçilecek bir klasör veya "
|
||||||
|
"`none`. Yazmak için Enter."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "face-unlock kilit ekranının arkasındaki resmi bulanıklaştırır."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -545,7 +565,7 @@ msgstr ""
|
|||||||
"Kilit ekranı parola denetiminde yüzünüzü kabul eder. Taramak için boş alanda "
|
"Kilit ekranı parola denetiminde yüzünüzü kabul eder. Taramak için boş alanda "
|
||||||
"Enter'a basın. Burada bulunanlar: %s."
|
"Enter'a basın. Burada bulunanlar: %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -553,18 +573,18 @@ msgstr ""
|
|||||||
"Masaüstünüzün ve uygulamaların parola pencereleri, örneğin yazılım kurarken. "
|
"Masaüstünüzün ve uygulamaların parola pencereleri, örneğin yazılım kurarken. "
|
||||||
"Eşleşmezse parolayı yazarsınız."
|
"Eşleşmezse parolayı yazarsınız."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Göz kırpmanız ya da başınızı biraz çevirmeniz gerekir. Bu, basılı "
|
"Göz kırpmanız ya da başınızı biraz çevirmeniz gerekir. Bu, basılı "
|
||||||
"fotoğrafları da durdurur."
|
"fotoğrafları da durdurur."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "Hiç denetim yok. Yalnızca bir kamerayı denemek için."
|
msgstr "Hiç denetim yok. Yalnızca bir kamerayı denemek için."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -572,21 +592,21 @@ msgstr ""
|
|||||||
"Telefon, tablet ya da parlak kâğıttaki fotoğrafları durdurur. Göz kırpmanız "
|
"Telefon, tablet ya da parlak kâğıttaki fotoğrafları durdurur. Göz kırpmanız "
|
||||||
"gerekmez. Mat basılı bir fotoğraf geçebilir."
|
"gerekmez. Mat basılı bir fotoğraf geçebilir."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Daha az yanlış eşleşme, ama gözlükle ya da kötü ışıkta sizi tanımayabilir."
|
"Daha az yanlış eşleşme, ama gözlükle ya da kötü ışıkta sizi tanımayabilir."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
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."
|
msgstr "Sizi daha kolay tanır, ama size çok benzeyen birini de."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "Varsayılan. Çoğu kişi için uygun."
|
msgstr "Varsayılan. Çoğu kişi için uygun."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -594,7 +614,7 @@ msgstr ""
|
|||||||
"Gözleriniz açık ve ekrana dönük olmalı. Böylece başka yere bakarken ya da "
|
"Gözleriniz açık ve ekrana dönük olmalı. Böylece başka yere bakarken ya da "
|
||||||
"uyurken kilit açılmaz."
|
"uyurken kilit açılmaz."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -603,11 +623,11 @@ msgstr ""
|
|||||||
"kurun. Kızılötesi kameranın ışığının açık olması gerekir (linux-enable-ir-"
|
"kurun. Kızılötesi kameranın ışığının açık olması gerekir (linux-enable-ir-"
|
||||||
"emitter)."
|
"emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
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ığı."
|
msgstr "Kameranın vazgeçmeden önce yüzünüzü ne kadar aradığı."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -615,88 +635,105 @@ msgstr ""
|
|||||||
"Kesin bir eşleşmeden sonra şu anki görünüşünüzü hatırlar. Böylece yeni saç "
|
"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."
|
"kesimi ya da gözlük yeniden kurulum gerektirmez."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
msgstr "Dizüstü kapalıyken tarama yok, örneğin harici ekranlı bir masada."
|
msgstr "Dizüstü kapalıyken tarama yok, örneğin harici ekranlı bir masada."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
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."
|
msgstr "Ekranın üstündeki baloncuk kameranın ne yaptığını gösterir."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "Açılan bir kilidi olan küçük bir hap."
|
msgstr "Açılan bir kilidi olan küçük bir hap."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
msgid "An island with a face that looks around, then rings and a tick."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Etrafına bakan bir yüzü olan bir ada, ardından halkalar ve bir onay işareti."
|
"Etrafına bakan bir yüzü olan bir ada, ardından halkalar ve bir onay işareti."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "Baloncuğun ne kadar hızlı hareket ettiği."
|
msgstr "Baloncuğun ne kadar hızlı hareket ettiği."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"sudo ya da bir yönetici istemi yüzünüzü taradığında da baloncuğu gösterir."
|
"sudo ya da bir yönetici istemi yüzünüzü taradığında da baloncuğu gösterir."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "otomatik (%s)"
|
msgstr "otomatik (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(kızılötesi)"
|
msgstr "(kızılötesi)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(bağlı değil)"
|
msgstr "(bağlı değil)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "masaüstüyle aynı"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "yok"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "Resim ya da klasör:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "Bulunamadı: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Ayarlar"
|
msgstr "Ayarlar"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ seç ←→ ya da Boşluk: değiştir q: geri"
|
msgstr "↑↓ seç ←→ ya da Boşluk: değiştir q: geri"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "tüm kullanıcılar için, parolanızı sorar"
|
msgstr "tüm kullanıcılar için, parolanızı sorar"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Yukarı/Aşağı: seç, Boşluk: aç/kapat, r: yeniden adlandır, d: sil, a: ekle, "
|
"Yukarı/Aşağı: seç, Boşluk: aç/kapat, r: yeniden adlandır, d: sil, a: ekle, "
|
||||||
"q: geri"
|
"q: geri"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "Henüz hiç yüz kurulmadı. Eklemek için a tuşuna basın."
|
msgstr "Henüz hiç yüz kurulmadı. Eklemek için a tuşuna basın."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "Yeni ad:"
|
msgstr "Yeni ad:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "\"%s\" silinsin mi?"
|
msgstr "\"%s\" silinsin mi?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "Yüzle kilit açmayı aç ya da kapat"
|
msgstr "Yüzle kilit açmayı aç ya da kapat"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "Dene"
|
msgstr "Dene"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Çık"
|
msgstr "Çık"
|
||||||
|
|
||||||
@@ -756,6 +793,14 @@ msgstr "Geri döndüğünüzde tara"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "Kilitledikten hemen sonra tara"
|
msgstr "Kilitledikten hemen sonra tara"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "Duvar kâğıdı"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "Duvar kâğıdını bulanıklaştır"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "Parola istemleri"
|
msgstr "Parola istemleri"
|
||||||
@@ -912,23 +957,31 @@ msgstr "Kamera başka bir taramayla meşgul. Birazdan yeniden deneyin."
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "Yüz eklenemedi (%1)."
|
msgstr "Yüz eklenemedi (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "Yanlış parola"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
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"
|
msgstr "Kilit ekranı, sudo ve yönetici istemleri için yüzle kilit açma"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "Bir yüz kur."
|
msgstr "Bir yüz kur."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "Yeni yüzün adı."
|
msgstr "Yeni yüzün adı."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "Ekranı kilitle."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "Baloncuğun animasyonlarını bir kez oynat."
|
msgstr "Baloncuğun animasyonlarını bir kez oynat."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "Demo için baloncuk stili: full ya da minimal."
|
msgstr "Demo için baloncuk stili: full ya da minimal."
|
||||||
|
|
||||||
@@ -1009,3 +1062,15 @@ msgstr "Başlayalım"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Bitti"
|
msgstr "Bitti"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Parola"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "Kameraya bakın ya da parolanızı yazın"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "Parolanızı yazın"
|
||||||
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Ukrainian\n"
|
"Language-Team: Ukrainian\n"
|
||||||
@@ -59,8 +59,8 @@ msgstr "Обличчя не додано."
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "Спершу налаштуйте своє обличчя."
|
msgstr "Спершу налаштуйте своє обличчя."
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "Не вдалося зберегти налаштування."
|
msgstr "Не вдалося зберегти налаштування."
|
||||||
|
|
||||||
@@ -112,16 +112,16 @@ msgstr ""
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "Ще не налаштовано жодного обличчя."
|
msgstr "Ще не налаштовано жодного обличчя."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "увімк."
|
msgstr "увімк."
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "вимк."
|
msgstr "вимк."
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "зразків: %s, вивчено: %s"
|
msgstr "зразків: %s, вивчено: %s"
|
||||||
@@ -151,7 +151,7 @@ msgstr "Увімкнути розблокування обличчям"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "Вимкнути його (обличчя зберігаються)"
|
msgstr "Вимкнути його (обличчя зберігаються)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "Додати обличчя"
|
msgstr "Додати обличчя"
|
||||||
|
|
||||||
@@ -168,22 +168,26 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "Подивитися в камеру і побачити, що вона бачить"
|
msgstr "Подивитися в камеру і побачити, що вона бачить"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "Заблокувати екран"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "Показати, що увімкнено"
|
msgstr "Показати, що увімкнено"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "Показати цю довідку"
|
msgstr "Показати цю довідку"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "Показати версію"
|
msgstr "Показати версію"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "Без команди відкривається інтерактивне меню."
|
msgstr "Без команди відкривається інтерактивне меню."
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
@@ -191,42 +195,42 @@ msgstr ""
|
|||||||
"Запускайте це від свого користувача, не від root. Пароль буде запитано, коли "
|
"Запускайте це від свого користувача, не від root. Пароль буде запитано, коли "
|
||||||
"він знадобиться."
|
"він знадобиться."
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "Невідома команда: %s"
|
msgstr "Невідома команда: %s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "ніколи"
|
msgstr "ніколи"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "щойно"
|
msgstr "щойно"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "1 хвилину тому"
|
msgstr "1 хвилину тому"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "%d хв тому"
|
msgstr "%d хв тому"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "1 годину тому"
|
msgstr "1 годину тому"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "%d год тому"
|
msgstr "%d год тому"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "1 день тому"
|
msgstr "1 день тому"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "%d дн. тому"
|
msgstr "%d дн. тому"
|
||||||
@@ -370,11 +374,11 @@ msgstr ""
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[т/Н]"
|
msgstr "[т/Н]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "УВІМК"
|
msgstr "УВІМК"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "ВИМК"
|
msgstr "ВИМК"
|
||||||
|
|
||||||
@@ -415,7 +419,7 @@ msgstr "повільна"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s с"
|
msgstr "%s с"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "автоматично"
|
msgstr "автоматично"
|
||||||
|
|
||||||
@@ -435,8 +439,8 @@ msgstr "не запущена"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "Повторне ввімкнення розблокування обличчям запустить її."
|
msgstr "Повторне ввімкнення розблокування обличчям запустить її."
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "Обличчя"
|
msgstr "Обличчя"
|
||||||
|
|
||||||
@@ -493,7 +497,7 @@ msgstr "Останнє розблокування"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "Агент екрана блокування не запущено."
|
msgstr "Агент екрана блокування не запущено."
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
@@ -501,16 +505,17 @@ msgstr ""
|
|||||||
"У GNOME бульбашку показує невелике розширення GNOME. Воно вмикається разом "
|
"У GNOME бульбашку показує невелике розширення GNOME. Воно вмикається разом "
|
||||||
"із розблокуванням обличчям."
|
"із розблокуванням обличчям."
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Сканує, коли ви повертаєтеся до hyprlock чи swaylock, і відкриває їх. Будь-"
|
"Сканує, коли ви повертаєтеся до hyprlock, swaylock або до власного екрана "
|
||||||
"який інший екран блокування сканує, коли ви натискаєте Enter у порожньому "
|
"блокування face-unlock (`face-unlock lock`, з бульбашкою), і відкриває їх. "
|
||||||
"полі пароля."
|
"Інші екрани блокування сканують за Enter."
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
@@ -518,7 +523,7 @@ msgstr ""
|
|||||||
"Розблоковує екран блокування, коли бачить ваше обличчя. Вимк.: там працює "
|
"Розблоковує екран блокування, коли бачить ваше обличчя. Вимк.: там працює "
|
||||||
"лише пароль."
|
"лише пароль."
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
@@ -526,7 +531,7 @@ msgstr ""
|
|||||||
"Сканує, коли ви натискаєте клавішу або рухаєте мишею на екрані блокування, і "
|
"Сканує, коли ви натискаєте клавішу або рухаєте мишею на екрані блокування, і "
|
||||||
"коли комп'ютер прокидається."
|
"коли комп'ютер прокидається."
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
@@ -534,7 +539,7 @@ msgstr ""
|
|||||||
"Сканує одразу після блокування екрана. Типово вимк.: якщо ви блокуєте самі, "
|
"Сканує одразу після блокування екрана. Типово вимк.: якщо ви блокуєте самі, "
|
||||||
"він одразу б розблокувався."
|
"він одразу б розблокувався."
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
@@ -542,7 +547,21 @@ msgstr ""
|
|||||||
"sudo приймає ваше обличчя замість пароля. Не збіглося: ви вводите пароль як "
|
"sudo приймає ваше обличчя замість пароля. Не збіглося: ви вводите пароль як "
|
||||||
"зазвичай."
|
"зазвичай."
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"Зображення за екраном блокування face-unlock (`face-unlock lock`). Порожньо: "
|
||||||
|
"те, що на робочому столі. Або файл, тека, з якої береться випадкове, або "
|
||||||
|
"`none`. Натисніть Enter, щоб ввести."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "Розмиває зображення за екраном блокування face-unlock."
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -551,7 +570,7 @@ msgstr ""
|
|||||||
"Екран блокування приймає ваше обличчя під час перевірки пароля. Натисніть "
|
"Екран блокування приймає ваше обличчя під час перевірки пароля. Натисніть "
|
||||||
"Enter у порожньому полі, щоб сканувати. Знайдено тут: %s."
|
"Enter у порожньому полі, щоб сканувати. Знайдено тут: %s."
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
@@ -559,17 +578,17 @@ msgstr ""
|
|||||||
"Вікна введення пароля робочого столу і програм, наприклад під час "
|
"Вікна введення пароля робочого столу і програм, наприклад під час "
|
||||||
"встановлення програм. Не збіглося: ви вводите пароль."
|
"встановлення програм. Не збіглося: ви вводите пароль."
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Треба кліпнути або трохи повернути голову. Це також зупиняє надруковані фото."
|
"Треба кліпнути або трохи повернути голову. Це також зупиняє надруковані фото."
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "Жодної перевірки. Лише щоб випробувати камеру."
|
msgstr "Жодної перевірки. Лише щоб випробувати камеру."
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
@@ -577,22 +596,22 @@ msgstr ""
|
|||||||
"Зупиняє фото на телефоні, планшеті чи глянцевому папері. Кліпати не треба. "
|
"Зупиняє фото на телефоні, планшеті чи глянцевому папері. Кліпати не треба. "
|
||||||
"Матове надруковане фото може пройти."
|
"Матове надруковане фото може пройти."
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Менше хибних збігів, але може не впізнати вас в окулярах або при поганому "
|
"Менше хибних збігів, але може не впізнати вас в окулярах або при поганому "
|
||||||
"світлі."
|
"світлі."
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
||||||
msgstr "Впізнає вас легше, але й того, хто дуже на вас схожий."
|
msgstr "Впізнає вас легше, але й того, хто дуже на вас схожий."
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "Типове значення. Підходить більшості."
|
msgstr "Типове значення. Підходить більшості."
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
@@ -600,7 +619,7 @@ msgstr ""
|
|||||||
"Ваші очі мають бути розплющені й дивитися на екран. Так він не "
|
"Ваші очі мають бути розплющені й дивитися на екран. Так він не "
|
||||||
"розблокується, коли ви дивитеся вбік або спите."
|
"розблокується, коли ви дивитеся вбік або спите."
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -609,11 +628,11 @@ msgstr ""
|
|||||||
"знову. Інфрачервоній камері потрібне ввімкнене підсвічування (linux-enable-"
|
"знову. Інфрачервоній камері потрібне ввімкнене підсвічування (linux-enable-"
|
||||||
"ir-emitter)."
|
"ir-emitter)."
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
msgid "How long the camera looks for your face before it gives up."
|
||||||
msgstr "Як довго камера шукає ваше обличчя, перш ніж здатися."
|
msgstr "Як довго камера шукає ваше обличчя, перш ніж здатися."
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
@@ -621,7 +640,7 @@ msgstr ""
|
|||||||
"Після впевненого збігу запам'ятовує, як ви виглядаєте зараз. Нова зачіска чи "
|
"Після впевненого збігу запам'ятовує, як ви виглядаєте зараз. Нова зачіска чи "
|
||||||
"окуляри не потребують нового налаштування."
|
"окуляри не потребують нового налаштування."
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
@@ -629,82 +648,99 @@ msgstr ""
|
|||||||
"Без сканування, коли ноутбук закрито, наприклад за столом із зовнішнім "
|
"Без сканування, коли ноутбук закрито, наприклад за столом із зовнішнім "
|
||||||
"монітором."
|
"монітором."
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
msgid "The bubble at the top of the screen shows what the camera is doing."
|
||||||
msgstr "Бульбашка вгорі екрана показує, що робить камера."
|
msgstr "Бульбашка вгорі екрана показує, що робить камера."
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "Маленька пігулка із замком, що відкривається."
|
msgstr "Маленька пігулка із замком, що відкривається."
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
msgid "An island with a face that looks around, then rings and a tick."
|
||||||
msgstr "Острів з обличчям, яке озирається, потім кільця і галочка."
|
msgstr "Острів з обличчям, яке озирається, потім кільця і галочка."
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "Як швидко рухається бульбашка."
|
msgstr "Як швидко рухається бульбашка."
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Показує бульбашку й тоді, коли sudo або запит адміністратора сканує ваше "
|
"Показує бульбашку й тоді, коли sudo або запит адміністратора сканує ваше "
|
||||||
"обличчя."
|
"обличчя."
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "автоматично (%s)"
|
msgstr "автоматично (%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(інфрачервона)"
|
msgstr "(інфрачервона)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(не під'єднана)"
|
msgstr "(не під'єднана)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "як на робочому столі"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "немає"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "Зображення або тека:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "Не знайдено: %s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Налаштування"
|
msgstr "Налаштування"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ вибір ←→ або Пробіл: змінити q: назад"
|
msgstr "↑↓ вибір ←→ або Пробіл: змінити q: назад"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "для всіх користувачів, запитує пароль"
|
msgstr "для всіх користувачів, запитує пароль"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Вгору/Вниз: вибір, Пробіл: увімк./вимк., r: перейменувати, d: видалити, a: "
|
"Вгору/Вниз: вибір, Пробіл: увімк./вимк., r: перейменувати, d: видалити, a: "
|
||||||
"додати, q: назад"
|
"додати, q: назад"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "Ще не налаштовано жодного обличчя. Натисніть a, щоб додати."
|
msgstr "Ще не налаштовано жодного обличчя. Натисніть a, щоб додати."
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "Нова назва:"
|
msgstr "Нова назва:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "Видалити «%s»?"
|
msgstr "Видалити «%s»?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "Увімкнути або вимкнути розблокування обличчям"
|
msgstr "Увімкнути або вимкнути розблокування обличчям"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "Спробувати"
|
msgstr "Спробувати"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Вийти"
|
msgstr "Вийти"
|
||||||
|
|
||||||
@@ -762,6 +798,14 @@ msgstr "Сканувати, коли ви повертаєтеся"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "Сканувати одразу після блокування"
|
msgstr "Сканувати одразу після блокування"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "Шпалери"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "Розмити шпалери"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "Запити пароля"
|
msgstr "Запити пароля"
|
||||||
@@ -920,24 +964,32 @@ msgstr "Камера зайнята іншим скануванням. Спро
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "Не вдалося додати обличчя (%1)."
|
msgstr "Не вдалося додати обличчя (%1)."
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "Неправильний пароль"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Розблокування обличчям для екрана блокування, sudo і запитів адміністратора"
|
"Розблокування обличчям для екрана блокування, sudo і запитів адміністратора"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "Налаштувати обличчя."
|
msgstr "Налаштувати обличчя."
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "Як назвати нове обличчя."
|
msgstr "Як назвати нове обличчя."
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "Заблокувати екран."
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "Один раз програти анімації бульбашки."
|
msgstr "Один раз програти анімації бульбашки."
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "Стиль бульбашки для демо: full або minimal."
|
msgstr "Стиль бульбашки для демо: full або minimal."
|
||||||
|
|
||||||
@@ -1019,3 +1071,15 @@ msgstr "Почати"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Готово"
|
msgstr "Готово"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Пароль"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "Подивіться в камеру або введіть пароль"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "Введіть пароль"
|
||||||
+134
-71
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: face-unlock 1.0.1\n"
|
"Project-Id-Version: face-unlock 1.0.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
"Report-Msgid-Bugs-To: https://github.com/LoonixTools/face-unlock/issues\n"
|
||||||
"POT-Creation-Date: 2026-09-26 19:34+0200\n"
|
"POT-Creation-Date: 2026-09-26 19:35+0200\n"
|
||||||
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
"PO-Revision-Date: 2026-09-24 12:00+0200\n"
|
||||||
"Last-Translator: Felitendo\n"
|
"Last-Translator: Felitendo\n"
|
||||||
"Language-Team: Chinese (simplified)\n"
|
"Language-Team: Chinese (simplified)\n"
|
||||||
@@ -53,8 +53,8 @@ msgstr "没有添加人脸。"
|
|||||||
msgid "First, set up your face."
|
msgid "First, set up your face."
|
||||||
msgstr "请先设置你的人脸。"
|
msgstr "请先设置你的人脸。"
|
||||||
|
|
||||||
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:466
|
#: src/face-unlock:100 src/face-unlock:139 src/lib/menu.sh:500
|
||||||
#: src/lib/menu.sh:470 src/lib/menu.sh:476 src/lib/menu.sh:478
|
#: src/lib/menu.sh:504 src/lib/menu.sh:510 src/lib/menu.sh:512
|
||||||
msgid "Could not save the setting."
|
msgid "Could not save the setting."
|
||||||
msgstr "无法保存设置。"
|
msgstr "无法保存设置。"
|
||||||
|
|
||||||
@@ -98,16 +98,16 @@ msgstr "人脸解锁已关闭。你的人脸会保留;可在“人脸”中删
|
|||||||
msgid "No face is set up yet."
|
msgid "No face is set up yet."
|
||||||
msgstr "尚未设置任何人脸。"
|
msgstr "尚未设置任何人脸。"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:628
|
#: src/face-unlock:168 src/lib/menu.sh:180 src/lib/menu.sh:664
|
||||||
msgid "on"
|
msgid "on"
|
||||||
msgstr "开"
|
msgstr "开"
|
||||||
|
|
||||||
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
#: src/face-unlock:168 src/lib/menu.sh:182 src/lib/menu.sh:192
|
||||||
#: src/lib/menu.sh:629
|
#: src/lib/menu.sh:665
|
||||||
msgid "off"
|
msgid "off"
|
||||||
msgstr "关"
|
msgstr "关"
|
||||||
|
|
||||||
#: src/face-unlock:170 src/lib/menu.sh:646
|
#: src/face-unlock:170 src/lib/menu.sh:682
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%s samples, %s learned"
|
msgid "%s samples, %s learned"
|
||||||
msgstr "%s 个样本,已学习 %s 个"
|
msgstr "%s 个样本,已学习 %s 个"
|
||||||
@@ -137,7 +137,7 @@ msgstr "开启人脸解锁"
|
|||||||
msgid "Turn it off (faces are kept)"
|
msgid "Turn it off (faces are kept)"
|
||||||
msgstr "关闭(保留人脸)"
|
msgstr "关闭(保留人脸)"
|
||||||
|
|
||||||
#: src/face-unlock:196 src/lib/menu.sh:712
|
#: src/face-unlock:196 src/lib/menu.sh:748
|
||||||
msgid "Add a face"
|
msgid "Add a face"
|
||||||
msgstr "添加人脸"
|
msgstr "添加人脸"
|
||||||
|
|
||||||
@@ -154,63 +154,67 @@ msgid "Look at the camera and see what it sees"
|
|||||||
msgstr "看着摄像头,查看它看到的画面"
|
msgstr "看着摄像头,查看它看到的画面"
|
||||||
|
|
||||||
#: src/face-unlock:200
|
#: src/face-unlock:200
|
||||||
|
msgid "Lock the screen"
|
||||||
|
msgstr "锁定屏幕"
|
||||||
|
|
||||||
|
#: src/face-unlock:201
|
||||||
msgid "Show what is on"
|
msgid "Show what is on"
|
||||||
msgstr "显示已开启的功能"
|
msgstr "显示已开启的功能"
|
||||||
|
|
||||||
#: src/face-unlock:201
|
#: src/face-unlock:202
|
||||||
msgid "Show this help"
|
msgid "Show this help"
|
||||||
msgstr "显示此帮助"
|
msgstr "显示此帮助"
|
||||||
|
|
||||||
#: src/face-unlock:202
|
#: src/face-unlock:203
|
||||||
msgid "Show the version"
|
msgid "Show the version"
|
||||||
msgstr "显示版本"
|
msgstr "显示版本"
|
||||||
|
|
||||||
#: src/face-unlock:204
|
#: src/face-unlock:205
|
||||||
msgid "Without a command an interactive menu is shown."
|
msgid "Without a command an interactive menu is shown."
|
||||||
msgstr "不带命令时显示交互式菜单。"
|
msgstr "不带命令时显示交互式菜单。"
|
||||||
|
|
||||||
#: src/face-unlock:223
|
#: src/face-unlock:224
|
||||||
msgid ""
|
msgid ""
|
||||||
"Run this as your own user, not as root. It asks for your password when it "
|
"Run this as your own user, not as root. It asks for your password when it "
|
||||||
"needs to."
|
"needs to."
|
||||||
msgstr "请以你自己的用户运行,不要用 root。需要时会询问你的密码。"
|
msgstr "请以你自己的用户运行,不要用 root。需要时会询问你的密码。"
|
||||||
|
|
||||||
#: src/face-unlock:245 src/lib/system.sh:101
|
#: src/face-unlock:247 src/lib/system.sh:101
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Unknown command: %s"
|
msgid "Unknown command: %s"
|
||||||
msgstr "未知命令:%s"
|
msgstr "未知命令:%s"
|
||||||
|
|
||||||
#: src/lib/common.sh:169
|
#: src/lib/common.sh:171
|
||||||
msgid "never"
|
msgid "never"
|
||||||
msgstr "从未"
|
msgstr "从未"
|
||||||
|
|
||||||
#: src/lib/common.sh:179
|
#: src/lib/common.sh:181
|
||||||
msgid "just now"
|
msgid "just now"
|
||||||
msgstr "刚刚"
|
msgstr "刚刚"
|
||||||
|
|
||||||
#: src/lib/common.sh:181
|
#: src/lib/common.sh:183
|
||||||
msgid "1 minute ago"
|
msgid "1 minute ago"
|
||||||
msgstr "1 分钟前"
|
msgstr "1 分钟前"
|
||||||
|
|
||||||
#: src/lib/common.sh:184
|
#: src/lib/common.sh:186
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d minutes ago"
|
msgid "%d minutes ago"
|
||||||
msgstr "%d 分钟前"
|
msgstr "%d 分钟前"
|
||||||
|
|
||||||
#: src/lib/common.sh:186
|
#: src/lib/common.sh:188
|
||||||
msgid "1 hour ago"
|
msgid "1 hour ago"
|
||||||
msgstr "1 小时前"
|
msgstr "1 小时前"
|
||||||
|
|
||||||
#: src/lib/common.sh:189
|
#: src/lib/common.sh:191
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d hours ago"
|
msgid "%d hours ago"
|
||||||
msgstr "%d 小时前"
|
msgstr "%d 小时前"
|
||||||
|
|
||||||
#: src/lib/common.sh:191
|
#: src/lib/common.sh:193
|
||||||
msgid "1 day ago"
|
msgid "1 day ago"
|
||||||
msgstr "1 天前"
|
msgstr "1 天前"
|
||||||
|
|
||||||
#: src/lib/common.sh:194
|
#: src/lib/common.sh:196
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "%d days ago"
|
msgid "%d days ago"
|
||||||
msgstr "%d 天前"
|
msgstr "%d 天前"
|
||||||
@@ -350,11 +354,11 @@ msgstr "尝试次数过多。人脸解锁已暂停,直到你用密码解锁。
|
|||||||
msgid "[y/N]"
|
msgid "[y/N]"
|
||||||
msgstr "[y/N]"
|
msgstr "[y/N]"
|
||||||
|
|
||||||
#: src/lib/menu.sh:172 src/lib/menu.sh:531
|
#: src/lib/menu.sh:172 src/lib/menu.sh:566
|
||||||
msgid "ON"
|
msgid "ON"
|
||||||
msgstr "开启"
|
msgstr "开启"
|
||||||
|
|
||||||
#: src/lib/menu.sh:174 src/lib/menu.sh:532
|
#: src/lib/menu.sh:174 src/lib/menu.sh:567
|
||||||
msgid "OFF"
|
msgid "OFF"
|
||||||
msgstr "关闭"
|
msgstr "关闭"
|
||||||
|
|
||||||
@@ -395,7 +399,7 @@ msgstr "慢"
|
|||||||
msgid "%s seconds"
|
msgid "%s seconds"
|
||||||
msgstr "%s 秒"
|
msgstr "%s 秒"
|
||||||
|
|
||||||
#: src/lib/menu.sh:202 src/lib/menu.sh:441
|
#: src/lib/menu.sh:202 src/lib/menu.sh:447
|
||||||
msgid "automatic"
|
msgid "automatic"
|
||||||
msgstr "自动"
|
msgstr "自动"
|
||||||
|
|
||||||
@@ -415,8 +419,8 @@ msgstr "未运行"
|
|||||||
msgid "Turning face unlock on again starts it."
|
msgid "Turning face unlock on again starts it."
|
||||||
msgstr "重新开启人脸解锁即可启动它。"
|
msgstr "重新开启人脸解锁即可启动它。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:624
|
#: src/lib/menu.sh:236 src/lib/menu.sh:238 src/lib/menu.sh:660
|
||||||
#: src/lib/menu.sh:713
|
#: src/lib/menu.sh:749
|
||||||
msgid "Faces"
|
msgid "Faces"
|
||||||
msgstr "人脸"
|
msgstr "人脸"
|
||||||
|
|
||||||
@@ -473,46 +477,60 @@ msgstr "上次解锁"
|
|||||||
msgid "The lock screen agent is not running."
|
msgid "The lock screen agent is not running."
|
||||||
msgstr "锁屏代理没有运行。"
|
msgstr "锁屏代理没有运行。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:314
|
#: src/lib/menu.sh:318
|
||||||
msgid ""
|
msgid ""
|
||||||
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
"On GNOME a small GNOME extension shows the bubble. Turning face unlock on "
|
||||||
"switches it on."
|
"switches it on."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"在 GNOME 上,由一个小的 GNOME 扩展显示气泡。开启人脸解锁时会一并开启它。"
|
"在 GNOME 上,由一个小的 GNOME 扩展显示气泡。开启人脸解锁时会一并开启它。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:318
|
#: src/lib/menu.sh:322
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you come back to hyprlock or swaylock and opens them. Any other "
|
"Scans when you come back to hyprlock, swaylock or face-unlock's own lock "
|
||||||
"lock screen scans when you press Enter on the empty password field."
|
"screen (`face-unlock lock`, with the bubble), and opens them. Other lock "
|
||||||
|
"screens scan on Enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"回到 hyprlock 或 swaylock 时会扫描并打开它们。其他锁屏在空的密码框中按 Enter "
|
"回到 hyprlock、swaylock 或 face-unlock 自带的锁屏(`face-unlock lock`,带气"
|
||||||
"时扫描。"
|
"泡)时扫描并打开它们。其他锁屏按 Enter 扫描。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:323
|
#: src/lib/menu.sh:327
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unlocks the lock screen when it sees your face. Off: only your password "
|
"Unlocks the lock screen when it sees your face. Off: only your password "
|
||||||
"works there."
|
"works there."
|
||||||
msgstr "看到你的脸时解锁锁屏。关闭:锁屏只能用密码。"
|
msgstr "看到你的脸时解锁锁屏。关闭:锁屏只能用密码。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:324
|
#: src/lib/menu.sh:328
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans when you press a key or move the mouse on the lock screen, and when "
|
"Scans when you press a key or move the mouse on the lock screen, and when "
|
||||||
"the computer wakes up."
|
"the computer wakes up."
|
||||||
msgstr "在锁屏上按键或移动鼠标时,以及电脑唤醒时扫描。"
|
msgstr "在锁屏上按键或移动鼠标时,以及电脑唤醒时扫描。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:325
|
#: src/lib/menu.sh:329
|
||||||
msgid ""
|
msgid ""
|
||||||
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
"Scans as soon as the screen locks. Off by default: if you lock it yourself, "
|
||||||
"it would unlock again right away."
|
"it would unlock again right away."
|
||||||
msgstr "屏幕一锁定就扫描。默认关闭:如果是你自己锁的屏,它会马上又解锁。"
|
msgstr "屏幕一锁定就扫描。默认关闭:如果是你自己锁的屏,它会马上又解锁。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:326
|
#: src/lib/menu.sh:330
|
||||||
msgid ""
|
msgid ""
|
||||||
"sudo takes your face instead of the password. No match: you type the "
|
"sudo takes your face instead of the password. No match: you type the "
|
||||||
"password as usual."
|
"password as usual."
|
||||||
msgstr "sudo 用你的脸代替密码。不匹配时,照常输入密码。"
|
msgstr "sudo 用你的脸代替密码。不匹配时,照常输入密码。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:327
|
#: src/lib/menu.sh:331
|
||||||
|
msgid ""
|
||||||
|
"The picture behind face-unlock's own lock screen (`face-unlock lock`). "
|
||||||
|
"Empty: the one on your desktop. Or a file, a folder to take one from at "
|
||||||
|
"random, or `none`. Enter to type it."
|
||||||
|
msgstr ""
|
||||||
|
"face-unlock 锁屏(`face-unlock lock`)背后的图片。留空:用桌面的图片。或者一"
|
||||||
|
"个文件、从中随机挑选的文件夹,或 `none`。按 Enter 输入。"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:332
|
||||||
|
msgid "Blurs the picture behind face-unlock's own lock screen."
|
||||||
|
msgstr "模糊 face-unlock 锁屏背后的图片。"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:333
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The lock screen takes your face in its password check. Press Enter on the "
|
"The lock screen takes your face in its password check. Press Enter on the "
|
||||||
@@ -520,47 +538,47 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"锁屏在检查密码时也接受你的人脸。在空白框中按 Enter 即可扫描。此处找到:%s。"
|
"锁屏在检查密码时也接受你的人脸。在空白框中按 Enter 即可扫描。此处找到:%s。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:328
|
#: src/lib/menu.sh:334
|
||||||
msgid ""
|
msgid ""
|
||||||
"The password windows of your desktop and apps, for example when you install "
|
"The password windows of your desktop and apps, for example when you install "
|
||||||
"software. No match: you type the password."
|
"software. No match: you type the password."
|
||||||
msgstr "桌面和应用的密码窗口,例如安装软件时。不匹配时,输入密码即可。"
|
msgstr "桌面和应用的密码窗口,例如安装软件时。不匹配时,输入密码即可。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:329
|
#: src/lib/menu.sh:335
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to blink or turn your head a little. This also stops printed photos."
|
"You have to blink or turn your head a little. This also stops printed photos."
|
||||||
msgstr "你需要眨眼或稍微转头。这也能挡住打印的照片。"
|
msgstr "你需要眨眼或稍微转头。这也能挡住打印的照片。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:330
|
#: src/lib/menu.sh:336
|
||||||
msgid "No check at all. Only for trying out a camera."
|
msgid "No check at all. Only for trying out a camera."
|
||||||
msgstr "完全不检测。仅用于试用摄像头。"
|
msgstr "完全不检测。仅用于试用摄像头。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:331
|
#: src/lib/menu.sh:337
|
||||||
msgid ""
|
msgid ""
|
||||||
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
"Stops photos on a phone, a tablet or glossy paper. You do not have to blink. "
|
||||||
"A matte printed photo can get through."
|
"A matte printed photo can get through."
|
||||||
msgstr "挡住手机、平板或光面纸上的照片。无需眨眼。哑光纸打印的照片可能会通过。"
|
msgstr "挡住手机、平板或光面纸上的照片。无需眨眼。哑光纸打印的照片可能会通过。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:332
|
#: src/lib/menu.sh:338
|
||||||
msgid ""
|
msgid ""
|
||||||
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
"Fewer wrong matches, but it may not know you with glasses or in bad light."
|
||||||
msgstr "误认更少,但戴眼镜或光线不好时可能认不出你。"
|
msgstr "误认更少,但戴眼镜或光线不好时可能认不出你。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:333
|
#: src/lib/menu.sh:339
|
||||||
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
msgid "Knows you more easily, but also somebody who looks a lot like you."
|
||||||
msgstr "更容易认出你,但也更容易认出和你长得很像的人。"
|
msgstr "更容易认出你,但也更容易认出和你长得很像的人。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:334
|
#: src/lib/menu.sh:340
|
||||||
msgid "The default. Right for most people."
|
msgid "The default. Right for most people."
|
||||||
msgstr "默认值。适合大多数人。"
|
msgstr "默认值。适合大多数人。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:335
|
#: src/lib/menu.sh:341
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
"Your eyes have to be open and on the screen. So it does not unlock while you "
|
||||||
"look away or sleep."
|
"look away or sleep."
|
||||||
msgstr "你的眼睛必须睁开并看着屏幕。这样你看向别处或睡着时不会解锁。"
|
msgstr "你的眼睛必须睁开并看着屏幕。这样你看向别处或睡着时不会解锁。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:336
|
#: src/lib/menu.sh:342
|
||||||
msgid ""
|
msgid ""
|
||||||
"Automatic takes the first normal camera. After a change, set up your face "
|
"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)."
|
"again. An infrared camera needs its light on (linux-enable-ir-emitter)."
|
||||||
@@ -568,94 +586,111 @@ msgstr ""
|
|||||||
"“自动”会使用第一个普通摄像头。更换后请重新设置人脸。红外摄像头需要打开它的补"
|
"“自动”会使用第一个普通摄像头。更换后请重新设置人脸。红外摄像头需要打开它的补"
|
||||||
"光灯(linux-enable-ir-emitter)。"
|
"光灯(linux-enable-ir-emitter)。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:337
|
#: src/lib/menu.sh:343
|
||||||
msgid "How long the camera looks for your face before it gives up."
|
msgid "How long the camera looks for your face before it gives up."
|
||||||
msgstr "摄像头寻找你的脸多久后放弃。"
|
msgstr "摄像头寻找你的脸多久后放弃。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:338
|
#: src/lib/menu.sh:344
|
||||||
msgid ""
|
msgid ""
|
||||||
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
"After a sure match it keeps how you look now. So a new haircut or glasses "
|
||||||
"need no new setup."
|
"need no new setup."
|
||||||
msgstr "确定匹配后,会记住你现在的样子。所以换了发型或戴上眼镜也无需重新设置。"
|
msgstr "确定匹配后,会记住你现在的样子。所以换了发型或戴上眼镜也无需重新设置。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:339
|
#: src/lib/menu.sh:345
|
||||||
msgid ""
|
msgid ""
|
||||||
"No scan while the laptop is closed, for example at a desk with an external "
|
"No scan while the laptop is closed, for example at a desk with an external "
|
||||||
"screen."
|
"screen."
|
||||||
msgstr "笔记本合上时不扫描,例如在接了外接显示器的桌前。"
|
msgstr "笔记本合上时不扫描,例如在接了外接显示器的桌前。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:340
|
#: src/lib/menu.sh:346
|
||||||
msgid "The bubble at the top of the screen shows what the camera is doing."
|
msgid "The bubble at the top of the screen shows what the camera is doing."
|
||||||
msgstr "屏幕顶部的气泡显示摄像头正在做什么。"
|
msgstr "屏幕顶部的气泡显示摄像头正在做什么。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:341
|
#: src/lib/menu.sh:347
|
||||||
msgid "A small pill with a lock that opens."
|
msgid "A small pill with a lock that opens."
|
||||||
msgstr "一个带锁的小药丸,锁会打开。"
|
msgstr "一个带锁的小药丸,锁会打开。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:342
|
#: src/lib/menu.sh:348
|
||||||
msgid "An island with a face that looks around, then rings and a tick."
|
msgid "An island with a face that looks around, then rings and a tick."
|
||||||
msgstr "一个岛,里面有一张四处张望的脸,然后是圆环和一个对勾。"
|
msgstr "一个岛,里面有一张四处张望的脸,然后是圆环和一个对勾。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:343
|
#: src/lib/menu.sh:349
|
||||||
msgid "How fast the bubble moves."
|
msgid "How fast the bubble moves."
|
||||||
msgstr "气泡移动的速度。"
|
msgstr "气泡移动的速度。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:344
|
#: src/lib/menu.sh:350
|
||||||
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
msgid "Shows the bubble when sudo or an admin prompt scans your face, too."
|
||||||
msgstr "sudo 或管理员授权扫描你的脸时也显示气泡。"
|
msgstr "sudo 或管理员授权扫描你的脸时也显示气泡。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:437
|
#: src/lib/menu.sh:443
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "automatic (%s)"
|
msgid "automatic (%s)"
|
||||||
msgstr "自动(%s)"
|
msgstr "自动(%s)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:447
|
#: src/lib/menu.sh:453
|
||||||
msgid "(infrared)"
|
msgid "(infrared)"
|
||||||
msgstr "(红外)"
|
msgstr "(红外)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:451
|
#: src/lib/menu.sh:457
|
||||||
msgid "(not connected)"
|
msgid "(not connected)"
|
||||||
msgstr "(未连接)"
|
msgstr "(未连接)"
|
||||||
|
|
||||||
#: src/lib/menu.sh:528 src/lib/menu.sh:714
|
#: src/lib/menu.sh:466
|
||||||
|
msgid "same as desktop"
|
||||||
|
msgstr "与桌面相同"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:470
|
||||||
|
msgid "none"
|
||||||
|
msgstr "无"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:487
|
||||||
|
msgid "Picture or folder:"
|
||||||
|
msgstr "图片或文件夹:"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:492
|
||||||
|
#, sh-printf-format
|
||||||
|
msgid "Not found: %s"
|
||||||
|
msgstr "未找到:%s"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh:563 src/lib/menu.sh:750
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "设置"
|
msgstr "设置"
|
||||||
|
|
||||||
#: src/lib/menu.sh:529
|
#: src/lib/menu.sh:564
|
||||||
msgid "↑↓ select ←→ or Space: change q: back"
|
msgid "↑↓ select ←→ or Space: change q: back"
|
||||||
msgstr "↑↓ 选择 ←→ 或空格:更改 q:返回"
|
msgstr "↑↓ 选择 ←→ 或空格:更改 q:返回"
|
||||||
|
|
||||||
#: src/lib/menu.sh:530
|
#: src/lib/menu.sh:565
|
||||||
msgid "for all users, asks for your password"
|
msgid "for all users, asks for your password"
|
||||||
msgstr "对所有用户生效,需要你的密码"
|
msgstr "对所有用户生效,需要你的密码"
|
||||||
|
|
||||||
#. TRANSLATORS: keep the letters, they are the keys.
|
#. TRANSLATORS: keep the letters, they are the keys.
|
||||||
#: src/lib/menu.sh:626
|
#: src/lib/menu.sh:662
|
||||||
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
msgid "Up/Down: select, Space: on/off, r: rename, d: delete, a: add, q: back"
|
||||||
msgstr "上/下:选择,空格:开/关,r:重命名,d:删除,a:添加,q:返回"
|
msgstr "上/下:选择,空格:开/关,r:重命名,d:删除,a:添加,q:返回"
|
||||||
|
|
||||||
#: src/lib/menu.sh:627
|
#: src/lib/menu.sh:663
|
||||||
msgid "No face is set up yet. Press a to add one."
|
msgid "No face is set up yet. Press a to add one."
|
||||||
msgstr "尚未设置任何人脸。按 a 添加。"
|
msgstr "尚未设置任何人脸。按 a 添加。"
|
||||||
|
|
||||||
#: src/lib/menu.sh:673
|
#: src/lib/menu.sh:709
|
||||||
msgid "New name:"
|
msgid "New name:"
|
||||||
msgstr "新名称:"
|
msgstr "新名称:"
|
||||||
|
|
||||||
#: src/lib/menu.sh:680
|
#: src/lib/menu.sh:716
|
||||||
#, sh-printf-format
|
#, sh-printf-format
|
||||||
msgid "Delete \"%s\"?"
|
msgid "Delete \"%s\"?"
|
||||||
msgstr "删除“%s”?"
|
msgstr "删除“%s”?"
|
||||||
|
|
||||||
#: src/lib/menu.sh:711
|
#: src/lib/menu.sh:747
|
||||||
msgid "Turn face unlock on or off"
|
msgid "Turn face unlock on or off"
|
||||||
msgstr "开启或关闭人脸解锁"
|
msgstr "开启或关闭人脸解锁"
|
||||||
|
|
||||||
#: src/lib/menu.sh:715
|
#: src/lib/menu.sh:751
|
||||||
msgid "Try it"
|
msgid "Try it"
|
||||||
msgstr "试一试"
|
msgstr "试一试"
|
||||||
|
|
||||||
#: src/lib/menu.sh:716
|
#: src/lib/menu.sh:752
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "退出"
|
msgstr "退出"
|
||||||
|
|
||||||
@@ -711,6 +746,14 @@ msgstr "你回来时扫描"
|
|||||||
msgid "Scan right after locking"
|
msgid "Scan right after locking"
|
||||||
msgstr "锁定后立即扫描"
|
msgstr "锁定后立即扫描"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Wallpaper"
|
||||||
|
msgstr "壁纸"
|
||||||
|
|
||||||
|
#: src/lib/menu.sh
|
||||||
|
msgid "Blur the wallpaper"
|
||||||
|
msgstr "模糊壁纸"
|
||||||
|
|
||||||
#: src/lib/menu.sh
|
#: src/lib/menu.sh
|
||||||
msgid "Password prompts"
|
msgid "Password prompts"
|
||||||
msgstr "密码提示"
|
msgstr "密码提示"
|
||||||
@@ -867,23 +910,31 @@ msgstr "摄像头正忙于另一次扫描。请稍后重试。"
|
|||||||
msgid "The face could not be added (%1)."
|
msgid "The face could not be added (%1)."
|
||||||
msgstr "无法添加人脸(%1)。"
|
msgstr "无法添加人脸(%1)。"
|
||||||
|
|
||||||
#: src/agent/main.cpp:87
|
#: src/agent/lockscreencontroller.cpp:172
|
||||||
|
msgid "Wrong password"
|
||||||
|
msgstr "密码错误"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:185
|
||||||
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
msgid "Face unlock for the lock screen, sudo and admin prompts"
|
||||||
msgstr "用于锁屏、sudo 和管理员授权的人脸解锁"
|
msgstr "用于锁屏、sudo 和管理员授权的人脸解锁"
|
||||||
|
|
||||||
#: src/agent/main.cpp:90
|
#: src/agent/main.cpp:188
|
||||||
msgid "Set up a face."
|
msgid "Set up a face."
|
||||||
msgstr "设置一张人脸。"
|
msgstr "设置一张人脸。"
|
||||||
|
|
||||||
#: src/agent/main.cpp:91
|
#: src/agent/main.cpp:189
|
||||||
msgid "What to call the new face."
|
msgid "What to call the new face."
|
||||||
msgstr "新人脸的名称。"
|
msgstr "新人脸的名称。"
|
||||||
|
|
||||||
#: src/agent/main.cpp:92
|
#: src/agent/main.cpp:190
|
||||||
|
msgid "Lock the screen."
|
||||||
|
msgstr "锁定屏幕。"
|
||||||
|
|
||||||
|
#: src/agent/main.cpp:191
|
||||||
msgid "Play the bubble's animations once."
|
msgid "Play the bubble's animations once."
|
||||||
msgstr "播放一次气泡动画。"
|
msgstr "播放一次气泡动画。"
|
||||||
|
|
||||||
#: src/agent/main.cpp:94
|
#: src/agent/main.cpp:193
|
||||||
msgid "Bubble style for the demo: full or minimal."
|
msgid "Bubble style for the demo: full or minimal."
|
||||||
msgstr "演示用的气泡样式:full 或 minimal。"
|
msgstr "演示用的气泡样式:full 或 minimal。"
|
||||||
|
|
||||||
@@ -961,3 +1012,15 @@ msgstr "开始"
|
|||||||
#: src/agent/qml/Enroll.qml:193
|
#: src/agent/qml/Enroll.qml:193
|
||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "完成"
|
msgstr "完成"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:171
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "密码"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:185
|
||||||
|
msgid "Look at the camera or type your password"
|
||||||
|
msgstr "看向摄像头或输入密码"
|
||||||
|
|
||||||
|
#: src/agent/qml/LockScreen.qml:186
|
||||||
|
msgid "Type your password"
|
||||||
|
msgstr "输入密码"
|
||||||
@@ -0,0 +1,328 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<protocol name="ext_session_lock_v1">
|
||||||
|
<copyright>
|
||||||
|
Copyright 2021 Isaac Freund
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<description summary="secure session locking with arbitrary graphics">
|
||||||
|
This protocol allows for a privileged Wayland client to lock the session
|
||||||
|
and display arbitrary graphics while the session is locked.
|
||||||
|
|
||||||
|
The compositor may choose to restrict this protocol to a special client
|
||||||
|
launched by the compositor itself or expose it to all privileged clients,
|
||||||
|
this is compositor policy.
|
||||||
|
|
||||||
|
The client is responsible for performing authentication and informing the
|
||||||
|
compositor when the session should be unlocked. If the client dies while
|
||||||
|
the session is locked the session remains locked, possibly permanently
|
||||||
|
depending on compositor policy.
|
||||||
|
|
||||||
|
The key words "must", "must not", "required", "shall", "shall not",
|
||||||
|
"should", "should not", "recommended", "may", and "optional" in this
|
||||||
|
document are to be interpreted as described in IETF RFC 2119.
|
||||||
|
|
||||||
|
Warning! The protocol described in this file is currently in the
|
||||||
|
testing phase. Backward compatible changes may be added together with
|
||||||
|
the corresponding interface version bump. Backward incompatible changes
|
||||||
|
can only be done by creating a new major version of the extension.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<interface name="ext_session_lock_manager_v1" version="1">
|
||||||
|
<description summary="used to lock the session">
|
||||||
|
This interface is used to request that the session be locked.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="destroy the session lock manager object">
|
||||||
|
This informs the compositor that the session lock manager object will
|
||||||
|
no longer be used. Existing objects created through this interface
|
||||||
|
remain valid.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<request name="lock">
|
||||||
|
<description summary="attempt to lock the session">
|
||||||
|
This request creates a session lock and asks the compositor to lock the
|
||||||
|
session. The compositor will send either the ext_session_lock_v1.locked
|
||||||
|
or ext_session_lock_v1.finished event on the created object in
|
||||||
|
response to this request.
|
||||||
|
</description>
|
||||||
|
<arg name="id" type="new_id" interface="ext_session_lock_v1"/>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="ext_session_lock_v1" version="1">
|
||||||
|
<description summary="manage lock state and create lock surfaces">
|
||||||
|
In response to the creation of this object the compositor must send
|
||||||
|
either the locked or finished event.
|
||||||
|
|
||||||
|
The locked event indicates that the session is locked. This means
|
||||||
|
that the compositor must stop rendering and providing input to normal
|
||||||
|
clients. Instead the compositor must blank all outputs with an opaque
|
||||||
|
color such that their normal content is fully hidden.
|
||||||
|
|
||||||
|
The only surfaces that should be rendered while the session is locked
|
||||||
|
are the lock surfaces created through this interface and optionally,
|
||||||
|
at the compositor's discretion, special privileged surfaces such as
|
||||||
|
input methods or portions of desktop shell UIs.
|
||||||
|
|
||||||
|
The locked event must not be sent until a new "locked" frame (either
|
||||||
|
from a session lock surface or the compositor blanking the output) has
|
||||||
|
been presented on all outputs and no security sensitive normal/unlocked
|
||||||
|
content is possibly visible.
|
||||||
|
|
||||||
|
The finished event should be sent immediately on creation of this
|
||||||
|
object if the compositor decides that the locked event will not be sent.
|
||||||
|
|
||||||
|
The compositor may wait for the client to create and render session lock
|
||||||
|
surfaces before sending the locked event to avoid displaying intermediate
|
||||||
|
blank frames. However, it must impose a reasonable time limit if
|
||||||
|
waiting and send the locked event as soon as the hard requirements
|
||||||
|
described above can be met if the time limit expires. Clients should
|
||||||
|
immediately create lock surfaces for all outputs on creation of this
|
||||||
|
object to make this possible.
|
||||||
|
|
||||||
|
This behavior of the locked event is required in order to prevent
|
||||||
|
possible race conditions with clients that wish to suspend the system
|
||||||
|
or similar after locking the session. Without these semantics, clients
|
||||||
|
triggering a suspend after receiving the locked event would race with
|
||||||
|
the first "locked" frame being presented and normal/unlocked frames
|
||||||
|
might be briefly visible as the system is resumed if the suspend
|
||||||
|
operation wins the race.
|
||||||
|
|
||||||
|
If the client dies while the session is locked, the compositor must not
|
||||||
|
unlock the session in response. It is acceptable for the session to be
|
||||||
|
permanently locked if this happens. The compositor may choose to continue
|
||||||
|
to display the lock surfaces the client had mapped before it died or
|
||||||
|
alternatively fall back to a solid color, this is compositor policy.
|
||||||
|
|
||||||
|
Compositors may also allow a secure way to recover the session, the
|
||||||
|
details of this are compositor policy. Compositors may allow a new
|
||||||
|
client to create a ext_session_lock_v1 object and take responsibility
|
||||||
|
for unlocking the session, they may even start a new lock client
|
||||||
|
instance automatically.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<enum name="error">
|
||||||
|
<entry name="invalid_destroy" value="0"
|
||||||
|
summary="attempted to destroy session lock while locked"/>
|
||||||
|
<entry name="invalid_unlock" value="1"
|
||||||
|
summary="unlock requested but locked event was never sent"/>
|
||||||
|
<entry name="role" value="2"
|
||||||
|
summary="given wl_surface already has a role"/>
|
||||||
|
<entry name="duplicate_output" value="3"
|
||||||
|
summary="given output already has a lock surface"/>
|
||||||
|
<entry name="already_constructed" value="4"
|
||||||
|
summary="given wl_surface has a buffer attached or committed"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="destroy the session lock">
|
||||||
|
This informs the compositor that the lock object will no longer be
|
||||||
|
used. Existing objects created through this interface remain valid.
|
||||||
|
|
||||||
|
After this request is made, lock surfaces created through this object
|
||||||
|
should be destroyed by the client as they will no longer be used by
|
||||||
|
the compositor.
|
||||||
|
|
||||||
|
It is a protocol error to make this request if the locked event was
|
||||||
|
sent, the unlock_and_destroy request must be used instead.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<event name="locked">
|
||||||
|
<description summary="session successfully locked">
|
||||||
|
This client is now responsible for displaying graphics while the
|
||||||
|
session is locked and deciding when to unlock the session.
|
||||||
|
|
||||||
|
The locked event must not be sent until a new "locked" frame has been
|
||||||
|
presented on all outputs and no security sensitive normal/unlocked
|
||||||
|
content is possibly visible.
|
||||||
|
|
||||||
|
If this event is sent, making the destroy request is a protocol error,
|
||||||
|
the lock object must be destroyed using the unlock_and_destroy request.
|
||||||
|
</description>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="finished">
|
||||||
|
<description summary="the session lock object should be destroyed">
|
||||||
|
The compositor has decided that the session lock should be destroyed
|
||||||
|
as it will no longer be used by the compositor. Exactly when this
|
||||||
|
event is sent is compositor policy, but it must never be sent more
|
||||||
|
than once for a given session lock object.
|
||||||
|
|
||||||
|
This might be sent because there is already another ext_session_lock_v1
|
||||||
|
object held by a client, or the compositor has decided to deny the
|
||||||
|
request to lock the session for some other reason. This might also
|
||||||
|
be sent because the compositor implements some alternative, secure
|
||||||
|
way to authenticate and unlock the session.
|
||||||
|
|
||||||
|
The finished event should be sent immediately on creation of this
|
||||||
|
object if the compositor decides that the locked event will not
|
||||||
|
be sent.
|
||||||
|
|
||||||
|
If the locked event is sent on creation of this object the finished
|
||||||
|
event may still be sent at some later time in this object's
|
||||||
|
lifetime. This is compositor policy.
|
||||||
|
|
||||||
|
Upon receiving this event, the client should make either the destroy
|
||||||
|
request or the unlock_and_destroy request, depending on whether or
|
||||||
|
not the locked event was received on this object.
|
||||||
|
</description>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<request name="get_lock_surface">
|
||||||
|
<description summary="create a lock surface for a given output">
|
||||||
|
The client is expected to create lock surfaces for all outputs
|
||||||
|
currently present and any new outputs as they are advertised. These
|
||||||
|
won't be displayed by the compositor unless the lock is successful
|
||||||
|
and the locked event is sent.
|
||||||
|
|
||||||
|
Providing a wl_surface which already has a role or already has a buffer
|
||||||
|
attached or committed is a protocol error, as is attaching/committing
|
||||||
|
a buffer before the first ext_session_lock_surface_v1.configure event.
|
||||||
|
|
||||||
|
Attempting to create more than one lock surface for a given output
|
||||||
|
is a duplicate_output protocol error.
|
||||||
|
</description>
|
||||||
|
<arg name="id" type="new_id" interface="ext_session_lock_surface_v1"/>
|
||||||
|
<arg name="surface" type="object" interface="wl_surface"/>
|
||||||
|
<arg name="output" type="object" interface="wl_output"/>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<request name="unlock_and_destroy" type="destructor">
|
||||||
|
<description summary="unlock the session, destroying the object">
|
||||||
|
This request indicates that the session should be unlocked, for
|
||||||
|
example because the user has entered their password and it has been
|
||||||
|
verified by the client.
|
||||||
|
|
||||||
|
This request also informs the compositor that the lock object will
|
||||||
|
no longer be used and should be destroyed. Existing objects created
|
||||||
|
through this interface remain valid.
|
||||||
|
|
||||||
|
After this request is made, lock surfaces created through this object
|
||||||
|
should be destroyed by the client as they will no longer be used by
|
||||||
|
the compositor.
|
||||||
|
|
||||||
|
It is a protocol error to make this request if the locked event has
|
||||||
|
not been sent. In that case, the lock object must be destroyed using
|
||||||
|
the destroy request.
|
||||||
|
|
||||||
|
Note that a correct client that wishes to exit directly after unlocking
|
||||||
|
the session must use the wl_display.sync request to ensure the server
|
||||||
|
receives and processes the unlock_and_destroy request. Otherwise
|
||||||
|
there is no guarantee that the server has unlocked the session due
|
||||||
|
to the asynchronous nature of the Wayland protocol. For example,
|
||||||
|
the server might terminate the client with a protocol error before
|
||||||
|
it processes the unlock_and_destroy request.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="ext_session_lock_surface_v1" version="1">
|
||||||
|
<description summary="a surface displayed while the session is locked">
|
||||||
|
The client may use lock surfaces to display a screensaver, render a
|
||||||
|
dialog to enter a password and unlock the session, or however else it
|
||||||
|
sees fit.
|
||||||
|
|
||||||
|
On binding this interface the compositor will immediately send the
|
||||||
|
first configure event. After making the ack_configure request in
|
||||||
|
response to this event the client should attach and commit the first
|
||||||
|
buffer. Committing the surface before acking the first configure is a
|
||||||
|
protocol error. Committing the surface with a null buffer at any time
|
||||||
|
is a protocol error.
|
||||||
|
|
||||||
|
The compositor is free to handle keyboard/pointer focus for lock
|
||||||
|
surfaces however it chooses. A reasonable way to do this would be to
|
||||||
|
give the first lock surface created keyboard focus and change keyboard
|
||||||
|
focus if the user clicks on other surfaces.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<enum name="error">
|
||||||
|
<entry name="commit_before_first_ack" value="0"
|
||||||
|
summary="surface committed before first ack_configure request"/>
|
||||||
|
<entry name="null_buffer" value="1"
|
||||||
|
summary="surface committed with a null buffer"/>
|
||||||
|
<entry name="dimensions_mismatch" value="2"
|
||||||
|
summary="failed to match ack'd width/height"/>
|
||||||
|
<entry name="invalid_serial" value="3"
|
||||||
|
summary="serial provided in ack_configure is invalid"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="destroy the lock surface object">
|
||||||
|
This informs the compositor that the lock surface object will no
|
||||||
|
longer be used.
|
||||||
|
|
||||||
|
It is recommended for a lock client to destroy lock surfaces if
|
||||||
|
their corresponding wl_output global is removed.
|
||||||
|
|
||||||
|
If a lock surface on an active output is destroyed before the
|
||||||
|
ext_session_lock_v1.unlock_and_destroy event is sent, the compositor
|
||||||
|
must fall back to rendering a solid color.
|
||||||
|
</description>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<request name="ack_configure">
|
||||||
|
<description summary="ack a configure event">
|
||||||
|
When a configure event is received, if a client commits the surface
|
||||||
|
in response to the configure event, then the client must make an
|
||||||
|
ack_configure request sometime before the commit request, passing
|
||||||
|
along the serial of the configure event.
|
||||||
|
|
||||||
|
If the client receives multiple configure events before it can
|
||||||
|
respond to one, it only has to ack the last configure event.
|
||||||
|
|
||||||
|
A client is not required to commit immediately after sending an
|
||||||
|
ack_configure request - it may even ack_configure several times
|
||||||
|
before its next surface commit.
|
||||||
|
|
||||||
|
A client may send multiple ack_configure requests before committing,
|
||||||
|
but only the last request sent before a commit indicates which
|
||||||
|
configure event the client really is responding to.
|
||||||
|
|
||||||
|
Sending an ack_configure request consumes the configure event
|
||||||
|
referenced by the given serial, as well as all older configure events
|
||||||
|
sent on this object.
|
||||||
|
|
||||||
|
It is a protocol error to issue multiple ack_configure requests
|
||||||
|
referencing the same configure event or to issue an ack_configure
|
||||||
|
request referencing a configure event older than the last configure
|
||||||
|
event acked for a given lock surface.
|
||||||
|
</description>
|
||||||
|
<arg name="serial" type="uint" summary="serial from the configure event"/>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<event name="configure">
|
||||||
|
<description summary="the client should resize its surface">
|
||||||
|
This event is sent once on binding the interface and may be sent again
|
||||||
|
at the compositor's discretion, for example if output geometry changes.
|
||||||
|
|
||||||
|
The width and height are in surface-local coordinates and are exact
|
||||||
|
requirements. Failing to match these surface dimensions in the next
|
||||||
|
commit after acking a configure is a protocol error.
|
||||||
|
</description>
|
||||||
|
<arg name="serial" type="uint" summary="serial for use in ack_configure"/>
|
||||||
|
<arg name="width" type="uint"/>
|
||||||
|
<arg name="height" type="uint"/>
|
||||||
|
</event>
|
||||||
|
</interface>
|
||||||
|
</protocol>
|
||||||
@@ -26,7 +26,7 @@ AgentSocket::AgentSocket(QObject *parent)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
auto buffer = std::make_shared<QByteArray>();
|
auto buffer = std::make_shared<QByteArray>();
|
||||||
connect(socket, &QLocalSocket::readyRead, this, [this, socket, buffer] {
|
connect(socket, &QLocalSocket::readyRead, this, [this, socket, buffer, cred] {
|
||||||
*buffer += socket->readAll();
|
*buffer += socket->readAll();
|
||||||
if (buffer->size() > 64 * 1024) {
|
if (buffer->size() > 64 * 1024) {
|
||||||
socket->abort();
|
socket->abort();
|
||||||
@@ -36,8 +36,12 @@ AgentSocket::AgentSocket(QObject *parent)
|
|||||||
while ((nl = buffer->indexOf('\n')) >= 0) {
|
while ((nl = buffer->indexOf('\n')) >= 0) {
|
||||||
const QJsonObject o = QJsonDocument::fromJson(buffer->left(nl)).object();
|
const QJsonObject o = QJsonDocument::fromJson(buffer->left(nl)).object();
|
||||||
buffer->remove(0, nl + 1);
|
buffer->remove(0, nl + 1);
|
||||||
if (o.value(u"event").toString() == u"scan") {
|
const QString what = o.value(u"event").toString();
|
||||||
|
if (what == u"scan") {
|
||||||
Q_EMIT scanEvent(o);
|
Q_EMIT scanEvent(o);
|
||||||
|
} else if (what == u"lock" && cred.uid == ::getuid()) {
|
||||||
|
m_waiting.append(socket);
|
||||||
|
Q_EMIT lockRequested();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -58,6 +62,37 @@ bool AgentSocket::running()
|
|||||||
return probe.waitForConnected(500);
|
return probe.waitForConnected(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AgentSocket::requestLock()
|
||||||
|
{
|
||||||
|
QLocalSocket socket;
|
||||||
|
socket.connectToServer(path());
|
||||||
|
if (!socket.waitForConnected(500)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
socket.write(QJsonDocument(QJsonObject{{QStringLiteral("event"), QStringLiteral("lock")}}).toJson(QJsonDocument::Compact) + '\n');
|
||||||
|
if (!socket.waitForBytesWritten(500)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// The answer comes once the compositor has the lock, so that an idle
|
||||||
|
// daemon that locks before sleep does not suspend an unlocked screen.
|
||||||
|
QByteArray answer;
|
||||||
|
while (!answer.contains('\n') && socket.waitForReadyRead(5000)) {
|
||||||
|
answer += socket.readAll();
|
||||||
|
}
|
||||||
|
return QJsonDocument::fromJson(answer.left(answer.indexOf('\n'))).object().value(u"event").toString() == u"locked";
|
||||||
|
}
|
||||||
|
|
||||||
|
void AgentSocket::confirmLock()
|
||||||
|
{
|
||||||
|
for (const QPointer<QLocalSocket> &socket : std::as_const(m_waiting)) {
|
||||||
|
if (socket) {
|
||||||
|
socket->write(QJsonDocument(QJsonObject{{QStringLiteral("event"), QStringLiteral("locked")}}).toJson(QJsonDocument::Compact) + '\n');
|
||||||
|
socket->flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_waiting.clear();
|
||||||
|
}
|
||||||
|
|
||||||
bool AgentSocket::listen()
|
bool AgentSocket::listen()
|
||||||
{
|
{
|
||||||
const QString p = path();
|
const QString p = path();
|
||||||
|
|||||||
+11
-1
@@ -7,13 +7,16 @@
|
|||||||
// it is idle).
|
// it is idle).
|
||||||
//
|
//
|
||||||
// Only root and this user may talk here, and all they can do is make the
|
// Only root and this user may talk here, and all they can do is make the
|
||||||
// bubble move.
|
// bubble move, or (this user) ask for face-unlock's own lock screen.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
|
#include <QList>
|
||||||
#include <QLocalServer>
|
#include <QLocalServer>
|
||||||
|
#include <QLocalSocket>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
class AgentSocket : public QObject
|
class AgentSocket : public QObject
|
||||||
{
|
{
|
||||||
@@ -26,11 +29,18 @@ public:
|
|||||||
// session starts the agent from its own config, and that must not make
|
// session starts the agent from its own config, and that must not make
|
||||||
// two of them.
|
// two of them.
|
||||||
static bool running();
|
static bool running();
|
||||||
|
// Ask the running agent to lock the screen, and wait until it is. False
|
||||||
|
// when there is no agent or the lock did not come.
|
||||||
|
static bool requestLock();
|
||||||
|
// Tell everybody waiting in requestLock() that the screen is locked.
|
||||||
|
void confirmLock();
|
||||||
static QString path();
|
static QString path();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void scanEvent(const QJsonObject &event);
|
void scanEvent(const QJsonObject &event);
|
||||||
|
void lockRequested();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QLocalServer m_server;
|
QLocalServer m_server;
|
||||||
|
QList<QPointer<QLocalSocket>> m_waiting;
|
||||||
};
|
};
|
||||||
@@ -175,6 +175,9 @@ InputWatcher::~InputWatcher() = default;
|
|||||||
void InputWatcher::watch(int calmMs)
|
void InputWatcher::watch(int calmMs)
|
||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
|
m_watching = true;
|
||||||
|
m_calmMs = calmMs;
|
||||||
|
m_calm.start();
|
||||||
auto *wayland = qGuiApp->nativeInterface<QNativeInterface::QWaylandApplication>();
|
auto *wayland = qGuiApp->nativeInterface<QNativeInterface::QWaylandApplication>();
|
||||||
if (!m_notifier->isActive() || !wayland || !wayland->seat()) {
|
if (!m_notifier->isActive() || !wayland || !wayland->seat()) {
|
||||||
if (!m_mutter && QDBusConnection::sessionBus().interface()->isServiceRegistered(MutterService)) {
|
if (!m_mutter && QDBusConnection::sessionBus().interface()->isServiceRegistered(MutterService)) {
|
||||||
@@ -205,8 +208,18 @@ void InputWatcher::watch(int calmMs)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InputWatcher::noteInput()
|
||||||
|
{
|
||||||
|
if (m_watching && m_calm.elapsed() >= m_calmMs) {
|
||||||
|
m_watching = false;
|
||||||
|
QMetaObject::invokeMethod(this, &InputWatcher::input, Qt::QueuedConnection);
|
||||||
|
}
|
||||||
|
m_calm.restart();
|
||||||
|
}
|
||||||
|
|
||||||
void InputWatcher::stop()
|
void InputWatcher::stop()
|
||||||
{
|
{
|
||||||
|
m_watching = false;
|
||||||
m_notification.reset();
|
m_notification.reset();
|
||||||
if (m_mutter) {
|
if (m_mutter) {
|
||||||
m_mutter->stop();
|
m_mutter->stop();
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <QElapsedTimer>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -29,6 +30,9 @@ public:
|
|||||||
// calmMs. 0: the next input. Replaces what was watched before.
|
// calmMs. 0: the next input. Replaces what was watched before.
|
||||||
void watch(int calmMs);
|
void watch(int calmMs);
|
||||||
void stop();
|
void stop();
|
||||||
|
// A key or the pointer on face-unlock's own lock screen, which sees them
|
||||||
|
// itself. Counts like input the compositor reports.
|
||||||
|
void noteInput();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void input();
|
void input();
|
||||||
@@ -37,4 +41,7 @@ private:
|
|||||||
std::unique_ptr<IdleNotifier> m_notifier;
|
std::unique_ptr<IdleNotifier> m_notifier;
|
||||||
std::unique_ptr<IdleNotification> m_notification;
|
std::unique_ptr<IdleNotification> m_notification;
|
||||||
MutterIdle *m_mutter = nullptr;
|
MutterIdle *m_mutter = nullptr;
|
||||||
|
bool m_watching = false;
|
||||||
|
int m_calmMs = 0;
|
||||||
|
QElapsedTimer m_calm;
|
||||||
};
|
};
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "bubblecontroller.h"
|
#include "bubblecontroller.h"
|
||||||
#include "daemonclient.h"
|
#include "daemonclient.h"
|
||||||
|
#include "lockscreencontroller.h"
|
||||||
#include "userconfig.h"
|
#include "userconfig.h"
|
||||||
|
|
||||||
#include <QDBusConnection>
|
#include <QDBusConnection>
|
||||||
@@ -23,11 +24,18 @@ constexpr int CalmBeforeRetryMs = 2000;
|
|||||||
constexpr int ScanAfterWakeMs = 1000;
|
constexpr int ScanAfterWakeMs = 1000;
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
LockController::LockController(BubbleController *bubble, UserConfig *config, QObject *parent)
|
LockController::LockController(BubbleController *bubble, UserConfig *config, SessionLock *lock, LockScreenController *screen, QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_bubble(bubble)
|
, m_bubble(bubble)
|
||||||
, m_config(config)
|
, m_config(config)
|
||||||
|
, m_screen(screen)
|
||||||
{
|
{
|
||||||
|
if (lock) {
|
||||||
|
m_lock.setOwnLock(lock);
|
||||||
|
}
|
||||||
|
if (screen) {
|
||||||
|
connect(screen, &LockScreenController::input, &m_input, &InputWatcher::noteInput);
|
||||||
|
}
|
||||||
m_armTimer.setSingleShot(true);
|
m_armTimer.setSingleShot(true);
|
||||||
connect(&m_armTimer, &QTimer::timeout, this, [this] {
|
connect(&m_armTimer, &QTimer::timeout, this, [this] {
|
||||||
arm(0);
|
arm(0);
|
||||||
@@ -68,7 +76,11 @@ void LockController::onLockedChanged(bool locked)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_config->lockScreen()) {
|
const bool face = m_config->enabled() && m_config->lockScreen();
|
||||||
|
if (m_screen) {
|
||||||
|
m_screen->setFaceUnlock(face);
|
||||||
|
}
|
||||||
|
if (!face) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_locked = true;
|
m_locked = true;
|
||||||
|
|||||||
@@ -26,13 +26,16 @@
|
|||||||
|
|
||||||
class BubbleController;
|
class BubbleController;
|
||||||
class DaemonRequest;
|
class DaemonRequest;
|
||||||
|
class LockScreenController;
|
||||||
|
class SessionLock;
|
||||||
class UserConfig;
|
class UserConfig;
|
||||||
|
|
||||||
class LockController : public QObject
|
class LockController : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
LockController(BubbleController *bubble, UserConfig *config, QObject *parent = nullptr);
|
// lock and screen are face-unlock's own lock screen, where there is one.
|
||||||
|
LockController(BubbleController *bubble, UserConfig *config, SessionLock *lock, LockScreenController *screen, QObject *parent = nullptr);
|
||||||
|
|
||||||
bool locked() const
|
bool locked() const
|
||||||
{
|
{
|
||||||
@@ -53,6 +56,7 @@ private:
|
|||||||
|
|
||||||
BubbleController *m_bubble;
|
BubbleController *m_bubble;
|
||||||
UserConfig *m_config;
|
UserConfig *m_config;
|
||||||
|
LockScreenController *m_screen;
|
||||||
bool m_locked = false;
|
bool m_locked = false;
|
||||||
bool m_stopped = false;
|
bool m_stopped = false;
|
||||||
QElapsedTimer m_lockedFor;
|
QElapsedTimer m_lockedFor;
|
||||||
|
|||||||
@@ -0,0 +1,197 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#include "lockscreencontroller.h"
|
||||||
|
|
||||||
|
#include <KLocalizedString>
|
||||||
|
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
|
#include <security/pam_appl.h>
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <thread>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
struct Conversation {
|
||||||
|
QByteArray password;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Answers every hidden question with the password and every other one with
|
||||||
|
// nothing, as a lock screen that only asks for the password has to.
|
||||||
|
int converse(int count, const pam_message **messages, pam_response **responses, void *data)
|
||||||
|
{
|
||||||
|
auto *conversation = static_cast<Conversation *>(data);
|
||||||
|
auto *answers = static_cast<pam_response *>(calloc(size_t(count), sizeof(pam_response)));
|
||||||
|
if (!answers) {
|
||||||
|
return PAM_BUF_ERR;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < count; ++i) {
|
||||||
|
if (messages[i]->msg_style == PAM_PROMPT_ECHO_OFF) {
|
||||||
|
answers[i].resp = strdup(conversation->password.constData());
|
||||||
|
} else if (messages[i]->msg_style == PAM_PROMPT_ECHO_ON) {
|
||||||
|
answers[i].resp = strdup("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*responses = answers;
|
||||||
|
return PAM_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray serviceName()
|
||||||
|
{
|
||||||
|
static const char *const services[] = {"face-unlock-lock", "password-auth", "common-auth", "login"};
|
||||||
|
static const char *const dirs[] = {"/etc/pam.d/", "/usr/lib/pam.d/", "/usr/share/pam.d/"};
|
||||||
|
for (const char *service : services) {
|
||||||
|
for (const char *dir : dirs) {
|
||||||
|
if (QFile::exists(QString::fromLatin1(dir) + QString::fromLatin1(service))) {
|
||||||
|
return service;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "login";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool checkPassword(const QByteArray &user, const QByteArray &password)
|
||||||
|
{
|
||||||
|
Conversation conversation{password};
|
||||||
|
const pam_conv conv{converse, &conversation};
|
||||||
|
pam_handle_t *pamh = nullptr;
|
||||||
|
// For development only, like the daemon's --socket: a directory of PAM
|
||||||
|
// files of its own, so a test never counts as a wrong password for the
|
||||||
|
// real account.
|
||||||
|
const QByteArray confdir = qgetenv("FU_PAM_CONFDIR");
|
||||||
|
int rc = confdir.isEmpty() ? pam_start(serviceName().constData(), user.constData(), &conv, &pamh)
|
||||||
|
: pam_start_confdir("face-unlock-lock", user.constData(), &conv, confdir.constData(), &pamh);
|
||||||
|
if (rc == PAM_SUCCESS) {
|
||||||
|
rc = pam_authenticate(pamh, 0);
|
||||||
|
if (rc == PAM_SUCCESS) {
|
||||||
|
pam_setcred(pamh, PAM_REFRESH_CRED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pam_end(pamh, rc);
|
||||||
|
std::memset(conversation.password.data(), 0, size_t(conversation.password.size()));
|
||||||
|
return rc == PAM_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
passwd *me()
|
||||||
|
{
|
||||||
|
return getpwuid(getuid());
|
||||||
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
LockScreenController::LockScreenController(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
LockScreenController::~LockScreenController()
|
||||||
|
{
|
||||||
|
clearPassword();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LockScreenController::setPassword(const QString &password)
|
||||||
|
{
|
||||||
|
if (m_password == password) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_password = password;
|
||||||
|
Q_EMIT passwordChanged();
|
||||||
|
if (!m_message.isEmpty()) {
|
||||||
|
m_message.clear();
|
||||||
|
Q_EMIT messageChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LockScreenController::setFaceUnlock(bool on)
|
||||||
|
{
|
||||||
|
if (m_faceUnlock != on) {
|
||||||
|
m_faceUnlock = on;
|
||||||
|
Q_EMIT faceUnlockChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LockScreenController::setBlur(bool blur)
|
||||||
|
{
|
||||||
|
if (m_blur != blur) {
|
||||||
|
m_blur = blur;
|
||||||
|
Q_EMIT blurChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString LockScreenController::userName() const
|
||||||
|
{
|
||||||
|
const passwd *pw = me();
|
||||||
|
if (!pw) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
// The full name from the comment field, else the login name.
|
||||||
|
const QString full = QString::fromLocal8Bit(pw->pw_gecos).section(u',', 0, 0).trimmed();
|
||||||
|
return full.isEmpty() ? QString::fromLocal8Bit(pw->pw_name) : full;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LockScreenController::submit()
|
||||||
|
{
|
||||||
|
if (m_busy || m_password.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const passwd *pw = me();
|
||||||
|
if (!pw) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_busy = true;
|
||||||
|
Q_EMIT busyChanged();
|
||||||
|
|
||||||
|
const QByteArray user(pw->pw_name);
|
||||||
|
QByteArray password = m_password.toUtf8();
|
||||||
|
QPointer<LockScreenController> self(this);
|
||||||
|
std::thread([self, user, password]() mutable {
|
||||||
|
const bool ok = checkPassword(user, password);
|
||||||
|
std::memset(password.data(), 0, size_t(password.size()));
|
||||||
|
QMetaObject::invokeMethod(qApp, [self, ok] {
|
||||||
|
if (self) {
|
||||||
|
self->finish(ok);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).detach();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LockScreenController::finish(bool ok)
|
||||||
|
{
|
||||||
|
m_busy = false;
|
||||||
|
Q_EMIT busyChanged();
|
||||||
|
clearPassword();
|
||||||
|
Q_EMIT passwordChanged();
|
||||||
|
if (ok) {
|
||||||
|
Q_EMIT authenticated();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_message = i18n("Wrong password");
|
||||||
|
Q_EMIT messageChanged();
|
||||||
|
Q_EMIT rejected();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LockScreenController::activity()
|
||||||
|
{
|
||||||
|
Q_EMIT input();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LockScreenController::clearPassword()
|
||||||
|
{
|
||||||
|
// What is still in memory of it, as far as a QString lets that happen.
|
||||||
|
m_password.fill(u' ');
|
||||||
|
m_password.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LockScreenController::reset()
|
||||||
|
{
|
||||||
|
clearPassword();
|
||||||
|
Q_EMIT passwordChanged();
|
||||||
|
if (!m_message.isEmpty()) {
|
||||||
|
m_message.clear();
|
||||||
|
Q_EMIT messageChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
//
|
||||||
|
// The own lock screen's side of things (see SessionLock): the password,
|
||||||
|
// whether it is being checked, what to say under it.
|
||||||
|
//
|
||||||
|
// The password is checked with PAM in a thread of its own, the way swaylock
|
||||||
|
// and hyprlock do it. The service is face-unlock-lock when an administrator
|
||||||
|
// has written one, else the distribution's plain password stack:
|
||||||
|
// password-auth (Fedora), common-auth (Debian, Ubuntu) or login. Not the face
|
||||||
|
// module: the face has its own way in here, the agent.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
class LockScreenController : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged)
|
||||||
|
Q_PROPERTY(bool busy READ busy NOTIFY busyChanged)
|
||||||
|
// After a wrong password, until the next key.
|
||||||
|
Q_PROPERTY(QString message READ message NOTIFY messageChanged)
|
||||||
|
// Whether the face is looked for, which changes what the screen says.
|
||||||
|
Q_PROPERTY(bool faceUnlock READ faceUnlock NOTIFY faceUnlockChanged)
|
||||||
|
Q_PROPERTY(QString userName READ userName CONSTANT)
|
||||||
|
// Whether to blur the picture behind it.
|
||||||
|
Q_PROPERTY(bool blur READ blur NOTIFY blurChanged)
|
||||||
|
public:
|
||||||
|
explicit LockScreenController(QObject *parent = nullptr);
|
||||||
|
~LockScreenController() override;
|
||||||
|
|
||||||
|
QString password() const
|
||||||
|
{
|
||||||
|
return m_password;
|
||||||
|
}
|
||||||
|
void setPassword(const QString &password);
|
||||||
|
bool busy() const
|
||||||
|
{
|
||||||
|
return m_busy;
|
||||||
|
}
|
||||||
|
QString message() const
|
||||||
|
{
|
||||||
|
return m_message;
|
||||||
|
}
|
||||||
|
bool faceUnlock() const
|
||||||
|
{
|
||||||
|
return m_faceUnlock;
|
||||||
|
}
|
||||||
|
void setFaceUnlock(bool on);
|
||||||
|
QString userName() const;
|
||||||
|
bool blur() const
|
||||||
|
{
|
||||||
|
return m_blur;
|
||||||
|
}
|
||||||
|
void setBlur(bool blur);
|
||||||
|
|
||||||
|
// Check the password typed so far.
|
||||||
|
Q_INVOKABLE void submit();
|
||||||
|
// A key or the pointer on the lock screen.
|
||||||
|
Q_INVOKABLE void activity();
|
||||||
|
|
||||||
|
// A fresh lock: no password, nothing said.
|
||||||
|
void reset();
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void passwordChanged();
|
||||||
|
void busyChanged();
|
||||||
|
void messageChanged();
|
||||||
|
void faceUnlockChanged();
|
||||||
|
void blurChanged();
|
||||||
|
void authenticated();
|
||||||
|
// A wrong password, for the field to shake.
|
||||||
|
void rejected();
|
||||||
|
void input();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void finish(bool ok);
|
||||||
|
void clearPassword();
|
||||||
|
|
||||||
|
QString m_password;
|
||||||
|
QString m_message;
|
||||||
|
bool m_busy = false;
|
||||||
|
bool m_faceUnlock = true;
|
||||||
|
bool m_blur = false;
|
||||||
|
};
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "lockwatcher.h"
|
#include "lockwatcher.h"
|
||||||
|
|
||||||
#include "lockers.h"
|
#include "lockers.h"
|
||||||
|
#include "sessionlock.h"
|
||||||
#include "wayland.h"
|
#include "wayland.h"
|
||||||
|
|
||||||
#include <QDBusConnection>
|
#include <QDBusConnection>
|
||||||
@@ -162,14 +163,20 @@ void LockWatcher::pollLockers()
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LockWatcher::setOwnLock(SessionLock *lock)
|
||||||
|
{
|
||||||
|
m_own = lock;
|
||||||
|
connect(lock, &SessionLock::lockedChanged, this, &LockWatcher::update);
|
||||||
|
}
|
||||||
|
|
||||||
bool LockWatcher::canUnlock() const
|
bool LockWatcher::canUnlock() const
|
||||||
{
|
{
|
||||||
return !m_ownLockers || m_lockerRunning;
|
return (m_own && m_own->isLocked()) || !m_ownLockers || m_lockerRunning;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LockWatcher::update()
|
void LockWatcher::update()
|
||||||
{
|
{
|
||||||
const bool locked = m_screenSaver || m_lockedHint || m_lockerRunning;
|
const bool locked = m_screenSaver || m_lockedHint || m_lockerRunning || (m_own && m_own->isLocked());
|
||||||
if (locked != m_locked) {
|
if (locked != m_locked) {
|
||||||
m_locked = locked;
|
m_locked = locked;
|
||||||
Q_EMIT lockedChanged(locked);
|
Q_EMIT lockedChanged(locked);
|
||||||
@@ -178,6 +185,10 @@ void LockWatcher::update()
|
|||||||
|
|
||||||
void LockWatcher::unlock()
|
void LockWatcher::unlock()
|
||||||
{
|
{
|
||||||
|
if (m_own && m_own->isLocked()) {
|
||||||
|
m_own->unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Looked up again rather than taken from the last poll: a second is
|
// Looked up again rather than taken from the last poll: a second is
|
||||||
// long enough for a pid to belong to something else.
|
// long enough for a pid to belong to something else.
|
||||||
Lockers::signal(SIGUSR1);
|
Lockers::signal(SIGUSR1);
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
// (ext-session-lock).
|
// (ext-session-lock).
|
||||||
//
|
//
|
||||||
// hyprlock and swaylock do not listen to logind. They unlock on SIGUSR1.
|
// hyprlock and swaylock do not listen to logind. They unlock on SIGUSR1.
|
||||||
// Any other lock screen of that kind only opens itself: it gets the face
|
// face-unlock's own lock screen (SessionLock) is simply told to. Any other
|
||||||
// through the PAM module in its own stack (see src/lib/pam.sh), when Enter is
|
// lock screen of that kind only opens itself: it gets the face through the
|
||||||
// pressed.
|
// PAM module in its own stack (see src/lib/pam.sh), when Enter is pressed.
|
||||||
//
|
//
|
||||||
// None of this lowers the bar: any program running as this user can already
|
// None of this lowers the bar: any program running as this user can already
|
||||||
// ask logind to unlock the session, or send its own lock screen a signal. The
|
// ask logind to unlock the session, or send its own lock screen a signal. The
|
||||||
@@ -28,6 +28,8 @@
|
|||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
class SessionLock;
|
||||||
|
|
||||||
class LockWatcher : public QObject
|
class LockWatcher : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -42,6 +44,7 @@ public:
|
|||||||
// logind unlocks (Plasma, GNOME), only hyprlock and swaylock elsewhere.
|
// logind unlocks (Plasma, GNOME), only hyprlock and swaylock elsewhere.
|
||||||
bool canUnlock() const;
|
bool canUnlock() const;
|
||||||
void unlock();
|
void unlock();
|
||||||
|
void setOwnLock(SessionLock *lock);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void lockedChanged(bool locked);
|
void lockedChanged(bool locked);
|
||||||
@@ -63,6 +66,7 @@ private:
|
|||||||
bool m_locked = false;
|
bool m_locked = false;
|
||||||
// The compositor's lock screen is a program of its own.
|
// The compositor's lock screen is a program of its own.
|
||||||
bool m_ownLockers = false;
|
bool m_ownLockers = false;
|
||||||
|
SessionLock *m_own = nullptr;
|
||||||
QString m_session;
|
QString m_session;
|
||||||
QTimer m_poll;
|
QTimer m_poll;
|
||||||
};
|
};
|
||||||
+155
-2
@@ -5,6 +5,9 @@
|
|||||||
// (no arguments) stay in the background: unlock the lock screen by face,
|
// (no arguments) stay in the background: unlock the lock screen by face,
|
||||||
// and show the bubble for every scan
|
// and show the bubble for every scan
|
||||||
// --enroll open the window that sets up a face
|
// --enroll open the window that sets up a face
|
||||||
|
// --lock lock the screen: with face-unlock's own lock screen
|
||||||
|
// where the lock screen is a program of its own (Hyprland,
|
||||||
|
// Niri), else through logind with the desktop's
|
||||||
// --demo play the bubble's animations once, for trying out a
|
// --demo play the bubble's animations once, for trying out a
|
||||||
// style (--bubble-style minimal) and for screenshots
|
// style (--bubble-style minimal) and for screenshots
|
||||||
|
|
||||||
@@ -14,6 +17,8 @@
|
|||||||
#include "bubblewindow.h"
|
#include "bubblewindow.h"
|
||||||
#include "enrollcontroller.h"
|
#include "enrollcontroller.h"
|
||||||
#include "lockcontroller.h"
|
#include "lockcontroller.h"
|
||||||
|
#include "lockscreencontroller.h"
|
||||||
|
#include "sessionlock.h"
|
||||||
#include "userconfig.h"
|
#include "userconfig.h"
|
||||||
#include "wayland.h"
|
#include "wayland.h"
|
||||||
|
|
||||||
@@ -23,11 +28,17 @@
|
|||||||
#include <KLocalizedString>
|
#include <KLocalizedString>
|
||||||
|
|
||||||
#include <QCommandLineParser>
|
#include <QCommandLineParser>
|
||||||
|
#include <QDBusConnection>
|
||||||
|
#include <QDBusMessage>
|
||||||
|
#include <QFile>
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QQmlApplicationEngine>
|
#include <QQmlApplicationEngine>
|
||||||
#include <QQmlEngine>
|
#include <QQmlEngine>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/un.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
@@ -55,6 +66,92 @@ int runEnroll(QGuiApplication &app, const QString &name)
|
|||||||
return controller.state() == u"done" ? 0 : code;
|
return controller.state() == u"done" ? 0 : code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Where --lock tells the command that ran it that the screen is locked, when
|
||||||
|
// it forked to stay behind as the lock screen. -1: it did not.
|
||||||
|
int readyFd = -1;
|
||||||
|
|
||||||
|
void signalReady(bool ok)
|
||||||
|
{
|
||||||
|
if (readyFd >= 0) {
|
||||||
|
if (ok) {
|
||||||
|
[[maybe_unused]] const ssize_t n = write(readyFd, "1", 1);
|
||||||
|
}
|
||||||
|
close(readyFd);
|
||||||
|
readyFd = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Whether an agent listens on its socket. Asked before Qt is up, to decide
|
||||||
|
// whether to fork.
|
||||||
|
bool agentListening()
|
||||||
|
{
|
||||||
|
const char *runtime = getenv("XDG_RUNTIME_DIR");
|
||||||
|
if (!runtime) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
sockaddr_un addr{};
|
||||||
|
addr.sun_family = AF_UNIX;
|
||||||
|
const int len = snprintf(addr.sun_path, sizeof(addr.sun_path), "%s/face-unlock/agent.socket", runtime);
|
||||||
|
if (len <= 0 || size_t(len) >= sizeof(addr.sun_path)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const int fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);
|
||||||
|
const bool ok = fd >= 0 && connect(fd, reinterpret_cast<sockaddr *>(&addr), sizeof(addr)) == 0;
|
||||||
|
if (fd >= 0) {
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
// With no agent running, --lock stays behind as the lock screen until it is
|
||||||
|
// unlocked. The command that asked for it returns as soon as the screen is
|
||||||
|
// locked, the way swaylock -f does: an idle daemon locking before sleep
|
||||||
|
// waits for that, and not a moment longer.
|
||||||
|
void forkForLock(int argc, char **argv)
|
||||||
|
{
|
||||||
|
bool lock = false;
|
||||||
|
for (int i = 1; i < argc; ++i) {
|
||||||
|
lock = lock || std::strcmp(argv[i], "--lock") == 0;
|
||||||
|
}
|
||||||
|
int fds[2];
|
||||||
|
if (!lock || agentListening() || pipe(fds) != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const pid_t pid = fork();
|
||||||
|
if (pid < 0) {
|
||||||
|
close(fds[0]);
|
||||||
|
close(fds[1]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (pid > 0) {
|
||||||
|
close(fds[1]);
|
||||||
|
char c = 0;
|
||||||
|
const bool locked = read(fds[0], &c, 1) == 1;
|
||||||
|
_exit(locked ? 0 : 1);
|
||||||
|
}
|
||||||
|
close(fds[0]);
|
||||||
|
setsid();
|
||||||
|
readyFd = fds[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Plasma and GNOME lock with their own lock screen when logind asks them to,
|
||||||
|
// as `loginctl lock-session` does.
|
||||||
|
int lockThroughLogind()
|
||||||
|
{
|
||||||
|
const QString id = qEnvironmentVariable("XDG_SESSION_ID");
|
||||||
|
QDBusMessage call = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.login1"),
|
||||||
|
QStringLiteral("/org/freedesktop/login1"),
|
||||||
|
QStringLiteral("org.freedesktop.login1.Manager"),
|
||||||
|
QStringLiteral("LockSession"));
|
||||||
|
call << (id.isEmpty() ? QStringLiteral("auto") : id);
|
||||||
|
const QDBusMessage reply = QDBusConnection::systemBus().call(call);
|
||||||
|
if (reply.type() == QDBusMessage::ErrorMessage) {
|
||||||
|
qWarning("logind would not lock: %s", qPrintable(reply.errorMessage()));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// The whole life of a bubble, twice: a face that is recognised after a blink,
|
// The whole life of a bubble, twice: a face that is recognised after a blink,
|
||||||
// then one that is not.
|
// then one that is not.
|
||||||
void scheduleDemo(BubbleController *bubble)
|
void scheduleDemo(BubbleController *bubble)
|
||||||
@@ -77,6 +174,7 @@ void scheduleDemo(BubbleController *bubble)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
forkForLock(argc, argv);
|
||||||
QGuiApplication app(argc, argv);
|
QGuiApplication app(argc, argv);
|
||||||
app.setApplicationName(QStringLiteral("face-unlock-agent"));
|
app.setApplicationName(QStringLiteral("face-unlock-agent"));
|
||||||
app.setApplicationVersion(QStringLiteral(FU_VERSION));
|
app.setApplicationVersion(QStringLiteral(FU_VERSION));
|
||||||
@@ -89,10 +187,11 @@ int main(int argc, char **argv)
|
|||||||
parser.addVersionOption();
|
parser.addVersionOption();
|
||||||
const QCommandLineOption enrollOpt(QStringLiteral("enroll"), i18n("Set up a face."));
|
const QCommandLineOption enrollOpt(QStringLiteral("enroll"), i18n("Set up a face."));
|
||||||
const QCommandLineOption nameOpt(QStringLiteral("name"), i18n("What to call the new face."), QStringLiteral("name"));
|
const QCommandLineOption nameOpt(QStringLiteral("name"), i18n("What to call the new face."), QStringLiteral("name"));
|
||||||
|
const QCommandLineOption lockOpt(QStringLiteral("lock"), i18n("Lock the screen."));
|
||||||
const QCommandLineOption demoOpt(QStringLiteral("demo"), i18n("Play the bubble's animations once."));
|
const QCommandLineOption demoOpt(QStringLiteral("demo"), i18n("Play the bubble's animations once."));
|
||||||
// Not "--style": QGuiApplication takes that one for itself.
|
// Not "--style": QGuiApplication takes that one for itself.
|
||||||
const QCommandLineOption styleOpt(QStringLiteral("bubble-style"), i18n("Bubble style for the demo: full or minimal."), QStringLiteral("style"));
|
const QCommandLineOption styleOpt(QStringLiteral("bubble-style"), i18n("Bubble style for the demo: full or minimal."), QStringLiteral("style"));
|
||||||
parser.addOptions({enrollOpt, nameOpt, demoOpt, styleOpt});
|
parser.addOptions({enrollOpt, nameOpt, lockOpt, demoOpt, styleOpt});
|
||||||
parser.process(app);
|
parser.process(app);
|
||||||
|
|
||||||
if (parser.isSet(enrollOpt)) {
|
if (parser.isSet(enrollOpt)) {
|
||||||
@@ -103,6 +202,13 @@ int main(int argc, char **argv)
|
|||||||
return runEnroll(app, name);
|
return runEnroll(app, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool lockNow = parser.isSet(lockOpt);
|
||||||
|
if (lockNow && !SessionLock::available()) {
|
||||||
|
const int rc = lockThroughLogind();
|
||||||
|
signalReady(rc == 0);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
app.setQuitOnLastWindowClosed(false);
|
app.setQuitOnLastWindowClosed(false);
|
||||||
QQmlEngine engine;
|
QQmlEngine engine;
|
||||||
KLocalization::setupLocalizedContext(&engine);
|
KLocalization::setupLocalizedContext(&engine);
|
||||||
@@ -131,6 +237,9 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
AgentSocket socket;
|
AgentSocket socket;
|
||||||
if (AgentSocket::running()) {
|
if (AgentSocket::running()) {
|
||||||
|
if (lockNow) {
|
||||||
|
return AgentSocket::requestLock() ? 0 : 1;
|
||||||
|
}
|
||||||
qInfo("an agent is already running in this session");
|
qInfo("an agent is already running in this session");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -141,6 +250,50 @@ int main(int argc, char **argv)
|
|||||||
service = std::make_unique<BubbleService>(&bubble);
|
service = std::make_unique<BubbleService>(&bubble);
|
||||||
}
|
}
|
||||||
|
|
||||||
LockController lock(&bubble, &config);
|
LockScreenController screen;
|
||||||
|
std::unique_ptr<SessionLock> sessionLock;
|
||||||
|
if (SessionLock::available()) {
|
||||||
|
sessionLock = std::make_unique<SessionLock>(&engine, &bubble, &screen, &config);
|
||||||
|
SessionLock *lock = sessionLock.get();
|
||||||
|
QObject::connect(&socket, &AgentSocket::lockRequested, lock, [lock, &socket] {
|
||||||
|
lock->lock();
|
||||||
|
if (lock->isConfirmed()) {
|
||||||
|
socket.confirmLock();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
QObject::connect(lock, &SessionLock::confirmed, &socket, &AgentSocket::confirmLock);
|
||||||
|
}
|
||||||
|
LockController lock(&bubble, &config, sessionLock.get(), &screen);
|
||||||
|
|
||||||
|
if (lockNow) {
|
||||||
|
// No agent was running, so this one is only here for the lock. It
|
||||||
|
// goes once the lock is gone and the bubble has finished.
|
||||||
|
QObject::connect(sessionLock.get(), &SessionLock::lockedChanged, &app, [&bubble](bool locked) {
|
||||||
|
if (locked) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!bubble.shown()) {
|
||||||
|
QCoreApplication::quit();
|
||||||
|
}
|
||||||
|
QObject::connect(&bubble, &BubbleController::shownChanged, qApp, [&bubble] {
|
||||||
|
if (!bubble.shown()) {
|
||||||
|
QCoreApplication::quit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
QTimer::singleShot(5000, qApp, &QCoreApplication::quit);
|
||||||
|
});
|
||||||
|
QObject::connect(sessionLock.get(), &SessionLock::confirmed, &app, [] {
|
||||||
|
signalReady(true);
|
||||||
|
});
|
||||||
|
sessionLock->lock();
|
||||||
|
if (!sessionLock->isLocked()) {
|
||||||
|
signalReady(false);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if (sessionLock && QFile::exists(SessionLock::markerPath())) {
|
||||||
|
// The last agent went away with the screen locked, and the compositor
|
||||||
|
// kept it locked. Take the lock back, so it can be opened again.
|
||||||
|
sessionLock->lock();
|
||||||
|
}
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,204 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
//
|
||||||
|
// face-unlock's own lock screen, one per screen (see SessionLock): the time,
|
||||||
|
// the password, and on the main screen the bubble at the top, the same one
|
||||||
|
// that shows over the desktop. Behind it the desktop's picture, or the one
|
||||||
|
// the user set (see Wallpaper).
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Effects
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
required property var lock
|
||||||
|
required property var bubble
|
||||||
|
required property bool primary
|
||||||
|
required property url wallpaper
|
||||||
|
|
||||||
|
property date now: new Date()
|
||||||
|
Timer {
|
||||||
|
interval: 1000
|
||||||
|
running: true
|
||||||
|
repeat: true
|
||||||
|
onTriggered: root.now = new Date()
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
gradient: Gradient {
|
||||||
|
GradientStop { position: 0; color: "#11161D" }
|
||||||
|
GradientStop { position: 0.6; color: "#000000" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loaded aside, so a big picture does not hold up the lock, and faded in.
|
||||||
|
Item {
|
||||||
|
anchors.fill: parent
|
||||||
|
opacity: picture.status === Image.Ready ? 1 : 0
|
||||||
|
visible: opacity > 0
|
||||||
|
Behavior on opacity {
|
||||||
|
NumberAnimation { duration: 200 }
|
||||||
|
}
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: picture
|
||||||
|
// Past the edges when blurred: the blur would pull in the nothing
|
||||||
|
// beyond them and darken the rim.
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: root.lock.blur ? -64 : 0
|
||||||
|
source: root.wallpaper
|
||||||
|
fillMode: Image.PreserveAspectCrop
|
||||||
|
sourceSize: Qt.size(root.width, root.height)
|
||||||
|
asynchronous: true
|
||||||
|
cache: false
|
||||||
|
layer.enabled: root.lock.blur
|
||||||
|
layer.effect: MultiEffect {
|
||||||
|
blurEnabled: true
|
||||||
|
blur: 1
|
||||||
|
blurMax: 64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Dimmed a little, so the time and the password read on any picture.
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
color: "#000000"
|
||||||
|
opacity: 0.35
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Any touch counts as somebody being back, and a click anywhere puts the
|
||||||
|
// keys into the password.
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
acceptedButtons: Qt.AllButtons
|
||||||
|
onPositionChanged: root.lock.activity()
|
||||||
|
onPressed: {
|
||||||
|
root.lock.activity()
|
||||||
|
field.forceActiveFocus()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Below the open bubble, which hangs from the top edge.
|
||||||
|
Column {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
y: Math.max(Theme.topGap + Theme.openHeight + 24, Math.round(parent.height * 0.2))
|
||||||
|
spacing: 2
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
color: Theme.textPrimary
|
||||||
|
font.pixelSize: Math.max(56, Math.min(120, Math.round(root.height * 0.11)))
|
||||||
|
font.weight: Font.Light
|
||||||
|
text: Qt.formatTime(root.now, Qt.locale().timeFormat(Locale.ShortFormat))
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
color: Theme.textDetail
|
||||||
|
font.pixelSize: 18
|
||||||
|
font.weight: Font.Medium
|
||||||
|
text: Qt.formatDate(root.now, Qt.locale().dateFormat(Locale.LongFormat))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Column {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
y: Math.round(parent.height * 0.62)
|
||||||
|
spacing: 12
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
color: Theme.textPrimary
|
||||||
|
font.pixelSize: 17
|
||||||
|
font.weight: Font.DemiBold
|
||||||
|
text: root.lock.userName
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: pill
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
width: 280
|
||||||
|
height: 44
|
||||||
|
radius: height / 2
|
||||||
|
color: Theme.surfaceRaised
|
||||||
|
opacity: root.lock.busy ? 0.6 : 1
|
||||||
|
border.width: field.activeFocus ? 1 : 0
|
||||||
|
border.color: Qt.rgba(1, 1, 1, 0.18)
|
||||||
|
|
||||||
|
property real shake: 0
|
||||||
|
transform: Translate { x: pill.shake }
|
||||||
|
SequentialAnimation {
|
||||||
|
id: shakeAnimation
|
||||||
|
NumberAnimation { target: pill; property: "shake"; to: -10; duration: 55; easing.type: Easing.OutQuad }
|
||||||
|
NumberAnimation { target: pill; property: "shake"; to: 9; duration: 70 }
|
||||||
|
NumberAnimation { target: pill; property: "shake"; to: -6; duration: 65 }
|
||||||
|
NumberAnimation { target: pill; property: "shake"; to: 4; duration: 60 }
|
||||||
|
NumberAnimation { target: pill; property: "shake"; to: 0; duration: 55; easing.type: Easing.OutQuad }
|
||||||
|
}
|
||||||
|
|
||||||
|
TextInput {
|
||||||
|
id: field
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.leftMargin: 20
|
||||||
|
anchors.rightMargin: 20
|
||||||
|
verticalAlignment: TextInput.AlignVCenter
|
||||||
|
horizontalAlignment: TextInput.AlignHCenter
|
||||||
|
echoMode: TextInput.Password
|
||||||
|
passwordCharacter: "●"
|
||||||
|
color: Theme.textPrimary
|
||||||
|
selectionColor: Theme.accent
|
||||||
|
font.pixelSize: 15
|
||||||
|
clip: true
|
||||||
|
focus: true
|
||||||
|
// The dots show how far it is; a blinking bar in the middle
|
||||||
|
// of the empty field only cuts the word in it in two.
|
||||||
|
cursorDelegate: Item {}
|
||||||
|
readOnly: root.lock.busy
|
||||||
|
text: root.lock.password
|
||||||
|
onTextEdited: root.lock.password = text
|
||||||
|
onAccepted: root.lock.submit()
|
||||||
|
Keys.onPressed: event => {
|
||||||
|
root.lock.activity()
|
||||||
|
event.accepted = false
|
||||||
|
}
|
||||||
|
Component.onCompleted: forceActiveFocus()
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color: Theme.textSecondary
|
||||||
|
font.pixelSize: 15
|
||||||
|
text: i18n("Password")
|
||||||
|
visible: field.text.length === 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
width: 360
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
color: root.lock.message.length > 0 ? Theme.failure : Theme.textDetail
|
||||||
|
font.pixelSize: 13
|
||||||
|
font.weight: Font.Medium
|
||||||
|
text: root.lock.message.length > 0 ? root.lock.message
|
||||||
|
: root.lock.faceUnlock ? i18n("Look at the camera or type your password")
|
||||||
|
: i18n("Type your password")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: root.lock
|
||||||
|
function onRejected() {
|
||||||
|
shakeAnimation.restart()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The bubble, where it shows over the desktop too.
|
||||||
|
Bubble {
|
||||||
|
visible: root.primary
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
y: 0
|
||||||
|
bubble: root.bubble
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,289 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#include "sessionlock.h"
|
||||||
|
|
||||||
|
#include "bubblecontroller.h"
|
||||||
|
#include "lockscreencontroller.h"
|
||||||
|
#include "userconfig.h"
|
||||||
|
#include "wallpaper.h"
|
||||||
|
#include "wayland.h"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QGuiApplication>
|
||||||
|
#include <QQuickView>
|
||||||
|
#include <QScreen>
|
||||||
|
#include <QStandardPaths>
|
||||||
|
#include <QUrl>
|
||||||
|
#include <QtWaylandClient/private/qwaylanddisplay_p.h>
|
||||||
|
#include <QtWaylandClient/private/qwaylandintegration_p.h>
|
||||||
|
#include <QtWaylandClient/private/qwaylandscreen_p.h>
|
||||||
|
#include <QtWaylandClient/private/qwaylandshellintegration_p.h>
|
||||||
|
#include <QtWaylandClient/private/qwaylandshellsurface_p.h>
|
||||||
|
#include <QtWaylandClient/private/qwaylandsurface_p.h>
|
||||||
|
#include <QtWaylandClient/private/qwaylandwindow_p.h>
|
||||||
|
|
||||||
|
#include "qwayland-ext-session-lock-v1.h"
|
||||||
|
|
||||||
|
// The manager, and through it the role every lock window gets.
|
||||||
|
class LockIntegration : public QtWaylandClient::QWaylandShellIntegrationTemplate<LockIntegration>, public QtWayland::ext_session_lock_manager_v1
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LockIntegration()
|
||||||
|
: QWaylandShellIntegrationTemplate<LockIntegration>(1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
~LockIntegration() override
|
||||||
|
{
|
||||||
|
if (object()) {
|
||||||
|
destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QtWaylandClient::QWaylandShellSurface *createShellSurface(QtWaylandClient::QWaylandWindow *window) override;
|
||||||
|
|
||||||
|
// The lock the surfaces belong to.
|
||||||
|
::ext_session_lock_v1 *current = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
// One screen's lock surface. Like LayerShellQt's layer surface: the size
|
||||||
|
// comes from the compositor, and nothing is drawn before it has sent one.
|
||||||
|
class LockSurface : public QtWaylandClient::QWaylandShellSurface, public QtWayland::ext_session_lock_surface_v1
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LockSurface(::ext_session_lock_v1 *lock, QtWaylandClient::QWaylandWindow *window)
|
||||||
|
: QWaylandShellSurface(window)
|
||||||
|
{
|
||||||
|
init(ext_session_lock_v1_get_lock_surface(lock, window->waylandSurface()->object(), window->waylandScreen()->output()));
|
||||||
|
}
|
||||||
|
~LockSurface() override
|
||||||
|
{
|
||||||
|
destroy();
|
||||||
|
}
|
||||||
|
bool isExposed() const override
|
||||||
|
{
|
||||||
|
return m_configured;
|
||||||
|
}
|
||||||
|
// Qt commits a new role at once, as xdg-shell wants. A lock surface must
|
||||||
|
// not be committed before it has acknowledged its first size.
|
||||||
|
bool commitSurfaceRole() const override
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
void applyConfigure() override
|
||||||
|
{
|
||||||
|
window()->resizeFromApplyConfigure(m_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ext_session_lock_surface_v1_configure(uint32_t serial, uint32_t width, uint32_t height) override
|
||||||
|
{
|
||||||
|
ack_configure(serial);
|
||||||
|
m_size = QSize(int(width), int(height));
|
||||||
|
if (!m_configured) {
|
||||||
|
m_configured = true;
|
||||||
|
applyConfigure();
|
||||||
|
window()->updateExposure();
|
||||||
|
} else {
|
||||||
|
window()->applyConfigureWhenPossible();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
QSize m_size;
|
||||||
|
bool m_configured = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
QtWaylandClient::QWaylandShellSurface *LockIntegration::createShellSurface(QtWaylandClient::QWaylandWindow *window)
|
||||||
|
{
|
||||||
|
return new LockSurface(current, window);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Lock : public QtWayland::ext_session_lock_v1
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Lock(::ext_session_lock_v1 *object, SessionLock *owner)
|
||||||
|
: QtWayland::ext_session_lock_v1(object)
|
||||||
|
, m_owner(owner)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Queued: not from inside the Wayland event, which the answer to it might
|
||||||
|
// destroy.
|
||||||
|
void ext_session_lock_v1_locked() override
|
||||||
|
{
|
||||||
|
QMetaObject::invokeMethod(m_owner, &SessionLock::onLocked, Qt::QueuedConnection);
|
||||||
|
}
|
||||||
|
void ext_session_lock_v1_finished() override
|
||||||
|
{
|
||||||
|
QMetaObject::invokeMethod(m_owner, &SessionLock::onFinished, Qt::QueuedConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
SessionLock *m_owner;
|
||||||
|
};
|
||||||
|
|
||||||
|
SessionLock::SessionLock(QQmlEngine *engine, BubbleController *bubble, LockScreenController *screen, UserConfig *config, QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
, m_engine(engine)
|
||||||
|
, m_bubble(bubble)
|
||||||
|
, m_screen(screen)
|
||||||
|
, m_config(config)
|
||||||
|
{
|
||||||
|
connect(qGuiApp, &QGuiApplication::screenAdded, this, [this](QScreen *s) {
|
||||||
|
if (m_lock) {
|
||||||
|
addScreen(s);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
connect(qGuiApp, &QGuiApplication::screenRemoved, this, &SessionLock::removeScreen);
|
||||||
|
connect(m_screen, &LockScreenController::authenticated, this, &SessionLock::unlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
SessionLock::~SessionLock()
|
||||||
|
{
|
||||||
|
// Leaving with the lock held keeps the session locked, which is the
|
||||||
|
// point. The windows go, the lock stays.
|
||||||
|
qDeleteAll(m_views);
|
||||||
|
delete m_lock;
|
||||||
|
delete m_integration;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SessionLock::available()
|
||||||
|
{
|
||||||
|
return Wayland::hasGlobal("ext_session_lock_manager_v1");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SessionLock::markerPath()
|
||||||
|
{
|
||||||
|
return QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation) + QStringLiteral("/face-unlock/locked");
|
||||||
|
}
|
||||||
|
|
||||||
|
void SessionLock::lock()
|
||||||
|
{
|
||||||
|
if (m_lock) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto *qpa = QtWaylandClient::QWaylandIntegration::instance();
|
||||||
|
if (!m_integration && qpa) {
|
||||||
|
m_integration = new LockIntegration;
|
||||||
|
if (!m_integration->initialize(qpa->display())) {
|
||||||
|
delete m_integration;
|
||||||
|
m_integration = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!m_integration) {
|
||||||
|
qWarning("the compositor has no ext_session_lock_manager_v1, so this cannot lock the screen");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_confirmed = false;
|
||||||
|
m_unlockWanted = false;
|
||||||
|
m_lock = new Lock(m_integration->lock(), this);
|
||||||
|
m_integration->current = m_lock->object();
|
||||||
|
m_screen->reset();
|
||||||
|
m_pictures = Wallpaper::forLock(m_config->lockWallpaper());
|
||||||
|
m_screen->setBlur(m_config->lockBlur());
|
||||||
|
for (QScreen *s : QGuiApplication::screens()) {
|
||||||
|
addScreen(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
QDir().mkpath(QFileInfo(markerPath()).absolutePath());
|
||||||
|
QFile marker(markerPath());
|
||||||
|
if (!marker.open(QIODevice::WriteOnly)) {
|
||||||
|
qWarning("cannot write %s", qPrintable(markerPath()));
|
||||||
|
}
|
||||||
|
Q_EMIT lockedChanged(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SessionLock::addScreen(QScreen *screen)
|
||||||
|
{
|
||||||
|
if (m_views.contains(screen) || !dynamic_cast<QtWaylandClient::QWaylandScreen *>(screen->handle())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto *view = new QQuickView(m_engine, nullptr);
|
||||||
|
view->setColor(Qt::black);
|
||||||
|
view->setScreen(screen);
|
||||||
|
view->setResizeMode(QQuickView::SizeRootObjectToView);
|
||||||
|
view->resize(screen->size());
|
||||||
|
view->setInitialProperties({{QStringLiteral("lock"), QVariant::fromValue(m_screen)},
|
||||||
|
{QStringLiteral("bubble"), QVariant::fromValue(m_bubble)},
|
||||||
|
{QStringLiteral("wallpaper"), Wallpaper::pick(m_pictures, screen->name())},
|
||||||
|
{QStringLiteral("primary"), screen == QGuiApplication::primaryScreen()}});
|
||||||
|
view->loadFromModule(QStringLiteral("FaceUnlock"), QStringLiteral("LockScreen"));
|
||||||
|
for (const QQmlError &e : view->errors()) {
|
||||||
|
qWarning("%s", qPrintable(e.toString()));
|
||||||
|
}
|
||||||
|
view->create();
|
||||||
|
if (auto *wayland = dynamic_cast<QtWaylandClient::QWaylandWindow *>(view->handle())) {
|
||||||
|
wayland->setShellIntegration(m_integration);
|
||||||
|
}
|
||||||
|
view->show();
|
||||||
|
view->requestActivate();
|
||||||
|
m_views.insert(screen, view);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SessionLock::removeScreen(QScreen *screen)
|
||||||
|
{
|
||||||
|
if (auto view = m_views.take(screen)) {
|
||||||
|
delete view;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SessionLock::onLocked()
|
||||||
|
{
|
||||||
|
if (!m_lock) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_confirmed = true;
|
||||||
|
Q_EMIT confirmed();
|
||||||
|
if (m_unlockWanted) {
|
||||||
|
unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SessionLock::onFinished()
|
||||||
|
{
|
||||||
|
if (!m_lock) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Refused (another lock screen is up) or ended by the compositor.
|
||||||
|
if (m_confirmed) {
|
||||||
|
m_lock->unlock_and_destroy();
|
||||||
|
} else {
|
||||||
|
qWarning("the compositor did not let this lock the screen; is another lock screen running?");
|
||||||
|
m_lock->destroy();
|
||||||
|
}
|
||||||
|
release();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SessionLock::unlock()
|
||||||
|
{
|
||||||
|
if (!m_lock) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Unlocking before the compositor has confirmed the lock is a protocol
|
||||||
|
// error. It follows as soon as it has.
|
||||||
|
if (!m_confirmed) {
|
||||||
|
m_unlockWanted = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_lock->unlock_and_destroy();
|
||||||
|
release();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SessionLock::release()
|
||||||
|
{
|
||||||
|
qDeleteAll(m_views);
|
||||||
|
m_views.clear();
|
||||||
|
delete m_lock;
|
||||||
|
m_lock = nullptr;
|
||||||
|
m_confirmed = false;
|
||||||
|
m_integration->current = nullptr;
|
||||||
|
QFile::remove(markerPath());
|
||||||
|
// Out to the compositor now: an agent started only for this lock quits
|
||||||
|
// straight after.
|
||||||
|
Wayland::sync();
|
||||||
|
m_screen->reset();
|
||||||
|
Q_EMIT lockedChanged(false);
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
//
|
||||||
|
// face-unlock's own lock screen, for whoever wants it on a compositor whose
|
||||||
|
// lock screen is a program of its own (ext-session-lock: Hyprland, Niri,
|
||||||
|
// Sway and others): `face-unlock lock`.
|
||||||
|
//
|
||||||
|
// Any other lock screen there covers the bubble, and only opens itself (it
|
||||||
|
// gets the face through PAM, see src/lib/pam.sh). This one is the lock
|
||||||
|
// screen, so the bubble shows on it and a face opens it straight away. The
|
||||||
|
// picture behind it is the user's choice (LockWallpaper).
|
||||||
|
//
|
||||||
|
// Qt knows no ext-session-lock, so each screen's window gets the lock surface
|
||||||
|
// role through Qt's shell integration, the way LayerShellQt gives windows the
|
||||||
|
// layer-shell role. If this program goes away while locked, the compositor
|
||||||
|
// keeps the session locked: that is the protocol's promise.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QHash>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QPointer>
|
||||||
|
#include <QUrl>
|
||||||
|
|
||||||
|
class BubbleController;
|
||||||
|
class LockScreenController;
|
||||||
|
class UserConfig;
|
||||||
|
class QQmlEngine;
|
||||||
|
class QQuickView;
|
||||||
|
class QScreen;
|
||||||
|
class LockIntegration;
|
||||||
|
class Lock;
|
||||||
|
|
||||||
|
class SessionLock : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
SessionLock(QQmlEngine *engine, BubbleController *bubble, LockScreenController *screen, UserConfig *config, QObject *parent = nullptr);
|
||||||
|
~SessionLock() override;
|
||||||
|
|
||||||
|
// Whether the compositor offers ext-session-lock.
|
||||||
|
static bool available();
|
||||||
|
|
||||||
|
// From the lock request until the lock is gone again.
|
||||||
|
bool isLocked() const
|
||||||
|
{
|
||||||
|
return m_lock != nullptr;
|
||||||
|
}
|
||||||
|
// The compositor has confirmed the lock: nothing unlocked is on screen.
|
||||||
|
bool isConfirmed() const
|
||||||
|
{
|
||||||
|
return m_confirmed;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A file that says the screen is locked, so that an agent started again
|
||||||
|
// after a crash locks again (see main.cpp).
|
||||||
|
static QString markerPath();
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void lock();
|
||||||
|
void unlock();
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void lockedChanged(bool locked);
|
||||||
|
void confirmed();
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend class Lock;
|
||||||
|
void onLocked();
|
||||||
|
void onFinished();
|
||||||
|
void addScreen(QScreen *screen);
|
||||||
|
void removeScreen(QScreen *screen);
|
||||||
|
void release();
|
||||||
|
|
||||||
|
QQmlEngine *m_engine;
|
||||||
|
BubbleController *m_bubble;
|
||||||
|
LockScreenController *m_screen;
|
||||||
|
UserConfig *m_config;
|
||||||
|
LockIntegration *m_integration = nullptr;
|
||||||
|
Lock *m_lock = nullptr;
|
||||||
|
bool m_confirmed = false;
|
||||||
|
bool m_unlockWanted = false;
|
||||||
|
QHash<QScreen *, QPointer<QQuickView>> m_views;
|
||||||
|
// The pictures behind it, by output (see Wallpaper).
|
||||||
|
QHash<QString, QUrl> m_pictures;
|
||||||
|
};
|
||||||
@@ -29,6 +29,9 @@ QString UserConfig::path()
|
|||||||
void UserConfig::load()
|
void UserConfig::load()
|
||||||
{
|
{
|
||||||
const KeyValueFile kv = KeyValueFile::load(path());
|
const KeyValueFile kv = KeyValueFile::load(path());
|
||||||
|
m_enabled = kv.boolean(QStringLiteral("Enabled"), false);
|
||||||
|
m_lockWallpaper = kv.value(QStringLiteral("LockWallpaper"));
|
||||||
|
m_lockBlur = kv.boolean(QStringLiteral("LockBlur"), false);
|
||||||
m_lockScreen = kv.boolean(QStringLiteral("LockScreen"), true);
|
m_lockScreen = kv.boolean(QStringLiteral("LockScreen"), true);
|
||||||
m_scanOnWake = kv.boolean(QStringLiteral("ScanOnWake"), true);
|
m_scanOnWake = kv.boolean(QStringLiteral("ScanOnWake"), true);
|
||||||
m_scanOnLock = kv.boolean(QStringLiteral("ScanOnLock"), false);
|
m_scanOnLock = kv.boolean(QStringLiteral("ScanOnLock"), false);
|
||||||
|
|||||||
@@ -17,6 +17,22 @@ class UserConfig : public QObject
|
|||||||
public:
|
public:
|
||||||
explicit UserConfig(QObject *parent = nullptr);
|
explicit UserConfig(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
// Face unlock turned on at all. The agent's service only runs when it is,
|
||||||
|
// but the own lock screen (--lock) runs either way.
|
||||||
|
bool enabled() const
|
||||||
|
{
|
||||||
|
return m_enabled;
|
||||||
|
}
|
||||||
|
// The picture behind the own lock screen (see Wallpaper): empty for the
|
||||||
|
// desktop's, "none", a file, or a folder to take one from at random.
|
||||||
|
QString lockWallpaper() const
|
||||||
|
{
|
||||||
|
return m_lockWallpaper;
|
||||||
|
}
|
||||||
|
bool lockBlur() const
|
||||||
|
{
|
||||||
|
return m_lockBlur;
|
||||||
|
}
|
||||||
// Unlock the lock screen by face.
|
// Unlock the lock screen by face.
|
||||||
bool lockScreen() const
|
bool lockScreen() const
|
||||||
{
|
{
|
||||||
@@ -72,6 +88,9 @@ private:
|
|||||||
void load();
|
void load();
|
||||||
|
|
||||||
QFileSystemWatcher m_watcher;
|
QFileSystemWatcher m_watcher;
|
||||||
|
bool m_enabled = false;
|
||||||
|
QString m_lockWallpaper;
|
||||||
|
bool m_lockBlur = false;
|
||||||
bool m_lockScreen = true;
|
bool m_lockScreen = true;
|
||||||
bool m_scanOnWake = true;
|
bool m_scanOnWake = true;
|
||||||
bool m_scanOnLock = false;
|
bool m_scanOnLock = false;
|
||||||
|
|||||||
@@ -0,0 +1,180 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#include "wallpaper.h"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QProcess>
|
||||||
|
#include <QRandomGenerator>
|
||||||
|
#include <QRegularExpression>
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
// A picture, or one at random from a folder.
|
||||||
|
QUrl picture(const QString &setting)
|
||||||
|
{
|
||||||
|
QString path = setting;
|
||||||
|
if (path.startsWith(u"~/")) {
|
||||||
|
path = QDir::homePath() + path.mid(1);
|
||||||
|
}
|
||||||
|
const QFileInfo info(path);
|
||||||
|
if (setting.isEmpty() || !info.exists()) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
if (info.isFile()) {
|
||||||
|
return QUrl::fromLocalFile(info.absoluteFilePath());
|
||||||
|
}
|
||||||
|
const QStringList pictures = QDir(path).entryList({QStringLiteral("*.jpg"), QStringLiteral("*.jpeg"), QStringLiteral("*.png"), QStringLiteral("*.webp")},
|
||||||
|
QDir::Files | QDir::Readable);
|
||||||
|
if (pictures.isEmpty()) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
return QUrl::fromLocalFile(QDir(path).absoluteFilePath(pictures.at(QRandomGenerator::global()->bounded(int(pictures.size())))));
|
||||||
|
}
|
||||||
|
|
||||||
|
// What a command prints, or nothing when it is not there or hangs.
|
||||||
|
QString run(const QString &program, const QStringList &args)
|
||||||
|
{
|
||||||
|
QProcess process;
|
||||||
|
process.start(program, args);
|
||||||
|
if (!process.waitForFinished(1000) || process.exitStatus() != QProcess::NormalExit || process.exitCode() != 0) {
|
||||||
|
process.kill();
|
||||||
|
process.waitForFinished(100);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
return QString::fromLocal8Bit(process.readAllStandardOutput());
|
||||||
|
}
|
||||||
|
|
||||||
|
// The pictures the running wallpaper programs of this user show.
|
||||||
|
QHash<QString, QString> desktop()
|
||||||
|
{
|
||||||
|
QHash<QString, QString> found;
|
||||||
|
const uint me = getuid();
|
||||||
|
const QStringList pids = QDir(QStringLiteral("/proc")).entryList({QStringLiteral("[0-9]*")}, QDir::Dirs);
|
||||||
|
for (const QString &pid : pids) {
|
||||||
|
const QString dir = QStringLiteral("/proc/") + pid;
|
||||||
|
if (QFileInfo(dir).ownerId() != me) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
QFile comm(dir + QStringLiteral("/comm"));
|
||||||
|
if (!comm.open(QIODevice::ReadOnly)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const QByteArray name = comm.readAll().trimmed();
|
||||||
|
if (name == "swaybg") {
|
||||||
|
QFile cmdline(dir + QStringLiteral("/cmdline"));
|
||||||
|
if (cmdline.open(QIODevice::ReadOnly)) {
|
||||||
|
QStringList args;
|
||||||
|
for (const QByteArray &arg : cmdline.readAll().split('\0')) {
|
||||||
|
args << QString::fromLocal8Bit(arg);
|
||||||
|
}
|
||||||
|
// Relative to where it was started.
|
||||||
|
const QDir cwd(QFileInfo(dir + QStringLiteral("/cwd")).symLinkTarget());
|
||||||
|
QHash<QString, QString> shown = Wallpaper::fromSwaybg(args.mid(1));
|
||||||
|
for (QString &path : shown) {
|
||||||
|
path = cwd.absoluteFilePath(path);
|
||||||
|
}
|
||||||
|
found.insert(shown);
|
||||||
|
}
|
||||||
|
} else if (name == "awww-daemon" || name == "swww-daemon") {
|
||||||
|
found.insert(Wallpaper::fromAwww(run(QString::fromLatin1(name.left(4)), {QStringLiteral("query")})));
|
||||||
|
} else if (name == "hyprpaper") {
|
||||||
|
found.insert(Wallpaper::fromList(run(QStringLiteral("hyprctl"), {QStringLiteral("hyprpaper"), QStringLiteral("listactive")})));
|
||||||
|
} else if (name == "wpaperd") {
|
||||||
|
found.insert(Wallpaper::fromList(run(QStringLiteral("wpaperctl"), {QStringLiteral("all-wallpapers")})));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
QHash<QString, QString> Wallpaper::fromSwaybg(const QStringList &args)
|
||||||
|
{
|
||||||
|
QHash<QString, QString> found;
|
||||||
|
QString output;
|
||||||
|
for (int i = 0; i < args.size(); ++i) {
|
||||||
|
const QString &arg = args.at(i);
|
||||||
|
const bool hasNext = i + 1 < args.size();
|
||||||
|
if ((arg == u"-o" || arg == u"--output") && hasNext) {
|
||||||
|
output = args.at(++i);
|
||||||
|
} else if (arg.startsWith(u"--output=")) {
|
||||||
|
output = arg.mid(9);
|
||||||
|
} else if ((arg == u"-i" || arg == u"--image") && hasNext) {
|
||||||
|
found.insert(output == u"*" ? QString() : output, args.at(++i));
|
||||||
|
} else if (arg.startsWith(u"--image=")) {
|
||||||
|
found.insert(output == u"*" ? QString() : output, arg.mid(8));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
QHash<QString, QString> Wallpaper::fromAwww(const QString &text)
|
||||||
|
{
|
||||||
|
// "eDP-1: 1920x1080, scale: 1, currently displaying: image: /a/b.jpg",
|
||||||
|
// with a namespace in front on awww. A plain colour is no picture.
|
||||||
|
static const QRegularExpression line(QStringLiteral("([^\\s:]+): \\d+x\\d+,.*currently displaying: image: (.+)$"), QRegularExpression::MultilineOption);
|
||||||
|
QHash<QString, QString> found;
|
||||||
|
auto it = line.globalMatch(text);
|
||||||
|
while (it.hasNext()) {
|
||||||
|
const auto match = it.next();
|
||||||
|
found.insert(match.captured(1), match.captured(2).trimmed());
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
QHash<QString, QString> Wallpaper::fromList(const QString &text)
|
||||||
|
{
|
||||||
|
// "eDP-1: /a/b.jpg", on older hyprpaper "eDP-1 = /a/b.jpg".
|
||||||
|
static const QRegularExpression line(QStringLiteral("^([^\\s:=]+)(?:: | = )(/.+)$"), QRegularExpression::MultilineOption);
|
||||||
|
QHash<QString, QString> found;
|
||||||
|
auto it = line.globalMatch(text);
|
||||||
|
while (it.hasNext()) {
|
||||||
|
const auto match = it.next();
|
||||||
|
found.insert(match.captured(1), match.captured(2).trimmed());
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
QHash<QString, QUrl> Wallpaper::forLock(const QString &setting)
|
||||||
|
{
|
||||||
|
QHash<QString, QUrl> pictures;
|
||||||
|
if (setting.compare(u"none", Qt::CaseInsensitive) == 0) {
|
||||||
|
return pictures;
|
||||||
|
}
|
||||||
|
if (!setting.isEmpty()) {
|
||||||
|
const QUrl url = picture(setting);
|
||||||
|
if (!url.isEmpty()) {
|
||||||
|
pictures.insert(QString(), url);
|
||||||
|
}
|
||||||
|
return pictures;
|
||||||
|
}
|
||||||
|
const QHash<QString, QString> shown = desktop();
|
||||||
|
for (auto it = shown.cbegin(); it != shown.cend(); ++it) {
|
||||||
|
const QUrl url = picture(it.value());
|
||||||
|
if (!url.isEmpty()) {
|
||||||
|
pictures.insert(it.key(), url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pictures;
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl Wallpaper::pick(const QHash<QString, QUrl> &pictures, const QString &output)
|
||||||
|
{
|
||||||
|
if (pictures.isEmpty()) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
if (pictures.contains(output)) {
|
||||||
|
return pictures.value(output);
|
||||||
|
}
|
||||||
|
if (pictures.contains(QString())) {
|
||||||
|
return pictures.value(QString());
|
||||||
|
}
|
||||||
|
// Named differently than here: some picture of the desktop is still
|
||||||
|
// better than none.
|
||||||
|
QStringList outputs = pictures.keys();
|
||||||
|
outputs.sort();
|
||||||
|
return pictures.value(outputs.first());
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
//
|
||||||
|
// The picture behind face-unlock's own lock screen. By default the one on
|
||||||
|
// the desktop. Hyprland, niri and the like leave the wallpaper to a program
|
||||||
|
// of its own, so it comes from whichever of the common ones runs: swaybg,
|
||||||
|
// awww (once swww), hyprpaper or wpaperd, each for every output.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QHash>
|
||||||
|
#include <QString>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QUrl>
|
||||||
|
|
||||||
|
namespace Wallpaper
|
||||||
|
{
|
||||||
|
// The pictures for a lock by output name, "" for every other output.
|
||||||
|
// setting is LockWallpaper: empty for the desktop's, "none", a picture, or a
|
||||||
|
// folder to take one from at random.
|
||||||
|
QHash<QString, QUrl> forLock(const QString &setting);
|
||||||
|
// The one for this output.
|
||||||
|
QUrl pick(const QHash<QString, QUrl> &pictures, const QString &output);
|
||||||
|
|
||||||
|
// What the programs tell, by output name. Apart for the tests.
|
||||||
|
QHash<QString, QString> fromSwaybg(const QStringList &args);
|
||||||
|
// `awww query` and `swww query`.
|
||||||
|
QHash<QString, QString> fromAwww(const QString &text);
|
||||||
|
// `hyprctl hyprpaper listactive` and `wpaperctl all-wallpapers`.
|
||||||
|
QHash<QString, QString> fromList(const QString &text);
|
||||||
|
}
|
||||||
+21
-6
@@ -21,6 +21,12 @@ void onGlobalRemove(void *, wl_registry *, uint32_t)
|
|||||||
|
|
||||||
const wl_registry_listener listener = {onGlobal, onGlobalRemove};
|
const wl_registry_listener listener = {onGlobal, onGlobalRemove};
|
||||||
|
|
||||||
|
wl_display *display()
|
||||||
|
{
|
||||||
|
auto *app = qGuiApp ? qGuiApp->nativeInterface<QNativeInterface::QWaylandApplication>() : nullptr;
|
||||||
|
return app ? app->display() : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
const QSet<QByteArray> &globals()
|
const QSet<QByteArray> &globals()
|
||||||
{
|
{
|
||||||
static QSet<QByteArray> names;
|
static QSet<QByteArray> names;
|
||||||
@@ -30,17 +36,16 @@ const QSet<QByteArray> &globals()
|
|||||||
}
|
}
|
||||||
asked = true;
|
asked = true;
|
||||||
|
|
||||||
auto *app = qGuiApp ? qGuiApp->nativeInterface<QNativeInterface::QWaylandApplication>() : nullptr;
|
wl_display *d = display();
|
||||||
wl_display *display = app ? app->display() : nullptr;
|
if (!d) {
|
||||||
if (!display) {
|
|
||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
wl_event_queue *queue = wl_display_create_queue(display);
|
wl_event_queue *queue = wl_display_create_queue(d);
|
||||||
auto *wrapped = static_cast<wl_display *>(wl_proxy_create_wrapper(display));
|
auto *wrapped = static_cast<wl_display *>(wl_proxy_create_wrapper(d));
|
||||||
wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(wrapped), queue);
|
wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(wrapped), queue);
|
||||||
wl_registry *registry = wl_display_get_registry(wrapped);
|
wl_registry *registry = wl_display_get_registry(wrapped);
|
||||||
wl_registry_add_listener(registry, &listener, &names);
|
wl_registry_add_listener(registry, &listener, &names);
|
||||||
wl_display_roundtrip_queue(display, queue);
|
wl_display_roundtrip_queue(d, queue);
|
||||||
wl_registry_destroy(registry);
|
wl_registry_destroy(registry);
|
||||||
wl_proxy_wrapper_destroy(wrapped);
|
wl_proxy_wrapper_destroy(wrapped);
|
||||||
wl_event_queue_destroy(queue);
|
wl_event_queue_destroy(queue);
|
||||||
@@ -52,3 +57,13 @@ bool Wayland::hasGlobal(const char *interface)
|
|||||||
{
|
{
|
||||||
return globals().contains(QByteArray(interface));
|
return globals().contains(QByteArray(interface));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Wayland::sync()
|
||||||
|
{
|
||||||
|
// On a queue of its own, like above: Qt reads the default one.
|
||||||
|
if (wl_display *d = display()) {
|
||||||
|
wl_event_queue *queue = wl_display_create_queue(d);
|
||||||
|
wl_display_roundtrip_queue(d, queue);
|
||||||
|
wl_event_queue_destroy(queue);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,4 +12,7 @@ namespace Wayland
|
|||||||
// "zwlr_layer_shell_v1". Asked once, on an event queue of its own, so Qt's
|
// "zwlr_layer_shell_v1". Asked once, on an event queue of its own, so Qt's
|
||||||
// own handling of the connection is not disturbed.
|
// own handling of the connection is not disturbed.
|
||||||
bool hasGlobal(const char *interface);
|
bool hasGlobal(const char *interface);
|
||||||
|
|
||||||
|
// Wait until the compositor has handled everything sent so far.
|
||||||
|
void sync();
|
||||||
} // namespace Wayland
|
} // namespace Wayland
|
||||||
@@ -197,6 +197,7 @@ fu_do_help() {
|
|||||||
faces $(fu_msg "List the faces")
|
faces $(fu_msg "List the faces")
|
||||||
remove ID $(fu_msg "Delete a face")
|
remove ID $(fu_msg "Delete a face")
|
||||||
test $(fu_msg "Look at the camera and see what it sees")
|
test $(fu_msg "Look at the camera and see what it sees")
|
||||||
|
lock $(fu_msg "Lock the screen")
|
||||||
status $(fu_msg "Show what is on")
|
status $(fu_msg "Show what is on")
|
||||||
-h, --help $(fu_msg "Show this help")
|
-h, --help $(fu_msg "Show this help")
|
||||||
-V, --version $(fu_msg "Show the version")
|
-V, --version $(fu_msg "Show the version")
|
||||||
@@ -236,6 +237,7 @@ main() {
|
|||||||
remove|delete) fu_do_remove "$@" ;;
|
remove|delete) fu_do_remove "$@" ;;
|
||||||
test|try) fu_ensure_service && fu_test ;;
|
test|try) fu_ensure_service && fu_test ;;
|
||||||
status) fu_do_status ;;
|
status) fu_do_status ;;
|
||||||
|
lock) exec "$FU_AGENT" --lock ;;
|
||||||
|
|
||||||
-h|--help|help) fu_do_help ;;
|
-h|--help|help) fu_do_help ;;
|
||||||
-V|--version) printf '%s %s\n' "$FU_NAME" "$FU_VERSION" ;;
|
-V|--version) printf '%s %s\n' "$FU_NAME" "$FU_VERSION" ;;
|
||||||
|
|||||||
+3
-1
@@ -31,7 +31,9 @@ FU_SYSCONFIG="${FU_SYSCONFIG:-/etc/${FU_NAME}/config}"
|
|||||||
FU_UNIT_SOCKET="face-unlockd.socket"
|
FU_UNIT_SOCKET="face-unlockd.socket"
|
||||||
FU_UNIT_AGENT="face-unlock-agent.service"
|
FU_UNIT_AGENT="face-unlock-agent.service"
|
||||||
|
|
||||||
# The desktop this runs in: plasma, gnome, hyprland, niri or other.
|
# The desktop this runs in: plasma, gnome, hyprland, niri or other. All but
|
||||||
|
# the first two have a lock screen that is a program of its own, and there
|
||||||
|
# face-unlock's own one (`face-unlock lock`) is on offer.
|
||||||
case ":${XDG_CURRENT_DESKTOP:-}:" in
|
case ":${XDG_CURRENT_DESKTOP:-}:" in
|
||||||
*:KDE:*) FU_DESKTOP=plasma ;;
|
*:KDE:*) FU_DESKTOP=plasma ;;
|
||||||
*:GNOME:*) FU_DESKTOP=gnome ;;
|
*:GNOME:*) FU_DESKTOP=gnome ;;
|
||||||
|
|||||||
+39
-3
@@ -277,16 +277,20 @@ fu_ui_status() {
|
|||||||
# scope user (this user's file), sys (the system file, through sudo),
|
# scope user (this user's file), sys (the system file, through sudo),
|
||||||
# pam (the service of that name, through sudo), or group for a
|
# pam (the service of that name, through sudo), or group for a
|
||||||
# heading, with only the label after it
|
# heading, with only the label after it
|
||||||
# type bool, choice (steps through the choices) or camera
|
# type bool, choice (steps through the choices), camera, or path (typed
|
||||||
|
# in; empty for the desktop's picture)
|
||||||
# needs a bool setting this one does nothing without; it is dimmed while
|
# needs a bool setting this one does nothing without; it is dimmed while
|
||||||
# that is off
|
# that is off
|
||||||
# only lockers: only where the lock screen is a program of its own with a
|
# only lockers: only where the lock screen is a program of its own with a
|
||||||
# PAM file (Hyprland, Niri), see fu_pam_lockers_here
|
# PAM file (Hyprland, Niri), see fu_pam_lockers_here; ownlock: only
|
||||||
|
# where face-unlock's own lock screen can be used
|
||||||
FU_SETTINGS=(
|
FU_SETTINGS=(
|
||||||
"group|Lock screen"
|
"group|Lock screen"
|
||||||
"user|LockScreen|bool|yes|Unlock with your face"
|
"user|LockScreen|bool|yes|Unlock with your face"
|
||||||
"user|ScanOnWake|bool|yes|Scan when you come back||LockScreen"
|
"user|ScanOnWake|bool|yes|Scan when you come back||LockScreen"
|
||||||
"user|ScanOnLock|bool|no|Scan right after locking||LockScreen"
|
"user|ScanOnLock|bool|no|Scan right after locking||LockScreen"
|
||||||
|
"user|LockWallpaper|path||Wallpaper|||ownlock"
|
||||||
|
"user|LockBlur|bool|no|Blur the wallpaper|||ownlock"
|
||||||
"group|Password prompts"
|
"group|Password prompts"
|
||||||
"pam|sudo|bool|no|sudo in a terminal"
|
"pam|sudo|bool|no|sudo in a terminal"
|
||||||
"pam|polkit-1|bool|no|Admin prompts"
|
"pam|polkit-1|bool|no|Admin prompts"
|
||||||
@@ -315,7 +319,7 @@ fu_setting_help() {
|
|||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
hyprland:LockScreen|niri:LockScreen)
|
hyprland:LockScreen|niri:LockScreen)
|
||||||
fu_msg "Scans when you come back to hyprlock or swaylock and opens them. Any other lock screen scans when you press Enter on the empty password field."
|
fu_msg "Scans when you come back to hyprlock, swaylock or face-unlock's own lock screen (\`face-unlock lock\`, with the bubble), and opens them. Other lock screens scan on Enter."
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -324,6 +328,8 @@ fu_setting_help() {
|
|||||||
ScanOnWake:*) fu_msg "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up." ;;
|
ScanOnWake:*) fu_msg "Scans when you press a key or move the mouse on the lock screen, and when the computer wakes up." ;;
|
||||||
ScanOnLock:*) fu_msg "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away." ;;
|
ScanOnLock:*) fu_msg "Scans as soon as the screen locks. Off by default: if you lock it yourself, it would unlock again right away." ;;
|
||||||
sudo:*) fu_msg "sudo takes your face instead of the password. No match: you type the password as usual." ;;
|
sudo:*) fu_msg "sudo takes your face instead of the password. No match: you type the password as usual." ;;
|
||||||
|
LockWallpaper:*) fu_msg "The picture behind face-unlock's own lock screen (\`face-unlock lock\`). Empty: the one on your desktop. Or a file, a folder to take one from at random, or \`none\`. Enter to type it." ;;
|
||||||
|
LockBlur:*) fu_msg "Blurs the picture behind face-unlock's own lock screen." ;;
|
||||||
lockscreens:*) fu_msg "The lock screen takes your face in its password check. Press Enter on the empty field to scan. Found here: %s." "$(fu_pam_lockers_list)" ;;
|
lockscreens:*) fu_msg "The lock screen takes your face in its password check. Press Enter on the empty field to scan. Found here: %s." "$(fu_pam_lockers_list)" ;;
|
||||||
polkit-1:*) fu_msg "The password windows of your desktop and apps, for example when you install software. No match: you type the password." ;;
|
polkit-1:*) fu_msg "The password windows of your desktop and apps, for example when you install software. No match: you type the password." ;;
|
||||||
Liveness:heavy) fu_msg "You have to blink or turn your head a little. This also stops printed photos." ;;
|
Liveness:heavy) fu_msg "You have to blink or turn your head a little. This also stops printed photos." ;;
|
||||||
@@ -451,6 +457,24 @@ _fu_camera_label() {
|
|||||||
printf '%s %s' "$value" "$(fu_msg "(not connected)")"
|
printf '%s %s' "$value" "$(fu_msg "(not connected)")"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# _fu_path_label <path>
|
||||||
|
# A path as it fits in the list: with ~ for home, and cut from the left.
|
||||||
|
# Empty is the desktop's picture.
|
||||||
|
_fu_path_label() {
|
||||||
|
local path="$1"
|
||||||
|
if [[ -z $path ]]; then
|
||||||
|
fu_msg "same as desktop"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
if [[ ${path,,} == none ]]; then
|
||||||
|
fu_msg "none"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
[[ $path == "$HOME"/* ]] && path="~${path#"$HOME"}"
|
||||||
|
(( ${#path} > 36 )) && path="…${path: -35}"
|
||||||
|
printf '%s' "$path"
|
||||||
|
}
|
||||||
|
|
||||||
# _fu_setting_change <scope> <Key> <type> <current> <choices> <step>
|
# _fu_setting_change <scope> <Key> <type> <current> <choices> <step>
|
||||||
_fu_setting_change() {
|
_fu_setting_change() {
|
||||||
local scope="$1" key="$2" type="$3" current="$4" options="$5" step="$6" next
|
local scope="$1" key="$2" type="$3" current="$4" options="$5" step="$6" next
|
||||||
@@ -459,6 +483,16 @@ _fu_setting_change() {
|
|||||||
bool) if fu_is_true "$current"; then next=no; else next=yes; fi ;;
|
bool) if fu_is_true "$current"; then next=no; else next=yes; fi ;;
|
||||||
choice) next="$(_fu_next_choice "$current" "$options" "$step")" ;;
|
choice) next="$(_fu_next_choice "$current" "$options" "$step")" ;;
|
||||||
camera) next="$(_fu_next_camera "$current" "$step")" ;;
|
camera) next="$(_fu_next_camera "$current" "$step")" ;;
|
||||||
|
path)
|
||||||
|
printf '\n %s ' "$(fu_msg "Picture or folder:")"
|
||||||
|
fu_ui_read_line "$current" || return 0
|
||||||
|
next="$FU_LINE_RESULT"
|
||||||
|
# shellcheck disable=SC2088 # typed by the user, expanded here
|
||||||
|
if [[ -n $next && ${next,,} != none && ! -e ${next/#\~/$HOME} ]]; then
|
||||||
|
fu_bad "$(fu_msg "Not found: %s" "$next")"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
case "$scope" in
|
case "$scope" in
|
||||||
@@ -501,6 +535,7 @@ fu_ui_settings() {
|
|||||||
for spec in "${FU_SETTINGS[@]}"; do
|
for spec in "${FU_SETTINGS[@]}"; do
|
||||||
IFS='|' read -r scope key type default label choice need only <<< "$spec"
|
IFS='|' read -r scope key type default label choice need only <<< "$spec"
|
||||||
[[ $only == lockers ]] && ! fu_pam_lockers_here && continue
|
[[ $only == lockers ]] && ! fu_pam_lockers_here && continue
|
||||||
|
[[ $only == ownlock && ( $FU_DESKTOP == plasma || $FU_DESKTOP == gnome ) ]] && continue
|
||||||
# A heading has its label where the key would be.
|
# A heading has its label where the key would be.
|
||||||
[[ $scope == group ]] && label="$key" key=''
|
[[ $scope == group ]] && label="$key" key=''
|
||||||
scopes+=("$scope"); keys+=("$key"); types+=("$type"); defaults+=("$default")
|
scopes+=("$scope"); keys+=("$key"); types+=("$type"); defaults+=("$default")
|
||||||
@@ -568,6 +603,7 @@ fu_ui_settings() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
camera) shown="$(_fu_camera_label "${values[i]}")" ;;
|
camera) shown="$(_fu_camera_label "${values[i]}")" ;;
|
||||||
|
path) shown="$(_fu_path_label "${values[i]}")" ;;
|
||||||
*) shown="$(fu_value_label "${keys[i]}" "${values[i]}")" ;;
|
*) shown="$(fu_value_label "${keys[i]}" "${values[i]}")" ;;
|
||||||
esac
|
esac
|
||||||
# Arrows on the selected choice: left and right step through it.
|
# Arrows on the selected choice: left and right step through it.
|
||||||
|
|||||||
@@ -0,0 +1,85 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
//
|
||||||
|
// The password on face-unlock's own lock screen, through real PAM but with
|
||||||
|
// PAM files of its own (FU_PAM_CONFDIR), so no test ever counts as a wrong
|
||||||
|
// password for the real account.
|
||||||
|
|
||||||
|
#include "lockscreencontroller.h"
|
||||||
|
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QTemporaryDir>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
int failures = 0;
|
||||||
|
|
||||||
|
void check(bool ok, const char *what)
|
||||||
|
{
|
||||||
|
std::printf("%s %s\n", ok ? "ok " : "FAIL", what);
|
||||||
|
if (!ok) {
|
||||||
|
++failures;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Types the password into a fresh controller and waits for the verdict:
|
||||||
|
// 1 let in, 0 refused, -1 no answer.
|
||||||
|
int attempt(const QString &stack, const QString &password, QString *message = nullptr)
|
||||||
|
{
|
||||||
|
QTemporaryDir dir;
|
||||||
|
QFile file(dir.filePath(QStringLiteral("face-unlock-lock")));
|
||||||
|
if (!file.open(QIODevice::WriteOnly)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
file.write(stack.toUtf8());
|
||||||
|
file.close();
|
||||||
|
qputenv("FU_PAM_CONFDIR", dir.path().toLocal8Bit());
|
||||||
|
|
||||||
|
LockScreenController lock;
|
||||||
|
int verdict = -1;
|
||||||
|
QObject::connect(&lock, &LockScreenController::authenticated, [&] {
|
||||||
|
verdict = 1;
|
||||||
|
QCoreApplication::quit();
|
||||||
|
});
|
||||||
|
QObject::connect(&lock, &LockScreenController::rejected, [&] {
|
||||||
|
verdict = 0;
|
||||||
|
QCoreApplication::quit();
|
||||||
|
});
|
||||||
|
QTimer::singleShot(5000, &QCoreApplication::quit);
|
||||||
|
lock.setPassword(password);
|
||||||
|
lock.submit();
|
||||||
|
QCoreApplication::exec();
|
||||||
|
if (message) {
|
||||||
|
*message = lock.message();
|
||||||
|
}
|
||||||
|
check(lock.password().isEmpty(), "the password is gone once it was checked");
|
||||||
|
return verdict;
|
||||||
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QCoreApplication app(argc, argv);
|
||||||
|
|
||||||
|
check(attempt(QStringLiteral("auth required pam_permit.so\n"), QStringLiteral("secret")) == 1, "a stack that says yes unlocks");
|
||||||
|
|
||||||
|
QString message;
|
||||||
|
check(attempt(QStringLiteral("auth required pam_deny.so\n"), QStringLiteral("secret"), &message) == 0, "a stack that says no does not");
|
||||||
|
check(!message.isEmpty(), "and the screen says so");
|
||||||
|
|
||||||
|
// Nothing typed: nothing to check, and nothing happens.
|
||||||
|
LockScreenController empty;
|
||||||
|
bool answered = false;
|
||||||
|
QObject::connect(&empty, &LockScreenController::authenticated, [&] {
|
||||||
|
answered = true;
|
||||||
|
});
|
||||||
|
empty.submit();
|
||||||
|
check(!empty.busy() && !answered, "an empty password is not sent");
|
||||||
|
|
||||||
|
std::printf("\n%s\n", failures ? "SOME CHECKS FAILED" : "all checks passed");
|
||||||
|
return failures ? 1 : 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
//
|
||||||
|
// The desktop's picture for face-unlock's own lock screen, from what the
|
||||||
|
// wallpaper programs say (real output of swaybg 1.2, awww 0.12, swww 0.9,
|
||||||
|
// hyprpaper 0.7 and 0.8, wpaperd 1.3), and what the setting picks.
|
||||||
|
|
||||||
|
#include "wallpaper.h"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QTemporaryDir>
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
int failures = 0;
|
||||||
|
|
||||||
|
void check(bool ok, const char *what)
|
||||||
|
{
|
||||||
|
std::printf("%s %s\n", ok ? "ok " : "FAIL", what);
|
||||||
|
if (!ok) {
|
||||||
|
++failures;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
using Map = QHash<QString, QString>;
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
check(Wallpaper::fromSwaybg({QStringLiteral("-i"), QStringLiteral("/w/a.jpg"), QStringLiteral("-m"), QStringLiteral("fill")})
|
||||||
|
== Map{{QString(), QStringLiteral("/w/a.jpg")}},
|
||||||
|
"swaybg: one picture everywhere");
|
||||||
|
check(Wallpaper::fromSwaybg({QStringLiteral("-o"), QStringLiteral("eDP-1"), QStringLiteral("-i"), QStringLiteral("/w/a.jpg"), QStringLiteral("--output=DP-2"),
|
||||||
|
QStringLiteral("--image=/w/b.png"), QStringLiteral("-o"), QStringLiteral("*"), QStringLiteral("-c"), QStringLiteral("000000")})
|
||||||
|
== Map{{QStringLiteral("eDP-1"), QStringLiteral("/w/a.jpg")}, {QStringLiteral("DP-2"), QStringLiteral("/w/b.png")}},
|
||||||
|
"swaybg: one per output, a colour is no picture");
|
||||||
|
|
||||||
|
check(Wallpaper::fromAwww(QStringLiteral(": winit: 1280x742, scale: 1, currently displaying: image: /w/my pic.jpg\n"))
|
||||||
|
== Map{{QStringLiteral("winit"), QStringLiteral("/w/my pic.jpg")}},
|
||||||
|
"awww: with the namespace in front, spaces in the path");
|
||||||
|
check(Wallpaper::fromAwww(QStringLiteral("eDP-1: 1920x1080, scale: 1, currently displaying: image: /w/a.jpg\n"
|
||||||
|
"DP-2: 2560x1440, scale: 1, currently displaying: color: 000000\n"))
|
||||||
|
== Map{{QStringLiteral("eDP-1"), QStringLiteral("/w/a.jpg")}},
|
||||||
|
"swww: a colour is no picture");
|
||||||
|
|
||||||
|
check(Wallpaper::fromList(QStringLiteral("WAYLAND-1: /w/a.jpg\nDP-2: /w/b.png\n"))
|
||||||
|
== Map{{QStringLiteral("WAYLAND-1"), QStringLiteral("/w/a.jpg")}, {QStringLiteral("DP-2"), QStringLiteral("/w/b.png")}},
|
||||||
|
"hyprpaper 0.8 and wpaperd");
|
||||||
|
check(Wallpaper::fromList(QStringLiteral("eDP-1 = /w/a.jpg\n")) == Map{{QStringLiteral("eDP-1"), QStringLiteral("/w/a.jpg")}}, "hyprpaper 0.7");
|
||||||
|
check(Wallpaper::fromList(QStringLiteral("no wallpapers active\n")).isEmpty(), "nothing shown, nothing found");
|
||||||
|
|
||||||
|
QTemporaryDir dir;
|
||||||
|
QFile a(dir.filePath(QStringLiteral("a.jpg")));
|
||||||
|
check(a.open(QIODevice::WriteOnly), "a picture to point at");
|
||||||
|
a.close();
|
||||||
|
const QUrl url = QUrl::fromLocalFile(a.fileName());
|
||||||
|
|
||||||
|
check(Wallpaper::forLock(QStringLiteral("none")).isEmpty(), "none is none");
|
||||||
|
check(Wallpaper::forLock(a.fileName()) == QHash<QString, QUrl>{{QString(), url}}, "a picture set goes everywhere");
|
||||||
|
check(Wallpaper::forLock(dir.path()) == QHash<QString, QUrl>{{QString(), url}}, "a folder set gives one from it");
|
||||||
|
check(Wallpaper::forLock(dir.filePath(QStringLiteral("gone.jpg"))).isEmpty(), "a picture that is gone gives none");
|
||||||
|
|
||||||
|
const QUrl b = QUrl::fromLocalFile(QStringLiteral("/w/b.png"));
|
||||||
|
const QHash<QString, QUrl> both{{QStringLiteral("eDP-1"), url}, {QString(), b}};
|
||||||
|
check(Wallpaper::pick(both, QStringLiteral("eDP-1")) == url, "an output gets its own");
|
||||||
|
check(Wallpaper::pick(both, QStringLiteral("DP-2")) == b, "else the one for all");
|
||||||
|
check(Wallpaper::pick({{QStringLiteral("eDP-1"), url}}, QStringLiteral("winit")) == url, "else any of the desktop's");
|
||||||
|
check(Wallpaper::pick({}, QStringLiteral("eDP-1")).isEmpty(), "and none when there is none");
|
||||||
|
|
||||||
|
std::printf("\n%s\n", failures ? "SOME CHECKS FAILED" : "all checks passed");
|
||||||
|
return failures ? 1 : 0;
|
||||||
|
}
|
||||||
Reference in new issue
Block a user