diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 36dac9ba..301078e6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,7 +36,7 @@ jobs: curl git build-essential \ libgtk-4-dev libclang-dev libdbus-1-dev libssl-dev libudev-dev libnfc-dev \ libpcsclite-dev libxml2-utils \ - desktop-file-utils gettext ninja-build python3-pip \ + appstream-util gettext ninja-build python3-pip \ udev zip - name: Set up mold as default linker diff --git a/BUILDING.md b/BUILDING.md index 951806be..0a59693e 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -23,7 +23,6 @@ To build, you need the following utility packages and development library packag - libpcsclite - libssl/openssl - libudev -- desktop-file-utils Using the web extension also requires `python3-dbus-next`. @@ -39,8 +38,6 @@ sudo apt update && sudo apt install \ meson ninja-build \ # project dependencies libgtk-4-dev gettext libdbus-1-dev libnfc-dev libpcsclite-dev libssl-dev libudev-dev \ - # packaging dependencies - desktop-file-utils \ # web extension dependencies python3-dbus-next ``` @@ -56,8 +53,6 @@ sudo dnf install \ meson ninja-build \ # project dependencies gtk4-devel gettext dbus-devel libnfc-devel pcsc-lite-devel openssl-devel systemd-udev \ - # packaging dependencies - desktop-file-utils \ # web extension dependencies python3-dbus-next ``` diff --git a/credentialsd-common/src/model.rs b/credentialsd-common/src/model.rs index fd56e704..9fb76f12 100644 --- a/credentialsd-common/src/model.rs +++ b/credentialsd-common/src/model.rs @@ -140,7 +140,12 @@ pub type RequestId = u32; // TODO: Move to credentialsd-ui #[derive(Debug, Clone, Serialize, Deserialize)] pub enum ViewUpdate { - SetTitle((String, String)), + SetTitle { + title: String, + subtitle: String, + qr_prompt: String, + usb_prompt: String, + }, SetDevices(Vec), // TODO: Fix this SetCredentials(Vec), @@ -148,8 +153,12 @@ pub enum ViewUpdate { WaitingForDevice(Device), SelectingDevice, - NeedsPin { attempts_left: Option }, - NeedsUserVerification { attempts_left: Option }, + NeedsPin { + attempts_left: Option, + }, + NeedsUserVerification { + attempts_left: Option, + }, NeedsUserPresence, HybridNeedsQrCode(String), diff --git a/credentialsd-ui/data/icons/dialpad-symbolic.svg b/credentialsd-ui/data/icons/dialpad-symbolic.svg deleted file mode 100644 index 5b16830f..00000000 --- a/credentialsd-ui/data/icons/dialpad-symbolic.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/credentialsd-ui/data/icons/fingerprint-symbolic.svg b/credentialsd-ui/data/icons/fingerprint-symbolic.svg deleted file mode 100644 index ba704cfa..00000000 --- a/credentialsd-ui/data/icons/fingerprint-symbolic.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/credentialsd-ui/data/icons/meson.build b/credentialsd-ui/data/icons/meson.build deleted file mode 100644 index 2ab86e9d..00000000 --- a/credentialsd-ui/data/icons/meson.build +++ /dev/null @@ -1,10 +0,0 @@ -install_data( - '@0@.svg'.format(application_id), - install_dir: iconsdir / 'hicolor' / 'scalable' / 'apps' -) - -install_data( - '@0@-symbolic.svg'.format(base_id), - install_dir: iconsdir / 'hicolor' / 'symbolic' / 'apps', - rename: '@0@-symbolic.svg'.format(application_id) -) diff --git a/credentialsd-ui/data/icons/symbolic-link-symbolic.svg b/credentialsd-ui/data/icons/symbolic-link-symbolic.svg deleted file mode 100644 index 05a512c9..00000000 --- a/credentialsd-ui/data/icons/symbolic-link-symbolic.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/credentialsd-ui/data/meson.build b/credentialsd-ui/data/meson.build index 8960582c..382ec5e5 100644 --- a/credentialsd-ui/data/meson.build +++ b/credentialsd-ui/data/meson.build @@ -1,29 +1,4 @@ -subdir('icons') subdir('resources') -# Desktop file -desktop_conf = configuration_data() -desktop_conf.set('icon', application_id) -desktop_file = i18n.merge_file( - type: 'desktop', - input: configure_file( - input: '@0@.desktop.in.in'.format(base_id), - output: '@BASENAME@', - configuration: desktop_conf, - ), - output: '@0@.desktop'.format(application_id), - po_dir: podir, - install: true, - install_dir: datadir / 'applications', -) -# Validate Desktop file -if desktop_file_validate.found() - test( - 'validate-desktop', - desktop_file_validate, - args: [desktop_file.full_path()], - depends: desktop_file, - ) -endif # Appdata appdata_conf = configuration_data() diff --git a/credentialsd-ui/data/resources/icons/copy-icons.py b/credentialsd-ui/data/resources/icons/copy-icons.py new file mode 100755 index 00000000..9beb230d --- /dev/null +++ b/credentialsd-ui/data/resources/icons/copy-icons.py @@ -0,0 +1,18 @@ +#!/usr/bin/python3 +from pathlib import Path +import shutil +import sys + + +src_dir = Path(sys.argv[1]) +build_dir = Path(sys.argv[2]) +paths = [Path(p) for p in sys.argv[3:]] + +for p in paths: + rel_path = p.relative_to(src_dir) + target = build_dir / rel_path + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(p, target) + +# Touch the file to update modification time +(build_dir / "icons-copied").touch() diff --git a/credentialsd-ui/data/resources/icons/meson.build b/credentialsd-ui/data/resources/icons/meson.build new file mode 100644 index 00000000..d25073ec --- /dev/null +++ b/credentialsd-ui/data/resources/icons/meson.build @@ -0,0 +1,20 @@ +install_data( + '@0@.svg'.format(application_id), + install_dir: iconsdir / 'hicolor' / 'scalable' / 'apps', +) + +install_data( + '@0@-symbolic.svg'.format(base_id), + install_dir: iconsdir / 'hicolor' / 'symbolic' / 'apps', + rename: '@0@-symbolic.svg'.format(application_id), +) + +copy_icons = find_program('copy-icons.py') +icons = custom_target( + command: [copy_icons, '@CURRENT_SOURCE_DIR@', '@OUTDIR@', '@INPUT@'], + input: files( + 'scalable/emblems/passkey-logo.svg', + 'symbolic/status/check-round-outline-symbolic.svg', + ), + output: 'icons-copied', +) \ No newline at end of file diff --git a/credentialsd-ui/data/resources/icons/scalable/emblems/passkey-logo.svg b/credentialsd-ui/data/resources/icons/scalable/emblems/passkey-logo.svg new file mode 100644 index 00000000..7adfbc60 --- /dev/null +++ b/credentialsd-ui/data/resources/icons/scalable/emblems/passkey-logo.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/credentialsd-ui/data/icons/check-round-outline-symbolic.svg b/credentialsd-ui/data/resources/icons/symbolic/status/check-round-outline-symbolic.svg similarity index 100% rename from credentialsd-ui/data/icons/check-round-outline-symbolic.svg rename to credentialsd-ui/data/resources/icons/symbolic/status/check-round-outline-symbolic.svg diff --git a/credentialsd-ui/data/icons/xyz.iinuwa.credentialsd.CredentialsUi-symbolic.svg b/credentialsd-ui/data/resources/icons/xyz.iinuwa.credentialsd.CredentialsUi-symbolic.svg similarity index 100% rename from credentialsd-ui/data/icons/xyz.iinuwa.credentialsd.CredentialsUi-symbolic.svg rename to credentialsd-ui/data/resources/icons/xyz.iinuwa.credentialsd.CredentialsUi-symbolic.svg diff --git a/credentialsd-ui/data/icons/xyz.iinuwa.credentialsd.CredentialsUi.Devel.svg b/credentialsd-ui/data/resources/icons/xyz.iinuwa.credentialsd.CredentialsUi.Devel.svg similarity index 100% rename from credentialsd-ui/data/icons/xyz.iinuwa.credentialsd.CredentialsUi.Devel.svg rename to credentialsd-ui/data/resources/icons/xyz.iinuwa.credentialsd.CredentialsUi.Devel.svg diff --git a/credentialsd-ui/data/icons/xyz.iinuwa.credentialsd.CredentialsUi.svg b/credentialsd-ui/data/resources/icons/xyz.iinuwa.credentialsd.CredentialsUi.svg similarity index 100% rename from credentialsd-ui/data/icons/xyz.iinuwa.credentialsd.CredentialsUi.svg rename to credentialsd-ui/data/resources/icons/xyz.iinuwa.credentialsd.CredentialsUi.svg diff --git a/credentialsd-ui/data/resources/meson.build b/credentialsd-ui/data/resources/meson.build index 6419ccd3..678172af 100644 --- a/credentialsd-ui/data/resources/meson.build +++ b/credentialsd-ui/data/resources/meson.build @@ -1,3 +1,4 @@ +subdir('icons') subdir('ui') # Resources @@ -8,5 +9,8 @@ resources = gnome.compile_resources( source_dir: meson.current_build_dir(), install: true, install_dir: pkgdatadir, - dependencies: blueprint_templates, -) + dependencies: [ + blueprint_templates, + icons, + ], +) \ No newline at end of file diff --git a/credentialsd-ui/data/resources/resources.gresource.xml b/credentialsd-ui/data/resources/resources.gresource.xml index c1edc63b..f5301e84 100644 --- a/credentialsd-ui/data/resources/resources.gresource.xml +++ b/credentialsd-ui/data/resources/resources.gresource.xml @@ -3,5 +3,7 @@ ui/window.ui style.css + icons/scalable/emblems/passkey-logo.svg + icons/symbolic/status/check-round-outline-symbolic.svg diff --git a/credentialsd-ui/data/resources/style.css b/credentialsd-ui/data/resources/style.css index 962d5d51..1879c79e 100644 --- a/credentialsd-ui/data/resources/style.css +++ b/credentialsd-ui/data/resources/style.css @@ -26,7 +26,17 @@ padding-left: 0px; } +.hero { + margin-bottom: 24px; +} + separator { margin-top: 12px; margin-bottom: 12px; +} + +.instructions { + font-size: 1.2em; + font-weight: bold; + margin-bottom: 12px; } \ No newline at end of file diff --git a/credentialsd-ui/data/resources/ui/window.blp b/credentialsd-ui/data/resources/ui/window.blp index b1df8d67..6528bd87 100644 --- a/credentialsd-ui/data/resources/ui/window.blp +++ b/credentialsd-ui/data/resources/ui/window.blp @@ -8,8 +8,8 @@ template $CredentialsUiWindow: ApplicationWindow { orientation: vertical; halign: center; width-request: 600; - margin-start: 160; - margin-end: 160; + margin-start: 32; + margin-end: 32; margin-bottom: 48; spacing: 10; @@ -23,14 +23,14 @@ template $CredentialsUiWindow: ApplicationWindow { Box { orientation: vertical; - margin-start: 48; - margin-end: 48; + margin-start: 100; + margin-end: 100; Label { label: bind template.view-model as <$CredentialManagerViewModel>.subtitle; wrap: true; use-markup: true; - width-request: 600; + width-request: 550; styles [ "subtitle-header", @@ -79,7 +79,7 @@ template $CredentialsUiWindow: ApplicationWindow { halign: start; valign: start; hexpand: true; - label: _("Scan the QR code using the camera on the device that has the passkey for {%s}"); + label: bind template.view-model as <$CredentialManagerViewModel>.scan_qr_prompt; wrap: true; } @@ -90,7 +90,7 @@ template $CredentialsUiWindow: ApplicationWindow { width-request: 400; Picture qr_code_pic { - height-request: 100; + height-request: 300; vexpand: false; halign: center; valign: center; @@ -106,6 +106,19 @@ template $CredentialsUiWindow: ApplicationWindow { "qr-code", ] } + + [overlay] + Image { + pixel-size: 96; + halign: center; + valign: center; + // TODO: Figure out why this doesn't work as icon-name: 'passkey-logo'; + resource: "/xyz/iinuwa/credentialsd/CredentialsUi/icons/scalable/emblems/passkey-logo.svg"; + + accessibility { + label: "FIDO passkey logo"; + } + } } } @@ -137,7 +150,7 @@ template $CredentialsUiWindow: ApplicationWindow { halign: start; valign: start; xalign: 0; - label: _("Insert and activate your security key to use it for (%s)"); + label: bind template.view-model as <$CredentialManagerViewModel>.activate_usb_prompt; wrap: true; } } @@ -153,6 +166,14 @@ template $CredentialsUiWindow: ApplicationWindow { Image { icon-name: "media-removable-symbolic"; + pixel-size: 120; + icon-size: large; + height-request: 120; + width-request: 120; + + styles [ + "hero", + ] accessibility { labelled-by: security_key_label; @@ -161,12 +182,20 @@ template $CredentialsUiWindow: ApplicationWindow { Label security_key_label { label: bind template.view-model as <$CredentialManagerViewModel>.prompt; + wrap: true; + width-request: 300; + + styles [ + "instructions", + ] } PasswordEntry usb_nfc_pin_entry { activate => $handle_usb_nfc_pin_entered() swapped; + show => $handle_usb_nfc_pin_shown() swapped; visible: bind template.view-model as <$CredentialManagerViewModel>.usb_nfc_pin_entry_visible; placeholder-text: _("Enter your device PIN"); + can-focus: true; } }; } @@ -178,12 +207,37 @@ template $CredentialsUiWindow: ApplicationWindow { child: Box { orientation: vertical; - Spinner { - visible: bind template.view-model as <$CredentialManagerViewModel>.qr_spinner_visible; + Image { + icon-name: "phone-symbolic"; + icon-size: large; + pixel-size: 120; + height-request: 120; + width-request: 120; + + styles [ + "hero", + ] + + accessibility { + label: "Mobile device icon"; + } } Label { label: bind template.view-model as <$CredentialManagerViewModel>.prompt; + wrap: true; + width-request: 300; + + styles [ + "instructions", + ] + } + + Spinner { + height-request: 120; + margin-top: 16; + visible: bind template.view-model as <$CredentialManagerViewModel>.qr_spinner_visible; + spinning: bind template.view-model as <$CredentialManagerViewModel>.qr_spinner_visible; } }; } @@ -214,8 +268,28 @@ template $CredentialsUiWindow: ApplicationWindow { child: Box { orientation: vertical; + Image { + icon-name: "face-smile-symbolic"; + pixel-size: 120; + icon-size: large; + height-request: 120; + width-request: 120; + + styles [ + "hero", + ] + + accessibility { + label: "Success icon"; + } + } + Label { label: _("Done!"); + + styles [ + "instructions", + ] } }; } diff --git a/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in b/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in deleted file mode 100644 index 0874b60c..00000000 --- a/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in +++ /dev/null @@ -1,12 +0,0 @@ -[Desktop Entry] -Name=Credential Manager -Comment=Write a GTK + Rust application -Type=Application -Exec=credentialsd -Terminal=false -Categories=GNOME;GTK; -# Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! -Keywords=Gnome;GTK; -# Translators: Do NOT translate or transliterate this text (this is an icon file name)! -Icon=@icon@ -StartupNotify=true diff --git a/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in b/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in index 60e0df43..b52e8838 100644 --- a/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in +++ b/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in @@ -1,17 +1,5 @@ - - 600 - Window width - - - 400 - Window height - - - false - Window maximized state - diff --git a/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in b/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in index af007ed6..4a468344 100644 --- a/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in +++ b/credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in @@ -1,23 +1,24 @@ - + + + @app-id@ CC0 - - - Credential Manager - Write a GTK + Rust application + LGPL-3.0-only + credentialsd-ui + A UI for interacting with credentialsd -

A boilerplate template for GTK + Rust. It uses Meson as a build system and has flatpak support by default.

+

Displays a UI for registering and creating credentials with credentialsd.

- https://github.com/iinuwa/linux-webauthn-platform-api/raw/main/images/register-start.png + https://github.com/linux-credentials/credentialsd/raw/main/images/register-start.png Registering a credential - https://github.com/iinuwa/linux-webauthn-platform-api - https://github.com/iinuwa/linux-webauthn-platform-api/issues + https://github.com/linux-credentials/credentialsd + https://github.com/linux-credentials/credentialsd/issues @@ -37,7 +38,7 @@ Isaiah Inuwa - isaiah.inuwa@gmail.com + dev@iinuwa.xyz @gettext-package@ @app-id@.desktop
diff --git a/credentialsd-ui/meson.build b/credentialsd-ui/meson.build index a3525f12..2ac53d5f 100644 --- a/credentialsd-ui/meson.build +++ b/credentialsd-ui/meson.build @@ -17,7 +17,6 @@ glib_compile_schemas = find_program('glib-compile-schemas', required: true) msgfmt = find_program('msgfmt', required: false) xmllint = find_program('xmllint', required: false) -desktop_file_validate = find_program('desktop-file-validate', required: false) appstreamcli = find_program('appstreamcli', required: false) cargo = find_program('cargo', required: true) @@ -83,5 +82,5 @@ subdir('src') gnome.post_install( gtk_update_icon_cache: true, glib_compile_schemas: true, - update_desktop_database: true, + update_desktop_database: false, ) \ No newline at end of file diff --git a/credentialsd-ui/po/POTFILES.in b/credentialsd-ui/po/POTFILES.in index 3071cac3..2569d84e 100644 --- a/credentialsd-ui/po/POTFILES.in +++ b/credentialsd-ui/po/POTFILES.in @@ -1,7 +1,6 @@ -data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in -data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in -data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in -data/resources/ui/window.blp -src/gui/view_model/gtk/mod.rs -src/gui/view_model/gtk/device.rs -src/gui/view_model/mod.rs +credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in +credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in +credentialsd-ui/data/resources/ui/window.blp +credentialsd-ui/src/gui/view_model/gtk/mod.rs +credentialsd-ui/src/gui/view_model/gtk/device.rs +credentialsd-ui/src/gui/view_model/mod.rs diff --git a/credentialsd-ui/po/credentialsd-ui.pot b/credentialsd-ui/po/credentialsd-ui.pot index 6f15d5e8..5ed55b70 100644 --- a/credentialsd-ui/po/credentialsd-ui.pot +++ b/credentialsd-ui/po/credentialsd-ui.pot @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: credentialsd-ui\n" "Report-Msgid-Bugs-To: \"https://github.com/linux-credentials/credentialsd/" "issues\"\n" -"POT-Creation-Date: 2026-02-03 10:40+0100\n" +"POT-Creation-Date: 2026-06-18 07:18-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,190 +19,155 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:2 -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:8 -#: src/gui/view_model/gtk/mod.rs:385 -msgid "Credential Manager" -msgstr "" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:3 -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:9 -msgid "Write a GTK + Rust application" -msgstr "" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:9 -msgid "Gnome;GTK;" +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:9 +msgid "credentialsd-ui" msgstr "" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:6 -msgid "Window width" +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:10 +msgid "A UI for interacting with credentialsd" msgstr "" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:10 -msgid "Window height" -msgstr "" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:14 -msgid "Window maximized state" -msgstr "" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:11 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:12 msgid "" -"A boilerplate template for GTK + Rust. It uses Meson as a build system and " -"has flatpak support by default." +"Displays a UI for registering and creating credentials with credentialsd." msgstr "" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:16 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:17 msgid "Registering a credential" msgstr "" #. developer_name tag deprecated with Appstream 1.0 -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:34 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:36 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:39 msgid "Isaiah Inuwa" msgstr "" -#: data/resources/ui/shortcuts.ui:11 -msgctxt "shortcut window" -msgid "General" -msgstr "" - -#: data/resources/ui/shortcuts.ui:14 -msgctxt "shortcut window" -msgid "Show Shortcuts" -msgstr "" - -#: data/resources/ui/shortcuts.ui:20 -msgctxt "shortcut window" -msgid "Quit" -msgstr "" - -#: data/resources/ui/window.ui:6 -msgid "_Preferences" +#: credentialsd-ui/data/resources/ui/window.blp:48 +msgid "Choose device" msgstr "" -#: data/resources/ui/window.ui:10 -msgid "_Keyboard Shortcuts" +#: credentialsd-ui/data/resources/ui/window.blp:72 +msgid "Use a mobile device" msgstr "" -#: data/resources/ui/window.ui:68 -msgid "Choose device" +#: credentialsd-ui/data/resources/ui/window.blp:145 +msgid "Use your security key" msgstr "" -#: data/resources/ui/window.ui:74 -msgid "Devices" +#: credentialsd-ui/data/resources/ui/window.blp:162 +msgid "Connect a security key" msgstr "" -#: data/resources/ui/window.ui:98 -msgid "Connect a security key" +#: credentialsd-ui/data/resources/ui/window.blp:197 +msgid "Enter your device PIN" msgstr "" -#: data/resources/ui/window.ui:139 +#: credentialsd-ui/data/resources/ui/window.blp:205 msgid "Scan the QR code to connect your device" msgstr "" -#: data/resources/ui/window.ui:184 data/resources/ui/window.ui:190 +#: credentialsd-ui/data/resources/ui/window.blp:247 +#: credentialsd-ui/data/resources/ui/window.blp:253 msgid "Choose credential" msgstr "" -#: data/resources/ui/window.ui:214 +#: credentialsd-ui/data/resources/ui/window.blp:266 msgid "Complete" msgstr "" -#: data/resources/ui/window.ui:220 +#: credentialsd-ui/data/resources/ui/window.blp:288 msgid "Done!" msgstr "" -#: data/resources/ui/window.ui:231 +#: credentialsd-ui/data/resources/ui/window.blp:299 msgid "Something went wrong." msgstr "" -#: data/resources/ui/window.ui:244 src/gui/view_model/mod.rs:290 -msgid "" -"Something went wrong while retrieving a credential. Please try again later " -"or use a different authenticator." -msgstr "" - -#: src/gui/view_model/gtk/mod.rs:147 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:159 msgid "Enter your PIN. One attempt remaining." msgid_plural "Enter your PIN. %d attempts remaining." msgstr[0] "" msgstr[1] "" -#: src/gui/view_model/gtk/mod.rs:153 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:165 msgid "Enter your PIN." msgstr "" -#: src/gui/view_model/gtk/mod.rs:163 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:174 msgid "Touch your device again. One attempt remaining." msgid_plural "Touch your device again. %d attempts remaining." msgstr[0] "" msgstr[1] "" -#: src/gui/view_model/gtk/mod.rs:169 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:180 msgid "Touch your device." msgstr "" -#: src/gui/view_model/gtk/mod.rs:174 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:185 msgid "Touch your device" msgstr "" -#: src/gui/view_model/gtk/mod.rs:177 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:188 msgid "Scan the QR code with your device to begin authentication." msgstr "" -#: src/gui/view_model/gtk/mod.rs:187 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:201 msgid "" "Connecting to your device. Make sure both devices are near each other and " "have Bluetooth enabled." msgstr "" -#: src/gui/view_model/gtk/mod.rs:195 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:209 msgid "Device connected. Follow the instructions on your device" msgstr "" -#: src/gui/view_model/gtk/mod.rs:321 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:298 msgid "Insert your security key." msgstr "" -#: src/gui/view_model/gtk/mod.rs:340 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:317 msgid "Multiple devices found. Please select with which to proceed." msgstr "" -#: src/gui/view_model/gtk/device.rs:57 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:362 +msgid "Credential Manager" +msgstr "" + +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:57 msgid "A Bluetooth device" msgstr "" -#: src/gui/view_model/gtk/device.rs:58 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:58 msgid "This device" msgstr "" -#: src/gui/view_model/gtk/device.rs:59 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:59 msgid "A mobile device" msgstr "" -#: src/gui/view_model/gtk/device.rs:60 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:60 msgid "Linked Device" msgstr "" -#: src/gui/view_model/gtk/device.rs:61 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:61 msgid "An security key or card (NFC)" msgstr "" -#: src/gui/view_model/gtk/device.rs:62 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:62 msgid "A security key (USB)" msgstr "" -#: src/gui/view_model/mod.rs:75 +#: credentialsd-ui/src/gui/view_model/mod.rs:64 msgid "unknown application" msgstr "" #. TRANSLATORS: %s1 is the "relying party" (think: domain name) where the request is coming from -#: src/gui/view_model/mod.rs:80 +#: credentialsd-ui/src/gui/view_model/mod.rs:80 msgid "Create a passkey for %s1" msgstr "" #. TRANSLATORS: %s1 is the "relying party" (think: domain name) where the request is coming from -#: src/gui/view_model/mod.rs:84 +#: credentialsd-ui/src/gui/view_model/mod.rs:84 msgid "Use a passkey for %s1" msgstr "" @@ -210,7 +175,7 @@ msgstr "" #. TRANSLATORS: %s2 is the application name (e.g.: firefox) where the request is coming from, must be left untouched to make the name bold #. TRANSLATORS: %i1 is the process ID of the requesting application #. TRANSLATORS: %s3 is the absolute path (think: /usr/bin/firefox) of the requesting application -#: src/gui/view_model/mod.rs:96 +#: credentialsd-ui/src/gui/view_model/mod.rs:96 msgid "" "\"%s2\" (process ID: %i1, binary: %s3) is asking to create a " "credential to register at \"%s1\". Only proceed if you trust this process." @@ -220,36 +185,53 @@ msgstr "" #. TRANSLATORS: %s2 is the application name (e.g.: firefox) where the request is coming from, must be left untouched to make the name bold #. TRANSLATORS: %i1 is the process ID of the requesting application #. TRANSLATORS: %s3 is the absolute path (think: /usr/bin/firefox) of the requesting application -#: src/gui/view_model/mod.rs:103 +#: credentialsd-ui/src/gui/view_model/mod.rs:103 msgid "" "\"%s2\" (process ID: %i1, binary: %s3) is asking to use a credential " "to sign in to \"%s1\". Only proceed if you trust this process." msgstr "" -#: src/gui/view_model/mod.rs:227 +#. TRANSLATORS: %s1 is the relying party (think: domain name) where the request is coming from +#: credentialsd-ui/src/gui/view_model/mod.rs:115 +msgid "" +"Scan the QR code using the camera on the device that has the passkey for %s1" +msgstr "" + +#. TRANSLATORS: %s1 is the relying party (think: domain name) where the request is coming from +#: credentialsd-ui/src/gui/view_model/mod.rs:118 +msgid "Insert and activate your security key to use it for %s1" +msgstr "" + +#: credentialsd-ui/src/gui/view_model/mod.rs:181 msgid "Failed to select credential from device." msgstr "" -#: src/gui/view_model/mod.rs:281 +#: credentialsd-ui/src/gui/view_model/mod.rs:237 msgid "No matching credentials found on this authenticator." msgstr "" -#: src/gui/view_model/mod.rs:284 +#: credentialsd-ui/src/gui/view_model/mod.rs:245 msgid "" "No more PIN attempts allowed. Try removing your device and plugging it back " "in." msgstr "" -#: src/gui/view_model/mod.rs:287 +#: credentialsd-ui/src/gui/view_model/mod.rs:254 msgid "" "This server requires your device to have additional protection like a PIN, " "which is not set. Please set a PIN for this device and try again." msgstr "" -#: src/gui/view_model/mod.rs:293 -msgid "This credential is already registered on this authenticator." +#: credentialsd-ui/src/gui/view_model/mod.rs:262 +msgid "The credential request timed out. Please try again." msgstr "" -#: src/gui/view_model/mod.rs:395 -msgid "Something went wrong. Try again later or use a different authenticator." +#: credentialsd-ui/src/gui/view_model/mod.rs:272 +msgid "" +"Something went wrong while retrieving a credential. Please try again later " +"or use a different authenticator." +msgstr "" + +#: credentialsd-ui/src/gui/view_model/mod.rs:281 +msgid "This credential is already registered on this authenticator." msgstr "" diff --git a/credentialsd-ui/po/de_DE.po b/credentialsd-ui/po/de_DE.po index 1a846e13..57c6a6a3 100644 --- a/credentialsd-ui/po/de_DE.po +++ b/credentialsd-ui/po/de_DE.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \"https://github.com/linux-credentials/credentialsd/" "issues\"\n" -"POT-Creation-Date: 2026-02-03 10:40+0100\n" +"POT-Creation-Date: 2026-06-18 07:18-0500\n" "PO-Revision-Date: 2025-10-10 14:45+0200\n" "Last-Translator: Martin Sirringhaus \n" "Language: de_DE\n" @@ -12,137 +12,106 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:2 -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:8 -#: src/gui/view_model/gtk/mod.rs:385 -msgid "Credential Manager" -msgstr "Zugangsdatenmanager" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:3 -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:9 -msgid "Write a GTK + Rust application" -msgstr "" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:9 -msgid "Gnome;GTK;" -msgstr "Gnome;GTK;" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:6 -msgid "Window width" -msgstr "Fensterbreite" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:10 -msgid "Window height" -msgstr "Fensterhöhe" +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:9 +#, fuzzy +msgid "credentialsd-ui" +msgstr "Wählen Sie Zugangsdaten aus" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:14 -msgid "Window maximized state" -msgstr "Fenster maximiert" +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:10 +#, fuzzy +msgid "A UI for interacting with credentialsd" +msgstr "Zugangsdaten registrieren" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:11 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:12 msgid "" -"A boilerplate template for GTK + Rust. It uses Meson as a build system and " -"has flatpak support by default." -msgstr "Eine Vorlage für eine GTK + Rust Anwendung." +"Displays a UI for registering and creating credentials with credentialsd." +msgstr "" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:16 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:17 msgid "Registering a credential" msgstr "Zugangsdaten registrieren" -#: data/resources/ui/shortcuts.ui:11 -msgctxt "shortcut window" -msgid "General" -msgstr "Allgemein" - -#: data/resources/ui/shortcuts.ui:14 -msgctxt "shortcut window" -msgid "Show Shortcuts" -msgstr "Zeige Kürzel" - -#: data/resources/ui/shortcuts.ui:20 -msgctxt "shortcut window" -msgid "Quit" -msgstr "Beenden" - -#: data/resources/ui/window.ui:6 -msgid "_Preferences" -msgstr "Einstellungen" - -#: data/resources/ui/window.ui:10 -msgid "_Keyboard Shortcuts" -msgstr "Tastaturkürzel" +#. developer_name tag deprecated with Appstream 1.0 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:36 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:39 +msgid "Isaiah Inuwa" +msgstr "" -#: data/resources/ui/window.ui:68 +#: credentialsd-ui/data/resources/ui/window.blp:48 msgid "Choose device" msgstr "Gerät auswählen" -#: data/resources/ui/window.ui:74 -msgid "Devices" -msgstr "Geräte" +#: credentialsd-ui/data/resources/ui/window.blp:72 +#, fuzzy +msgid "Use a mobile device" +msgstr "Ein mobiles Gerät" -#: data/resources/ui/window.ui:98 +#: credentialsd-ui/data/resources/ui/window.blp:145 +#, fuzzy +msgid "Use your security key" +msgstr "Stecken Sie Ihren Security-Token ein." + +#: credentialsd-ui/data/resources/ui/window.blp:162 msgid "Connect a security key" msgstr "Stecken Sie Ihren Security-Token ein." -#: data/resources/ui/window.ui:139 +#: credentialsd-ui/data/resources/ui/window.blp:197 +#, fuzzy +msgid "Enter your device PIN" +msgstr "Geben Sie Ihren PIN ein." + +#: credentialsd-ui/data/resources/ui/window.blp:205 msgid "Scan the QR code to connect your device" msgstr "Scannen Sie den QR-Code, um Ihr Gerät zu verbinden" -#: data/resources/ui/window.ui:184 data/resources/ui/window.ui:190 +#: credentialsd-ui/data/resources/ui/window.blp:247 +#: credentialsd-ui/data/resources/ui/window.blp:253 msgid "Choose credential" msgstr "Wählen Sie Zugangsdaten aus" -#: data/resources/ui/window.ui:214 +#: credentialsd-ui/data/resources/ui/window.blp:266 msgid "Complete" msgstr "Abgeschlossen" -#: data/resources/ui/window.ui:220 +#: credentialsd-ui/data/resources/ui/window.blp:288 msgid "Done!" msgstr "Fertig!" -#: data/resources/ui/window.ui:231 +#: credentialsd-ui/data/resources/ui/window.blp:299 msgid "Something went wrong." msgstr "Etwas ist schief gegangen." -#: data/resources/ui/window.ui:244 src/gui/view_model/mod.rs:290 -msgid "" -"Something went wrong while retrieving a credential. Please try again later " -"or use a different authenticator." -msgstr "" -"Beim Abrufen Ihrer Zugangsdaten ist ein Fehler aufgetreten. Versuchen Sie es " -"später wieder, oder verwenden Sie einen anderen Security-Token." - -#: src/gui/view_model/gtk/mod.rs:147 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:159 #, fuzzy msgid "Enter your PIN. One attempt remaining." msgid_plural "Enter your PIN. %d attempts remaining." msgstr[0] "Geben Sie Ihren PIN ein. Sie haben nur noch einen Versuch." msgstr[1] "Geben Sie Ihren PIN ein. Sie haben noch %d Versuche." -#: src/gui/view_model/gtk/mod.rs:153 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:165 msgid "Enter your PIN." msgstr "Geben Sie Ihren PIN ein." -#: src/gui/view_model/gtk/mod.rs:163 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:174 msgid "Touch your device again. One attempt remaining." msgid_plural "Touch your device again. %d attempts remaining." msgstr[0] "Berühren Sie Ihr Gerät. Sie haben nur noch einen Versuch." msgstr[1] "Berühren Sie nochmal Ihr Gerät. Sie haben nur noch %d Versuche." -#: src/gui/view_model/gtk/mod.rs:169 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:180 msgid "Touch your device." msgstr "Berühren Sie Ihr Gerät." -#: src/gui/view_model/gtk/mod.rs:174 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:185 msgid "Touch your device" msgstr "Berühren Sie Ihr Gerät." -#: src/gui/view_model/gtk/mod.rs:177 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:188 msgid "Scan the QR code with your device to begin authentication." msgstr "" "Scannen Sie den QR code mit ihrem Gerät um die Authentifizierung zu beginnen." -#: src/gui/view_model/gtk/mod.rs:187 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:201 msgid "" "Connecting to your device. Make sure both devices are near each other and " "have Bluetooth enabled." @@ -150,53 +119,57 @@ msgstr "" "Verbindung zu Ihrem Gerät wird aufgebaut. Stellen Sie sicher, dass beide " "Geräte nah beieinander sind und Bluetooth aktiviert haben." -#: src/gui/view_model/gtk/mod.rs:195 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:209 msgid "Device connected. Follow the instructions on your device" msgstr "Verbindung hergestellt. Folgen Sie den Anweisungen auf Ihrem Gerät." -#: src/gui/view_model/gtk/mod.rs:321 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:298 msgid "Insert your security key." msgstr "Stecken Sie Ihren Security-Token ein." -#: src/gui/view_model/gtk/mod.rs:340 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:317 msgid "Multiple devices found. Please select with which to proceed." msgstr "Mehrere Geräte gefunden. Bitte wählen Sie einen aus, um fortzufahren." -#: src/gui/view_model/gtk/device.rs:57 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:362 +msgid "Credential Manager" +msgstr "Zugangsdatenmanager" + +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:57 msgid "A Bluetooth device" msgstr "Ein Bluetooth-Gerät" -#: src/gui/view_model/gtk/device.rs:58 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:58 msgid "This device" msgstr "Dieses Gerät" -#: src/gui/view_model/gtk/device.rs:59 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:59 msgid "A mobile device" msgstr "Ein mobiles Gerät" -#: src/gui/view_model/gtk/device.rs:60 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:60 msgid "Linked Device" msgstr "Verbundenes Gerät" -#: src/gui/view_model/gtk/device.rs:61 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:61 msgid "An security key or card (NFC)" msgstr "Ein NFC-Gerät" -#: src/gui/view_model/gtk/device.rs:62 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:62 msgid "A security key (USB)" msgstr "Ein Security-Token" -#: src/gui/view_model/mod.rs:75 +#: credentialsd-ui/src/gui/view_model/mod.rs:64 msgid "unknown application" msgstr "unbekannter Applikation" #. TRANSLATORS: %s1 is the "relying party" (think: domain name) where the request is coming from -#: src/gui/view_model/mod.rs:80 +#: credentialsd-ui/src/gui/view_model/mod.rs:80 msgid "Create a passkey for %s1" msgstr "Neuen Passkey für %s1 erstellen" #. TRANSLATORS: %s1 is the "relying party" (think: domain name) where the request is coming from -#: src/gui/view_model/mod.rs:84 +#: credentialsd-ui/src/gui/view_model/mod.rs:84 msgid "Use a passkey for %s1" msgstr "Passkey für %s1 abrufen" @@ -204,7 +177,7 @@ msgstr "Passkey für %s1 abrufen" #. TRANSLATORS: %s2 is the application name (e.g.: firefox) where the request is coming from, must be left untouched to make the name bold #. TRANSLATORS: %i1 is the process ID of the requesting application #. TRANSLATORS: %s3 is the absolute path (think: /usr/bin/firefox) of the requesting application -#: src/gui/view_model/mod.rs:96 +#: credentialsd-ui/src/gui/view_model/mod.rs:96 msgid "" "\"%s2\" (process ID: %i1, binary: %s3) is asking to create a " "credential to register at \"%s1\". Only proceed if you trust this process." @@ -217,7 +190,7 @@ msgstr "" #. TRANSLATORS: %s2 is the application name (e.g.: firefox) where the request is coming from, must be left untouched to make the name bold #. TRANSLATORS: %i1 is the process ID of the requesting application #. TRANSLATORS: %s3 is the absolute path (think: /usr/bin/firefox) of the requesting application -#: src/gui/view_model/mod.rs:103 +#: credentialsd-ui/src/gui/view_model/mod.rs:103 msgid "" "\"%s2\" (process ID: %i1, binary: %s3) is asking to use a credential " "to sign in to \"%s1\". Only proceed if you trust this process." @@ -226,15 +199,27 @@ msgstr "" "abrufen, um Sie bei \"%s1\" anzumelden. Fahren Sie nur fort, wenn Sie diesem " "Prozess vertrauen." -#: src/gui/view_model/mod.rs:227 +#. TRANSLATORS: %s1 is the relying party (think: domain name) where the request is coming from +#: credentialsd-ui/src/gui/view_model/mod.rs:115 +msgid "" +"Scan the QR code using the camera on the device that has the passkey for %s1" +msgstr "" + +#. TRANSLATORS: %s1 is the relying party (think: domain name) where the request is coming from +#: credentialsd-ui/src/gui/view_model/mod.rs:118 +#, fuzzy +msgid "Insert and activate your security key to use it for %s1" +msgstr "Stecken Sie Ihren Security-Token ein." + +#: credentialsd-ui/src/gui/view_model/mod.rs:181 msgid "Failed to select credential from device." msgstr "Zugangsdaten vom Gerät konnten nicht ausgewählt werden." -#: src/gui/view_model/mod.rs:281 +#: credentialsd-ui/src/gui/view_model/mod.rs:237 msgid "No matching credentials found on this authenticator." msgstr "Keine passenden Zugangsdaten auf diesem Gerät gefunden." -#: src/gui/view_model/mod.rs:284 +#: credentialsd-ui/src/gui/view_model/mod.rs:245 msgid "" "No more PIN attempts allowed. Try removing your device and plugging it back " "in." @@ -242,20 +227,36 @@ msgstr "" "Keine weiteren PIN-Eingaben erlaubt. Versuchen Sie ihr Gerät aus- und wieder " "einzustecken." -#: src/gui/view_model/mod.rs:287 +#: credentialsd-ui/src/gui/view_model/mod.rs:254 msgid "" "This server requires your device to have additional protection like a PIN, " "which is not set. Please set a PIN for this device and try again." msgstr "" -"Für diesen Server benötigt ihr Gerät eine zusätzliche Absicherung, z.B. einen PIN. " -"Bitte setzen Sie einen PIN für ihr Gerät und versuchen Sie es erneut." +"Für diesen Server benötigt ihr Gerät eine zusätzliche Absicherung, z.B. " +"einen PIN. Bitte setzen Sie einen PIN für ihr Gerät und versuchen Sie es " +"erneut." + +#: credentialsd-ui/src/gui/view_model/mod.rs:262 +msgid "The credential request timed out. Please try again." +msgstr "" -#: src/gui/view_model/mod.rs:293 +#: credentialsd-ui/src/gui/view_model/mod.rs:272 +msgid "" +"Something went wrong while retrieving a credential. Please try again later " +"or use a different authenticator." +msgstr "" +"Beim Abrufen Ihrer Zugangsdaten ist ein Fehler aufgetreten. Versuchen Sie es " +"später wieder, oder verwenden Sie einen anderen Security-Token." + +#: credentialsd-ui/src/gui/view_model/mod.rs:281 msgid "This credential is already registered on this authenticator." msgstr "Diese Zugangsdaten sind bereits auf diesem Gerät registriert." -#: src/gui/view_model/mod.rs:395 -msgid "Something went wrong. Try again later or use a different authenticator." -msgstr "" -"Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später noch einmal, " -"oder benutzen Sie ein anderes Gerät." +#~ msgid "Devices" +#~ msgstr "Geräte" + +#~ msgid "" +#~ "Something went wrong. Try again later or use a different authenticator." +#~ msgstr "" +#~ "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später noch einmal, " +#~ "oder benutzen Sie ein anderes Gerät." diff --git a/credentialsd-ui/po/en_US.po b/credentialsd-ui/po/en_US.po index bdbfce96..f9eda4a1 100644 --- a/credentialsd-ui/po/en_US.po +++ b/credentialsd-ui/po/en_US.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \"https://github.com/linux-credentials/credentialsd/" "issues\"\n" -"POT-Creation-Date: 2026-02-03 10:40+0100\n" +"POT-Creation-Date: 2026-06-18 07:18-0500\n" "PO-Revision-Date: 2025-10-10 14:45+0200\n" "Last-Translator: Martin Sirringhaus \n" "Language: en_US\n" @@ -11,137 +11,104 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:2 -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:8 -#: src/gui/view_model/gtk/mod.rs:385 -msgid "Credential Manager" -msgstr "Credential Manager" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:3 -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:9 -msgid "Write a GTK + Rust application" -msgstr "Write a GTK + Rust application" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:9 -msgid "Gnome;GTK;" -msgstr "Gnome;GTK;" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:6 -msgid "Window width" -msgstr "Window width" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:10 -msgid "Window height" -msgstr "Window height" +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:9 +#, fuzzy +msgid "credentialsd-ui" +msgstr "Choose credential" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:14 -msgid "Window maximized state" -msgstr "Window maximized state" +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:10 +#, fuzzy +msgid "A UI for interacting with credentialsd" +msgstr "Registering a credential" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:11 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:12 msgid "" -"A boilerplate template for GTK + Rust. It uses Meson as a build system and " -"has flatpak support by default." +"Displays a UI for registering and creating credentials with credentialsd." msgstr "" -"A boilerplate template for GTK + Rust. It uses Meson as a build system and " -"has flatpak support by default." -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:16 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:17 msgid "Registering a credential" msgstr "Registering a credential" -#: data/resources/ui/shortcuts.ui:11 -msgctxt "shortcut window" -msgid "General" -msgstr "General" - -#: data/resources/ui/shortcuts.ui:14 -msgctxt "shortcut window" -msgid "Show Shortcuts" -msgstr "Show Shortcuts" - -#: data/resources/ui/shortcuts.ui:20 -msgctxt "shortcut window" -msgid "Quit" -msgstr "Quit" - -#: data/resources/ui/window.ui:6 -msgid "_Preferences" -msgstr "_Preferences" - -#: data/resources/ui/window.ui:10 -msgid "_Keyboard Shortcuts" -msgstr "Keyboard Shortcuts" +#. developer_name tag deprecated with Appstream 1.0 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:36 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:39 +msgid "Isaiah Inuwa" +msgstr "" -#: data/resources/ui/window.ui:68 +#: credentialsd-ui/data/resources/ui/window.blp:48 msgid "Choose device" msgstr "Choose device" -#: data/resources/ui/window.ui:74 -msgid "Devices" -msgstr "Devices" +#: credentialsd-ui/data/resources/ui/window.blp:72 +#, fuzzy +msgid "Use a mobile device" +msgstr "A mobile device" + +#: credentialsd-ui/data/resources/ui/window.blp:145 +#, fuzzy +msgid "Use your security key" +msgstr "Insert your security key." -#: data/resources/ui/window.ui:98 +#: credentialsd-ui/data/resources/ui/window.blp:162 msgid "Connect a security key" msgstr "Connect a security key" -#: data/resources/ui/window.ui:139 +#: credentialsd-ui/data/resources/ui/window.blp:197 +#, fuzzy +msgid "Enter your device PIN" +msgstr "Enter your PIN." + +#: credentialsd-ui/data/resources/ui/window.blp:205 msgid "Scan the QR code to connect your device" msgstr "Scan the QR code to connect your device" -#: data/resources/ui/window.ui:184 data/resources/ui/window.ui:190 +#: credentialsd-ui/data/resources/ui/window.blp:247 +#: credentialsd-ui/data/resources/ui/window.blp:253 msgid "Choose credential" msgstr "Choose credential" -#: data/resources/ui/window.ui:214 +#: credentialsd-ui/data/resources/ui/window.blp:266 msgid "Complete" msgstr "Complete" -#: data/resources/ui/window.ui:220 +#: credentialsd-ui/data/resources/ui/window.blp:288 msgid "Done!" msgstr "Done!" -#: data/resources/ui/window.ui:231 +#: credentialsd-ui/data/resources/ui/window.blp:299 msgid "Something went wrong." msgstr "Something went wrong." -#: data/resources/ui/window.ui:244 src/gui/view_model/mod.rs:290 -msgid "" -"Something went wrong while retrieving a credential. Please try again later " -"or use a different authenticator." -msgstr "" -"Something went wrong while retrieving a credential. Please try again later " -"or use a different authenticator." - -#: src/gui/view_model/gtk/mod.rs:147 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:159 msgid "Enter your PIN. One attempt remaining." msgid_plural "Enter your PIN. %d attempts remaining." msgstr[0] "Enter your PIN. One attempt remaining." msgstr[1] "Enter your PIN. %d attempts remaining." -#: src/gui/view_model/gtk/mod.rs:153 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:165 msgid "Enter your PIN." msgstr "Enter your PIN." -#: src/gui/view_model/gtk/mod.rs:163 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:174 msgid "Touch your device again. One attempt remaining." msgid_plural "Touch your device again. %d attempts remaining." msgstr[0] "Touch your device again. One attempt remaining." msgstr[1] "Touch your device again. %d attempts remaining." -#: src/gui/view_model/gtk/mod.rs:169 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:180 msgid "Touch your device." msgstr "Touch your device." -#: src/gui/view_model/gtk/mod.rs:174 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:185 msgid "Touch your device" msgstr "Touch your device" -#: src/gui/view_model/gtk/mod.rs:177 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:188 msgid "Scan the QR code with your device to begin authentication." msgstr "Scan the QR code with your device to begin authentication." -#: src/gui/view_model/gtk/mod.rs:187 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:201 msgid "" "Connecting to your device. Make sure both devices are near each other and " "have Bluetooth enabled." @@ -149,53 +116,57 @@ msgstr "" "Connecting to your device. Make sure both devices are near each other and " "have Bluetooth enabled." -#: src/gui/view_model/gtk/mod.rs:195 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:209 msgid "Device connected. Follow the instructions on your device" msgstr "Device connected. Follow the instructions on your device" -#: src/gui/view_model/gtk/mod.rs:321 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:298 msgid "Insert your security key." msgstr "Insert your security key." -#: src/gui/view_model/gtk/mod.rs:340 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:317 msgid "Multiple devices found. Please select with which to proceed." msgstr "Multiple devices found. Please select with which to proceed." -#: src/gui/view_model/gtk/device.rs:57 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:362 +msgid "Credential Manager" +msgstr "Credential Manager" + +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:57 msgid "A Bluetooth device" msgstr "A Bluetooth device" -#: src/gui/view_model/gtk/device.rs:58 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:58 msgid "This device" msgstr "This device" -#: src/gui/view_model/gtk/device.rs:59 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:59 msgid "A mobile device" msgstr "A mobile device" -#: src/gui/view_model/gtk/device.rs:60 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:60 msgid "Linked Device" msgstr "Linked Device" -#: src/gui/view_model/gtk/device.rs:61 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:61 msgid "An security key or card (NFC)" msgstr "A security key or card (NFC)" -#: src/gui/view_model/gtk/device.rs:62 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:62 msgid "A security key (USB)" msgstr "A security key (USB)" -#: src/gui/view_model/mod.rs:75 +#: credentialsd-ui/src/gui/view_model/mod.rs:64 msgid "unknown application" msgstr "unknown application" #. TRANSLATORS: %s1 is the "relying party" (think: domain name) where the request is coming from -#: src/gui/view_model/mod.rs:80 +#: credentialsd-ui/src/gui/view_model/mod.rs:80 msgid "Create a passkey for %s1" msgstr "Create a passkey for %s1" #. TRANSLATORS: %s1 is the "relying party" (think: domain name) where the request is coming from -#: src/gui/view_model/mod.rs:84 +#: credentialsd-ui/src/gui/view_model/mod.rs:84 msgid "Use a passkey for %s1" msgstr "Use a passkey for %s1" @@ -203,7 +174,7 @@ msgstr "Use a passkey for %s1" #. TRANSLATORS: %s2 is the application name (e.g.: firefox) where the request is coming from, must be left untouched to make the name bold #. TRANSLATORS: %i1 is the process ID of the requesting application #. TRANSLATORS: %s3 is the absolute path (think: /usr/bin/firefox) of the requesting application -#: src/gui/view_model/mod.rs:96 +#: credentialsd-ui/src/gui/view_model/mod.rs:96 msgid "" "\"%s2\" (process ID: %i1, binary: %s3) is asking to create a " "credential to register at \"%s1\". Only proceed if you trust this process." @@ -215,7 +186,7 @@ msgstr "" #. TRANSLATORS: %s2 is the application name (e.g.: firefox) where the request is coming from, must be left untouched to make the name bold #. TRANSLATORS: %i1 is the process ID of the requesting application #. TRANSLATORS: %s3 is the absolute path (think: /usr/bin/firefox) of the requesting application -#: src/gui/view_model/mod.rs:103 +#: credentialsd-ui/src/gui/view_model/mod.rs:103 msgid "" "\"%s2\" (process ID: %i1, binary: %s3) is asking to use a credential " "to sign in to \"%s1\". Only proceed if you trust this process." @@ -223,15 +194,27 @@ msgstr "" "\"%s2\" (process ID: %i1, binary: %s3) is asking to use a credential " "to sign in to \"%s1\". Only proceed if you trust this process." -#: src/gui/view_model/mod.rs:227 +#. TRANSLATORS: %s1 is the relying party (think: domain name) where the request is coming from +#: credentialsd-ui/src/gui/view_model/mod.rs:115 +msgid "" +"Scan the QR code using the camera on the device that has the passkey for %s1" +msgstr "" + +#. TRANSLATORS: %s1 is the relying party (think: domain name) where the request is coming from +#: credentialsd-ui/src/gui/view_model/mod.rs:118 +#, fuzzy +msgid "Insert and activate your security key to use it for %s1" +msgstr "Insert your security key." + +#: credentialsd-ui/src/gui/view_model/mod.rs:181 msgid "Failed to select credential from device." msgstr "Failed to select credential from device." -#: src/gui/view_model/mod.rs:281 +#: credentialsd-ui/src/gui/view_model/mod.rs:237 msgid "No matching credentials found on this authenticator." msgstr "No matching credentials found on this authenticator." -#: src/gui/view_model/mod.rs:284 +#: credentialsd-ui/src/gui/view_model/mod.rs:245 msgid "" "No more PIN attempts allowed. Try removing your device and plugging it back " "in." @@ -239,7 +222,7 @@ msgstr "" "No more PIN attempts allowed. Try removing your device and plugging it back " "in." -#: src/gui/view_model/mod.rs:287 +#: credentialsd-ui/src/gui/view_model/mod.rs:254 msgid "" "This server requires your device to have additional protection like a PIN, " "which is not set. Please set a PIN for this device and try again." @@ -247,11 +230,26 @@ msgstr "" "This server requires your device to have additional protection like a PIN, " "which is not set. Please set a PIN for this device and try again." -#: src/gui/view_model/mod.rs:293 +#: credentialsd-ui/src/gui/view_model/mod.rs:262 +msgid "The credential request timed out. Please try again." +msgstr "" + +#: credentialsd-ui/src/gui/view_model/mod.rs:272 +msgid "" +"Something went wrong while retrieving a credential. Please try again later " +"or use a different authenticator." +msgstr "" +"Something went wrong while retrieving a credential. Please try again later " +"or use a different authenticator." + +#: credentialsd-ui/src/gui/view_model/mod.rs:281 msgid "This credential is already registered on this authenticator." msgstr "This credential is already registered on this authenticator." -#: src/gui/view_model/mod.rs:395 -msgid "Something went wrong. Try again later or use a different authenticator." -msgstr "" -"Something went wrong. Try again later or use a different authenticator." +#~ msgid "Devices" +#~ msgstr "Devices" + +#~ msgid "" +#~ "Something went wrong. Try again later or use a different authenticator." +#~ msgstr "" +#~ "Something went wrong. Try again later or use a different authenticator." diff --git a/credentialsd-ui/po/ka_GE.po b/credentialsd-ui/po/ka_GE.po index ea8acf0d..8fcf6764 100644 --- a/credentialsd-ui/po/ka_GE.po +++ b/credentialsd-ui/po/ka_GE.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: credentialsd-ui\n" "Report-Msgid-Bugs-To: \"https://github.com/linux-credentials/credentialsd/" "issues\"\n" -"POT-Creation-Date: 2026-02-03 10:40+0100\n" +"POT-Creation-Date: 2026-06-18 07:18-0500\n" "PO-Revision-Date: 2026-04-20 07:16+0200\n" "Last-Translator: Ekaterine Papava \n" "Language-Team: \n" @@ -19,142 +19,104 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.9\n" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:2 -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:8 -#: src/gui/view_model/gtk/mod.rs:385 -msgid "Credential Manager" -msgstr "ავტორიზაციის დეტალების მმართველი" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:3 -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:9 -msgid "Write a GTK + Rust application" -msgstr "დაწერეთ GTK+ Rust აპლიკაცია" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.desktop.in.in:9 -msgid "Gnome;GTK;" -msgstr "Gnome;GTK;" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:6 -msgid "Window width" -msgstr "ფანჯრის სიგანე" - -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:10 -msgid "Window height" -msgstr "ფანჯრის სიმაღლე" +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:9 +#, fuzzy +msgid "credentialsd-ui" +msgstr "ავტორიზაციის დეტალების არჩევა" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.gschema.xml.in:14 -msgid "Window maximized state" -msgstr "ფანჯრის სრულად გაშლილი მდგომარეობა" +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:10 +#, fuzzy +msgid "A UI for interacting with credentialsd" +msgstr "ავტორიზაციის დეტალების რეგისტრაცია" -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:11 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:12 msgid "" -"A boilerplate template for GTK + Rust. It uses Meson as a build system and " -"has flatpak support by default." +"Displays a UI for registering and creating credentials with credentialsd." msgstr "" -"გაზიარებული კოდის ნიმუში GTK+ Rust-ისთვის. ის აგების სისტემად Meson-ის " -"იყენებს და flatpak-ის მხარდაჭერა ნაგულისხმევად აქვს." -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:16 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:17 msgid "Registering a credential" msgstr "ავტორიზაციის დეტალების რეგისტრაცია" #. developer_name tag deprecated with Appstream 1.0 -#: data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:34 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:36 +#: credentialsd-ui/data/xyz.iinuwa.credentialsd.CredentialsUi.metainfo.xml.in.in:39 msgid "Isaiah Inuwa" msgstr "Isaiah Inuwa" -#: data/resources/ui/shortcuts.ui:11 -msgctxt "shortcut window" -msgid "General" -msgstr "ზოგადი" - -#: data/resources/ui/shortcuts.ui:14 -msgctxt "shortcut window" -msgid "Show Shortcuts" -msgstr "მალსახმობების ჩვენება" - -#: data/resources/ui/shortcuts.ui:20 -msgctxt "shortcut window" -msgid "Quit" -msgstr "გასვლა" - -#: data/resources/ui/window.ui:6 -msgid "_Preferences" -msgstr "_მორგება" - -#: data/resources/ui/window.ui:10 -msgid "_Keyboard Shortcuts" -msgstr "_კლავიატურის მალსახმობები" - -#: data/resources/ui/window.ui:68 +#: credentialsd-ui/data/resources/ui/window.blp:48 msgid "Choose device" msgstr "აირჩიეთ მოწყობილობა" -#: data/resources/ui/window.ui:74 -msgid "Devices" -msgstr "მოწყობილობები" +#: credentialsd-ui/data/resources/ui/window.blp:72 +#, fuzzy +msgid "Use a mobile device" +msgstr "მობილური მოწყობილობა" + +#: credentialsd-ui/data/resources/ui/window.blp:145 +#, fuzzy +msgid "Use your security key" +msgstr "შეერთეთ თქვენი უსაფრთხოების გასაღები." -#: data/resources/ui/window.ui:98 +#: credentialsd-ui/data/resources/ui/window.blp:162 msgid "Connect a security key" msgstr "უსაფრთხოების გასაღების დაკავშირება" -#: data/resources/ui/window.ui:139 +#: credentialsd-ui/data/resources/ui/window.blp:197 +#, fuzzy +msgid "Enter your device PIN" +msgstr "შეიყვანეთ PIN-კოდი." + +#: credentialsd-ui/data/resources/ui/window.blp:205 msgid "Scan the QR code to connect your device" msgstr "დაასკანირეთ QR კოდი თქვენი მოწყობილობის დასაკავშირებლად" -#: data/resources/ui/window.ui:184 data/resources/ui/window.ui:190 +#: credentialsd-ui/data/resources/ui/window.blp:247 +#: credentialsd-ui/data/resources/ui/window.blp:253 msgid "Choose credential" msgstr "ავტორიზაციის დეტალების არჩევა" -#: data/resources/ui/window.ui:214 +#: credentialsd-ui/data/resources/ui/window.blp:266 msgid "Complete" msgstr "დასრულება" -#: data/resources/ui/window.ui:220 +#: credentialsd-ui/data/resources/ui/window.blp:288 msgid "Done!" msgstr "მზადაა!" -#: data/resources/ui/window.ui:231 +#: credentialsd-ui/data/resources/ui/window.blp:299 msgid "Something went wrong." msgstr "რაღაც მოხდა." -#: data/resources/ui/window.ui:244 src/gui/view_model/mod.rs:290 -msgid "" -"Something went wrong while retrieving a credential. Please try again later " -"or use a different authenticator." -msgstr "" -"ავტორიზაციის დეტალების მიღებისას რაღაც არასწორად წავიდა. სცადეთ თავიდან " -"მოგვიანებით, ან გამოიყენეთ სხვა ავთენტიკატორი." - -#: src/gui/view_model/gtk/mod.rs:147 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:159 msgid "Enter your PIN. One attempt remaining." msgid_plural "Enter your PIN. %d attempts remaining." msgstr[0] "შეიყვანეთ თქვენი PIN-კოდი. დარჩენილია ერთი მცდელობა." msgstr[1] "შეიყვანეთ თქვენი PIN-კოდი. დარჩენილია %d მცდელობა." -#: src/gui/view_model/gtk/mod.rs:153 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:165 msgid "Enter your PIN." msgstr "შეიყვანეთ PIN-კოდი." -#: src/gui/view_model/gtk/mod.rs:163 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:174 msgid "Touch your device again. One attempt remaining." msgid_plural "Touch your device again. %d attempts remaining." msgstr[0] "შეეხეთ თქვენს მოწყობილობას კიდევ ერთხელ. დარჩენილია ერთი მცდელობა." msgstr[1] "შეეხეთ თქვენს მოწყობილობას კიდევ ერთხელ. დარჩენილია %d მცდელობა." -#: src/gui/view_model/gtk/mod.rs:169 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:180 msgid "Touch your device." msgstr "შეეხეთ თქვენს მოწყობილობას." -#: src/gui/view_model/gtk/mod.rs:174 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:185 msgid "Touch your device" msgstr "შეეხეთ თქვენს მოწყობილობას" -#: src/gui/view_model/gtk/mod.rs:177 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:188 msgid "Scan the QR code with your device to begin authentication." msgstr "ავთენტიკაციის დასაწყებად დაასკანერეთ QR კოდი თქვენი მოწყობილობით." -#: src/gui/view_model/gtk/mod.rs:187 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:201 msgid "" "Connecting to your device. Make sure both devices are near each other and " "have Bluetooth enabled." @@ -162,54 +124,58 @@ msgstr "" "მიმდინარეობს თქვენს მოწყობილობასთან დაკავშირება. დარწმუნდით, რომ ორივე " "მოწყობილობა ახლოსაა ერთმანეთთან და რომ ბლუთუზი ჩართულია." -#: src/gui/view_model/gtk/mod.rs:195 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:209 msgid "Device connected. Follow the instructions on your device" msgstr "მოწყობილობა დაკავშირებულია. მიჰყევით ინსტრუქციებს თქვენს მოწყობილობაზე" -#: src/gui/view_model/gtk/mod.rs:321 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:298 msgid "Insert your security key." msgstr "შეერთეთ თქვენი უსაფრთხოების გასაღები." -#: src/gui/view_model/gtk/mod.rs:340 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:317 msgid "Multiple devices found. Please select with which to proceed." msgstr "" "აღმოჩენილია ერთზე მეტი მოწყობილობა. აირჩიეთ, რომელი გნებავთ, გამოიყენოთ." -#: src/gui/view_model/gtk/device.rs:57 +#: credentialsd-ui/src/gui/view_model/gtk/mod.rs:362 +msgid "Credential Manager" +msgstr "ავტორიზაციის დეტალების მმართველი" + +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:57 msgid "A Bluetooth device" msgstr "ბლუთუზის მოწყობილობა" -#: src/gui/view_model/gtk/device.rs:58 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:58 msgid "This device" msgstr "ეს მოწყობილობა" -#: src/gui/view_model/gtk/device.rs:59 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:59 msgid "A mobile device" msgstr "მობილური მოწყობილობა" -#: src/gui/view_model/gtk/device.rs:60 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:60 msgid "Linked Device" msgstr "დაკავშირებული მოწყობილობა" -#: src/gui/view_model/gtk/device.rs:61 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:61 msgid "An security key or card (NFC)" msgstr "უსაფრთხოების გასაღები, ან ბარათი (NFC)" -#: src/gui/view_model/gtk/device.rs:62 +#: credentialsd-ui/src/gui/view_model/gtk/device.rs:62 msgid "A security key (USB)" msgstr "უსაფრთხოების გასაღები (USB)" -#: src/gui/view_model/mod.rs:75 +#: credentialsd-ui/src/gui/view_model/mod.rs:64 msgid "unknown application" msgstr "უცნობი აპლიკაცია" #. TRANSLATORS: %s1 is the "relying party" (think: domain name) where the request is coming from -#: src/gui/view_model/mod.rs:80 +#: credentialsd-ui/src/gui/view_model/mod.rs:80 msgid "Create a passkey for %s1" msgstr "საკვანძო გასაღების შექმნა %1-ისთვის" #. TRANSLATORS: %s1 is the "relying party" (think: domain name) where the request is coming from -#: src/gui/view_model/mod.rs:84 +#: credentialsd-ui/src/gui/view_model/mod.rs:84 msgid "Use a passkey for %s1" msgstr "საკვანძო გასაღების გამოყენება %1-ისთვის" @@ -217,7 +183,7 @@ msgstr "საკვანძო გასაღების გამოყე #. TRANSLATORS: %s2 is the application name (e.g.: firefox) where the request is coming from, must be left untouched to make the name bold #. TRANSLATORS: %i1 is the process ID of the requesting application #. TRANSLATORS: %s3 is the absolute path (think: /usr/bin/firefox) of the requesting application -#: src/gui/view_model/mod.rs:96 +#: credentialsd-ui/src/gui/view_model/mod.rs:96 msgid "" "\"%s2\" (process ID: %i1, binary: %s3) is asking to create a " "credential to register at \"%s1\". Only proceed if you trust this process." @@ -230,7 +196,7 @@ msgstr "" #. TRANSLATORS: %s2 is the application name (e.g.: firefox) where the request is coming from, must be left untouched to make the name bold #. TRANSLATORS: %i1 is the process ID of the requesting application #. TRANSLATORS: %s3 is the absolute path (think: /usr/bin/firefox) of the requesting application -#: src/gui/view_model/mod.rs:103 +#: credentialsd-ui/src/gui/view_model/mod.rs:103 msgid "" "\"%s2\" (process ID: %i1, binary: %s3) is asking to use a credential " "to sign in to \"%s1\". Only proceed if you trust this process." @@ -239,15 +205,27 @@ msgstr "" "დეტალების გამოყენებას \"%s1\"-ზე შესასვლელად. გააგრძელეთ, მხოლოდ, მაშინ, თუ " "ენდობით ამ პროცესს." -#: src/gui/view_model/mod.rs:227 +#. TRANSLATORS: %s1 is the relying party (think: domain name) where the request is coming from +#: credentialsd-ui/src/gui/view_model/mod.rs:115 +msgid "" +"Scan the QR code using the camera on the device that has the passkey for %s1" +msgstr "" + +#. TRANSLATORS: %s1 is the relying party (think: domain name) where the request is coming from +#: credentialsd-ui/src/gui/view_model/mod.rs:118 +#, fuzzy +msgid "Insert and activate your security key to use it for %s1" +msgstr "შეერთეთ თქვენი უსაფრთხოების გასაღები." + +#: credentialsd-ui/src/gui/view_model/mod.rs:181 msgid "Failed to select credential from device." msgstr "ავტორიზაციის დეტალების არჩევა მოწყობილობიდან ჩავარდა." -#: src/gui/view_model/mod.rs:281 +#: credentialsd-ui/src/gui/view_model/mod.rs:237 msgid "No matching credentials found on this authenticator." msgstr "ამ ავთენტიკატორში შესაბამისი ავტორიზაციის დეტალები აღმოჩენილი არაა." -#: src/gui/view_model/mod.rs:284 +#: credentialsd-ui/src/gui/view_model/mod.rs:245 msgid "" "No more PIN attempts allowed. Try removing your device and plugging it back " "in." @@ -255,7 +233,7 @@ msgstr "" "მეტი PIN-კოდი დაშვებული აღარაა. სცადეთ, გამოაძროთ თქვენი მოწყობილობა და ისევ " "შეაერთოთ." -#: src/gui/view_model/mod.rs:287 +#: credentialsd-ui/src/gui/view_model/mod.rs:254 msgid "" "This server requires your device to have additional protection like a PIN, " "which is not set. Please set a PIN for this device and try again." @@ -264,12 +242,27 @@ msgstr "" "როგორიცაა PIN-კოდი, რომელიც დაყენებული არაა. დააყენეთ PIN-კოდი ამ " "მოწყობილობისთვის და თავიდან სცადეთ." -#: src/gui/view_model/mod.rs:293 +#: credentialsd-ui/src/gui/view_model/mod.rs:262 +msgid "The credential request timed out. Please try again." +msgstr "" + +#: credentialsd-ui/src/gui/view_model/mod.rs:272 +msgid "" +"Something went wrong while retrieving a credential. Please try again later " +"or use a different authenticator." +msgstr "" +"ავტორიზაციის დეტალების მიღებისას რაღაც არასწორად წავიდა. სცადეთ თავიდან " +"მოგვიანებით, ან გამოიყენეთ სხვა ავთენტიკატორი." + +#: credentialsd-ui/src/gui/view_model/mod.rs:281 msgid "This credential is already registered on this authenticator." msgstr "ეს ავტორიზაციის დეტალი უკვე რეგისტრირებულია ამ ავთენტიკატორზე." -#: src/gui/view_model/mod.rs:395 -msgid "Something went wrong. Try again later or use a different authenticator." -msgstr "" -"რაღაც არასწორად წავიდა. სცადეთ მოგვიანებით კიდევ ერთხელ, ან გამოიყენეთ სხვა " -"ავთენტიკატორი." +#~ msgid "Devices" +#~ msgstr "მოწყობილობები" + +#~ msgid "" +#~ "Something went wrong. Try again later or use a different authenticator." +#~ msgstr "" +#~ "რაღაც არასწორად წავიდა. სცადეთ მოგვიანებით კიდევ ერთხელ, ან გამოიყენეთ " +#~ "სხვა ავთენტიკატორი." diff --git a/credentialsd-ui/po/meson.build b/credentialsd-ui/po/meson.build index 75cb3196..0785d0f4 100644 --- a/credentialsd-ui/po/meson.build +++ b/credentialsd-ui/po/meson.build @@ -1,11 +1,13 @@ i18n = import('i18n') # This creates build targets: 'credentialsd-ui-pot', 'credentialsd-ui-update-po', etc. -i18n.gettext(gettext_package, - args: ['--directory=' + meson.project_source_root() / 'credentialsd-ui', - '--from-code=UTF-8', - '--copyright-holder="The Credentials for Linux Project"', - '--msgid-bugs-address="https://github.com/linux-credentials/credentialsd/issues"', - '--add-comments=TRANSLATORS:' - ], -) +i18n.gettext( + gettext_package, + args: [ + '--from-code=UTF-8', + '--copyright-holder="The Credentials for Linux Project"', + '--msgid-bugs-address="https://github.com/linux-credentials/credentialsd/issues"', + '--add-comments=TRANSLATORS:', + ], + preset: 'glib', +) \ No newline at end of file diff --git a/credentialsd-ui/src/gui/view_model/gtk/application.rs b/credentialsd-ui/src/gui/view_model/gtk/application.rs index b86cd829..b1f0255b 100644 --- a/credentialsd-ui/src/gui/view_model/gtk/application.rs +++ b/credentialsd-ui/src/gui/view_model/gtk/application.rs @@ -217,13 +217,7 @@ impl CredentialsUi { tx: Sender, rx: Receiver, ) -> Self { - let app: Self = glib::Object::builder() - .property("application-id", APP_ID) - .property( - "resource-base-path", - "/xyz/iinuwa/credentialsd/CredentialUI/", - ) - .build(); + let app: Self = glib::Object::new(); app.imp().parent_window.replace(parent_window); app.imp().tx.replace(Some(tx)); app.imp().rx.replace(Some(rx)); diff --git a/credentialsd-ui/src/gui/view_model/gtk/mod.rs b/credentialsd-ui/src/gui/view_model/gtk/mod.rs index 58dc9cc5..70f2c4d1 100644 --- a/credentialsd-ui/src/gui/view_model/gtk/mod.rs +++ b/credentialsd-ui/src/gui/view_model/gtk/mod.rs @@ -40,6 +40,12 @@ mod imp { #[property(get, set)] pub subtitle: RefCell, + #[property(get, set)] + pub scan_qr_prompt: RefCell, + + #[property(get, set)] + pub activate_usb_prompt: RefCell, + #[property(get, set)] pub devices: RefCell, @@ -126,9 +132,16 @@ impl ViewModel { // TODO: hack so I don't have to unset this in every event manually. view_model.set_usb_nfc_pin_entry_visible(false); match update { - ViewUpdate::SetTitle((title, subtitle)) => { + ViewUpdate::SetTitle { + title, + subtitle, + qr_prompt, + usb_prompt, + } => { view_model.set_title(title); view_model.set_subtitle(subtitle); + view_model.set_scan_qr_prompt(qr_prompt); + view_model.set_activate_usb_prompt(usb_prompt); } ViewUpdate::SetDevices(devices) => { view_model.update_devices(&devices) @@ -176,11 +189,14 @@ impl ViewModel { let texture = view_model.draw_qr_code(&qr_code); view_model.set_qr_code_paintable(&texture); view_model.set_qr_code_visible(true); - view_model.set_qr_spinner_visible(true); } ViewUpdate::HybridConnecting => { view_model.set_qr_code_visible(false); _ = view_model.qr_code_paintable().take(); + view_model.waiting_for_device(&Device { + id: "x".to_string(), + transport: Transport::HybridQr, + }); view_model.set_prompt(gettext( "Connecting to your device. Make sure both devices are near each other and have Bluetooth enabled.", )); diff --git a/credentialsd-ui/src/gui/view_model/gtk/window.rs b/credentialsd-ui/src/gui/view_model/gtk/window.rs index 642ca735..6a33e295 100644 --- a/credentialsd-ui/src/gui/view_model/gtk/window.rs +++ b/credentialsd-ui/src/gui/view_model/gtk/window.rs @@ -53,6 +53,11 @@ mod imp { } )); } + + #[template_callback] + fn handle_usb_nfc_pin_shown(&self, entry: >k::PasswordEntry) { + entry.grab_focus(); + } } impl Default for CredentialsUiWindow { @@ -97,7 +102,7 @@ mod imp { } // Load latest window state - obj.load_window_size(); + obj.set_window_size(); } } @@ -116,9 +121,6 @@ mod imp { ); }; } - if let Err(err) = self.obj().save_window_size() { - tracing::warn!("Failed to save window state, {}", &err); - } // Pass close request on to the parent self.parent_close_request() @@ -206,22 +208,9 @@ impl CredentialsUiWindow { )); } - fn save_window_size(&self) -> Result<(), glib::BoolError> { - let imp = self.imp(); - - let (width, height) = self.default_size(); - - imp.settings.set_int("window-width", width)?; - imp.settings.set_int("window-height", height)?; - - Ok(()) - } - - fn load_window_size(&self) { - let imp = self.imp(); - - let width = imp.settings.int("window-width"); - let height = imp.settings.int("window-height"); + fn set_window_size(&self) { + let width = 200; + let height = 400; self.set_default_size(width, height); } diff --git a/credentialsd-ui/src/gui/view_model/mod.rs b/credentialsd-ui/src/gui/view_model/mod.rs index c94c2fc8..4fdb22b5 100644 --- a/credentialsd-ui/src/gui/view_model/mod.rs +++ b/credentialsd-ui/src/gui/view_model/mod.rs @@ -110,11 +110,20 @@ impl ViewModel { subtitle = subtitle.replace("%s3", &self.app_path_or_id); self.title = title; self.subtitle = subtitle; + let qr_prompt = + // TRANSLATORS: %s1 is the relying party (think: domain name) where the request is coming from + gettext("Scan the QR code using the camera on the device that has the passkey for %s1") + .replace("%s1", &self.rp_id); + // TRANSLATORS: %s1 is the relying party (think: domain name) where the request is coming from + let usb_prompt = gettext("Insert and activate your security key to use it for %s1") + .replace("%s1", &self.rp_id); self.tx_update - .send(ViewUpdate::SetTitle(( - self.title.to_string(), - self.subtitle.to_string(), - ))) + .send(ViewUpdate::SetTitle { + title: self.title.to_string(), + subtitle: self.subtitle.to_string(), + qr_prompt, + usb_prompt, + }) .await .unwrap(); }