diff -Nru cockpit-314/.cockpit-ci/container cockpit-316/.cockpit-ci/container --- cockpit-314/.cockpit-ci/container 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/.cockpit-ci/container 2024-04-25 09:45:58.000000000 +0000 @@ -1 +1 @@ -ghcr.io/cockpit-project/tasks:2024-03-18 +ghcr.io/cockpit-project/tasks:2024-04-08 diff -Nru cockpit-314/.extra_dist cockpit-316/.extra_dist --- cockpit-314/.extra_dist 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/.extra_dist 2024-04-25 09:45:58.000000000 +0000 @@ -29,7 +29,7 @@ pkg/base1/test-events.js pkg/base1/test-external.js pkg/base1/test-file.js -pkg/base1/test-format.js +pkg/base1/test-format.ts pkg/base1/test-framed-cache.js pkg/base1/test-framed.js pkg/base1/test-http.js @@ -39,12 +39,13 @@ pkg/base1/test-metrics.js pkg/base1/test-no-jquery.js pkg/base1/test-permissions.js -pkg/base1/test-promise.js +pkg/base1/test-promise.ts pkg/base1/test-protocol.js pkg/base1/test-series.js pkg/base1/test-spawn-proc.js pkg/base1/test-spawn.js pkg/base1/test-stream.js +pkg/base1/test-types.ts pkg/base1/test-user.js pkg/base1/test-utf8.js pkg/base1/test-websocket.js @@ -98,6 +99,8 @@ pkg/lib/cockpit-dark-theme.js pkg/lib/cockpit-po-plugin.js pkg/lib/cockpit-rsync-plugin.js +pkg/lib/cockpit-upload-helper.ts +pkg/lib/cockpit.d.ts pkg/lib/cockpit.js pkg/lib/console.css pkg/lib/context-menu.scss @@ -111,8 +114,9 @@ pkg/lib/esbuild-compress-plugin.js pkg/lib/esbuild-test-html-plugin.js pkg/lib/get-timesync-backend.py -pkg/lib/hooks.js +pkg/lib/hooks.ts pkg/lib/html2po.js +pkg/lib/index.d.ts pkg/lib/inotify.py pkg/lib/journal.css pkg/lib/journal.js @@ -131,8 +135,9 @@ pkg/lib/plot.js pkg/lib/polyfills.js pkg/lib/python.js +pkg/lib/qunit-tap.d.ts pkg/lib/qunit-template.html.in -pkg/lib/qunit-tests.js +pkg/lib/qunit-tests.ts pkg/lib/serverTime.js pkg/lib/serverTime.scss pkg/lib/service.js @@ -207,6 +212,7 @@ pkg/playground/react-demo-cards.jsx pkg/playground/react-demo-dialog.jsx pkg/playground/react-demo-file-autocomplete.jsx +pkg/playground/react-demo-file-upload.tsx pkg/playground/react-patterns.html pkg/playground/react-patterns.js pkg/playground/service.html @@ -440,7 +446,6 @@ test/browser/browser.sh test/browser/main.fmf test/browser/run-test.sh -test/common/__init__.py test/common/cdp.py test/common/chromium-cdp-driver.js test/common/firefox-cdp-driver.js @@ -651,13 +656,15 @@ tools/mock-build-env/security/pam_appl.h tools/node-modules tools/patch-metainfo +tools/release tools/termschutz tools/urls-check -tools/vulture-suppressions/cockpit.py -tools/vulture-suppressions/ferny.py -tools/vulture-suppressions/pytest.py -tools/vulture-suppressions/ruff.toml -tools/vulture-suppressions/stdlib.py -tools/vulture-suppressions/testlib.py +tools/vulture_suppressions/__init__.py +tools/vulture_suppressions/cockpit.py +tools/vulture_suppressions/ferny.py +tools/vulture_suppressions/pytest.py +tools/vulture_suppressions/ruff.toml +tools/vulture_suppressions/stdlib.py +tools/vulture_suppressions/testlib.py tools/webpack-make.js tools/webpack-watch diff -Nru cockpit-314/build.js cockpit-316/build.js --- cockpit-314/build.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/build.js 2024-04-25 09:45:58.000000000 +0000 @@ -115,7 +115,7 @@ const { entryPoints, assetFiles, redhat_fonts } = getFiles(args.onlydir); const tests = getTestFiles(); - const testEntryPoints = tests.map(test => "pkg/" + test + ".js"); + const testEntryPoints = tests.map(test => "pkg/" + test); const pkgFirstPlugins = [ cleanPlugin({ subdir: args.onlydir }), diff -Nru cockpit-314/configure cockpit-316/configure --- cockpit-314/configure 2024-03-27 17:06:20.000000000 +0000 +++ cockpit-316/configure 2024-04-25 09:46:00.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for Cockpit 314. +# Generated by GNU Autoconf 2.71 for Cockpit 316. # # Report bugs to . # @@ -610,8 +610,8 @@ # Identity of this package. PACKAGE_NAME='Cockpit' PACKAGE_TARNAME='cockpit' -PACKAGE_VERSION='314' -PACKAGE_STRING='Cockpit 314' +PACKAGE_VERSION='316' +PACKAGE_STRING='Cockpit 316' PACKAGE_BUGREPORT='devel@lists.cockpit-project.org' PACKAGE_URL='https://cockpit-project.org/' @@ -1412,7 +1412,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Cockpit 314 to adapt to many kinds of systems. +\`configure' configures Cockpit 316 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1479,7 +1479,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Cockpit 314:";; + short | recursive ) echo "Configuration of Cockpit 316:";; esac cat <<\_ACEOF @@ -1653,7 +1653,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Cockpit configure 314 +Cockpit configure 316 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1871,7 +1871,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Cockpit $as_me 314, which was +It was created by Cockpit $as_me 316, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3148,7 +3148,7 @@ # Define the identity of the package. PACKAGE='cockpit' - VERSION='314' + VERSION='316' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -8085,7 +8085,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Cockpit $as_me 314, which was +This file was extended by Cockpit $as_me 316, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -8154,7 +8154,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -Cockpit config.status 314 +Cockpit config.status 316 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -Nru cockpit-314/debian/changelog cockpit-316/debian/changelog --- cockpit-314/debian/changelog 2024-04-03 05:27:25.000000000 +0000 +++ cockpit-316/debian/changelog 2024-05-06 12:39:44.000000000 +0000 @@ -1,8 +1,16 @@ -cockpit (314-1~bpo22.04.1) jammy-backports; urgency=medium +cockpit (316-1~bpo22.04.1) jammy-backports; urgency=medium * No-change backport to jammy - -- Martin Pitt Wed, 03 Apr 2024 07:27:25 +0200 + -- Martin Pitt Mon, 06 May 2024 12:39:44 +0000 + +cockpit (316-1) unstable; urgency=medium + + * New upstream release: + - systemd: Check proper ssh service unit on Debian/Ubuntu + - cockpit.js API: Fix format_bytes() units + + -- Martin Pitt Fri, 26 Apr 2024 07:46:21 +0200 cockpit (314-1) unstable; urgency=medium Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/apps/apps.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/apps/apps.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/apps/apps.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/apps/apps.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/apps/po.fi.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/apps/po.fi.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/base1/cockpit.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/base1/cockpit.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/base1/po.fi.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/base1/po.fi.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/kdump/kdump.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/kdump/kdump.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/kdump/kdump.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/kdump/kdump.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/kdump/po.fi.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/kdump/po.fi.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/metrics/index.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/metrics/index.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/metrics/index.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/metrics/index.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/metrics/po.fi.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/metrics/po.fi.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/networkmanager/firewall.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/networkmanager/firewall.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/networkmanager/firewall.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/networkmanager/firewall.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/networkmanager/networkmanager.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/networkmanager/networkmanager.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/networkmanager/networkmanager.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/networkmanager/networkmanager.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/networkmanager/po.fi.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/networkmanager/po.fi.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/networkmanager/po.fr.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/networkmanager/po.fr.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/networkmanager/po.ko.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/networkmanager/po.ko.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/packagekit/po.fi.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/packagekit/po.fi.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/packagekit/po.fr.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/packagekit/po.fr.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/packagekit/updates.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/packagekit/updates.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/packagekit/updates.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/packagekit/updates.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/exception.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/exception.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/index.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/index.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/index.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/index.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/journal.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/journal.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/journal.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/journal.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/metrics.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/metrics.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/notifications-receiver.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/notifications-receiver.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/pkgs.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/pkgs.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/plot.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/plot.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/po.fi.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/po.fi.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/preloaded.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/preloaded.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/react-patterns.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/react-patterns.css.gz differ diff -Nru cockpit-314/dist/playground/react-patterns.html cockpit-316/dist/playground/react-patterns.html --- cockpit-314/dist/playground/react-patterns.html 2024-03-27 17:06:22.000000000 +0000 +++ cockpit-316/dist/playground/react-patterns.html 2024-04-25 09:46:02.000000000 +0000 @@ -29,6 +29,11 @@

Cards

+ +
+

Upload

+
+
Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/react-patterns.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/react-patterns.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/service.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/service.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/speed.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/speed.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/test.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/test.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/playground/translate.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/playground/translate.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/selinux/po.fi.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/selinux/po.fi.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/selinux/selinux.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/selinux/selinux.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/selinux/selinux.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/selinux/selinux.js.gz differ diff -Nru cockpit-314/dist/shell/manifest.json cockpit-316/dist/shell/manifest.json --- cockpit-314/dist/shell/manifest.json 2024-03-27 17:06:22.000000000 +0000 +++ cockpit-316/dist/shell/manifest.json 2024-04-25 09:46:02.000000000 +0000 @@ -28,7 +28,7 @@ "docs": [ { "label": "Web Console", - "url": "https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_systems_using_the_rhel_8_web_console/index" + "url": "https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/managing_systems_using_the_rhel_9_web_console/index" } ], "bridges": [ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/shell/po.fi.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/shell/po.fi.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/shell/shell.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/shell/shell.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/shell/shell.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/shell/shell.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/sosreport/po.fi.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/sosreport/po.fi.js.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/sosreport/sosreport.css.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/sosreport/sosreport.css.gz differ Binary files /tmp/tmpekaeqtft/1GgYc_uRKL/cockpit-314/dist/sosreport/sosreport.js.gz and /tmp/tmpekaeqtft/vsVV4Q40JW/cockpit-316/dist/sosreport/sosreport.js.gz differ diff -Nru cockpit-314/dist/static/login.js cockpit-316/dist/static/login.js --- cockpit-314/dist/static/login.js 2024-03-27 17:06:22.000000000 +0000 +++ cockpit-316/dist/static/login.js 2024-04-25 09:46:02.000000000 +0000 @@ -1 +1 @@ -(()=>{(function(h){let c;try{c=window.localStorage,window.localStorage.removeItem("url-root"),window.localStorage.removeItem("standard-login")}catch(e){c=window.sessionStorage,h.warn(String(e))}let T=c.getItem("shell:style")||"auto";window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches&&T==="auto"||T==="dark"?document.documentElement.classList.add("pf-v5-theme-dark"):document.documentElement.classList.remove("pf-v5-theme-dark"),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{e.matches&&T==="auto"||T==="dark"?document.documentElement.classList.add("pf-v5-theme-dark"):document.documentElement.classList.remove("pf-v5-theme-dark")});let g,l=window.environment||{},u=l.OAuth||null;u&&(u.TokenParam||(u.TokenParam="access_token"),u.ErrorParam||(u.ErrorParam="error_description"));let V=/\$\{([^}]+)\}|\$([a-zA-Z0-9_]+)/g;function v(e){let t=Array.prototype.slice.call(arguments,1);return e.replace(V,function(i,n,r){return t[n||r]||""})}function q(e){if(window.cockpit_po){let t=window.cockpit_po[e];if(t&&t[1])return t[1]}return e}function Y(){if(!document.querySelectorAll)return;let e=document.querySelectorAll("[translate]");for(let t=0;t{d("#login-fatal"),z()},f("#login-again");let t=o("login-fatal-message");t.textContent="",t.appendChild(document.createTextNode(e))}function w(e){window.console&&h.warn("fatal:",e),d("#login-again","#login-wait-validating"),x&&(o("login-again").href=x,f("#login-again")),d("#login","#login-details"),f("#login-fatal");let t=o("login-fatal-message");t.textContent="",t.appendChild(document.createTextNode(e))}function E(e,t){let i=o(e),n=i&&window.getComputedStyle?window.getComputedStyle(i,":before"):null;if(!n)return;let r=n.content;if(r&&r!="none"&&r!="normal"){let a=r.length;(r[0]==='"'||r[0]==="'")&&a>2&&r[a-1]===r[0]&&(r=r.substr(1,a-2)),i.innerHTML=r||t}else i.removeAttribute("class")}function ee(){function e(a){a?(f("#login","#login-details","#login-override"),d("#get-out-link"),o("login-override-content").appendChild(o("login")),o("login-button").classList.add("pf-m-warning"),document.querySelector("#login .login-actions").insertAdjacentHTML("beforebegin","
"+s("Cockpit might not render correctly in your browser")+"
")):d("#login","#login-details","#login-override")}function t(a,b){a==="supports"&&(a="@supports API");let _=v(s("This web browser is too old to run the Web Console (missing $0)"),a);window.console&&h.warn(_),o("login-error-message").textContent=_,f("#unsupported-browser","#error-group"),document.body.classList.add("unsupported-browser"),e(b)}function i(a,b){let _;try{_=b&&b[a]}catch(pe){throw w(v(s("The web browser configuration prevents Cockpit from running (inaccessible $0)"),a)),pe}return _===void 0?(t(a),!1):!0}function n(){let a=[].join.call(arguments,": ");return!window.CSS||!window.CSS.supports.apply(this,arguments)?(t(a,"bypass"),!1):!0}return i("WebSocket",window)&&i("XMLHttpRequest",window)&&i("sessionStorage",window)&&i("JSON",window)&&i("defineProperty",Object)&&i("console",window)&&i("pushState",window.history)&&i("textContent",document)&&i("replaceAll",String.prototype)&&i("finally",Promise.prototype)&&i("supports",window.CSS)?(n("display","flex")&&n("display","grid")&&n("selector(test)")&&n("selector(:is(*):where(*))"),!0):!1}function N(e){return e.replace(/^\s+|\s+$/g,"")}function M(e){let t=document.createElement("a"),i=document.baseURI;e=e||"/",t.href=i,t.pathname!="/"&&(g=t.pathname.replace(/^\/+|\/+$/g,""),c.setItem("url-root",g),g&&e.indexOf("/"+g)===0&&(e=e.replace("/"+g,"")||"/")),e.indexOf("/=")===0?(l.hostname=e.substring(2).split("/")[0],o("server-field").value=l.hostname,C(null,!0),e="/cockpit+"+e.split("/")[1]):e.indexOf("/cockpit/")!==0&&e.indexOf("/cockpit+")!==0&&(e="/cockpit"),m=e.split("/")[1],y="/"+m+"/login",g&&(y="/"+g+y),S=m,A=y}function C(e,t){e&&e.type==="keypress"&&e.key!==" "||(e&&e.type==="click"&&e.preventDefault(),t===void 0&&(t=o("server-group").hidden),k("#server-group",!t),o("option-group").setAttribute("data-state",t))}function te(e){let t=o("login-password-input");t.setAttribute("type",t.getAttribute("type")==="password"?"text":"password"),e.stopPropagation()}function oe(){window.onload=null,Y(),window.cockpit_po&&window.cockpit_po[""]&&(document.documentElement.lang=window.cockpit_po[""].language,window.cockpit_po[""]["language-direction"]&&(document.documentElement.dir=window.cockpit_po[""]["language-direction"])),M(window.location.pathname),(window.location.pathname.indexOf("/"+g+"/cockpit/")===0||window.location.pathname.indexOf("/"+g+"/cockpit+")===0)&&document.documentElement.setAttribute("class","inline");let e=l.page.title;if(l.is_cockpit_client&&(e=s("Login")),(!e||m.indexOf("cockpit+=")===0)&&(e=l.hostname),document.title=e,m.indexOf("cockpit+=")===0?d("#brand","#badge"):(E("badge",""),E("brand","Cockpit")),!ee())return;l.banner&&(f("#banner"),o("banner-message").textContent=l.banner.trimEnd()),o("bypass-browser-check").addEventListener("click",C),o("bypass-browser-check").addEventListener("keypress",C),o("show-other-login-options").addEventListener("click",C),o("show-other-login-options").addEventListener("keypress",C),o("server-clear").addEventListener("click",function(){let n=o("server-field");n.value="",n.focus()});let t=window.sessionStorage.getItem("logout-intent")=="explicit";t&&window.sessionStorage.removeItem("logout-intent");let i=window.sessionStorage.getItem("logout-reason");i&&window.sessionStorage.removeItem("logout-reason"),u?(d("#login-details","#login"),t?($(),o("login-again").textContent=s("Login again"),w(s("Logout successful"))):ie()):t?z(i):X()?z():ne()}function ne(){let e=new XMLHttpRequest;e.open("GET",y,!0),e.onreadystatechange=function(){e.readyState==4&&(e.status==200?U(JSON.parse(e.responseText)):e.status==401?z():e.statusText?w(decodeURIComponent(e.statusText)):e.status===0?z():w(v(s("$0 error"),e.status)))},e.send()}function $(){let e=window.location.href.split("#",2);x=u.URL,u.URL.indexOf("?")>-1?x+="&":x+="?",x+="redirect_uri="+encodeURIComponent(e[0])}function ie(){let e=document.createElement("a");if(!u.URL)return w(s("Cockpit authentication is configured incorrectly."));let t=!window.location.search&&window.location.hash?P(window.location.hash.slice(1)):P(window.location.search);if($(),t[u.TokenParam]){window.sessionStorage.getItem("login-wanted")&&(e.href=window.sessionStorage.getItem("login-wanted"),M(e.pathname));let i=t[u.TokenParam];f("#login-wait-validating");let n=new XMLHttpRequest;n.open("GET",y,!0),n.setRequestHeader("Authorization","Bearer "+i),n.onreadystatechange=function(){if(n.readyState==4)if(n.status==200)U(JSON.parse(n.responseText));else{let r=F(n.getResponseHeader("WWW-Authenticate"),n.responseText);r?j(r):w(decodeURIComponent(n.statusText))}},n.send()}else t[u.ErrorParam]?w(t[u.ErrorParam]):(window.sessionStorage.setItem("login-wanted",window.location.href),window.location=x)}function J(){d("#error-group"),o("login-error-message").textContent=""}function W(){d("#info-group"),o("login-info-message").textContent=""}function p(e,t){J(),e&&(u?w(e):(L(t||"login"),o("login-error-message").textContent=e,f("#error-group")))}function re(e){W(),e&&(o("login-info-message").textContent=e,f("#info-group"))}function I(e){o("server-field").value?(J(),o("login-error-message").textContent=e,f("#error-group"),C(null,!0),L("login")):p(e)}function ae(e){let t=o("login-note");e?(f(t),t.textContent=e):t.innerHTML=" "}function X(){return l.page.require_host&&S.indexOf("cockpit+=")===-1}function B(){let e=[];try{e=JSON.parse(c.getItem("cockpit-client-sessions")||"[]")}catch(t){h.log("Failed to parse 'cockpit-client-sessions':",t)}return e}function O(){p(null);let e=N(o("login-user-input").value);if(e===""&&!l.is_cockpit_client)p(s("User name cannot be empty"));else if(X()&&o("server-field").value==="")p(s("Please specify the host to connect to"));else{let t=o("server-field").value;t?(m="cockpit+="+t,y=A.replace("/"+S+"/","/"+m+"/"),o("brand").style.display="none",o("badge").style.visibility="hidden"):(m=S,y=A,E("badge",""),E("brand","Cockpit")),o("server-name").textContent=t||l.hostname,o("login-button").removeEventListener("click",O);let i=o("login-password-input").value,n="superuser:"+e+(t?":"+t:""),r=c.getItem(n)||"none";c.setItem("superuser-key",n),c.setItem(n,r),c.setItem("standard-login",!0);let a={Authorization:"Basic "+window.btoa(D(e+":"+i)),"X-Superuser":r};t&&(a["X-SSH-Connect-Unknown-Hosts"]="yes"),Q("GET",a,!1)}}function G(){let e=B(),t=o("recent-hosts-list");t.innerHTML="",e.forEach(i=>{let n=document.createElement("div");n.classList.add("host-line");let r=document.createElement("button");r.textContent=i,r.classList.add("pf-v5-c-button","pf-m-tertiary","host-name"),r.addEventListener("click",()=>{o("server-field").value=i,O()});let a=document.createElement("button");a.title=s("Remove host"),a.ariaLabel=a.title,a.classList.add("host-remove"),a.addEventListener("click",()=>{let b=e.indexOf(i);e.splice(b,1),c.setItem("cockpit-client-sessions",JSON.stringify(e)),G()}),n.append(r,a),t.append(n)}),k("#recent-hosts",e.length==0)}function L(e){let t=l.page.connect,i=o("option-group").getAttribute("data-state");if(d("#login-wait-validating"),f("#login"),k("#login-details",l.is_cockpit_client),k("#server-field-label",l.is_cockpit_client),l.is_cockpit_client){let n=o("brand");n.textContent=s("Connect to:"),n.classList.add("text-brand")}k(["#user-group","#password-group"],e!="login"||l.is_cockpit_client),k("#conversation-group",e!="conversation"),k("#hostkey-group",e!="hostkey"),o("login-button-text").textContent=e=="hostkey"?s("Accept key and log in"):s("Log in"),e!="login"&&(o("login-password-input").value=""),l.page.require_host?(d("#option-group"),i=!0):k("#option-group",!t||e!="login"),!t||e!="login"?d("#server-group"):k("#server-group",!i),o("login-button").removeAttribute("disabled"),o("login-button").removeAttribute("spinning"),o("login-button").classList.remove("pf-m-danger"),o("login-button").classList.add("pf-m-primary"),d("#get-out-link"),e=="login"&&o("login-button").addEventListener("click",O),l.is_cockpit_client&&(G(),document.body.classList.add("cockpit-client"))}function z(e){re(e),o("server-name").textContent=document.title,ae(s("Log in with your server user account.")),o("login-user-input").addEventListener("keydown",function(i){p(null),W(),i.which==13&&o("login-password-input").focus()},!1);let t=function(i){p(null),i.which==13&&O()};o("login-password-input").addEventListener("keydown",t),o("login-password-toggle").addEventListener("click",te),L("login"),l.is_cockpit_client?l.page.require_host&&o("server-field").focus():o("login-user-input").focus()}function se(){try{return JSON.parse(c.getItem("known_hosts")||"{ }")}catch(e){return h.warn("Can't parse known_hosts database in localStorage",e),{}}}function le(e){try{c.setItem("known_hosts",JSON.stringify(e))}catch(t){h.warn("Can't write known_hosts database to localStorage",t)}}function ce(e){let t=se(),i=e["host-key"],n=i.split(" ")[0],r=i.split(" ")[1];if(t[n]==i){R(e.id,e.default);return}t[n]?(o("hostkey-title").textContent=v(s("$0 key changed"),o("server-field").value),f("#hostkey-warning-group"),o("hostkey-message-1").textContent=""):(o("hostkey-title").textContent=s("New host"),d("#hostkey-warning-group"),o("hostkey-message-1").textContent=v(s("You are connecting to $0 for the first time."),o("server-field").value)),o("hostkey-verify-help-1").textContent=v(s("To verify a fingerprint, run the following on $0 while physically sitting at the machine or through a trusted network:"),o("server-field").value),o("hostkey-verify-help-cmds").textContent=v("ssh-keyscan$0 localhost | ssh-keygen -lf -",r?" -t "+r:""),o("hostkey-fingerprint").textContent=e.default,r?(o("hostkey-type").textContent=v("($0)",r),f("#hostkey-type")):d("#hostkey-type"),p("");function a(){o("login-button").removeEventListener("click",a),p(null,"hostkey"),t[n]=i,le(t),R(e.id,e.default)}o("login-button").addEventListener("click",a),L("hostkey"),f("#get-out-link"),t[n]&&(o("login-button").classList.add("pf-m-danger"),o("login-button").classList.remove("pf-m-primary"))}function j(e){if(e["host-key"]){ce(e);return}let t=e.echo?"text":"password";o("conversation-prompt").textContent=e.prompt;let i=o("conversation-message"),n=e.error||e.message;n?(i.textContent=n,f(i)):d(i);let r=o("conversation-input");r.value="",e.default&&(r.value=e.default),r.setAttribute("type",t),p("");function a(){o("conversation-input").removeEventListener("keydown",b),o("login-button").removeEventListener("click",a),p(null,"conversation"),R(e.id,o("conversation-input").value)}function b(_){p(null,"conversation"),_.which==13&&a()}o("conversation-input").addEventListener("keydown",b),o("login-button").addEventListener("click",a),L("conversation"),r.focus()}function D(e){return window.unescape(encodeURIComponent(e))}function F(e,t){if(!e)return null;let i=e.split(" ");if(i[0].toLowerCase()!=="x-conversation"&&i.length!=3)return null;let n=i[1],r;try{r=window.atob(i[2])}catch(b){return window.console&&h.error("Invalid prompt data",b),null}let a;try{a=JSON.parse(t)}catch(b){window.console&&h.log("Got invalid JSON response for prompt data",b),a={}}return a.id=n,a.prompt=r,a}function Q(e,t,i){o("login-button").setAttribute("disabled","true"),o("login-button").setAttribute("spinning","true");let n=new XMLHttpRequest;n.open(e,y,!0);for(let r in t)n.setRequestHeader(r,t[r]);n.onreadystatechange=function(){if(n.readyState==4)if(n.status==200){let r=JSON.parse(n.responseText);U(r)}else if(n.status==401){let r=n.getResponseHeader("WWW-Authenticate");if(r&&r.toLowerCase().indexOf("x-conversation")===0){let a=F(r,n.responseText);a?j(a):w(s("Internal error: Invalid challenge header"))}else if(window.console&&h.log(n.statusText),n.statusText.startsWith("captured-stderr:"))K(decodeURIComponent(n.statusText.replace(/^captured-stderr:/,"")));else if(n.statusText.indexOf("authentication-not-supported")>-1){let a=N(o("login-user-input").value);w(v(s("The server refused to authenticate '$0' using password authentication, and no other supported authentication methods are available."),a))}else n.statusText.indexOf("terminated")>-1?p(s("Authentication failed: Server closed connection")):n.statusText.indexOf("no-host")>-1?I(s("Unable to connect to that address")):n.statusText.indexOf("unknown-hostkey")>-1?I(s("Refusing to connect. Hostkey is unknown")):n.statusText.indexOf("unknown-host")>-1?I(s("Refusing to connect. Host is unknown")):n.statusText.indexOf("invalid-hostkey")>-1?I(s("Refusing to connect. Hostkey does not match")):p(s(i?"Authentication failed":"Wrong user name or password"))}else n.status==403?p(s(decodeURIComponent(n.statusText))||s("Permission denied")):n.statusText?w(decodeURIComponent(n.statusText)):w(v(s("$0 error"),n.status))},n.send()}function R(e,t){let i={Authorization:"X-Conversation "+e+" "+window.btoa(D(t))};Q("GET",i,!0)}function de(e){let t=window.setTimeout(function(){t=null,window.location.reload(!0)},100);e&&e!=window.location.href&&(window.location=e),window.onbeforeunload=function(){t&&window.clearTimeout(t),t=null}}function H(e,t,i){let n=0;for(;n{(function(h){let c;try{c=window.localStorage,window.localStorage.removeItem("url-root"),window.localStorage.removeItem("standard-login")}catch(e){c=window.sessionStorage,h.warn(String(e))}let T=c.getItem("shell:style")||"auto";window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches&&T==="auto"||T==="dark"?document.documentElement.classList.add("pf-v5-theme-dark"):document.documentElement.classList.remove("pf-v5-theme-dark"),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{e.matches&&T==="auto"||T==="dark"?document.documentElement.classList.add("pf-v5-theme-dark"):document.documentElement.classList.remove("pf-v5-theme-dark")});let g,l=window.environment||{},u=l.OAuth||null;u&&(u.TokenParam||(u.TokenParam="access_token"),u.ErrorParam||(u.ErrorParam="error_description"));let V=/\$\{([^}]+)\}|\$([a-zA-Z0-9_]+)/g;function v(e){let t=Array.prototype.slice.call(arguments,1);return e.replace(V,function(i,n,r){return t[n||r]||""})}function q(e){if(window.cockpit_po){let t=window.cockpit_po[e];if(t&&t[1])return t[1]}return e}function Y(){if(!document.querySelectorAll)return;let e=document.querySelectorAll("[translate]");for(let t=0;t{d("#login-fatal"),z()},f("#login-again");let t=o("login-fatal-message");t.textContent="",t.appendChild(document.createTextNode(e))}function w(e){window.console&&h.warn("fatal:",e),d("#login-again","#login-wait-validating"),x&&(o("login-again").href=x,f("#login-again")),d("#login","#login-details"),f("#login-fatal");let t=o("login-fatal-message");t.textContent="",t.appendChild(document.createTextNode(e))}function E(e,t){let i=o(e),n=i&&window.getComputedStyle?window.getComputedStyle(i,":before"):null;if(!n)return;let r=n.content;if(r&&r!="none"&&r!="normal"){let a=r.length;(r[0]==='"'||r[0]==="'")&&a>2&&r[a-1]===r[0]&&(r=r.substr(1,a-2)),i.innerHTML=r||t}else i.removeAttribute("class")}function ee(){function e(a){a?(f("#login","#login-details","#login-override"),d("#get-out-link"),o("login-override-content").appendChild(o("login")),o("login-button").classList.add("pf-m-warning"),document.querySelector("#login .login-actions").insertAdjacentHTML("beforebegin","
"+s("Cockpit might not render correctly in your browser")+"
")):d("#login","#login-details","#login-override")}function t(a,b){a==="supports"&&(a="@supports API");let _=v(s("This web browser is too old to run the Web Console (missing $0)"),a);window.console&&h.warn(_),o("login-error-message").textContent=_,f("#unsupported-browser","#error-group"),document.body.classList.add("unsupported-browser"),e(b)}function i(a,b){let _;try{_=b&&b[a]}catch(pe){throw w(v(s("The web browser configuration prevents Cockpit from running (inaccessible $0)"),a)),pe}return _===void 0?(t(a),!1):!0}function n(){let a=[].join.call(arguments,": ");return!window.CSS||!window.CSS.supports.apply(this,arguments)?(t(a,"bypass"),!1):!0}return i("WebSocket",window)&&i("XMLHttpRequest",window)&&i("sessionStorage",window)&&i("JSON",window)&&i("defineProperty",Object)&&i("console",window)&&i("pushState",window.history)&&i("textContent",document)&&i("replaceAll",String.prototype)&&i("finally",Promise.prototype)&&i("supports",window.CSS)?(n("display","flex")&&n("display","grid")&&n("selector(test)")&&n("selector(:is(*):where(*))"),!0):!1}function N(e){return e.replace(/^\s+|\s+$/g,"")}function M(e){let t=document.createElement("a"),i=document.baseURI;e=e||"/",t.href=i,t.pathname!="/"&&(g=t.pathname.replace(/^\/+|\/+$/g,""),c.setItem("url-root",g),g&&e.indexOf("/"+g)===0&&(e=e.replace("/"+g,"")||"/")),e.indexOf("/=")===0?(l.hostname=e.substring(2).split("/")[0],o("server-field").value=l.hostname,C(null,!0),e="/cockpit+"+e.split("/")[1]):e.indexOf("/cockpit/")!==0&&e.indexOf("/cockpit+")!==0&&(e="/cockpit"),m=e.split("/")[1],y="/"+m+"/login",g&&(y="/"+g+y),S=m,A=y}function C(e,t){e&&e.type==="keypress"&&e.key!==" "||(e&&e.type==="click"&&e.preventDefault(),t===void 0&&(t=o("server-group").hidden),k("#server-group",!t),o("option-group").setAttribute("data-state",t))}function te(e){let t=o("login-password-input");t.setAttribute("type",t.getAttribute("type")==="password"?"text":"password"),e.stopPropagation()}function oe(){window.onload=null,Y(),window.cockpit_po&&window.cockpit_po[""]&&(document.documentElement.lang=window.cockpit_po[""].language,window.cockpit_po[""]["language-direction"]&&(document.documentElement.dir=window.cockpit_po[""]["language-direction"])),M(window.location.pathname),(window.location.pathname.indexOf("/"+g+"/cockpit/")===0||window.location.pathname.indexOf("/"+g+"/cockpit+")===0)&&document.documentElement.setAttribute("class","inline");let e=l.page.title;if(l.is_cockpit_client&&(e=s("Login")),(!e||m.indexOf("cockpit+=")===0)&&(e=l.hostname),document.title=e,m.indexOf("cockpit+=")===0?d("#brand","#badge"):(E("badge",""),E("brand","Cockpit")),!ee())return;l.banner&&(f("#banner"),o("banner-message").textContent=l.banner.trimEnd()),o("bypass-browser-check").addEventListener("click",C),o("bypass-browser-check").addEventListener("keypress",C),o("show-other-login-options").addEventListener("click",C),o("show-other-login-options").addEventListener("keypress",C),o("server-clear").addEventListener("click",function(){let n=o("server-field");n.value="",n.focus()});let t=window.sessionStorage.getItem("logout-intent")=="explicit";t&&window.sessionStorage.removeItem("logout-intent");let i=window.sessionStorage.getItem("logout-reason");i&&window.sessionStorage.removeItem("logout-reason"),u?(d("#login-details","#login"),t?($(),o("login-again").textContent=s("Login again"),w(s("Logout successful"))):ie()):t?z(i):X()?z():ne()}function ne(){let e=new XMLHttpRequest;e.open("GET",y,!0),e.onreadystatechange=function(){e.readyState==4&&(e.status==200?U(JSON.parse(e.responseText)):e.status==401?z():e.statusText?w(decodeURIComponent(e.statusText)):e.status===0?z():w(v(s("$0 error"),e.status)))},e.send()}function $(){let e=window.location.href.split("#",2);x=u.URL,u.URL.indexOf("?")>-1?x+="&":x+="?",x+="redirect_uri="+encodeURIComponent(e[0])}function ie(){let e=document.createElement("a");if(!u.URL)return w(s("Cockpit authentication is configured incorrectly."));let t=!window.location.search&&window.location.hash?P(window.location.hash.slice(1)):P(window.location.search);if($(),t[u.TokenParam]){window.sessionStorage.getItem("login-wanted")&&(e.href=window.sessionStorage.getItem("login-wanted"),M(e.pathname));let i=t[u.TokenParam];f("#login-wait-validating");let n=new XMLHttpRequest;n.open("GET",y,!0),n.setRequestHeader("Authorization","Bearer "+i),n.onreadystatechange=function(){if(n.readyState==4)if(n.status==200)U(JSON.parse(n.responseText));else{let r=F(n.getResponseHeader("WWW-Authenticate"),n.responseText);r?j(r):w(decodeURIComponent(n.statusText))}},n.send()}else t[u.ErrorParam]?w(t[u.ErrorParam]):(window.sessionStorage.setItem("login-wanted",window.location.href),window.location=x)}function J(){d("#error-group"),o("login-error-message").textContent=""}function W(){d("#info-group"),o("login-info-message").textContent=""}function p(e,t){J(),e&&(u?w(e):(L(t||"login"),o("login-error-message").textContent=e,f("#error-group")))}function re(e){W(),e&&(o("login-info-message").textContent=e,f("#info-group"))}function I(e){o("server-field").value?(J(),o("login-error-message").textContent=e,f("#error-group"),C(null,!0),L("login")):p(e)}function ae(e){let t=o("login-note");e?(f(t),t.textContent=e):t.innerHTML=" "}function X(){return l.page.require_host&&S.indexOf("cockpit+=")===-1}function B(){let e=[];try{e=JSON.parse(c.getItem("cockpit-client-sessions")||"[]")}catch(t){h.log("Failed to parse 'cockpit-client-sessions':",t)}return e}function O(){p(null);let e=N(o("login-user-input").value);if(e===""&&!l.is_cockpit_client)p(s("User name cannot be empty"));else if(X()&&o("server-field").value==="")p(s("Please specify the host to connect to"));else{let t=o("server-field").value;t?(m="cockpit+="+t,y=A.replace("/"+S+"/","/"+m+"/"),o("brand").style.display="none",o("badge").style.visibility="hidden"):(m=S,y=A,E("badge",""),E("brand","Cockpit")),o("server-name").textContent=t||l.hostname,o("login-button").removeEventListener("click",O);let i=o("login-password-input").value,n="superuser:"+e+(t?":"+t:""),r=c.getItem(n)||"none";c.setItem("superuser-key",n),c.setItem(n,r),c.setItem("standard-login",!0);let a={Authorization:"Basic "+window.btoa(D(e+":"+i)),"X-Superuser":r};t&&(a["X-SSH-Connect-Unknown-Hosts"]="yes"),Q("GET",a,!1)}}function G(){let e=B(),t=o("recent-hosts-list");t.innerHTML="",e.forEach(i=>{let n=document.createElement("div");n.classList.add("host-line");let r=document.createElement("button");r.textContent=i,r.classList.add("pf-v5-c-button","pf-m-tertiary","host-name"),r.addEventListener("click",()=>{o("server-field").value=i,O()});let a=document.createElement("button");a.title=s("Remove host"),a.ariaLabel=a.title,a.classList.add("host-remove"),a.addEventListener("click",()=>{let b=e.indexOf(i);e.splice(b,1),c.setItem("cockpit-client-sessions",JSON.stringify(e)),G()}),n.append(r,a),t.append(n)}),k("#recent-hosts",e.length==0)}function L(e){let t=l.page.connect,i=o("option-group").getAttribute("data-state");if(d("#login-wait-validating"),f("#login"),k("#login-details",l.is_cockpit_client),k("#server-field-label",l.is_cockpit_client),l.is_cockpit_client){let n=o("brand");n.textContent=s("Connect to:"),n.classList.add("text-brand")}k(["#user-group","#password-group"],e!="login"||l.is_cockpit_client),k("#conversation-group",e!="conversation"),k("#hostkey-group",e!="hostkey"),o("login-button-text").textContent=e=="hostkey"?s("Accept key and log in"):s("Log in"),e!="login"&&(o("login-password-input").value=""),l.page.require_host?(d("#option-group"),i=!0):k("#option-group",!t||e!="login"),!t||e!="login"?d("#server-group"):k("#server-group",!i),o("login-button").removeAttribute("disabled"),o("login-button").removeAttribute("spinning"),o("login-button").classList.remove("pf-m-danger"),o("login-button").classList.add("pf-m-primary"),d("#get-out-link"),e=="login"&&o("login-button").addEventListener("click",O),l.is_cockpit_client&&(G(),document.body.classList.add("cockpit-client"))}function z(e){re(e),o("server-name").textContent=document.title,ae(s("Log in with your server user account.")),o("login-user-input").addEventListener("keydown",function(i){p(null),W(),i.which==13&&o("login-password-input").focus()},!1);let t=function(i){p(null),i.which==13&&O()};o("login-password-input").addEventListener("keydown",t),o("login-password-toggle").addEventListener("click",te),L("login"),l.is_cockpit_client?l.page.require_host&&o("server-field").focus():o("login-user-input").focus()}function se(){try{return JSON.parse(c.getItem("known_hosts")||"{ }")}catch(e){return h.warn("Can't parse known_hosts database in localStorage",e),{}}}function le(e){try{c.setItem("known_hosts",JSON.stringify(e))}catch(t){h.warn("Can't write known_hosts database to localStorage",t)}}function ce(e){let t=se(),i=e["host-key"],n=i.split(" ")[0],r=i.split(" ")[1];if(t[n]==i){R(e.id,e.default);return}t[n]?(o("hostkey-title").textContent=v(s("$0 key changed"),o("server-field").value),f("#hostkey-warning-group"),o("hostkey-message-1").textContent=""):(o("hostkey-title").textContent=s("New host"),d("#hostkey-warning-group"),o("hostkey-message-1").textContent=v(s("You are connecting to $0 for the first time."),o("server-field").value)),o("hostkey-verify-help-1").textContent=v(s("To verify a fingerprint, run the following on $0 while physically sitting at the machine or through a trusted network:"),o("server-field").value),o("hostkey-verify-help-cmds").textContent=v("ssh-keyscan$0 localhost | ssh-keygen -lf -",r?" -t "+r:""),o("hostkey-fingerprint").textContent=e.default,r?(o("hostkey-type").textContent=v("($0)",r),f("#hostkey-type")):d("#hostkey-type"),p("");function a(){o("login-button").removeEventListener("click",a),p(null,"hostkey"),t[n]=i,le(t),R(e.id,e.default)}o("login-button").addEventListener("click",a),L("hostkey"),f("#get-out-link"),t[n]&&(o("login-button").classList.add("pf-m-danger"),o("login-button").classList.remove("pf-m-primary"))}function j(e){if(e["host-key"]){ce(e);return}let t=e.echo?"text":"password";o("conversation-prompt").textContent=e.prompt;let i=o("conversation-message"),n=e.error||e.message;n?(i.textContent=n,f(i)):d(i);let r=o("conversation-input");r.value="",e.default&&(r.value=e.default),r.setAttribute("type",t),p("");function a(){o("conversation-input").removeEventListener("keydown",b),o("login-button").removeEventListener("click",a),p(null,"conversation"),R(e.id,o("conversation-input").value)}function b(_){p(null,"conversation"),_.which==13&&a()}o("conversation-input").addEventListener("keydown",b),o("login-button").addEventListener("click",a),L("conversation"),r.focus()}function D(e){return window.unescape(encodeURIComponent(e))}function F(e,t){if(!e)return null;let i=e.split(" ");if(i[0].toLowerCase()!=="x-conversation"&&i.length!=3)return null;let n=i[1],r;try{r=window.atob(i[2])}catch(b){return window.console&&h.error("Invalid prompt data",b),null}let a;try{a=JSON.parse(t)}catch(b){window.console&&h.log("Got invalid JSON response for prompt data",b),a={}}return a.id=n,a.prompt=r,a}function Q(e,t,i){o("login-button").setAttribute("disabled","true"),o("login-button").setAttribute("spinning","true");let n=new XMLHttpRequest;n.open(e,y,!0);for(let r in t)n.setRequestHeader(r,t[r]);n.onreadystatechange=function(){if(n.readyState==4)if(n.status==200){let r=JSON.parse(n.responseText);U(r)}else if(n.status==401){let r=n.getResponseHeader("WWW-Authenticate");if(r&&r.toLowerCase().indexOf("x-conversation")===0){let a=F(r,n.responseText);a?j(a):w(s("Internal error: Invalid challenge header"))}else if(window.console&&h.log(n.statusText),n.statusText.startsWith("captured-stderr:"))K(decodeURIComponent(n.statusText.replace(/^captured-stderr:/,"")));else if(n.statusText.indexOf("authentication-not-supported")>-1){let a=N(o("login-user-input").value);w(v(s("The server refused to authenticate '$0' using password authentication, and no other supported authentication methods are available."),a))}else n.statusText.indexOf("terminated")>-1?p(s("Authentication failed: Server closed connection")):n.statusText.indexOf("no-host")>-1?I(s("Unable to connect to that address")):n.statusText.indexOf("unknown-hostkey")>-1?I(s("Refusing to connect. Hostkey is unknown")):n.statusText.indexOf("unknown-host")>-1?I(s("Refusing to connect. Host is unknown")):n.statusText.indexOf("invalid-hostkey")>-1?I(s("Refusing to connect. Hostkey does not match")):p(s(i?"Authentication failed":"Wrong user name or password"))}else n.status==403?p(s(decodeURIComponent(n.statusText))||s("Permission denied")):n.statusText?w(decodeURIComponent(n.statusText)):w(v(s("$0 error"),n.status))},n.send()}function R(e,t){let i={Authorization:"X-Conversation "+e+" "+window.btoa(D(t))};Q("GET",i,!0)}function de(e){let t=window.setTimeout(function(){t=null,window.location.reload(!0)},100);e&&e!=window.location.href&&(window.location=e),window.onbeforeunload=function(){t&&window.clearTimeout(t),t=null}}function H(e,t,i){let n=0;for(;n cockpit.format_bytes() -string = cockpit.format_bytes(number, [factor]) -array = cockpit.format_bytes(number, [factor, options]) +string = cockpit.format_bytes(number, [options]) Formats number into a displayable string with a suffix, such as - KB or MB. Returns an array of the - formatted number and the suffix if options.separate is set to true. + kB or MB. - If specifying 1000 or 1024 is specified as a factor then an appropriate suffix - will be chosen. By default the factor is 1000. You can pass a string suffix as a - factor in which case the resulting number will be formatted with the same suffix. - - If the number is less than the factor or an unknown factor - was passed in, then the formatted number is returned without a suffix. If options.separate - is true, returns an array of [formatted_number, suffix] or - [formatted_number] if returned without a suffix. + By default, SI units are used. IEC units (1024-based) can be requested by including + base2: true in options. By default, non-integer numbers will be formatted with 3 digits of precision. This can be changed with options.precision. - If number is null or undefined an empty string or - an array without a suffix will be returned. + If number is null or undefined an empty string will be + returned. cockpit.format_bytes_per_sec() - string = cockpit.format_bytes_per_sec(number, [factor]) - array = cockpit.format_bytes_per_sec(number, [factor, options]) +string = cockpit.format_bytes_per_sec(number, [options]) Format number of bytes into a displayable speed string. - If specifying 1000 or 1024 is specified as a factor then an appropriate suffix - will be chosen. By default the factor is 1000. You can pass a string suffix as a - factor in which case the resulting number will be formatted with the same suffix. - - If the number is less than the factor or an unknown factor - was passed in, then the formatted number is returned without a suffix. If options.separate - is true, returns an array of [formatted_number, suffix] or - [formatted_number] if returned without a suffix. - - By default, non-integer numbers will be formatted with 3 digits of precision. This can be changed - with options.precision. - - If number is null or undefined an empty string or array - will be returned. + This function is mostly equivalent to cockpit.format_bytes() but the returned + value contains a unit like kB/s or MB/s. cockpit.format_bits_per_sec() - string = cockpit.format_bits_per_sec(number, [factor]) - array = cockpit.format_bytes_per_sec(number, [factor, options]) +string = cockpit.format_bits_per_sec(number, [options]) Format number of bits into a displayable speed string. - If specifying 1000 or 1024 is specified as a factor then an appropriate suffix - will be chosen. By default the factor is 1000. You can pass a string suffix as a - factor in which case the resulting number will be formatted with the same suffix. - - If the number is less than the factor or an unknown factor - was passed in, then the formatted number is returned without a suffix. If options.separate - is true, returns an array of [formatted_number, suffix] or - [formatted_number] if returned without a suffix. - - By default, non-integer numbers will be formatted with 3 digits of precision. This can be changed - with options.precision. + This function is mostly equivalent to cockpit.format_bytes() but the returned + value contains a unit like kbps or Mbps. - If number is null or undefined an empty string or array - will be returned. + This function does not support IEC units. base2 may not be passed as part of + options. diff -Nru cockpit-314/files.js cockpit-316/files.js --- cockpit-314/files.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/files.js 2024-04-25 09:45:58.000000000 +0000 @@ -42,44 +42,45 @@ ], tests: [ - "base1/test-base64", - "base1/test-browser-storage", - "base1/test-cache", - "base1/test-chan", - "base1/test-dbus-address", - "base1/test-dbus-framed", - "base1/test-dbus", - "base1/test-echo", - "base1/test-events", - "base1/test-external", - "base1/test-file", - "base1/test-format", - "base1/test-framed-cache", - "base1/test-framed", - "base1/test-http", - "base1/test-journal-renderer", - "base1/test-locale", - "base1/test-location", - "base1/test-metrics", - "base1/test-no-jquery", - "base1/test-permissions", - "base1/test-promise", - "base1/test-protocol", - "base1/test-series", - "base1/test-spawn-proc", - "base1/test-spawn", - "base1/test-stream", - "base1/test-user", - "base1/test-utf8", - "base1/test-websocket", + "base1/test-base64.js", + "base1/test-browser-storage.js", + "base1/test-cache.js", + "base1/test-chan.js", + "base1/test-dbus-address.js", + "base1/test-dbus-framed.js", + "base1/test-dbus.js", + "base1/test-echo.js", + "base1/test-events.js", + "base1/test-external.js", + "base1/test-file.js", + "base1/test-format.ts", + "base1/test-framed-cache.js", + "base1/test-framed.js", + "base1/test-http.js", + "base1/test-journal-renderer.js", + "base1/test-locale.js", + "base1/test-location.js", + "base1/test-metrics.js", + "base1/test-no-jquery.js", + "base1/test-permissions.js", + "base1/test-promise.ts", + "base1/test-protocol.js", + "base1/test-series.js", + "base1/test-spawn-proc.js", + "base1/test-spawn.js", + "base1/test-stream.js", + "base1/test-types.ts", + "base1/test-user.js", + "base1/test-utf8.js", + "base1/test-websocket.js", - "kdump/test-config-client", + "kdump/test-config-client.js", - "networkmanager/test-utils", + "networkmanager/test-utils.js", - "shell/machines/test-machines", + "shell/machines/test-machines.js", - "storaged/test-util", + "storaged/test-util.js", ], files: [ diff -Nru cockpit-314/package-lock.json cockpit-316/package-lock.json --- cockpit-314/package-lock.json 2024-03-27 17:06:21.000000000 +0000 +++ cockpit-316/package-lock.json 2024-04-25 09:46:01.000000000 +0000 @@ -121,9 +121,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", - "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -133,9 +133,9 @@ } }, "node_modules/@bufbuild/protobuf": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.8.0.tgz", - "integrity": "sha512-qR9FwI8QKIveDnUYutvfzbC21UZJJryYrLuZGjeZ/VGz+vXelUkK+xgkOHsvPEdYEdxtgUUq4313N8QtOehJ1Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.9.0.tgz", + "integrity": "sha512-W7gp8Q/v1NlCZLsv8pQ3Y0uCu/SHgXOVFK+eUluUKWXmsb6VHkpNx0apdOWWcDbB9sJoKeP8uPrjmehJz6xETQ==", "dev": true, "peer": true }, @@ -204,9 +204,9 @@ } }, "node_modules/@csstools/selector-specificity": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", - "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz", + "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==", "dev": true, "funding": [ { @@ -298,6 +298,28 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", @@ -321,6 +343,28 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -335,9 +379,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@nodelib/fs.scandir": { @@ -376,18 +420,18 @@ } }, "node_modules/@patternfly/patternfly": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.2.1.tgz", - "integrity": "sha512-n5xFjyj1J4eIFZ7XeU6K44POKRAuDlO5yALPbn084y+jPy1j861AaQ+zIUbzCi4IzBlHrvoXVKij7p1zy7Ditg==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.3.0.tgz", + "integrity": "sha512-93uWA15bOJDgu8NF2iReWbbNtWdtM+v7iaDpK33mJChgej+whiFpGLtQPI2jFk1aVW3rDpbt4qm4OaNinpzSsg==" }, "node_modules/@patternfly/react-core": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.2.3.tgz", - "integrity": "sha512-MJeOLyJFbZPV+cj4LjL15nUuhJUwFuqLFiv6f2YubRqHl/+z05oM0byhwfm/qu2VnKByY6X6lu3Hp+hMTZcbOA==", - "dependencies": { - "@patternfly/react-icons": "^5.2.1", - "@patternfly/react-styles": "^5.2.1", - "@patternfly/react-tokens": "^5.2.1", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.3.0.tgz", + "integrity": "sha512-nMf8yrul3u+4+ch7IMsE+/3Rzmor8/yEUk8zzD9bYGRxjwniu1RqCF8NdgPvMw2C7Hz7xtpwsgXDfG4n8qd12g==", + "dependencies": { + "@patternfly/react-icons": "^5.3.0", + "@patternfly/react-styles": "^5.3.0", + "@patternfly/react-tokens": "^5.3.0", "focus-trap": "7.5.2", "react-dropzone": "^14.2.3", "tslib": "^2.5.0" @@ -398,28 +442,28 @@ } }, "node_modules/@patternfly/react-icons": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.2.1.tgz", - "integrity": "sha512-aeJ0X+U2NDe8UmI5eQiT0iuR/wmUq97UkDtx3HoZcpRb9T6eUBfysllxjRqHS8rOOspdU8OWq+CUhQ/E2ZDibg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.3.0.tgz", + "integrity": "sha512-oBdaK4Gz7yivNE7jQg46sPzfZakg7oxo5aSMLc0N6haOmDEegiTurNex+h+/z0oBPqzZC+cIQRaBeXEgXGwc9Q==", "peerDependencies": { "react": "^17 || ^18", "react-dom": "^17 || ^18" } }, "node_modules/@patternfly/react-styles": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.2.1.tgz", - "integrity": "sha512-GT96hzI1QenBhq6Pfc51kxnj9aVLjL1zSLukKZXcYVe0HPOy0BFm90bT1Fo4e/z7V9cDYw4SqSX1XLc3O4jsTw==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.3.0.tgz", + "integrity": "sha512-/EdkURW+v7Rzw/CiEqL+NfGtLvLMGIwOEyDhvlMDbRip2usGw4HLZv3Bep0cJe29zOeY27cDVZDM1HfyXLebtw==" }, "node_modules/@patternfly/react-table": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@patternfly/react-table/-/react-table-5.2.4.tgz", - "integrity": "sha512-WCt4I6XYKRHXcasDqcOX70ctkgPVBAvlOv67KhaZsedxUU+B2NT1kiI7Jr7tD4SrR+jQs0MCF/bbRk1QM+rBqg==", - "dependencies": { - "@patternfly/react-core": "^5.2.3", - "@patternfly/react-icons": "^5.2.1", - "@patternfly/react-styles": "^5.2.1", - "@patternfly/react-tokens": "^5.2.1", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-table/-/react-table-5.3.0.tgz", + "integrity": "sha512-DuylKyUA/D6Jzk7t6VU8SzbABjaKra2+O4G99Zt7EyEuhcDP3dfb+AcL5yg7CLx4/v2fexzum+dLGZVMvqzSUQ==", + "dependencies": { + "@patternfly/react-core": "^5.3.0", + "@patternfly/react-icons": "^5.3.0", + "@patternfly/react-styles": "^5.3.0", + "@patternfly/react-tokens": "^5.3.0", "lodash": "^4.17.19", "tslib": "^2.5.0" }, @@ -429,9 +473,21 @@ } }, "node_modules/@patternfly/react-tokens": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.2.1.tgz", - "integrity": "sha512-8GYz/jnJTGAWUJt5eRAW5dtyiHPKETeFJBPGHaUQnvi/t1ZAkoy8i4Kd/RlHsDC7ktiu813SKCmlzwBwldAHKg==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.3.0.tgz", + "integrity": "sha512-24ZY5hgwt11InW3XtINM5p9Fo1hDiVor6Q4uphPZh8Mt89AsZZw1UweTaGg54I0Ah2Wzv6rkQy51LX7tZtIwjQ==" + }, + "node_modules/@types/deep-equal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/deep-equal/-/deep-equal-1.0.4.tgz", + "integrity": "sha512-tqdiS4otQP4KmY0PR3u6KbZ5EWvhNdUoS/jc93UuK23C220lOZ/9TvjfxdPcKvqwwDVtmtSCrnr0p/2dirAxkA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", @@ -439,6 +495,234 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true + }, + "node_modules/@types/qunit": { + "version": "2.19.10", + "resolved": "https://registry.npmjs.org/@types/qunit/-/qunit-2.19.10.tgz", + "integrity": "sha512-gVB+rxvxmbyPFWa6yjjKgcumWal3hyqoTXI0Oil161uWfo1OCzWZ/rnEumsx+6uVgrwPrCrhpQbLkzfildkSbg==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.79", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.79.tgz", + "integrity": "sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.25", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.25.tgz", + "integrity": "sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz", + "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/type-utils": "7.7.1", + "@typescript-eslint/utils": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", + "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", + "dev": true, + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz", + "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/utils": "7.7.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", + "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.1", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -827,13 +1111,12 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -893,31 +1176,15 @@ } }, "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", "dev": true, "peer": true, "dependencies": { "semver": "^7.0.0" } }, - "node_modules/builtins/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -1084,9 +1351,9 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true, "engines": { "node": ">=12 || >=16" @@ -1117,6 +1384,12 @@ "node": ">=4" } }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -1336,9 +1609,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", - "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -1380,11 +1653,11 @@ "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.7", + "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.5", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" }, @@ -1681,22 +1954,6 @@ "eslint": ">=6.0.0" } }, - "node_modules/eslint-compat-utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-config-standard": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", @@ -1892,6 +2149,16 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -1913,6 +2180,27 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", @@ -1943,6 +2231,28 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-n": { "version": "16.6.2", "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", @@ -1972,20 +2282,28 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "peer": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" + "node": "*" } }, "node_modules/eslint-plugin-node": { @@ -2008,6 +2326,37 @@ "eslint": ">=5.16.0" } }, + "node_modules/eslint-plugin-node/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-node/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-promise": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", @@ -2064,6 +2413,16 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2076,6 +2435,18 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -2093,6 +2464,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -2145,6 +2525,16 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -2157,6 +2547,18 @@ "node": ">=10.13.0" } }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -2534,6 +2936,28 @@ "node": ">= 6" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -3542,7 +3966,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -3610,15 +4033,18 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -4505,9 +4931,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.72.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz", - "integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==", + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", + "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -4522,9 +4948,9 @@ } }, "node_modules/sass-embedded": { - "version": "1.72.0", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.72.0.tgz", - "integrity": "sha512-MVdnYEEFVVkmsaAaEa9nWoIhCyezG6afJl2a7OF/WKl4PTGtCjgM9+yJBGUtAF9aJ36Us5hwNV8yqffnCJruyg==", + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.75.0.tgz", + "integrity": "sha512-8ZhQYJSCcjMRClyPpA09ZQ9p0Q9NtYxfMbhifBgUoQZC47Co5QJa0ykhfV/SY6mIqK7aAhMF7NAD5h0MEe2vpg==", "dev": true, "peer": true, "dependencies": { @@ -4539,28 +4965,29 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.72.0", - "sass-embedded-android-arm64": "1.72.0", - "sass-embedded-android-ia32": "1.72.0", - "sass-embedded-android-x64": "1.72.0", - "sass-embedded-darwin-arm64": "1.72.0", - "sass-embedded-darwin-x64": "1.72.0", - "sass-embedded-linux-arm": "1.72.0", - "sass-embedded-linux-arm64": "1.72.0", - "sass-embedded-linux-ia32": "1.72.0", - "sass-embedded-linux-musl-arm": "1.72.0", - "sass-embedded-linux-musl-arm64": "1.72.0", - "sass-embedded-linux-musl-ia32": "1.72.0", - "sass-embedded-linux-musl-x64": "1.72.0", - "sass-embedded-linux-x64": "1.72.0", - "sass-embedded-win32-ia32": "1.72.0", - "sass-embedded-win32-x64": "1.72.0" + "sass-embedded-android-arm": "1.75.0", + "sass-embedded-android-arm64": "1.75.0", + "sass-embedded-android-ia32": "1.75.0", + "sass-embedded-android-x64": "1.75.0", + "sass-embedded-darwin-arm64": "1.75.0", + "sass-embedded-darwin-x64": "1.75.0", + "sass-embedded-linux-arm": "1.75.0", + "sass-embedded-linux-arm64": "1.75.0", + "sass-embedded-linux-ia32": "1.75.0", + "sass-embedded-linux-musl-arm": "1.75.0", + "sass-embedded-linux-musl-arm64": "1.75.0", + "sass-embedded-linux-musl-ia32": "1.75.0", + "sass-embedded-linux-musl-x64": "1.75.0", + "sass-embedded-linux-x64": "1.75.0", + "sass-embedded-win32-arm64": "1.75.0", + "sass-embedded-win32-ia32": "1.75.0", + "sass-embedded-win32-x64": "1.75.0" } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.72.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.72.0.tgz", - "integrity": "sha512-YkqG0/9fUubuK1veHATHhz5mEACVVmzCDiyjgYX5qx8VTOowt/OO3+NAwnZOr4UcjfIfemJNRdSpDFGUwOd01A==", + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.75.0.tgz", + "integrity": "sha512-bsuOEy6rjIwfc7qihDSrEnmaePUn8bR5NAAzeljlfQkRFRxivB1gysQfRPjLPbheJfChFDLiiFX2z2CQkcdKuQ==", "cpu": [ "x64" ], @@ -4575,9 +5002,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.72.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.72.0.tgz", - "integrity": "sha512-9CCHTm5iUjJ4zeOKH04jyQH4yxxtaigo3APwXfYQ64xLJHuhazk0qyx8RV1heD44j0YpnSa5ybhWwm8gLKG7/A==", + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.75.0.tgz", + "integrity": "sha512-L7x3orLODCRds6PpDfrb6bbh6IdqHDzcwyt6VkcbTN+KtbMI4PfNGKHeo7f2K8wMbCiFK3BGJqMSPxNRuVp19A==", "cpu": [ "x64" ], @@ -4619,12 +5046,18 @@ } }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/set-function-length": { @@ -4909,20 +5342,20 @@ } }, "node_modules/stylelint": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.3.1.tgz", - "integrity": "sha512-/JOwQnBvxEKOT2RtNgGpBVXnCSMBgKOL2k7w0K52htwCyJls4+cHvc4YZgXlVoAZS9QJd2DgYAiRnja96pTgxw==", + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.4.0.tgz", + "integrity": "sha512-uSx7VMuXwLuYcNSIg+0/fFNv0WinsfLAqsVVy7h7p80clKOHiGE8pfY6UjqwylTHiJrRIahTl6a8FPxGezhWoA==", "dev": true, "dependencies": { "@csstools/css-parser-algorithms": "^2.6.1", "@csstools/css-tokenizer": "^2.2.4", "@csstools/media-query-list-parser": "^2.1.9", - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.0.3", "@dual-bundle/import-meta-resolve": "^4.0.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.1", + "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", @@ -4951,7 +5384,7 @@ "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "bin": { @@ -5016,9 +5449,9 @@ } }, "node_modules/stylelint-config-standard-scss": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-13.0.0.tgz", - "integrity": "sha512-WaLvkP689qSYUpJQPCo30TFJSSc3VzvvoWnrgp+7PpVby5o8fRUY1cZcP0sePZfjrFl9T8caGhcKg0GO34VDiQ==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-13.1.0.tgz", + "integrity": "sha512-Eo5w7/XvwGHWkeGLtdm2FZLOMYoZl1omP2/jgFCXyl2x5yNz7/8vv4Tj6slHvMSSUNTaGoam/GAZ0ZhukvalfA==", "dev": true, "dependencies": { "stylelint-config-recommended-scss": "^14.0.0", @@ -5029,7 +5462,7 @@ }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^16.1.0" + "stylelint": "^16.3.1" }, "peerDependenciesMeta": { "postcss": { @@ -5343,6 +5776,18 @@ "node": ">=8.0" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -5457,6 +5902,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -5649,12 +6107,14 @@ "node_modules/xterm": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/xterm/-/xterm-5.3.0.tgz", - "integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==" + "integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==", + "deprecated": "This package is now deprecated. Move to @xterm/xterm instead." }, "node_modules/xterm-addon-canvas": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/xterm-addon-canvas/-/xterm-addon-canvas-0.5.0.tgz", "integrity": "sha512-QOo/eZCMrCleAgMimfdbaZCgmQRWOml63Ued6RwQ+UTPvQj3Av9QKx3xksmyYrDGRO/AVRXa9oNuzlYvLdmoLQ==", + "deprecated": "This package is now deprecated. Move to @xterm/addon-canvas instead.", "peerDependencies": { "xterm": "^5.0.0" } @@ -5663,8 +6123,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true + "dev": true }, "node_modules/yocto-queue": { "version": "0.1.0", diff -Nru cockpit-314/package.json cockpit-316/package.json --- cockpit-314/package.json 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/package.json 2024-04-25 09:45:58.000000000 +0000 @@ -4,12 +4,12 @@ "type": "module", "private": true, "dependencies": { - "@patternfly/patternfly": "5.2.1", - "@patternfly/react-core": "5.2.3", - "@patternfly/react-icons": "5.2.1", - "@patternfly/react-styles": "5.2.1", - "@patternfly/react-table": "5.2.4", - "@patternfly/react-tokens": "5.2.1", + "@patternfly/patternfly": "5.3.0", + "@patternfly/react-core": "5.3.0", + "@patternfly/react-icons": "5.3.0", + "@patternfly/react-styles": "5.3.0", + "@patternfly/react-table": "5.3.0", + "@patternfly/react-tokens": "5.3.0", "deep-equal": "2.2.3", "date-fns": "3.6.0", "js-sha1": "0.7.0", @@ -25,6 +25,11 @@ "xterm-addon-canvas": "0.5.0" }, "devDependencies": { + "@types/deep-equal": "1.0.4", + "@types/qunit": "^2.19.10", + "@types/react": "18.2.79", + "@types/react-dom": "18.2.25", + "@typescript-eslint/eslint-plugin": "7.7.1", "argparse": "2.0.1", "chrome-remote-interface": "0.33.0", "esbuild": "0.20.2", @@ -47,13 +52,14 @@ "jed": "1.1.1", "qunit": "2.20.1", "qunit-tap": "1.5.1", - "sass": "1.72.0", + "sass": "1.75.0", "sizzle": "2.3.10", - "stylelint": "16.3.1", + "stylelint": "16.4.0", "stylelint-config-standard": "36.0.0", - "stylelint-config-standard-scss": "13.0.0", + "stylelint-config-standard-scss": "13.1.0", "stylelint-formatter-pretty": "4.0.0", - "stylelint-use-logical-spec": "5.0.1" + "stylelint-use-logical-spec": "5.0.1", + "typescript": "^5.3.3" }, "scripts": { "eslint": "eslint --ext .js --ext .jsx pkg/ test/common/", diff -Nru cockpit-314/pkg/base1/test-dbus-common.js cockpit-316/pkg/base1/test-dbus-common.js --- cockpit-314/pkg/base1/test-dbus-common.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/base1/test-dbus-common.js 2024-04-25 09:45:58.000000000 +0000 @@ -18,7 +18,7 @@ */ import cockpit from "cockpit"; -import QUnit from "qunit-tests"; +import QUnit, { skipWithPybridge } from "qunit-tests"; function deep_update(target, data) { for (const prop in data) { @@ -104,7 +104,7 @@ ], "round trip"); }); - QUnit.test.skipWithPybridge("integer bounds", async assert => { + skipWithPybridge("integer bounds", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); async function testNumber(type, value, valid) { @@ -163,7 +163,7 @@ ], "round trip"); }); - QUnit.test.skipWithPybridge("variants", async assert => { + skipWithPybridge("variants", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); const reply = await dbus.call( "/otree/frobber", "com.redhat.Cockpit.DBusTests.Frobber", @@ -179,7 +179,7 @@ ], "round trip"); }); - QUnit.test.skipWithPybridge("bad variants", async assert => { + skipWithPybridge("bad variants", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call( @@ -236,7 +236,7 @@ } }); - QUnit.test.skipWithPybridge("call bad base64", async assert => { + skipWithPybridge("call bad base64", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call( @@ -322,7 +322,7 @@ }); }); - QUnit.test.skipWithPybridge("empty base64", assert => { + skipWithPybridge("empty base64", assert => { const done = assert.async(); assert.expect(3); @@ -340,7 +340,7 @@ }); }); - QUnit.test.skipWithPybridge("bad object path", async assert => { + skipWithPybridge("bad object path", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call("invalid/path", "borkety.Bork", "Echo", [1]); @@ -351,7 +351,7 @@ } }); - QUnit.test.skipWithPybridge("bad interface name", async assert => { + skipWithPybridge("bad interface name", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call("/path", "!invalid!interface!", "Echo", [1]); @@ -362,7 +362,7 @@ } }); - QUnit.test.skipWithPybridge("bad method name", async assert => { + skipWithPybridge("bad method name", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call("/path", "borkety.Bork", "!Invalid!Method!", [1]); @@ -373,7 +373,7 @@ } }); - QUnit.test.skipWithPybridge("bad flags", async assert => { + skipWithPybridge("bad flags", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call("/path", "borkety.Bork", "Method", [1], { flags: 5 }); @@ -384,7 +384,7 @@ } }); - QUnit.test.skipWithPybridge("bad types", async assert => { + skipWithPybridge("bad types", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call("/bork", "borkety.Bork", "Echo", [1], { type: "!!%%" }); @@ -395,7 +395,7 @@ } }); - QUnit.test.skipWithPybridge("bad type invalid", async assert => { + skipWithPybridge("bad type invalid", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call("/bork", "borkety.Bork", "Echo", [1], { type: 5 }); // invalid @@ -406,7 +406,7 @@ } }); - QUnit.test.skipWithPybridge("bad dict type", async assert => { + skipWithPybridge("bad dict type", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call("/otree/frobber", "com.redhat.Cockpit.DBusTests.Frobber", "Nobody", @@ -418,7 +418,7 @@ } }); - QUnit.test.skipWithPybridge("bad object path", async assert => { + skipWithPybridge("bad object path", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call("/otree/frobber", "com.redhat.Cockpit.DBusTests.Frobber", "Nobody", @@ -430,7 +430,7 @@ } }); - QUnit.test.skipWithPybridge("bad signature", async assert => { + skipWithPybridge("bad signature", async assert => { const dbus = cockpit.dbus(bus_name, channel_options); try { await dbus.call("/otree/frobber", "com.redhat.Cockpit.DBusTests.Frobber", "Nobody", ["bad signature"], { type: "g" }); @@ -710,7 +710,7 @@ dbus.removeEventListener("notify", onnotify); }); - QUnit.test.skipWithPybridge("path loop", async assert => { + skipWithPybridge("path loop", async assert => { const name = "yo" + new Date().getTime(); const cache = { }; @@ -733,7 +733,7 @@ dbus.removeEventListener("notify", onnotify); }); - QUnit.test.skipWithPybridge("path signal", async assert => { + skipWithPybridge("path signal", async assert => { const name = "yo" + new Date().getTime(); const cache = { }; @@ -940,7 +940,7 @@ assert.equal(gone, false, "is not gone"); }); - QUnit.test.skipWithPybridge("receive readable fd", async assert => { + skipWithPybridge("receive readable fd", async assert => { const done = assert.async(); assert.expect(3); @@ -959,7 +959,7 @@ }; }); - QUnit.test.skipWithPybridge("receive readable fd and ensure opening more than once fails", async assert => { + skipWithPybridge("receive readable fd and ensure opening more than once fails", async assert => { const done = assert.async(); assert.expect(6); @@ -981,7 +981,7 @@ }; }); - QUnit.test.skipWithPybridge("receive readable fd and ensure writing fails", async assert => { + skipWithPybridge("receive readable fd and ensure writing fails", async assert => { const done = assert.async(); assert.expect(5); @@ -1002,7 +1002,7 @@ }; }); - QUnit.test.skipWithPybridge("receive writable fd", async assert => { + skipWithPybridge("receive writable fd", async assert => { const dbus = cockpit.dbus("com.redhat.Cockpit.DBusTests.Test", channel_options); const [fd] = await dbus.call("/otree/frobber", "com.redhat.Cockpit.DBusTests.Frobber", "MakeTestFd", ["writable"]); diff -Nru cockpit-314/pkg/base1/test-dbus.js cockpit-316/pkg/base1/test-dbus.js --- cockpit-314/pkg/base1/test-dbus.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/base1/test-dbus.js 2024-04-25 09:45:58.000000000 +0000 @@ -1,5 +1,5 @@ import cockpit from "cockpit"; -import QUnit from "qunit-tests"; +import QUnit, { mock_info, skipWithPybridge } from "qunit-tests"; import { common_dbus_tests, dbus_track_tests } from "./test-dbus-common.js"; @@ -142,7 +142,7 @@ }); }); -QUnit.test.skipWithPybridge("bad dbus address", function (assert) { +skipWithPybridge("bad dbus address", function (assert) { const done = assert.async(); assert.expect(1); @@ -153,7 +153,7 @@ }); }); -QUnit.test.skipWithPybridge("bad dbus bus", function (assert) { +skipWithPybridge("bad dbus bus", function (assert) { const done = assert.async(); assert.expect(1); @@ -194,7 +194,7 @@ }); }); -QUnit.test.skipWithPybridge("no default name", function (assert) { +skipWithPybridge("no default name", function (assert) { const done = assert.async(); assert.expect(1); @@ -211,7 +211,7 @@ }); }); -QUnit.test.skipWithPybridge("no default name bad", function (assert) { +skipWithPybridge("no default name bad", function (assert) { const done = assert.async(); assert.expect(2); @@ -229,7 +229,7 @@ }); }); -QUnit.test.skipWithPybridge("no default name invalid", function (assert) { +skipWithPybridge("no default name invalid", function (assert) { const done = assert.async(); assert.expect(2); @@ -247,7 +247,7 @@ }); }); -QUnit.test.skipWithPybridge("no default name missing", function (assert) { +skipWithPybridge("no default name missing", function (assert) { const done = assert.async(); assert.expect(2); @@ -265,7 +265,7 @@ }); }); -QUnit.test.skipWithPybridge("no default name second", function (assert) { +skipWithPybridge("no default name second", function (assert) { const done = assert.async(); assert.expect(2); @@ -290,7 +290,7 @@ }); }); -QUnit.test.skipWithPybridge("override default name", function (assert) { +skipWithPybridge("override default name", function (assert) { const done = assert.async(); assert.expect(2); @@ -314,7 +314,7 @@ }); }); -QUnit.test.skipWithPybridge("watch no default name", function (assert) { +skipWithPybridge("watch no default name", function (assert) { const done = assert.async(); assert.expect(1); @@ -337,7 +337,7 @@ }); }); -QUnit.test.skipWithPybridge("watch missing name", function (assert) { +skipWithPybridge("watch missing name", function (assert) { const done = assert.async(); assert.expect(2); @@ -355,7 +355,7 @@ }); }); -QUnit.test.skipWithPybridge("shared client", function (assert) { +skipWithPybridge("shared client", function (assert) { const done = assert.async(); assert.expect(2); @@ -395,7 +395,7 @@ dbus2.close(); }); -QUnit.test.skipWithPybridge("emit signal type", function (assert) { +skipWithPybridge("emit signal type", function (assert) { const done = assert.async(); assert.expect(4); @@ -425,7 +425,7 @@ }); }); -QUnit.test.skipWithPybridge("emit signal no meta", function (assert) { +skipWithPybridge("emit signal no meta", function (assert) { const done = assert.async(); assert.expect(2); @@ -451,13 +451,13 @@ QUnit.test("internal dbus", async assert => internal_test(assert, { bus: "internal" })); -QUnit.test.skipWithPybridge("internal dbus bus none", - async assert => internal_test(assert, { bus: "none" })); +skipWithPybridge("internal dbus bus none", + async assert => internal_test(assert, { bus: "none" })); -QUnit.test.skipWithPybridge("internal dbus bus none with address", - async assert => internal_test(assert, { bus: "none", address: "internal" })); +skipWithPybridge("internal dbus bus none with address", + async assert => internal_test(assert, { bus: "none", address: "internal" })); -QUnit.test.skipWithPybridge("separate dbus connections for channel groups", function (assert) { +skipWithPybridge("separate dbus connections for channel groups", function (assert) { const done = assert.async(); assert.expect(4); @@ -533,7 +533,7 @@ await dbus.call("/org/freedesktop/DBus", "org.freedesktop.DBus", "Hello", []); assert.ok(false, "should not be reached"); } catch (ex) { - if (await QUnit.mock_info("pybridge")) { + if (await mock_info("pybridge")) { assert.equal(ex.problem, "protocol-error", "got right close code"); assert.equal(ex.message, "failed to connect to none bus: [Errno 2] sd_bus_start: No such file or directory", "error message"); diff -Nru cockpit-314/pkg/base1/test-echo.js cockpit-316/pkg/base1/test-echo.js --- cockpit-314/pkg/base1/test-echo.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/base1/test-echo.js 2024-04-25 09:45:58.000000000 +0000 @@ -1,5 +1,5 @@ import cockpit from "cockpit"; -import QUnit from "qunit-tests"; +import QUnit, { mock_info } from "qunit-tests"; QUnit.test("basic", function (assert) { const done = assert.async(); @@ -83,7 +83,7 @@ const done = assert.async(); // This is implemented in the C bridge, but not in Python. - if (await QUnit.mock_info("pybridge")) { + if (await mock_info("pybridge")) { assert.ok(true, "skipping on python bridge, not implemented"); done(); return; diff -Nru cockpit-314/pkg/base1/test-format.js cockpit-316/pkg/base1/test-format.js --- cockpit-314/pkg/base1/test-format.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/base1/test-format.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,207 +0,0 @@ -import cockpit from "cockpit"; -import QUnit from "qunit-tests"; - -QUnit.test("format", function (assert) { - assert.equal(cockpit.format("My $adj message with ${amount} of things", { adj: "special", amount: "lots" }), - "My special message with lots of things", "named keys"); - assert.equal(cockpit.format("My $0 message with $1 of things", ["special", "lots"]), - "My special message with lots of things", "number keys"); - assert.equal(cockpit.format("My $0 message with $1 of things", "special", "lots"), - "My special message with lots of things", "vararg keys"); - assert.equal(cockpit.format("My $0 message with lots of things", "special"), - "My special message with lots of things", "vararg one key"); - assert.equal(cockpit.format("Undefined $value", { }), "Undefined ", "missing value"); - - /* All falsy values except `0` should return the empty string */ - assert.equal(cockpit.format("$0", 0), "0", "`0` as argument"); - assert.equal(cockpit.format("$0", 0.0), "0", "`0.0` as argument"); - assert.equal(cockpit.format("$0", false), "", "`false` as argument"); - assert.equal(cockpit.format("$0", null), "", "`null` as argument"); -}); - -QUnit.test("format_number", function (assert) { - const checks = [ - [23.4, "23.4", "23,4"], - [23.46, "23.5", "23,5"], - [23.44, "23.4", "23,4"], - - [-23.4, "-23.4", "-23,4"], - [-23.46, "-23.5", "-23,5"], - [-23.44, "-23.4", "-23,4"], - - [0, "0", "0"], - [0.001, "0.001", "0,001"], - [-0.001, "-0.001", "-0,001"], - // smaller values get rounded up - [0.0003, "0.001", "0,001"], - [-0.0003, "-0.001", "-0,001"], - - [123.0, "123", "123"], - [123.01, "123", "123"], - [-123.0, "-123", "-123"], - [-123.01, "-123", "-123"], - [null, "", ""], - [undefined, "", ""], - ]; - - const saved_language = cockpit.language; - - assert.expect(checks.length * 3 + 7); - - cockpit.language = 'en'; - for (let i = 0; i < checks.length; i++) { - assert.strictEqual(cockpit.format_number(checks[i][0]), checks[i][1], - "format_number@en(" + checks[i][0] + ") = " + checks[i][1]); - } - - cockpit.language = 'de'; - for (let i = 0; i < checks.length; i++) { - assert.strictEqual(cockpit.format_number(checks[i][0]), checks[i][2], - "format_number@de(" + checks[i][0] + ") = " + checks[i][2]); - } - - cockpit.language = 'pt_BR'; - for (let i = 0; i < checks.length; i++) { - assert.strictEqual(cockpit.format_number(checks[i][0]), checks[i][2], - "format_number@pt_BR(" + checks[i][0] + ") = " + checks[i][2]); - } - - /* restore this as not to break the other tests */ - cockpit.language = saved_language; - - // custom precision - assert.strictEqual(cockpit.format_number(1.23456, 2), "1.2", "format_number@en(precision 2)"); - assert.strictEqual(cockpit.format_number(-1.23456, 2), "-1.2", "format_number@en(negative, precision 2)"); - assert.strictEqual(cockpit.format_number(0.23456, 2), "0.23", "format_number@en(precision 2)"); - assert.strictEqual(cockpit.format_number(1.23456, 4), "1.235", "format_number@en(precision 4)"); - assert.strictEqual(cockpit.format_number(0.23456, 4), "0.2346", "format_number@en(precision 4)"); - assert.strictEqual(cockpit.format_number(0.000123, 2), "0.01", "format_number@en(very small, precision 2)"); - assert.strictEqual(cockpit.format_number(-0.000123, 2), "-0.01", "format_number@en(negative, very small, precision 2)"); -}); - -QUnit.test("format_bytes", function (assert) { - const checks = [ - [999, 1000, "999"], - [1934, undefined, "1.93 KB"], - [1934, 1000, "1.93 KB"], - [2000, 1024, "1.95 KiB"], - [1999, 1000, "2.00 KB"], - [1999, 1024, "1.95 KiB"], - [1000000, 1000, "1 MB"], - [1000001, 1000, "1.00 MB"], - [1000000, 1024, "977 KiB"], - [2000000, 1024, "1.91 MiB"], - [2000000, 1000, "2 MB"], - [2000001, 1000, "2.00 MB"], - [2000000, "MB", "2 MB"], - [2000000, "MiB", "1.91 MiB"], - [2000000, "KB", "2000 KB"], - [2000000, "KiB", "1953 KiB"], - [1, "KB", "0.001 KB"], - [0, "KB", "0 KB"], - [undefined, "KB", ""], - [null, "KB", ""], - ]; - - assert.expect(checks.length * 2 + 2); - for (let i = 0; i < checks.length; i++) { - assert.strictEqual(cockpit.format_bytes(checks[i][0], checks[i][1]), checks[i][2], - "format_bytes(" + checks[i][0] + ", " + String(checks[i][1]) + ") = " + checks[i][2]); - } - for (let i = 0; i < checks.length; i++) { - const split = checks[i][2].split(" "); - assert.deepEqual(cockpit.format_bytes(checks[i][0], checks[i][1], { separate: true }), split, - "format_bytes(" + checks[i][0] + ", " + String(checks[i][1]) + ", true) = " + split); - } - - // backwards compatible API: format_bytes with a boolean options (used to be a single "separate" flag) - assert.strictEqual(cockpit.format_bytes(2500000, 1000, false), "2.50 MB"); - assert.deepEqual(cockpit.format_bytes(2500000, 1000, true), ["2.50", "MB"]); -}); - -QUnit.test("get_byte_units", function (assert) { - const mib = 1024 * 1024; - const gib = mib * 1024; - const tib = gib * 1024; - - const mib_unit = { factor: mib, name: "MiB" }; - const gib_unit = { factor: gib, name: "GiB" }; - const tib_unit = { factor: tib, name: "TiB" }; - - function selected(unit) { - return { factor: unit.factor, name: unit.name, selected: true }; - } - - const checks = [ - [0 * mib, 1024, [selected(mib_unit), gib_unit, tib_unit]], - [20 * mib, 1024, [selected(mib_unit), gib_unit, tib_unit]], - [200 * mib, 1024, [selected(mib_unit), gib_unit, tib_unit]], - [2000 * mib, 1024, [selected(mib_unit), gib_unit, tib_unit]], - [20000 * mib, 1024, [mib_unit, selected(gib_unit), tib_unit]], - [20 * gib, 1024, [mib_unit, selected(gib_unit), tib_unit]], - [200 * gib, 1024, [mib_unit, selected(gib_unit), tib_unit]], - [2000 * gib, 1024, [mib_unit, selected(gib_unit), tib_unit]], - [20000 * gib, 1024, [mib_unit, gib_unit, selected(tib_unit)]] - ]; - - assert.expect(checks.length); - for (let i = 0; i < checks.length; i++) { - assert.deepEqual(cockpit.get_byte_units(checks[i][0], checks[i][1]), checks[i][2], - "get_byte_units(" + checks[i][0] + ", " + checks[i][1] + ") = " + JSON.stringify(checks[i][2])); - } -}); - -QUnit.test("format_bytes_per_sec", function (assert) { - const checks = [ - // default unit - [5, undefined, undefined, "5 B/s"], - [2555, undefined, undefined, "2.56 kB/s"], - [12345678, undefined, undefined, "12.3 MB/s"], - // explicit base-2 unit - [2555, 1024, undefined, "2.50 KiB/s"], - // explicit base-10 unit - [2555, 1000, undefined, "2.56 kB/s"], - [12345678, 1000, undefined, "12.3 MB/s"], - // explicit unit - [12345678, "kB/s", undefined, "12346 kB/s"], - [12345678, "MiB/s", undefined, "11.8 MiB/s"], - // custom precision - [2555, 1000, { precision: 2 }, "2.6 kB/s"], - [25555, "MB/s", { precision: 2 }, "0.026 MB/s"], - // significant integer digits exceed custom precision - [25555000, "kB/s", { precision: 2 }, "25555 kB/s"], - [25555678, "kB/s", { precision: 2 }, "25556 kB/s"], - ]; - - assert.expect(checks.length + 2); - for (let i = 0; i < checks.length; i++) { - assert.strictEqual(cockpit.format_bytes_per_sec(checks[i][0], checks[i][1], checks[i][2]), checks[i][3], - `format_bytes_per_sec(${checks[i][0]}, ${checks[i][1]}, ${checks[i][2]}) = ${checks[i][3]}`); - } - - // separate unit - assert.deepEqual(cockpit.format_bytes_per_sec(2555, 1024, { separate: true }), - ["2.50", "KiB/s"]); - // backwards compatible API for separate flag - assert.deepEqual(cockpit.format_bytes_per_sec(2555, 1024, true), - ["2.50", "KiB/s"]); -}); - -QUnit.test("format_bits_per_sec", function (assert) { - const checks = [ - [55, "55 bps"], - [55.23456789, "55.2 bps"], - [55.98765432, "56.0 bps"], - [2555, "2.56 Kbps"], - [2000, "2 Kbps"], - [2003, "2.00 Kbps"] - ]; - - assert.expect(checks.length); - for (let i = 0; i < checks.length; i++) { - assert.strictEqual(cockpit.format_bits_per_sec(checks[i][0]), checks[i][1], - "format_bits_per_sec(" + checks[i][0] + ") = " + checks[i][1]); - } -}); - -QUnit.start(); diff -Nru cockpit-314/pkg/base1/test-format.ts cockpit-316/pkg/base1/test-format.ts --- cockpit-314/pkg/base1/test-format.ts 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/pkg/base1/test-format.ts 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,211 @@ +import cockpit from "cockpit"; +import QUnit, { f } from "qunit-tests"; + +QUnit.test("format", function (assert) { + assert.equal(cockpit.format("My $adj message with ${amount} of things", { adj: "special", amount: "lots" }), + "My special message with lots of things", "named keys"); + assert.equal(cockpit.format("My $0 message with $1 of things", ["special", "lots"]), + "My special message with lots of things", "number keys"); + assert.equal(cockpit.format("My $0 message with $1 of things", "special", "lots"), + "My special message with lots of things", "vararg keys"); + assert.equal(cockpit.format("My $0 message with lots of things", "special"), + "My special message with lots of things", "vararg one key"); + assert.equal(cockpit.format("Undefined $value", { }), "Undefined ", "missing value"); + + /* All falsy values except `0` should return the empty string */ + assert.equal(cockpit.format("$0", 0), "0", "`0` as argument"); + assert.equal(cockpit.format("$0", 0.0), "0", "`0.0` as argument"); + assert.equal(cockpit.format("$0", false), "", "`false` as argument"); + assert.equal(cockpit.format("$0", null), "", "`null` as argument"); +}); + +QUnit.test("format_number", function (assert) { + const checks = [ + [23.4, "23.4", "23,4"], + [23.46, "23.5", "23,5"], + [23.44, "23.4", "23,4"], + + [-23.4, "-23.4", "-23,4"], + [-23.46, "-23.5", "-23,5"], + [-23.44, "-23.4", "-23,4"], + + [0, "0", "0"], + [0.001, "0.001", "0,001"], + [-0.001, "-0.001", "-0,001"], + // smaller values get rounded up + [0.0003, "0.001", "0,001"], + [-0.0003, "-0.001", "-0,001"], + + [123.0, "123", "123"], + [123.01, "123", "123"], + [-123.0, "-123", "-123"], + [-123.01, "-123", "-123"], + [null, "", ""], + [undefined, "", ""], + ] as const; + + const saved_language = cockpit.language; + + assert.expect(checks.length * 3 + 7); + + cockpit.language = 'en'; + for (let i = 0; i < checks.length; i++) { + assert.strictEqual(cockpit.format_number(checks[i][0]), checks[i][1], + f`format_number@en(${checks[i][0]})` + ); + } + + cockpit.language = 'de'; + for (let i = 0; i < checks.length; i++) { + assert.strictEqual(cockpit.format_number(checks[i][0]), checks[i][2], + f`format_number@de(${checks[i][0]})` + ); + } + + cockpit.language = 'pt_BR'; + for (let i = 0; i < checks.length; i++) { + assert.strictEqual(cockpit.format_number(checks[i][0]), checks[i][2], + f`format_number@pt_BR(${checks[i][0]})` + ); + } + + /* restore this as not to break the other tests */ + cockpit.language = saved_language; + + // custom precision + assert.strictEqual(cockpit.format_number(1.23456, 2), "1.2", "format_number@en(precision 2)"); + assert.strictEqual(cockpit.format_number(-1.23456, 2), "-1.2", "format_number@en(negative, precision 2)"); + assert.strictEqual(cockpit.format_number(0.23456, 2), "0.23", "format_number@en(precision 2)"); + assert.strictEqual(cockpit.format_number(1.23456, 4), "1.235", "format_number@en(precision 4)"); + assert.strictEqual(cockpit.format_number(0.23456, 4), "0.2346", "format_number@en(precision 4)"); + assert.strictEqual(cockpit.format_number(0.000123, 2), "0.01", "format_number@en(very small, precision 2)"); + assert.strictEqual(cockpit.format_number(-0.000123, 2), "-0.01", "format_number@en(negative, very small, precision 2)"); +}); + +QUnit.test("format_bytes", function (assert) { + const checks = [ + [0, undefined, "0 B"], + [0, 1000, "0 B"], + [0, 1024, "0 B"], + [5, 1000, "5 B"], + [5, 1024, "5 B"], + [999, 1000, "999 B"], + [999, 1024, "999 B"], + [1023, 1024, "1023 B"], + [1934, undefined, "1.93 kB"], + [1934, 1000, "1.93 kB"], + [2000, 1024, "1.95 KiB"], + [1999, 1000, "2.00 kB"], + [1999, 1024, "1.95 KiB"], + [1000000, 1000, "1 MB"], + [1000001, 1000, "1.00 MB"], + [1000000, 1024, "977 KiB"], + [2000000, 1024, "1.91 MiB"], + [2000000, 1000, "2 MB"], + [2000001, 1000, "2.00 MB"], + [2000000, "MB", "2 MB"], + [2000000, "MiB", "1.91 MiB"], + [2000000, "kB", "2000 kB"], + [2000000, "KiB", "1953 KiB"], + [1, "kB", "0.001 kB"], + [0, "kB", "0 kB"], + [undefined, "kB", ""], + [null, "kB", ""], + ] as const; + + for (let i = 0; i < checks.length; i++) { + if (typeof checks[i][1] === 'string') { + // these tests are for backwards compatibility only + continue; + } + + const base2 = checks[i][1] == 1024; + assert.strictEqual(cockpit.format_bytes(checks[i][0], { base2 }), checks[i][2], + f`format_bytes(${checks[i][0]}, ${{ base2 }})`); + } + + // old API style (deprecated) + for (let i = 0; i < checks.length; i++) { + assert.strictEqual(cockpit.format_bytes(checks[i][0], checks[i][1]), checks[i][2], + f`format_bytes(${checks[i][0]}, ${checks[i][1]})` + ); + } + for (let i = 0; i < checks.length; i++) { + const split = checks[i][2].split(" "); + assert.deepEqual(cockpit.format_bytes(checks[i][0], checks[i][1], { separate: true }), split, + f`format_bytes(${checks[i][0]}, ${checks[i][1]}, ${{ separate: true }})` + ); + } + + // backwards compatible API: format_bytes with a boolean options (used to be a single "separate" flag) + assert.strictEqual(cockpit.format_bytes(2500000, 1000, false), "2.50 MB"); + assert.deepEqual(cockpit.format_bytes(2500000, 1000, true), ["2.50", "MB"]); +}); + +QUnit.test("format_bytes_per_sec", function (assert) { + const checks = [ + // default unit + [0, undefined, undefined, "0 B/s"], + [5, undefined, undefined, "5 B/s"], + [2555, undefined, undefined, "2.56 kB/s"], + [12345678, undefined, undefined, "12.3 MB/s"], + // explicit base-2 unit + [0, 1024, undefined, "0 B/s"], + [2555, 1024, undefined, "2.50 KiB/s"], + // explicit base-10 unit + [0, 1000, undefined, "0 B/s"], + [2555, 1000, undefined, "2.56 kB/s"], + [12345678, 1000, undefined, "12.3 MB/s"], + // explicit unit + [12345678, "kB/s", undefined, "12346 kB/s"], + [12345678, "MiB/s", undefined, "11.8 MiB/s"], + // custom precision + [2555, 1000, { precision: 2 }, "2.6 kB/s"], + [25555, "MB/s", { precision: 2 }, "0.026 MB/s"], + // significant integer digits exceed custom precision + [25555000, "kB/s", { precision: 2 }, "25555 kB/s"], + [25555678, "kB/s", { precision: 2 }, "25556 kB/s"], + ] as const; + + for (let i = 0; i < checks.length; i++) { + if (typeof checks[i][1] === 'string') { + // these tests are for backwards compatibility only + continue; + } + + const base2 = checks[i][1] == 1024; + assert.strictEqual(cockpit.format_bytes_per_sec(checks[i][0], { base2, ...checks[i][2] }), checks[i][3], + f`format_bytes_per_sec(${checks[i][0]}, ${{ base2, ...checks[i][2] }})`); + } + + // old API style (deprecated) + for (let i = 0; i < checks.length; i++) { + assert.strictEqual(cockpit.format_bytes_per_sec(checks[i][0], checks[i][1], checks[i][2]), checks[i][3], + f`format_bytes_per_sec(${checks[i][0]}, ${checks[i][1]}, ${checks[i][2]})`); + } + // separate unit (very deprecated) + assert.deepEqual(cockpit.format_bytes_per_sec(2555, 1024, { separate: true }), + ["2.50", "KiB/s"]); + // backwards compatible API for separate flag (oh so very deprecated) + assert.deepEqual(cockpit.format_bytes_per_sec(2555, 1024, true), + ["2.50", "KiB/s"]); +}); + +QUnit.test("format_bits_per_sec", function (assert) { + const checks = [ + [55, "55 bps"], + [55.23456789, "55.2 bps"], + [55.98765432, "56.0 bps"], + [2555, "2.56 Kbps"], + [2000, "2 Kbps"], + [2003, "2.00 Kbps"] + ] as const; + + assert.expect(checks.length); + for (let i = 0; i < checks.length; i++) { + assert.strictEqual(cockpit.format_bits_per_sec(checks[i][0]), checks[i][1], + f`format_bits_per_sec(${checks[i][0]})`); + } +}); + +QUnit.start(); diff -Nru cockpit-314/pkg/base1/test-http.js cockpit-316/pkg/base1/test-http.js --- cockpit-314/pkg/base1/test-http.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/base1/test-http.js 2024-04-25 09:45:58.000000000 +0000 @@ -1,5 +1,5 @@ import cockpit from "cockpit"; -import QUnit from "qunit-tests"; +import QUnit, { mock_info } from "qunit-tests"; const EXPECT_MOCK_STREAM = "0 1 2 3 4 5 6 7 8 9 "; @@ -257,7 +257,7 @@ assert.expect(1); // connection sharing is not implemented in the pybridge - if (await QUnit.mock_info("pybridge")) { + if (await mock_info("pybridge")) { assert.rejects( cockpit.http({ port: test_server.port, connection: "one" }).get("/mock/connection"), ex => ex.problem == "protocol-error" && ex.status == undefined, @@ -278,7 +278,7 @@ assert.expect(1); // connection sharing is not implemented in the pybridge - if (await QUnit.mock_info("pybridge")) { + if (await mock_info("pybridge")) { assert.ok(true); return; } @@ -296,7 +296,7 @@ assert.expect(1); // connection sharing is not implemented in the pybridge - if (await QUnit.mock_info("pybridge")) { + if (await mock_info("pybridge")) { assert.ok(true); return; } @@ -363,7 +363,7 @@ "rejects request with both port and unix option"); // This is disallowed in the pybridge, but allowed in the C bridge - if (await QUnit.mock_info("pybridge")) { + if (await mock_info("pybridge")) { assert.rejects( cockpit.http({ unix: "/nonexisting/socket", tls: {} }).get("/"), ex => ex.problem == "protocol-error" && ex.status == undefined, @@ -375,7 +375,7 @@ QUnit.test("parallel stress test", async assert => { // This is way too slow under valgrind - if (await QUnit.mock_info("skip_slow_tests")) { + if (await mock_info("skip_slow_tests")) { assert.ok(true, "skipping on python bridge, not implemented"); return; } diff -Nru cockpit-314/pkg/base1/test-promise.js cockpit-316/pkg/base1/test-promise.js --- cockpit-314/pkg/base1/test-promise.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/base1/test-promise.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -import cockpit from "cockpit"; -import QUnit from "qunit-tests"; - -QUnit.test("should be able to dispatch es2015 promises", function (assert) { - // https://github.com/cockpit-project/cockpit/issues/10956 - - assert.expect(1); - - const done = assert.async(); - const dfd = cockpit.defer(); - - dfd.promise.then(() => Promise.resolve(42)) - .then(result => { - assert.equal(result, 42); - done(); - }); - - dfd.resolve(); -}); - -QUnit.start(); diff -Nru cockpit-314/pkg/base1/test-promise.ts cockpit-316/pkg/base1/test-promise.ts --- cockpit-314/pkg/base1/test-promise.ts 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/pkg/base1/test-promise.ts 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,21 @@ +import cockpit from "cockpit"; +import QUnit from "qunit-tests"; + +QUnit.test("should be able to dispatch es2015 promises", function (assert) { + // https://github.com/cockpit-project/cockpit/issues/10956 + + assert.expect(1); + + const done = assert.async(); + const dfd = cockpit.defer(); + + dfd.promise.then(() => Promise.resolve(42)) + .then(result => { + assert.equal(result, 42); + done(); + }); + + dfd.resolve(); +}); + +QUnit.start(); diff -Nru cockpit-314/pkg/base1/test-stream.js cockpit-316/pkg/base1/test-stream.js --- cockpit-314/pkg/base1/test-stream.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/base1/test-stream.js 2024-04-25 09:45:58.000000000 +0000 @@ -1,5 +1,5 @@ import cockpit from "cockpit"; -import QUnit from "qunit-tests"; +import QUnit, { mock_info } from "qunit-tests"; const QS_REQUEST = "HEAD /mock/qs HTTP/1.0\nHOST: localhost\n\n"; @@ -12,7 +12,7 @@ const done = assert.async(); assert.expect(2); - const is_pybridge = await QUnit.mock_info("pybridge"); + const is_pybridge = await mock_info("pybridge"); const channel = cockpit.channel({ payload: "stream", address: "127.0.0.99", port: 2222 }); diff -Nru cockpit-314/pkg/base1/test-types.ts cockpit-316/pkg/base1/test-types.ts --- cockpit-314/pkg/base1/test-types.ts 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/pkg/base1/test-types.ts 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,21 @@ +import cockpit from 'cockpit'; +import QUnit from 'qunit-tests'; + +function as_str(value: string | number): string { + cockpit.assert(typeof value === "string"); + return value; // only (statically) possible because of the assert +} + +QUnit.test("cockpit.assert success", function(assert) { + as_str("abc"); + assert.ok(true); +}); + +QUnit.test("cockpit.assert fail", function(assert) { + assert.throws(function() { + as_str(123); + }); + assert.ok(true); +}); + +QUnit.start(); diff -Nru cockpit-314/pkg/kdump/kdump-view.jsx cockpit-316/pkg/kdump/kdump-view.jsx --- cockpit-314/pkg/kdump/kdump-view.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/kdump/kdump-view.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -483,15 +483,15 @@ { _("Reading...") } ); - } else if (this.props.reservedMemory == 0) { + } else if (this.props.reservedMemory === 0) { // nothing reserved reservedMemory = {_("None")} ; - } else if (this.props.reservedMemory == "error") { - // error while reading - } else { - // assume we have a proper value + } else if (Number.isInteger(this.props.reservedMemory)) { // TODO: hint at using debug_mem_level to identify actual memory required? - reservedMemory = {this.props.reservedMemory}; + reservedMemory = {cockpit.format_bytes(this.props.reservedMemory, { base2: true })}; + } else { + // error while reading + reservedMemory = null; } const serviceRunning = this.props.kdumpStatus && diff -Nru cockpit-314/pkg/kdump/kdump.js cockpit-316/pkg/kdump/kdump.js --- cockpit-314/pkg/kdump/kdump.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/kdump/kdump.js 2024-04-25 09:45:58.000000000 +0000 @@ -99,11 +99,11 @@ // https://access.redhat.com/solutions/59432 states limit to be 896MiB and the auto at 768MiB max // default unit is MiB if (value >= 1024 * 1024) - dataStore.kdumpMemory = cockpit.format_bytes(value, 1024); + dataStore.kdumpMemory = value; else if (value >= 1024) - dataStore.kdumpMemory = cockpit.format_bytes(value * 1024, 1024); + dataStore.kdumpMemory = value * 1024; else - dataStore.kdumpMemory = cockpit.format_bytes(value * 1024 * 1024, 1024); + dataStore.kdumpMemory = value * 1024 * 1024; } else { dataStore.kdumpMemory = content.trim(); } diff -Nru cockpit-314/pkg/kdump/test-config-client.js cockpit-316/pkg/kdump/test-config-client.js --- cockpit-314/pkg/kdump/test-config-client.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/kdump/test-config-client.js 2024-04-25 09:45:58.000000000 +0000 @@ -83,6 +83,7 @@ config.write(config.settings) .then(() => { // Close watch channel + config.removeEventListener('kdumpConfigChanged', configChanged); config.close(); dataWasChanged.then(done); }); diff -Nru cockpit-314/pkg/lib/cockpit-components-dropdown.jsx cockpit-316/pkg/lib/cockpit-components-dropdown.jsx --- cockpit-314/pkg/lib/cockpit-components-dropdown.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/lib/cockpit-components-dropdown.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -29,18 +29,23 @@ * A dropdown with a Kebab button, commonly used in Cockpit pages provided as * component so not all pages have to re-invent the wheel. * + * isOpen/setIsOpen are optional -- you need to handle the state externally if you render the KebabDropdown in an + * "unstable" environment such as a dynamic list. When not given, the dropdown will manage its own state. + * * This component expects a list of (non-deprecated!) DropdownItem's, if you * require a separator between DropdownItem's use PatternFly's Divivder * component. */ -export const KebabDropdown = ({ dropdownItems, position, isDisabled, toggleButtonId, props }) => { - const [isKebabOpen, setKebabOpen] = useState(false); +export const KebabDropdown = ({ dropdownItems, position, isDisabled, toggleButtonId, isOpen, setIsOpen, props }) => { + const [isKebabOpenInternal, setKebabOpenInternal] = useState(false); + const isKebabOpen = isOpen ?? isKebabOpenInternal; + const setKebabOpen = setIsOpen ?? setKebabOpenInternal; return ( setKebabOpen(isOpen)} - onSelect={() => setKebabOpen(!isKebabOpen)} + onSelect={() => setKebabOpen(false)} toggle={(toggleRef) => ( this.setState({ error: e })); diff -Nru cockpit-314/pkg/lib/cockpit-upload-helper.ts cockpit-316/pkg/lib/cockpit-upload-helper.ts --- cockpit-314/pkg/lib/cockpit-upload-helper.ts 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/pkg/lib/cockpit-upload-helper.ts 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,141 @@ +/* + * This file is part of Cockpit. + * + * Copyright (C) 2024 Red Hat, Inc. + * + * Cockpit is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * Cockpit is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Cockpit; If not, see . + */ + +import cockpit from 'cockpit'; + +// These are the same values used by the bridge (in channel.py) +const BLOCK_SIZE = 16 << 10; // 16kiB +const FLOW_WINDOW = 2 << 20; // 2MiB + +function debug(...args: unknown[]) { + if (window.debugging == 'all' || window.debugging?.includes('upload')) + console.debug('upload', ...args); +} + +class UploadError extends Error { + name = 'UploadError'; +} + +class Waiter { + unblock = () => { }; + block(): Promise { + return new Promise(resolve => { this.unblock = resolve }); + } +} + +export async function upload( + destination: string, + stream: ReadableStream, + progress?: (bytes_sent: number) => void, + signal?: AbortSignal, + options?: cockpit.JsonObject +) { + let close_message = null as (cockpit.JsonObject | null); + let outstanding = 0; // for flow control + let delivered = 0; // for progress reporting + + // This variable is the most important thing in this function. The main + // upload loop will do work for as long as it can, and then it .block()s on + // the waiter until something changes (ack, close, abort, etc). All of + // those things call .unblock() to resume the loop. + const event_waiter = new Waiter(); + + if (signal) { + signal.throwIfAborted(); // early exit + signal.addEventListener('abort', event_waiter.unblock); + } + + const opts = { + payload: 'fsreplace1', + path: destination, + binary: true, + 'send-acks': 'bytes', + ...options, + } as const; + debug('requesting channel', opts); + const channel = cockpit.channel(opts); + channel.addEventListener('control', (_ev, message) => { + debug('control', message); + if (message.command === 'ack') { + cockpit.assert(typeof message.bytes === 'number', 'bytes not a number'); + delivered += message.bytes; + if (progress) { + debug('progress', delivered); + progress(delivered); + } + outstanding -= message.bytes; + debug('outstanding -- to', outstanding); + event_waiter.unblock(); + } + }); + channel.addEventListener('close', (_ev, message) => { + debug('close', message); + close_message = message; + event_waiter.unblock(); + }); + + try { + debug('starting file send', stream); + const reader = stream.getReader({ mode: 'byob' }); // byob to choose the block size + let eof = false; + + // eslint-disable-next-line no-unmodified-loop-condition + while (!close_message) { + /* We do the following steps for as long as the channel is open: + * - if there is room to write more data, do that + * - otherwise, block on the waiter until something changes + * - in any case, check for cancellation, repeat + * The idea here is that each loop iteration will `await` one + * thing, and once it returns, we need to re-evaluate our state. + */ + if (!eof && outstanding < FLOW_WINDOW) { + const { done, value } = await reader.read(new Uint8Array(BLOCK_SIZE)); + if (done) { + debug('sending done'); + channel.control({ command: 'done' }); + eof = true; + } else { + debug('sending', value.length, 'bytes'); + channel.send(value); + outstanding += value.length; + debug('outstanding ++ to', outstanding); + } + if (signal) { + signal.throwIfAborted(); + } + } else { + debug('sleeping', outstanding, 'of', FLOW_WINDOW, 'eof', eof); + await event_waiter.block(); + } + if (signal) { + signal.throwIfAborted(); + } + } + + if (close_message.problem) { + throw new UploadError(cockpit.message(close_message)); + } else { + cockpit.assert(typeof close_message.tag === 'string', "tag missing on close message"); + return close_message.tag; + } + } finally { + debug('finally'); + channel.close(); // maybe we got aborted + } +} diff -Nru cockpit-314/pkg/lib/cockpit.d.ts cockpit-316/pkg/lib/cockpit.d.ts --- cockpit-314/pkg/lib/cockpit.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/pkg/lib/cockpit.d.ts 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,277 @@ +/* This file is part of Cockpit. + * + * Copyright (C) 2024 Red Hat, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +declare module 'cockpit' { + type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue }; + type JsonObject = Record; + + class BasicError { + problem: string; + message: string; + toString(): string; + } + + function assert(predicate: unknown, message?: string): asserts predicate; + + export let language: string; + + /* === jQuery compatible promise ============== */ + + interface DeferredPromise extends Promise { + /* jQuery Promise compatibility */ + done(callback: (data: T) => void): DeferredPromise + fail(callback: (exc: Error) => void): DeferredPromise + always(callback: () => void): DeferredPromise + progress(callback: (message: T, cancel: () => void) => void): DeferredPromise + } + + interface Deferred { + resolve(): Deferred; + reject(): Deferred; + notify(): Deferred; + promise: DeferredPromise + } + + function defer(): Deferred; + + /* === Events mix-in ========================= */ + + interface EventMap { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [_: string]: (...args: any[]) => void; + } + + type EventListener void> = + (event: CustomEvent>, ...args: Parameters) => void; + + interface EventSource { + addEventListener(event: E, listener: EventListener): void; + removeEventListener(event: E, listener: EventListener): void; + dispatchEvent(event: E, ...args: Parameters): void; + } + + interface CockpitEvents extends EventMap { + locationchanged(): void; + visibilitychange(): void; + } + + function addEventListener( + event: E, listener: EventListener + ): void; + function removeEventListener( + event: E, listener: EventListener + ): void; + + interface ChangedEvents { + changed(): void; + } + + /* === Channel =============================== */ + + interface ControlMessage extends JsonObject { + command: string; + } + + interface ChannelEvents extends EventMap { + control(options: JsonObject): void; + ready(options: JsonObject): void; + close(options: JsonObject): void; + message(data: T): void; + } + + interface Channel extends EventSource> { + id: string | null; + binary: boolean; + options: JsonObject; + ready: boolean; + valid: boolean; + send(data: T): void; + control(options: ControlMessage): void; + wait(): Promise; + close(options?: JsonObject): void; + } + + interface ChannelOptions { + payload: string; + superuser?: "try" | "require"; + [_: string]: JsonValue | undefined; + } + + function channel(options: ChannelOptions & { binary?: false; }): Channel; + function channel(options: ChannelOptions & { binary: true; }): Channel; + + /* === cockpit.spawn ============================= */ + + interface Spawn extends DeferredPromise { + input(message: T, stream?: boolean): DeferredPromise; + stream(callback: (data: T) => void): DeferredPromise; + close(): void; + } + + interface SpawnOptions { + binary?: boolean, + directory?: string; + err?: "out" | "ignore" | "message"; + environ?: string[]; + pty?: boolean; + superuser?: "try" | "require"; + } + + function spawn( + args: string[], + options?: SpawnOptions & { binary?: false } + ): Spawn; + function spawn( + args: string[], + options: SpawnOptions & { binary: true } + ): Spawn; + + /* === cockpit.location ========================== */ + + interface Location { + url_root: string; + options: { [name: string]: string | Array }; + path: Array; + href: string; + go(path: Location | string, options?: { [key: string]: string }): void; + replace(path: Location | string, options?: { [key: string]: string }): void; + } + + export const location: Location; + + /* === cockpit.dbus ========================== */ + + interface DBusProxyEvents extends EventMap { + changed(changes: { [property: string]: unknown }): void; + } + + interface DBusProxy extends EventSource { + valid: boolean; + [property: string]: unknown; + } + + interface DBusOptions { + bus?: string; + address?: string; + superuser?: "require" | "try"; + track?: boolean; + } + + interface DBusClient { + readonly unique_name: string; + readonly options: DBusOptions; + proxy(interface: string, path: string, options?: { watch?: boolean }): DBusProxy; + close(): void; + } + + type VariantType = string | Uint8Array | number | boolean | VariantType[]; + interface Variant { + t: string; + v: VariantType; + } + + function dbus(name: string | null, options?: DBusOptions): DBusClient; + + function variant(type: string, value: VariantType): Variant; + function byte_array(string: string): string; + + /* === cockpit.file ========================== */ + + interface FileSyntaxObject { + parse(content: B): T; + stringify(content: T): B; + } + + type FileTag = string; + + type FileWatchCallback = (data: T | null, tag: FileTag | null, error: BasicError | null) => void; + interface FileWatchHandle { + remove(): void; + } + + interface FileHandle { + read(): Promise; + replace(content: T): Promise; + watch(callback: FileWatchCallback, options?: { read?: boolean }): FileWatchHandle; + modify(callback: (data: T) => T): Promise<[T, FileTag]>; + close(): void; + path: string; + } + + type FileOpenOptions = { + max_read_size?: number; + superuser?: string; + }; + + function file( + path: string, + options?: FileOpenOptions & { binary?: false; syntax?: undefined; } + ): FileHandle; + function file( + path: string, + options: FileOpenOptions & { binary: true; syntax?: undefined; } + ): FileHandle; + function file( + path: string, + options: FileOpenOptions & { binary?: false; syntax: FileSyntaxObject; } + ): FileHandle; + function file( + path: string, + options: FileOpenOptions & { binary: true; syntax: FileSyntaxObject; } + ): FileHandle; + + /* === cockpit.user ========================== */ + + type UserInfo = { + id: number; + name: string; + full_name: string; + groups: Array; + home: string; + shell: string; + }; + export function user(): Promise; + + /* === String helpers ======================== */ + + function message(problem: string | JsonObject): string; + + function gettext(message: string): string; + function gettext(context: string, message?: string): string; + function ngettext(message1: string, messageN: string, n: number): string; + function ngettext(context: string, message1: string, messageN: string, n: number): string; + + function format(format_string: string, ...args: unknown[]): string; + + /* === Number formatting ===================== */ + + type FormatOptions = { + precision?: number; + base2?: boolean; + }; + type MaybeNumber = number | null | undefined; + + function format_number(n: MaybeNumber, precision?: number): string + function format_bytes(n: MaybeNumber, options?: FormatOptions): string; + function format_bytes_per_sec(n: MaybeNumber, options?: FormatOptions): string; + function format_bits_per_sec(n: MaybeNumber, options?: FormatOptions & { base2?: false }): string; + + /** @deprecated */ function format_bytes(n: MaybeNumber, factor: unknown, options?: object | boolean): string | string[]; + /** @deprecated */ function format_bytes_per_sec(n: MaybeNumber, factor: unknown, options?: object | boolean): string | string[]; + /** @deprecated */ function format_bits_per_sec(n: MaybeNumber, factor: unknown, options?: object | boolean): string | string[]; +} diff -Nru cockpit-314/pkg/lib/cockpit.js cockpit-316/pkg/lib/cockpit.js --- cockpit-314/pkg/lib/cockpit.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/lib/cockpit.js 2024-04-25 09:45:58.000000000 +0000 @@ -1483,10 +1483,24 @@ }); }; - function format_units(number, suffixes, factor, options) { - // backwards compat: "options" argument position used to be a boolean flag "separate" - if (!is_object(options)) - options = { separate: options }; + let deprecated_format_warned = false; + function format_units(suffixes, number, second_arg, third_arg) { + let options = second_arg; + let factor = options?.base2 ? 1024 : 1000; + + // compat API: we used to accept 'factor' as a separate second arg + if (third_arg || (second_arg && !is_object(second_arg))) { + if (!deprecated_format_warned) { + console.warn(`cockpit.format_{bytes,bits}[_per_sec](..., ${second_arg}, ${third_arg}) is deprecated.`); + deprecated_format_warned = true; + } + + factor = second_arg || 1000; + options = third_arg; + // double backwards compat: "options" argument position used to be a boolean flag "separate" + if (!is_object(options)) + options = { separate: options }; + } let suffix = null; @@ -1525,7 +1539,7 @@ } } - const string_representation = cockpit.format_number(number, options.precision); + const string_representation = cockpit.format_number(number, options?.precision); let ret; if (string_representation && suffix) @@ -1533,47 +1547,19 @@ else ret = [string_representation]; - if (!options.separate) + if (!options?.separate) ret = ret.join(" "); return ret; } const byte_suffixes = { - 1000: [null, "KB", "MB", "GB", "TB", "PB", "EB", "ZB"], - 1024: [null, "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB"] + 1000: ["B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB"], + 1024: ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB"] }; - cockpit.format_bytes = function format_bytes(number, factor, options) { - if (factor === undefined) - factor = 1000; - return format_units(number, byte_suffixes, factor, options); - }; - - cockpit.get_byte_units = function get_byte_units(guide_value, factor) { - if (factor === undefined || !(factor in byte_suffixes)) - factor = 1000; - - function unit(index) { - return { - name: byte_suffixes[factor][index], - factor: Math.pow(factor, index) - }; - } - - const units = [unit(2), unit(3), unit(4)]; - - // The default unit is the largest one that gives us at least - // two decimal digits in front of the comma. - - for (let i = units.length - 1; i >= 0; i--) { - if (i === 0 || (guide_value / units[i].factor) >= 10) { - units[i].selected = true; - break; - } - } - - return units; + cockpit.format_bytes = function format_bytes(number, ...args) { + return format_units(byte_suffixes, number, ...args); }; const byte_sec_suffixes = { @@ -1581,20 +1567,16 @@ 1024: ["B/s", "KiB/s", "MiB/s", "GiB/s", "TiB/s", "PiB/s", "EiB/s", "ZiB/s"] }; - cockpit.format_bytes_per_sec = function format_bytes_per_sec(number, factor, options) { - if (factor === undefined) - factor = 1000; - return format_units(number, byte_sec_suffixes, factor, options); + cockpit.format_bytes_per_sec = function format_bytes_per_sec(number, ...args) { + return format_units(byte_sec_suffixes, number, ...args); }; const bit_suffixes = { 1000: ["bps", "Kbps", "Mbps", "Gbps", "Tbps", "Pbps", "Ebps", "Zbps"] }; - cockpit.format_bits_per_sec = function format_bits_per_sec(number, factor, options) { - if (factor === undefined) - factor = 1000; - return format_units(number, bit_suffixes, factor, options); + cockpit.format_bits_per_sec = function format_bits_per_sec(number, ...args) { + return format_units(bit_suffixes, number, ...args); }; /* --------------------------------------------------------------------- @@ -4415,6 +4397,12 @@ return false; }; + cockpit.assert = (predicate, message) => { + if (!predicate) { + throw new Error(`Assertion failed: ${message}`); + } + }; + return cockpit; } diff -Nru cockpit-314/pkg/lib/dialogs.jsx cockpit-316/pkg/lib/dialogs.jsx --- cockpit-314/pkg/lib/dialogs.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/lib/dialogs.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -82,6 +82,36 @@ * } * } * + * If there is a situation where you want to wait until a Dialog is closed + * after opening, you can "await Dialogs.show()" + * + * class Example extends React.Component { + * static contextType = DialogsContext; + * + * async function handleClick() { + * try { + * const result = await Dialogs.show(); + * console.log(result); + * catch (err) { + * } + * + * } + * + * function render() { + * const Dialogs = this.context; + * return ; + * } + * } + * + * class MyDialog extends React.Component { + * static contextType = DialogsContext; + * + * render() { + * + * + * } + * } + * * * - Dialogs.show(component) * @@ -89,12 +119,19 @@ * child of the inner-most enclosing "WithDialogs" component. The * component is of course intended to be a dialog, such as * Patternfly's "Modal". There is only ever one of these; a second - * call to "show" will remove the previously rendered component. - * Passing "null" will remove the currently rendered componenet, if any. + * call to "show" is considered a bug and "Dialogs.close" should be called first. + * "Dialogs.show" returns a promise that is settled by either "Dialogs.close" or + * "Dialogs.reject". * - * - Dialogs.close() + * - Dialogs.close([args]) * - * Same as "Dialogs.show(null)". + * Calling "Dialogs.close([args])" will close the currently open Dialog and + * optionally resolve the promise with the provided "args". + * + * - Dialogs.reject(err) + * + * Calling "Dialogs.reject(err)" will close the currently open Dialog + * and reject the promise with the provided Error. */ import React, { useContext, useRef, useState } from "react"; @@ -104,6 +141,8 @@ export const WithDialogs = ({ children }) => { const is_open = useRef(false); // synchronous + const resolveRef = useRef(null); + const rejectRef = useRef(null); const [dialog, setDialog] = useState(null); const Dialogs = { @@ -115,10 +154,28 @@ JSON.stringify(dialog)); is_open.current = !!component; setDialog(component); + return new Promise((resolve, reject) => { + resolveRef.current = resolve; + rejectRef.current = reject; + }); + }, + close: (args) => { + is_open.current = false; + setDialog(null); + if (resolveRef.current !== null) { + resolveRef.current(args); + resolveRef.current = null; + rejectRef.current = null; + } }, - close: () => { + reject: (err) => { is_open.current = false; setDialog(null); + if (rejectRef.current !== null) { + rejectRef.current(err); + resolveRef.current = null; + rejectRef.current = null; + } }, isActive: () => dialog !== null }; diff -Nru cockpit-314/pkg/lib/hooks.js cockpit-316/pkg/lib/hooks.js --- cockpit-314/pkg/lib/hooks.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/lib/hooks.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,326 +0,0 @@ -/* - * This file is part of Cockpit. - * - * Copyright (C) 2020 Red Hat, Inc. - * - * Cockpit is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * Cockpit is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Cockpit; If not, see . - */ - -import cockpit from 'cockpit'; -import { useState, useEffect, useRef, useReducer } from 'react'; -import deep_equal from "deep-equal"; - -/* HOOKS - * - * These are some custom React hooks for Cockpit specific things. - * - * Overview: - * - * - usePageLocation: For following along with cockpit.location. - * - * - useLoggedInUser: For accessing information about the currently - * logged in user. - * - * - useFile: For reading and watching files. - * - * - useObject: For maintaining arbitrary stateful objects that get - * created from the properties of a component. - * - * - useEvent: For reacting to events emitted by arbitrary objects. - * - * - useInit: For running a function once. - * - * - useDeepEqualMemo: A utility hook that can help with things that - * need deep equal comparisons in places where React only offers - * Object identity comparisons, such as with useEffect. - */ - -/* - usePageLocation() - * - * function Component() { - * const location = usePageLocation(); - * const { path, options } = usePageLocation(); - * - * ... - * } - * - * This returns the current value of cockpit.location and the - * component is re-rendered when it changes. "location" is always a - * valid object and never null. - * - * See https://cockpit-project.org/guide/latest/cockpit-location.html - */ - -export function usePageLocation() { - const [location, setLocation] = useState(cockpit.location); - - useEffect(() => { - function update() { setLocation(cockpit.location) } - cockpit.addEventListener("locationchanged", update); - return () => cockpit.removeEventListener("locationchanged", update); - }, []); - - return location; -} - -/* - useLoggedInUser() - * - * function Component() { - * const user_info = useLoggedInUser(); - * - * ... - * } - * - * "user_info" is the object delivered by cockpit.user(), or null - * while that object is not yet available. - */ - -const cockpit_user_promise = cockpit.user(); -let cockpit_user = null; -cockpit_user_promise.then(user => { cockpit_user = user }).catch(err => console.log(err)); - -export function useLoggedInUser() { - const [user, setUser] = useState(cockpit_user); - useEffect(() => { if (!cockpit_user) cockpit_user_promise.then(setUser); }, []); - return user; -} - -/* - useDeepEqualMemo(value) - * - * function Component(options) { - * const memo_options = useDeepEqualMemo(options); - * useEffect(() => { - * const channel = cockpit.channel(..., memo_options); - * ... - * return () => channel.close(); - * }, [memo_options]); - * - * ... - * } - * - * function ParentComponent() { - * const options = { superuser: true, host: "localhost" }; - * return - * } - * - * Sometimes a useEffect hook has a deeply nested object as one of its - * dependencies, such as options for a Cockpit channel. However, - * React will compare dependency values with Object.is, and would run - * the effect hook too often. In the example above, the "options" - * variable of Component is a different object on each render - * according to Object.is, but we only want to open a new channel when - * the value of a field such as "superuser" or "host" has actually - * changed. - * - * A call to useDeepEqualMemo will return some object that is deeply - * equal to its argument, and it will continue to return the same - * object (according to Object.is) until the parameter is not deeply - * equal to it anymore. - * - * For the example, this means that "memo_options" will always be the - * very same object, and the effect hook is only run once. If we - * would use "options" directly as a dependency of the effect hook, - * the channel would be closed and opened on every render. This is - * very inefficient, doesn't give the asynchronous channel time to do - * its job, and will also lead to infinite loops when events on the - * channel cause re-renders (which in turn will run the effect hook - * again, which will cause a new event, ...). - */ - -export function useDeepEqualMemo(value) { - const ref = useRef(value); - if (!deep_equal(ref.current, value)) - ref.current = value; - return ref.current; -} - -/* - useFile(path, options) - * - useFileWithError(path, options) - * - * function Component() { - * const content = useFile("/etc/hostname", { superuser: "try" }); - * const [content, error] = useFileWithError("/etc/hostname", { superuser: "try" }); - * - * ... - * } - * - * The "path" and "options" parameters are passed unchanged to - * cockpit.file(). Thus, if you need to parse the content of the - * file, the best way to do that is via the "syntax" option. - * - * The "content" variable will reflect the content of the file - * "/etc/hostname". When the file changes on disk, the component will - * be re-rendered with the new content. - * - * When the file does not exist or there has been some error reading - * it, "content" will be false. - * - * The "error" variable will contain any errors encountered while - * reading the file. It is false when there are no errors. - * - * When the file does not exist, "error" will be false. - * - * The "content" and "error" variables will be null until the file has - * been read for the first time. - * - * useFile and useFileWithError are pretty much the same. useFile will - * hide the exact error from the caller, which makes it slightly - * cleaner to use when the exact error is not part of the UI. In the - * case of error, useFile will log that error to the console and - * return false. - */ - -export function useFileWithError(path, options, hook_options) { - const [content_and_error, setContentAndError] = useState([null, null]); - const memo_options = useDeepEqualMemo(options); - const memo_hook_options = useDeepEqualMemo(hook_options); - - useEffect(() => { - const handle = cockpit.file(path, memo_options); - handle.watch((data, tag, error) => { - setContentAndError([data || false, error || false]); - if (!data && memo_hook_options?.log_errors) - console.warn("Can't read " + path + ": " + (error ? error.toString() : "not found")); - }); - return handle.close; - }, [path, memo_options, memo_hook_options]); - - return content_and_error; -} - -export function useFile(path, options) { - const [content] = useFileWithError(path, options, { log_errors: true }); - return content; -} - -/* - useObject(create, destroy, dependencies, comparators) - * - * function Component(param) { - * const obj = useObject(() => create_object(param), - * obj => obj.close(), - * [param], [deep_equal]) - * - * ... - * } - * - * This will call "create_object(param)" before the first render of - * the component, and will call "obj.close()" after the last render. - * - * More precisely, create_object will be called as part of the first - * call to useObject, i.e., at the very beginning of the first render. - * - * When "param" changes compared to the previous call to useObject - * (according to the deep_equal function in the example above), the - * object will also be destroyed and a new one will be created for the - * new value of "param" (as part of the call to useObject). - * - * There is no time when the "obj" variable is null in the example - * above; the first render already has a fully created object. This - * is an advantage that useObject has over useEffect, which you might - * otherwise use to only create objects when dependencies have - * changed. - * - * And unlike useMemo, useObject will run a cleanup function when a - * component is removed. Also unlike useMemo, useObject guarantees - * that it will not ignore the dependencies. - * - * The dependencies are an array of values that are by default - * compared with Object.is. If you need to use a custom comparator - * function instead of Object.is, you can provide a second - * "comparators" array that parallels the "dependencies" array. The - * values at a given index in the old and new "dependencies" arrays - * are compared with the function at the same index in "comparators". - */ - -function deps_changed(old_deps, new_deps, comps) { - return (!old_deps || old_deps.length != new_deps.length || - old_deps.findIndex((o, i) => !(comps[i] || Object.is)(o, new_deps[i])) >= 0); -} - -export function useObject(create, destroy, deps, comps) { - const ref = useRef(null); - const deps_ref = useRef(null); - const destroy_ref = useRef(null); - - if (deps_changed(deps_ref.current, deps, comps || [])) { - if (ref.current && destroy) - destroy(ref.current); - ref.current = create(); - deps_ref.current = deps; - } - - destroy_ref.current = destroy; - useEffect(() => { - return () => destroy_ref.current?.(ref.current); - }, []); - - return ref.current; -} - -/* - useEvent(obj, event, handler) - * - * function Component(proxy) { - * useEvent(proxy, "changed"); - * - * ... - * } - * - * The component will be re-rendered whenever "proxy" emits the - * "changed" signal. The "proxy" parameter can be null. - * - * When the optional "handler" is given, it will be called with the - * arguments of the event. - */ - -export function useEvent(obj, event, handler) { - // We increase a (otherwise unused) state variable whenever the event - // happens. That reliably triggers a re-render. - - const [, forceUpdate] = useReducer(x => x + 1, 0); - - useEffect(() => { - function update() { - if (handler) - handler.apply(null, arguments); - forceUpdate(); - } - - obj?.addEventListener(event, update); - return () => obj?.removeEventListener(event, update); - }, [obj, event, handler]); -} - -/* - useInit(func, deps, comps) - * - * function Component(arg) { - * useInit(() => { - * cockpit.spawn([ ..., arg ]); - * }, [arg]); - * - * ... - * } - * - * The function will be called once during the first render, and - * whenever "arg" changes. - * - * "useInit(func, deps, comps)" is the same as "useObject(func, null, - * deps, comps)" but if you want to emphasize that you just want to - * run a function (instead of creating a object), it is clearer to use - * the "useInit" name for that. Also, "deps" are optional for - * "useInit" and default to "[]". - */ - -export function useInit(func, deps, comps, destroy = null) { - return useObject(func, destroy, deps || [], comps); -} diff -Nru cockpit-314/pkg/lib/hooks.ts cockpit-316/pkg/lib/hooks.ts --- cockpit-314/pkg/lib/hooks.ts 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/pkg/lib/hooks.ts 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,337 @@ +/* + * This file is part of Cockpit. + * + * Copyright (C) 2020 Red Hat, Inc. + * + * Cockpit is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * Cockpit is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Cockpit; If not, see . + */ + +import cockpit from 'cockpit'; +import { useState, useEffect, useRef, useReducer } from 'react'; +import deep_equal from "deep-equal"; + +/* HOOKS + * + * These are some custom React hooks for Cockpit specific things. + * + * Overview: + * + * - usePageLocation: For following along with cockpit.location. + * + * - useLoggedInUser: For accessing information about the currently + * logged in user. + * + * - useFile: For reading and watching files. + * + * - useObject: For maintaining arbitrary stateful objects that get + * created from the properties of a component. + * + * - useEvent: For reacting to events emitted by arbitrary objects. + * + * - useInit: For running a function once. + * + * - useDeepEqualMemo: A utility hook that can help with things that + * need deep equal comparisons in places where React only offers + * Object identity comparisons, such as with useEffect. + */ + +/* - usePageLocation() + * + * function Component() { + * const location = usePageLocation(); + * const { path, options } = usePageLocation(); + * + * ... + * } + * + * This returns the current value of cockpit.location and the + * component is re-rendered when it changes. "location" is always a + * valid object and never null. + * + * See https://cockpit-project.org/guide/latest/cockpit-location.html + */ + +export function usePageLocation() { + const [location, setLocation] = useState(cockpit.location); + + useEffect(() => { + function update() { setLocation(cockpit.location) } + cockpit.addEventListener("locationchanged", update); + return () => cockpit.removeEventListener("locationchanged", update); + }, []); + + return location; +} + +/* - useLoggedInUser() + * + * function Component() { + * const user_info = useLoggedInUser(); + * + * ... + * } + * + * "user_info" is the object delivered by cockpit.user(), or null + * while that object is not yet available. + */ + +const cockpit_user_promise = cockpit.user(); +let cockpit_user: cockpit.UserInfo | null = null; +cockpit_user_promise.then(user => { cockpit_user = user }).catch(err => console.log(err)); + +export function useLoggedInUser() { + const [user, setUser] = useState(cockpit_user); + useEffect(() => { if (!cockpit_user) cockpit_user_promise.then(setUser); }, []); + return user; +} + +/* - useDeepEqualMemo(value) + * + * function Component(options) { + * const memo_options = useDeepEqualMemo(options); + * useEffect(() => { + * const channel = cockpit.channel(..., memo_options); + * ... + * return () => channel.close(); + * }, [memo_options]); + * + * ... + * } + * + * function ParentComponent() { + * const options = { superuser: "require", host: "localhost" }; + * return + * } + * + * Sometimes a useEffect hook has a deeply nested object as one of its + * dependencies, such as options for a Cockpit channel. However, + * React will compare dependency values with Object.is, and would run + * the effect hook too often. In the example above, the "options" + * variable of Component is a different object on each render + * according to Object.is, but we only want to open a new channel when + * the value of a field such as "superuser" or "host" has actually + * changed. + * + * A call to useDeepEqualMemo will return some object that is deeply + * equal to its argument, and it will continue to return the same + * object (according to Object.is) until the parameter is not deeply + * equal to it anymore. + * + * For the example, this means that "memo_options" will always be the + * very same object, and the effect hook is only run once. If we + * would use "options" directly as a dependency of the effect hook, + * the channel would be closed and opened on every render. This is + * very inefficient, doesn't give the asynchronous channel time to do + * its job, and will also lead to infinite loops when events on the + * channel cause re-renders (which in turn will run the effect hook + * again, which will cause a new event, ...). + */ + +export function useDeepEqualMemo(value: T): T { + const ref = useRef(value); + if (!deep_equal(ref.current, value)) + ref.current = value; + return ref.current; +} + +/* - useFile(path, options) + * - useFileWithError(path, options) + * + * function Component() { + * const content = useFile("/etc/hostname", { superuser: "try" }); + * const [content, error] = useFileWithError("/etc/hostname", { superuser: "try" }); + * + * ... + * } + * + * The "path" and "options" parameters are passed unchanged to + * cockpit.file(). Thus, if you need to parse the content of the + * file, the best way to do that is via the "syntax" option. + * + * The "content" variable will reflect the content of the file + * "/etc/hostname". When the file changes on disk, the component will + * be re-rendered with the new content. + * + * When the file does not exist or there has been some error reading + * it, "content" will be false. + * + * The "error" variable will contain any errors encountered while + * reading the file. It is false when there are no errors. + * + * When the file does not exist, "error" will be false. + * + * The "content" and "error" variables will be null until the file has + * been read for the first time. + * + * useFile and useFileWithError are pretty much the same. useFile will + * hide the exact error from the caller, which makes it slightly + * cleaner to use when the exact error is not part of the UI. In the + * case of error, useFile will log that error to the console and + * return false. + */ + +type UseFileWithErrorOptions = { + log_errors?: boolean; +}; + +export function useFileWithError(path: string, options: cockpit.JsonObject, hook_options: UseFileWithErrorOptions) { + const [content_and_error, setContentAndError] = useState<[string | false | null, cockpit.BasicError | false | null]>([null, null]); + const memo_options = useDeepEqualMemo(options); + const memo_hook_options = useDeepEqualMemo(hook_options); + + useEffect(() => { + const handle = cockpit.file(path, memo_options); + handle.watch((data, _tag, error) => { + setContentAndError([data || false, error || false]); + if (!data && memo_hook_options?.log_errors) + console.warn("Can't read " + path + ": " + (error ? error.toString() : "not found")); + }); + return handle.close; + }, [path, memo_options, memo_hook_options]); + + return content_and_error; +} + +export function useFile(path: string, options: cockpit.JsonObject) { + const [content] = useFileWithError(path, options, { log_errors: true }); + return content; +} + +/* - useObject(create, destroy, dependencies, comparators) + * + * function Component(param) { + * const obj = useObject(() => create_object(param), + * obj => obj.close(), + * [param] as const, [deep_equal]) + * + * ... + * } + * + * This will call "create_object(param)" before the first render of + * the component, and will call "obj.close()" after the last render. + * + * More precisely, create_object will be called as part of the first + * call to useObject, i.e., at the very beginning of the first render. + * + * When "param" changes compared to the previous call to useObject + * (according to the deep_equal function in the example above), the + * object will also be destroyed and a new one will be created for the + * new value of "param" (as part of the call to useObject). + * + * There is no time when the "obj" variable is null in the example + * above; the first render already has a fully created object. This + * is an advantage that useObject has over useEffect, which you might + * otherwise use to only create objects when dependencies have + * changed. + * + * And unlike useMemo, useObject will run a cleanup function when a + * component is removed. Also unlike useMemo, useObject guarantees + * that it will not ignore the dependencies. + * + * The dependencies are an array of values that are by default + * compared with Object.is. If you need to use a custom comparator + * function instead of Object.is, you can provide a second + * "comparators" array that parallels the "dependencies" array. The + * values at a given index in the old and new "dependencies" arrays + * are compared with the function at the same index in "comparators". + */ + +type Tuple = readonly [...unknown[]]; +type Comparator = (a: T, b: T) => boolean; +type Comparators = {[ t in keyof T ]?: Comparator}; + +function deps_changed(old_deps: T | null, new_deps: T, comps: Comparators): boolean { + return (!old_deps || old_deps.length != new_deps.length || + old_deps.findIndex((o, i) => !(comps[i] || Object.is)(o, new_deps[i])) >= 0); +} + +export function useObject(create: () => T, destroy: ((value: T) => void) | null, deps: D, comps?: Comparators): T { + const ref = useRef(null); + const deps_ref = useRef(null); + const destroy_ref = useRef<((value: T) => void) | null>(destroy); + + /* Since each item in Comparators<> is optional, `[]` should be valid here + * but for some reason it doesn't work — but `{}` does. + */ + if (deps_changed(deps_ref.current, deps, comps || {})) { + if (ref.current && destroy) + destroy(ref.current); + ref.current = create(); + deps_ref.current = deps; + } + + destroy_ref.current = destroy; + useEffect(() => { + return () => { destroy_ref.current?.(ref.current!) }; + }, []); + + return ref.current!; +} + +/* - useEvent(obj, event, handler) + * + * function Component(proxy) { + * useEvent(proxy, "changed"); + * + * ... + * } + * + * The component will be re-rendered whenever "proxy" emits the + * "changed" signal. The "proxy" parameter can be null. + * + * When the optional "handler" is given, it will be called with the + * arguments of the event. + */ + +export function useEvent(obj: cockpit.EventSource, event: E, handler?: cockpit.EventListener) { + // We increase a (otherwise unused) state variable whenever the event + // happens. That reliably triggers a re-render. + + const [, forceUpdate] = useReducer(x => x + 1, 0); + + useEffect(() => { + function update(...args: Parameters>) { + if (handler) + handler(...args); + forceUpdate(); + } + + obj?.addEventListener(event, update); + return () => obj?.removeEventListener(event, update); + }, [obj, event, handler]); +} + +/* - useInit(func, deps, comps) + * + * function Component(arg) { + * useInit(() => { + * cockpit.spawn([ ..., arg ]); + * }, [arg]); + * + * ... + * } + * + * The function will be called once during the first render, and + * whenever "arg" changes. + * + * "useInit(func, deps, comps)" is the same as "useObject(func, null, + * deps, comps)" but if you want to emphasize that you just want to + * run a function (instead of creating a object), it is clearer to use + * the "useInit" name for that. Also, "deps" are optional for + * "useInit" and default to "[]". + */ + +export function useInit(func: () => T, deps: D, comps?: Comparators, destroy: ((value: T) => void) | null = null): T { + return useObject(func, destroy, deps || [], comps); +} diff -Nru cockpit-314/pkg/lib/index.d.ts cockpit-316/pkg/lib/index.d.ts --- cockpit-314/pkg/lib/index.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/pkg/lib/index.d.ts 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,3 @@ +interface Window { + debugging?: string; +} diff -Nru cockpit-314/pkg/lib/inotify.py cockpit-316/pkg/lib/inotify.py --- cockpit-314/pkg/lib/inotify.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/lib/inotify.py 2024-04-25 09:45:58.000000000 +0000 @@ -61,7 +61,7 @@ buf = os.read(self.fd, 4096) pos = 0 while pos < len(buf): - (wd, mask, cookie, name_len) = struct.unpack('iIII', buf[pos:pos + 16]) + (wd, mask, _cookie, name_len) = struct.unpack('iIII', buf[pos:pos + 16]) pos += 16 (name,) = struct.unpack('%ds' % name_len, buf[pos:pos + name_len]) pos += name_len diff -Nru cockpit-314/pkg/lib/patternfly/patternfly-5-overrides.scss cockpit-316/pkg/lib/patternfly/patternfly-5-overrides.scss --- cockpit-314/pkg/lib/patternfly/patternfly-5-overrides.scss 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/lib/patternfly/patternfly-5-overrides.scss 2024-04-25 09:45:58.000000000 +0000 @@ -75,6 +75,24 @@ color: var(--pf-v5-c-form-control--Color); } +// Fix the double-spacing issue in the non-deprecated split buttons +// https://github.com/patternfly/patternfly-react/issues/10302 +.pf-m-split-button .pf-v5-c-menu-toggle__controls { + margin: 0; +} + +// Fix the double-spacing issue for other dropdowns +// https://github.com/patternfly/patternfly-react/issues/10302 +.pf-v5-c-menu-toggle__controls:last-child > .pf-v5-c-menu-toggle__toggle-icon { + margin-inline-end: 0; +} + +// Fix menus cropping contents +// https://github.com/patternfly/patternfly/issues/6565 +.pf-v5-c-menu__item-text { + overflow: visible; +} + // The default gap between the rows in horizontal lists is too large .pf-v5-c-description-list.pf-m-horizontal-on-sm, .pf-v5-c-description-list.pf-m-horizontal { diff -Nru cockpit-314/pkg/lib/qunit-tap.d.ts cockpit-316/pkg/lib/qunit-tap.d.ts --- cockpit-314/pkg/lib/qunit-tap.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/pkg/lib/qunit-tap.d.ts 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,3 @@ +declare module 'qunit-tap' { + export default function qunitTap(qunitObject: QUnit, printLikeFunction: (message: string, ...args: unknown[]) => void, options?: unknown): void; +} diff -Nru cockpit-314/pkg/lib/qunit-tests.js cockpit-316/pkg/lib/qunit-tests.js --- cockpit-314/pkg/lib/qunit-tests.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/lib/qunit-tests.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ -/* - * This file is part of Cockpit. - * - * Copyright (C) 2014 Red Hat, Inc. - * - * Cockpit is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * Cockpit is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Cockpit; If not, see . - */ - -"use strict"; - -import QUnit from "qunit/qunit/qunit.js"; -import qunitTap from "qunit-tap/lib/qunit-tap.js"; -import "qunit/qunit/qunit.css"; - -QUnit.mock_info = async key => { - const response = await fetch(`http://${window.location.hostname}:${window.location.port}/mock/info`); - return (await response.json())[key]; -}; - -// Convenience for skipping tests that the python bridge can't yet -// handle. - -let is_pybridge = null; - -QUnit.test.skipWithPybridge = async (name, callback) => { - if (is_pybridge === null) - is_pybridge = await QUnit.mock_info("pybridge"); - - if (is_pybridge) - QUnit.test.skip(name, callback); - else - QUnit.test(name, callback); -}; - -/* Always use explicit start */ -QUnit.config.autostart = false; - -let qunit_started = false; - -QUnit.moduleStart(() => { - qunit_started = true; -}); - -window.setTimeout(() => { - if (!qunit_started) { - console.log("QUnit not started by test"); - console.log("cockpittest-tap-error"); - } -}, 20000); - -/* QUnit-Tap writes the summary line right after this function returns. -* Delay printing the end marker until after that summary is out. -*/ -QUnit.done(() => window.setTimeout(() => console.log("cockpittest-tap-done"), 0)); - -/* Now initialize qunit-tap - * - * When not running under a tap driver this stuff will just show up in - * the console. We print out a special canary at the end of the tests - * so that the tap driver can know when the testing is done. - * - * In addition double check for a test file that doesn't properly call - * QUnit.start() after its done setting up its tests. - * - * We also want to insert the current test name into all tap lines. - */ -const tap_regex = /^((not )?ok [0-9]+ (- )?)(.*)$/; -qunitTap(QUnit, function() { - if (arguments.length == 1 && QUnit.config.current) { - const match = tap_regex.exec(arguments[0]); - if (match) { - console.log(match[1] + QUnit.config.current.testName + ": " + match[4]); - return; - } - } - console.log.apply(console, arguments); -}); - -export default QUnit; diff -Nru cockpit-314/pkg/lib/qunit-tests.ts cockpit-316/pkg/lib/qunit-tests.ts --- cockpit-314/pkg/lib/qunit-tests.ts 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/pkg/lib/qunit-tests.ts 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,108 @@ +/* + * This file is part of Cockpit. + * + * Copyright (C) 2014 Red Hat, Inc. + * + * Cockpit is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * Cockpit is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Cockpit; If not, see . + */ + +"use strict"; + +import QUnit from "qunit"; +import qunitTap from "qunit-tap"; +import "qunit/qunit/qunit.css"; + +export const mock_info = async (key: string) => { + const response = await fetch(`http://${window.location.hostname}:${window.location.port}/mock/info`); + return (await response.json())[key]; +}; + +// Convenience for skipping tests that the python bridge can't yet +// handle. + +let is_pybridge: boolean | null = null; + +export const skipWithPybridge = async (name: string, callback: (assert: unknown) => void | Promise) => { + if (is_pybridge === null) + is_pybridge = await mock_info("pybridge"); + + if (is_pybridge) + QUnit.skip(name, callback); + else + QUnit.test(name, callback); +}; + +/* Always use explicit start */ +QUnit.config.autostart = false; + +let qunit_started = false; + +QUnit.moduleStart(() => { + qunit_started = true; +}); + +window.setTimeout(() => { + if (!qunit_started) { + console.log("QUnit not started by test"); + console.log("cockpittest-tap-error"); + } +}, 20000); + +/* QUnit-Tap writes the summary line right after this function returns. +* Delay printing the end marker until after that summary is out. +*/ +QUnit.done(() => { window.setTimeout(() => console.log("cockpittest-tap-done"), 0) }); + +/* Now initialize qunit-tap + * + * When not running under a tap driver this stuff will just show up in + * the console. We print out a special canary at the end of the tests + * so that the tap driver can know when the testing is done. + * + * In addition double check for a test file that doesn't properly call + * QUnit.start() after its done setting up its tests. + * + * We also want to insert the current test name into all tap lines. + */ +const tap_regex = /^((not )?ok [0-9]+ (- )?)(.*)$/; +qunitTap(QUnit, function(message: string, ...args: unknown[]) { + if (args.length == 0 && QUnit.config.current) { + const match = tap_regex.exec(message); + if (match) { + console.log(match[1] + QUnit.config.current.testName + ": " + match[4]); + return; + } + } + console.log(message, args); +}); + +export function f(format: TemplateStringsArray, ...args: unknown[]) { + const strings = [...format].reverse(); + args.reverse(); + + const parts = [strings.pop()]; + if (strings.length !== args.length) { + throw new Error('unequal strings and args in f-string'); + } + + while (args.length !== 0) { + const arg = args.pop(); + parts.push(JSON.stringify(arg) || String(arg)); + parts.push(strings.pop()); + } + + return parts.join(''); +} + +export default QUnit; diff -Nru cockpit-314/pkg/lib/serverTime.js cockpit-316/pkg/lib/serverTime.js --- cockpit-314/pkg/lib/serverTime.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/lib/serverTime.js 2024-04-25 09:45:58.000000000 +0000 @@ -302,11 +302,11 @@ function set_custom_ntp_timesyncd(config) { const custom_ntp_config_file = cockpit.file("/etc/systemd/timesyncd.conf.d/50-cockpit.conf", - { superuser: true }); + { superuser: "require" }); const text = `# This file is automatically generated by Cockpit\n\n[Time]\n${config.enabled ? "" : "#"}NTP=${config.servers.join(" ")}\n`; - return cockpit.spawn(["mkdir", "-p", "/etc/systemd/timesyncd.conf.d"], { superuser: true }) + return cockpit.spawn(["mkdir", "-p", "/etc/systemd/timesyncd.conf.d"], { superuser: "require" }) .then(() => custom_ntp_config_file.replace(text)); } @@ -352,8 +352,8 @@ } function set_custom_ntp_chronyd(config) { - const enabled_file = cockpit.file(chronyd_sources_enabled, { superuser: true }); - const disabled_file = cockpit.file(chronyd_sources_disabled, { superuser: true }); + const enabled_file = cockpit.file(chronyd_sources_enabled, { superuser: "require" }); + const disabled_file = cockpit.file(chronyd_sources_disabled, { superuser: "require" }); const text = "# This file is automatically generated by Cockpit\n\n" + config.servers.map(s => `server ${s}\n`).join(""); @@ -365,10 +365,10 @@ data += "\n# Added by Cockpit\n" + line + "\n"; return data; } - return cockpit.file("/etc/chrony.conf", { superuser: true }).modify(add_sourcedir); + return cockpit.file("/etc/chrony.conf", { superuser: "require" }).modify(add_sourcedir); } - return cockpit.spawn(["mkdir", "-p", chronyd_sourcedir], { superuser: true }) + return cockpit.spawn(["mkdir", "-p", chronyd_sourcedir], { superuser: "require" }) .then(() => { if (config.enabled) return enabled_file.replace(text).then(() => disabled_file.replace(null)).then(ensure_sourcedir); diff -Nru cockpit-314/pkg/networkmanager/dialogs-common.jsx cockpit-316/pkg/networkmanager/dialogs-common.jsx --- cockpit-314/pkg/networkmanager/dialogs-common.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/networkmanager/dialogs-common.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -254,14 +254,12 @@ } return ( - <> - - + ); }; diff -Nru cockpit-314/pkg/networkmanager/network-interface-members.jsx cockpit-316/pkg/networkmanager/network-interface-members.jsx --- cockpit-314/pkg/networkmanager/network-interface-members.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/networkmanager/network-interface-members.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -20,7 +20,8 @@ import React, { useState, useContext } from "react"; import { Button } from "@patternfly/react-core/dist/esm/components/Button/index.js"; import { Card, CardHeader, CardTitle } from '@patternfly/react-core/dist/esm/components/Card/index.js'; -import { Dropdown, DropdownItem, DropdownToggle } from '@patternfly/react-core/dist/esm/deprecated/components/Dropdown/index.js'; +import { Dropdown, DropdownItem, DropdownList } from '@patternfly/react-core/dist/esm/components/Dropdown/index.js'; +import { MenuToggle } from "@patternfly/react-core/dist/esm/components/MenuToggle"; import { Switch } from "@patternfly/react-core/dist/esm/components/Switch/index.js"; import { MinusIcon } from '@patternfly/react-icons'; @@ -181,14 +182,18 @@ const add_btn = ( setIsOpen(false)} - toggle={ - setIsOpen(isOpen)}> + toggle={(toggleRef) => ( + setIsOpen(!isOpen)}> {_("Add member")} - - } + + )} isOpen={isOpen} - position="right" - dropdownItems={dropdownItems} /> + popperProps={{ position: "right" }} + > + + {dropdownItems} + + ); return ( diff -Nru cockpit-314/pkg/packagekit/updates.jsx cockpit-316/pkg/packagekit/updates.jsx --- cockpit-314/pkg/packagekit/updates.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/packagekit/updates.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -307,14 +307,13 @@ if (secSeverityURL) secSeverityURL = {secSeverity}; type = ( - <> - - - {icon} - { (info.cve_urls && info.cve_urls.length > 0) ? info.cve_urls.length : "" } - - - ); + + + {icon} + { (info.cve_urls && info.cve_urls.length > 0) ? info.cve_urls.length : "" } + + + ); } else { const tip = (info.severity >= PK.Enum.INFO_NORMAL) ? _("bug fix") : _("enhancement"); type = ( @@ -1462,7 +1461,8 @@ { this.state.showRestartServicesDialog && - this.setState({ showRestartServicesDialog: false })} state={this.state.state} callTracer={(state) => this.callTracer(state)} @@ -1587,24 +1587,22 @@ }); return ( - <> - - - - - { this.state.showRestartServicesDialog && - + + + + { this.state.showRestartServicesDialog && + this.setState({ showRestartServicesDialog: false })} state={this.state.state} callTracer={(state) => this.callTracer(state)} onValueChanged={delta => this.setState(delta)} loadUpdates={this.loadUpdates} /> - } - { this.state.showRebootSystemDialog && - this.setState({ showRebootSystemDialog: false })} /> - } - - + } + { this.state.showRebootSystemDialog && + this.setState({ showRebootSystemDialog: false })} /> + } + ); } diff -Nru cockpit-314/pkg/playground/react-demo-file-upload.tsx cockpit-316/pkg/playground/react-demo-file-upload.tsx --- cockpit-314/pkg/playground/react-demo-file-upload.tsx 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/pkg/playground/react-demo-file-upload.tsx 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,141 @@ +/* + * This file is part of Cockpit. + * + * Copyright (C) 2024 Red Hat, Inc. + * + * Cockpit is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * Cockpit is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Cockpit; If not, see . + */ + +import cockpit from "cockpit"; +import React, { useRef, useState } from "react"; +import { Container, createRoot } from 'react-dom/client'; + +import { Alert, AlertActionCloseButton } from "@patternfly/react-core/dist/esm/components/Alert/index.js"; +import { Button } from "@patternfly/react-core/dist/esm/components/Button/index.js"; +import { Flex } from "@patternfly/react-core/dist/esm/layouts/Flex/index.js"; +import { Progress } from "@patternfly/react-core/dist/esm/components/Progress/index.js"; +import { TimesIcon, UploadIcon } from "@patternfly/react-icons"; + +import { FileAutoComplete } from "cockpit-components-file-autocomplete.jsx"; +import { upload } from "cockpit-upload-helper"; + +const _ = cockpit.gettext; + +export const UploadButton = () => { + const ref = useRef(null); + const [files, setFiles] = useState<{[name: string]: {file: File, progress: number, cancel:() => void}}>({}); + const [alert, setAlert] = useState<{variant: "warning" | "danger", title: string, message: string} | null>(null); + const [dest, setDest] = useState("/home/admin/"); + let next_progress = 0; + + const handleClick = () => { + if (ref.current) { + ref.current.click(); + } + }; + + const onUpload = async (event: React.ChangeEvent) => { + cockpit.assert(event.target.files, "not an ?"); + setAlert(null); + await Promise.allSettled(Array.from(event.target.files).map(async (file: File) => { + const destination = `${dest}${file.name}`; + const abort = new AbortController(); + + setFiles(oldFiles => { + return { + [file.name]: { file, progress: 0, cancel: () => abort.abort() }, + ...oldFiles, + }; + }); + + try { + await upload(destination, file.stream(), (progress) => { + const now = performance.now(); + if (now < next_progress) + return; + next_progress = now + 200; // only rerender every 200ms + setFiles(oldFiles => { + const oldFile = oldFiles[file.name]; + return { + ...oldFiles, + [file.name]: { ...oldFile, progress }, + }; + }); + }, abort.signal); + } catch (exc) { + cockpit.assert(exc instanceof Error, "Unknown exception type"); + if (exc instanceof DOMException && exc.name == 'AbortError') { + setAlert({ variant: "warning", title: 'Aborted', message: '' }); + } else { + setAlert({ variant: "danger", title: 'Upload Error', message: exc.message }); + } + } finally { + setFiles(oldFiles => { + const copy = { ...oldFiles }; + delete copy[file.name]; + return copy; + }); + } + })); + + // Reset input field in the case a download was cancelled and has to be re-uploaded + // https://stackoverflow.com/questions/26634616/filereader-upload-same-file-again-not-working + event.target.value = ""; + }; + + return ( + <> + + + + + + {alert !== null && + setAlert(null)} />} + > +

{alert.message}

+
+ } + {Object.keys(files).map((key, index) => { + const file = files[key]; + return ( + + + - } - - + +
{_("There was an unexpected error while connecting to the machine.")}
+
{_("Messages related to the failure might be found in the journal:")}
+ journalctl -u cockpit + {ca_cert_url &&
+
{_("Safari users need to import and trust the certificate of the self-signing CA:")}
+ +
} +
} /> diff -Nru cockpit-314/pkg/shell/hosts_dialog.jsx cockpit-316/pkg/shell/hosts_dialog.jsx --- cockpit-314/pkg/shell/hosts_dialog.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/shell/hosts_dialog.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -87,11 +87,11 @@ position="top" variant="medium" onClose={this.props.onClose} title={_("Cockpit is not installed")} - footer={<> + footer={ - } + } > { this.props.dialogError && } diff -Nru cockpit-314/pkg/shell/machines/test-machines.js cockpit-316/pkg/shell/machines/test-machines.js --- cockpit-314/pkg/shell/machines/test-machines.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/shell/machines/test-machines.js 2024-04-25 09:45:58.000000000 +0000 @@ -1,5 +1,5 @@ import cockpit from "cockpit"; -import QUnit from "qunit-tests"; +import QUnit, { skipWithPybridge } from "qunit-tests"; import { machines } from "./machines.js"; const dbus = cockpit.dbus(null, { bus: "internal" }); @@ -54,9 +54,9 @@ QUnit.test("invalid json", async assert => machinesParseTest(assert, { "01.json": '{"green":' }, {})); -QUnit.test.skipWithPybridge("invalid data types", async assert => machinesParseTest(assert, { "01.json": '{"green": []}' }, {})); +skipWithPybridge("invalid data types", async assert => machinesParseTest(assert, { "01.json": '{"green": []}' }, {})); -QUnit.test.skipWithPybridge("merge several JSON files", async assert => machinesParseTest( +skipWithPybridge("merge several JSON files", async assert => machinesParseTest( assert, /* 99-webui.json changes a property in green, adds a * property to blue, and adds an entire new host yellow */ @@ -83,7 +83,7 @@ } )); -QUnit.test.skipWithPybridge("merge JSON files with errors", async assert => machinesParseTest( +skipWithPybridge("merge JSON files with errors", async assert => machinesParseTest( assert, { "01-valid.json": '{"green": {"visible": true, "address": "1.2.3.4"}}', diff -Nru cockpit-314/pkg/shell/manifest.json cockpit-316/pkg/shell/manifest.json --- cockpit-314/pkg/shell/manifest.json 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/shell/manifest.json 2024-04-25 09:45:58.000000000 +0000 @@ -28,7 +28,7 @@ "docs": [ { "label": "Web Console", - "url": "https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_systems_using_the_rhel_8_web_console/index" + "url": "https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/managing_systems_using_the_rhel_9_web_console/index" } ], "bridges": [ diff -Nru cockpit-314/pkg/shell/nav.scss cockpit-316/pkg/shell/nav.scss --- cockpit-314/pkg/shell/nav.scss 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/shell/nav.scss 2024-04-25 09:45:58.000000000 +0000 @@ -230,11 +230,6 @@ /* AAA contrast: simulate #a1a1a1 on #151515 */ opacity: 0.6; } - - .pf-v5-c-dropdown__menu { - // Correct the offset - margin-block-start: -4px; - } } .pf-v5-theme-dark { @@ -621,12 +616,12 @@ // Rework navigation toggles in desktop and (especially) mobile modes .super-user-indicator > button, -.ct-nav-toggle:not(.pf-v5-c-dropdown) { +.ct-nav-toggle:not(.pf-v5-c-menu) { color: var(--pf-v5-global--Color--light-100) !important; background: transparent; } -.ct-nav-toggle:not(.pf-v5-c-dropdown) { +.ct-nav-toggle:not(.pf-v5-c-menu) { &:hover, &:active, &.active, &.interact, &[aria-expanded="true"] { text-decoration: none; // approximate --pf-v5-global--BackgroundColor--dark-400, but with opacity @@ -652,7 +647,7 @@ // This can go away once we move the host selector inside the Masthead // https://github.com/patternfly/patternfly/issues/4524 @media (max-width: $phone) { - .ct-nav-toggle.pf-v5-c-dropdown { + .ct-nav-toggle { &:hover, &:active, &.active, &.interact, &[aria-expanded="true"], &.pf-m-expanded { text-decoration: none; // approximate --pf-v5-global--BackgroundColor--dark-400, but with opacity @@ -670,7 +665,7 @@ } // Hide border from navigation items for mobile - .ct-header-item:not(:hover) button:not(:hover)::before { + .pf-v5-c-menu-toggle::before { border: none; } } @@ -719,7 +714,7 @@ @media (max-width: $phone) { #host-toggle, #nav-system-item, - .ct-nav-toggle > button { + button.ct-nav-toggle { // Stretch to navbar block-size: 100%; // Don't stretch to fill content; make optimal width same as height @@ -735,34 +730,32 @@ padding-inline: var(--pf-v5-global--spacer--xs); align-items: center; - > .pf-v5-c-select__toggle-wrapper { - flex: none; - max-inline-size: 100%; - } - // Remove the toggled outline - .pf-v5-c-select__toggle::before { + .pf-v5-c-menu-toggle::before { display: none !important; } - // Don't show dropdown icon - .pf-v5-c-dropdown__toggle-icon { - display: none; + + // Don't show toggle icon + .pf-v5-c-menu-toggle__icon { + margin-inline-end: 0; } - .pf-v5-c-dropdown__toggle-image { + .pf-v5-c-menu-toggle__image { align-self: center; margin: 0 !important; } + // #host-sel specific .pf-v5-c-select__toggle-arrow { // This is here because Chrome is weird sometimes... padding-block: 2px 5px; padding-inline: 0; } - } - .ct-nav-toggle .pf-v5-c-dropdown__menu { - inset-block: auto 100%; + > .pf-v5-c-select__toggle-wrapper { + flex: none; + max-inline-size: 100%; + } } } diff -Nru cockpit-314/pkg/shell/topnav.jsx cockpit-316/pkg/shell/topnav.jsx --- cockpit-314/pkg/shell/topnav.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/shell/topnav.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -20,7 +20,9 @@ import cockpit from "cockpit"; import React from "react"; import { Button } from "@patternfly/react-core/dist/esm/components/Button/index.js"; -import { Dropdown, DropdownGroup, DropdownItem, DropdownPosition, DropdownSeparator, DropdownToggle } from '@patternfly/react-core/dist/esm/deprecated/components/Dropdown/index.js'; +import { Dropdown, DropdownGroup, DropdownItem, DropdownList } from '@patternfly/react-core/dist/esm/components/Dropdown/index.js'; +import { MenuToggle } from "@patternfly/react-core/dist/esm/components/MenuToggle"; +import { Divider } from "@patternfly/react-core/dist/esm/components/Divider"; import { Masthead, MastheadContent } from "@patternfly/react-core/dist/esm/components/Masthead/index.js"; import { Spinner } from "@patternfly/react-core/dist/esm/components/Spinner/index.js"; import { ToggleGroup, ToggleGroupItem } from "@patternfly/react-core/dist/esm/components/ToggleGroup/index.js"; @@ -148,27 +150,27 @@ const docItems = []; if (this.state.osRelease.DOCUMENTATION_URL) - docItems.push(}> + docItems.push(}> {cockpit.format(_("$0 documentation"), this.state.osRelease.NAME)} ); // global documentation for cockpit as a whole (cockpit.manifests.shell?.docs ?? []).forEach(doc => { - docItems.push(}> + docItems.push(}> {doc.label} ); }); if (docs.length > 0) - docItems.push(); + docItems.push(); docs.forEach(e => { - docItems.push(}> + docItems.push(}> {_(e.label)} ); }); - docItems.push(); + docItems.push(); docItems.push( Dialogs.show()}> {_("About Web Console")} @@ -176,31 +178,40 @@ const manifest = cockpit.manifests.shell || { }; + // HACK: This should be a DropdownItem so the normal onSelect closing behaviour works, but we can't embed a button in a button const main_menu = [ -
+
{ + this.setState(prevState => { return { menuOpened: !prevState.menuOpened } }); + }}>
, - , + , - - - + + + - - - - + + + , - , + , ]; if (manifest.locales) - main_menu.push( Dialogs.show()}> {_("Display language")} ); @@ -217,7 +228,7 @@ onClick={() => Dialogs.show()}> {_("SSH keys")} , - , + , {_("Log out")} , @@ -246,21 +257,30 @@ } { this.setState(prevState => { return { docsOpened: !prevState.docsOpened } }); document.getElementById("toggle-docs").focus(); }} - toggle={ - } onToggle={(_event, isOpen) => { this.setState({ docsOpened: isOpen }) }}> + toggle={(toggleRef) => ( + } + isExpanded={this.state.docsOpened} + isFullHeight + onClick={() => { this.setState(prevState => ({ docsOpened: !prevState.docsOpened, menuOpened: false })) }}> {_("Help")} - - } + + )} isOpen={this.state.docsOpened} - dropdownItems={docItems} - position={DropdownPosition.right} - isFullHeight - className="ct-header-item ct-nav-toggle" - /> + popperProps={{ position: "right" }} + > + + {docItems} + + { return { menuOpened: !prevState.menuOpened } }); document.getElementById("toggle-menu").focus(); }} - toggle={ - } onToggle={(_event, isOpen) => this.setState({ menuOpened: isOpen, showActivePages: _event.altKey }) }> + toggle={(toggleRef) => ( + } + isExpanded={this.state.menuOpened} + isFullHeight + onClick={(event) => { + this.setState(prevState => ({ menuOpened: !prevState.menuOpened, docsOpened: false, showActivePages: event.altKey })); + }} + > {_("Session")} - - } + + )} isOpen={this.state.menuOpened} - dropdownItems={main_menu} - position={DropdownPosition.right} - isFullHeight - className="ct-header-item ct-nav-toggle" - /> + popperProps={{ position: "right" }} + > + + {main_menu} + + diff -Nru cockpit-314/pkg/sosreport/sosreport.jsx cockpit-316/pkg/sosreport/sosreport.jsx --- cockpit-314/pkg/sosreport/sosreport.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/sosreport/sosreport.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -91,7 +91,7 @@ } function update_reports() { - cockpit.script('find /var/tmp -maxdepth 1 -name \'*sosreport-*.tar.*\' -print0 | xargs -0 -r stat --printf="%n\\r%W\\n"', { superuser: true, err: "message" }) + cockpit.script('find /var/tmp -maxdepth 1 -name \'*sosreport-*.tar.*\' -print0 | xargs -0 -r stat --printf="%n\\r%W\\n"', { superuser: "require", err: "message" }) .then(output => { const reports = { }; const lines = output.split("\n"); @@ -126,7 +126,7 @@ self.problem = null; watch = null; - watch = cockpit.channel({ payload: "fswatch1", path: "/var/tmp", superuser: true }); + watch = cockpit.channel({ payload: "fswatch1", path: "/var/tmp", superuser: "require" }); watch.addEventListener("message", (event, payload) => { const msg = JSON.parse(payload); if (msg.event != "present" && parse_report_name(msg.path)) @@ -150,7 +150,7 @@ // TODO - Use a real API instead of scraping stdout once such an API exists const task = cockpit.spawn(["sos", "report", "--batch"].concat(args), - { superuser: true, err: "out", pty: true }); + { superuser: "require", err: "out", pty: true }); task.stream(text => { let p = 0; @@ -195,7 +195,7 @@ payload: "fsread1", binary: "raw", path, - superuser: true, + superuser: "require", max_read_size: 150 * 1024 * 1024, external: { "content-disposition": 'attachment; filename="' + basename + '"', @@ -231,7 +231,7 @@ path + ".md5", path + ".sha256", ]; - return Promise.all(paths.map(p => cockpit.file(p, { superuser: true }).replace(null))); + return Promise.all(paths.map(p => cockpit.file(p, { superuser: "require" }).replace(null))); } const SOSDialog = () => { diff -Nru cockpit-314/pkg/storaged/block/format-dialog.jsx cockpit-316/pkg/storaged/block/format-dialog.jsx --- cockpit-314/pkg/storaged/block/format-dialog.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/block/format-dialog.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -85,7 +85,7 @@ export function format_dialog(client, path, start, size, enable_dos_extended) { const block = client.blocks[path]; if (block.IdUsage == "crypto") { - cockpit.spawn(["cryptsetup", "luksDump", decode_filename(block.Device)], { superuser: true }) + cockpit.spawn(["cryptsetup", "luksDump", decode_filename(block.Device)], { superuser: "require" }) .then(output => { if (output.indexOf("Keyslots:") >= 0) // This is what luksmeta-monitor-hack looks for return 2; diff -Nru cockpit-314/pkg/storaged/btrfs/subvolume.jsx cockpit-316/pkg/storaged/btrfs/subvolume.jsx --- cockpit-314/pkg/storaged/btrfs/subvolume.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/btrfs/subvolume.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -235,7 +235,7 @@ for (const c of configs_to_remove) await block.RemoveConfigurationItem(c, {}); await cockpit.spawn(["btrfs", "subvolume", "delete"].concat(paths_to_delete), - { superuser: true, err: "message" }); + { superuser: "require", err: "message" }); await btrfs_poll(); navigate_away_from_card(card); } diff -Nru cockpit-314/pkg/storaged/client.js cockpit-316/pkg/storaged/client.js --- cockpit-314/pkg/storaged/client.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/client.js 2024-04-25 09:45:58.000000000 +0000 @@ -200,21 +200,6 @@ { name: "swapdev.free" }, ], "direct"); -/* Derived indices. - */ - -function is_multipath_master(block) { - // The master has "mpath" in its device mapper UUID. In the - // future, storaged will hopefully provide this information - // directly. - if (block.Symlinks && block.Symlinks.length) { - for (let i = 0; i < block.Symlinks.length; i++) - if (utils.decode_filename(block.Symlinks[i]).indexOf("/dev/disk/by-id/dm-uuid-mpath-") === 0) - return true; - } - return false; -} - export async function btrfs_poll() { const usage_regex = /used\s+(?\d+)\s+path\s+(?[\w/]+)/; if (!client.uuids_btrfs_subvols) @@ -258,7 +243,7 @@ // ID 256 gen 7 parent 5 top level 5 path /one // ID 257 gen 7 parent 256 top level 256 path one/two // ID 258 gen 7 parent 257 top level 257 path /one/two/three/four - const output = await cockpit.spawn(["btrfs", "subvolume", "list", "-ap", mount_point], { superuser: true, err: "message" }); + const output = await cockpit.spawn(["btrfs", "subvolume", "list", "-ap", mount_point], { superuser: "require", err: "message" }); const subvols = [{ pathname: "/", id: 5, parent: null }]; for (const line of output.split("\n")) { const m = line.match(/ID (\d+).*parent (\d+).*path (\/)?(.*)/); @@ -274,7 +259,7 @@ // In the future can be obtained via UDisks, it requires the btrfs partition to be mounted somewhere. // https://github.com/storaged-project/udisks/commit/b6966b7076cd837f9d307eef64beedf01bc863ae try { - const output = await cockpit.spawn(["btrfs", "subvolume", "get-default", mount_point], { superuser: true, err: "message" }); + const output = await cockpit.spawn(["btrfs", "subvolume", "get-default", mount_point], { superuser: "require", err: "message" }); const id_match = output.match(/ID (\d+).*/); if (id_match) btrfs_default_subvol[uuid] = Number(id_match[1]); @@ -286,7 +271,7 @@ // https://github.com/storaged-project/udisks/issues/1232 // TODO: optimise into just parsing one `btrfs filesystem show`? try { - const usage_output = await cockpit.spawn(["btrfs", "filesystem", "show", "--raw", uuid], { superuser: true, err: "message" }); + const usage_output = await cockpit.spawn(["btrfs", "filesystem", "show", "--raw", uuid], { superuser: "require", err: "message" }); const usages = {}; for (const line of usage_output.split("\n")) { const match = usage_regex.exec(line); @@ -411,6 +396,41 @@ btrfs_findmnt_poll(); } +/* Derived indices. + */ + +function is_multipath_master(block) { + // The master has "mpath" in its device mapper UUID. In the + // future, storaged will hopefully provide this information + // directly. + if (block.Symlinks && block.Symlinks.length) { + for (let i = 0; i < block.Symlinks.length; i++) + if (utils.decode_filename(block.Symlinks[i]).indexOf("/dev/disk/by-id/dm-uuid-mpath-") === 0) + return true; + } + return false; +} + +function is_toplevel_drive(block) { + // We consider all Block objects that point to the same Drive + // objects to be multipath members for a single actual device. + // + // However, objects for partitions point to the same Drive object + // as the object for the partition table. We have to ignore them. + + if (client.blocks_part[block.path]) + return false; + + // Also, eMMCs have special partition-like sub-devices that point + // to the main Drive. We identify them by their name, just like + // UDisks2. + + if (utils.decode_filename(block.Device).match(/\/dev\/mmcblk[0-9]boot[0-9]$/)) + return false; + + return true; +} + function update_indices() { let path, block, mdraid, vgroup, pvol, lvol, pool, blockdev, fsys, part, i; @@ -422,7 +442,7 @@ } for (path in client.blocks) { block = client.blocks[path]; - if (!client.blocks_part[path] && client.drives_multipath_blocks[block.Drive] !== undefined) { + if (client.drives_multipath_blocks[block.Drive] !== undefined && is_toplevel_drive(block)) { if (is_multipath_master(block)) client.drives_block[block.Drive] = block; else @@ -1052,7 +1072,7 @@ if (entry) return cockpit.script('set -e; mkdir -p "$2"; mount "$1" "$2" -o "$3"', [utils.decode_filename(block.Device), target, utils.get_block_mntopts(entry[1])], - { superuser: true, err: "message" }); + { superuser: "require", err: "message" }); else return Promise.reject(cockpit.format("Internal error: No fstab entry for $0 and $1", utils.decode_filename(block.Device), @@ -1061,7 +1081,7 @@ client.unmount_at = (target, users) => { return client.stop_mount_users(users).then(() => cockpit.spawn(["umount", target], - { superuser: true, err: "message" })); + { superuser: "require", err: "message" })); }; /* NFS mounts @@ -1201,7 +1221,7 @@ function cmd(args) { return cockpit.spawn(["vdo"].concat(args), { - superuser: true, + superuser: "require", err: "message" }); } @@ -1380,7 +1400,7 @@ return client.stratis_manager.wait() .then(() => { client.stratis_store_passphrase = (desc, passphrase) => { - return python.spawn(stratis3_set_key_py, [desc], { superuser: true }) + return python.spawn(stratis3_set_key_py, [desc], { superuser: "require" }) .input(passphrase); }; @@ -1460,7 +1480,7 @@ return Promise.reject(new Error("stratisd too old, need at least version 2.4")); client.stratis_store_passphrase = (desc, passphrase) => { - return python.spawn(stratis2_set_key_py, [desc], { superuser: true }) + return python.spawn(stratis2_set_key_py, [desc], { superuser: "require" }) .input(passphrase); }; diff -Nru cockpit-314/pkg/storaged/crypto/encryption.jsx cockpit-316/pkg/storaged/crypto/encryption.jsx --- cockpit-314/pkg/storaged/crypto/encryption.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/crypto/encryption.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -60,7 +60,7 @@ cockpit.event_target(self); const dev = decode_filename(block.Device); - const channel = python.spawn(luksmeta_monitor_hack_py, [dev], { superuser: true }); + const channel = python.spawn(luksmeta_monitor_hack_py, [dev], { superuser: "require" }); let buf = ""; channel.stream(output => { @@ -114,7 +114,7 @@ let file = null; if (path) { - file = cockpit.file(path, { superuser: true }); + file = cockpit.file(path, { superuser: "require" }); file.watch((_, tag) => { self.mtime = parse_tag_mtime(tag); self.dispatchEvent("changed") }, { read: false }); } diff -Nru cockpit-314/pkg/storaged/crypto/keyslots.jsx cockpit-316/pkg/storaged/crypto/keyslots.jsx --- cockpit-314/pkg/storaged/crypto/keyslots.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/crypto/keyslots.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -56,13 +56,13 @@ function clevis_add(block, pin, cfg, passphrase) { const dev = decode_filename(block.Device); return cockpit.spawn(["clevis", "luks", "bind", "-f", "-k", "-", "-d", dev, pin, JSON.stringify(cfg)], - { superuser: true, err: "message" }).input(passphrase); + { superuser: "require", err: "message" }).input(passphrase); } function clevis_remove(block, key) { // clevis-luks-unbind needs a tty on stdin for some reason. return cockpit.spawn(["clevis", "luks", "unbind", "-d", decode_filename(block.Device), "-s", key.slot, "-f"], - { superuser: true, pty: true, err: "message" }); + { superuser: "require", pty: true, err: "message" }); } export function clevis_recover_passphrase(block, just_type) { @@ -72,7 +72,7 @@ args.push("--type"); args.push(dev); return cockpit.script(clevis_luks_passphrase_sh, args, - { superuser: true, err: "message" }) + { superuser: "require", err: "message" }) .then(output => output.trim()); } @@ -92,7 +92,7 @@ } await cockpit.spawn(["clevis", "luks", "unlock", "-d", dev, "-n", clear_dev], - { superuser: true }); + { superuser: "require" }); } export async function unlock_with_type(client, block, passphrase, passphrase_type, override_readonly) { @@ -133,18 +133,18 @@ function passphrase_add(block, new_passphrase, old_passphrase) { const dev = decode_filename(block.Device); return cockpit.spawn(["cryptsetup", "luksAddKey", dev], - { superuser: true, err: "message" }).input(old_passphrase + "\n" + new_passphrase); + { superuser: "require", err: "message" }).input(old_passphrase + "\n" + new_passphrase); } function passphrase_change(block, key, new_passphrase, old_passphrase) { const dev = decode_filename(block.Device); return cockpit.spawn(["cryptsetup", "luksChangeKey", dev, "--key-slot", key.slot.toString()], - { superuser: true, err: "message" }).input(old_passphrase + "\n" + new_passphrase + "\n"); + { superuser: "require", err: "message" }).input(old_passphrase + "\n" + new_passphrase + "\n"); } function slot_remove(block, slot, passphrase) { const dev = decode_filename(block.Device); - const opts = { superuser: true, err: "message" }; + const opts = { superuser: "require", err: "message" }; const cmd = ["cryptsetup", "luksKillSlot", dev, slot.toString()]; if (passphrase === false) { cmd.splice(2, 0, "-q"); @@ -161,7 +161,7 @@ function passphrase_test(block, passphrase) { const dev = decode_filename(block.Device); return (cockpit.spawn(["cryptsetup", "luksOpen", "--test-passphrase", dev], - { superuser: true, err: "message" }).input(passphrase) + { superuser: "require", err: "message" }).input(passphrase) .then(() => true) .catch(() => false)); } @@ -297,7 +297,7 @@ } function ensure_initrd_clevis_support(steps, progress, package_name) { - const task = cockpit.spawn(["lsinitrd", "-m"], { superuser: true, err: "message" }); + const task = cockpit.spawn(["lsinitrd", "-m"], { superuser: "require", err: "message" }); progress(_("Checking for NBDE support in the initrd"), () => task.close()); return task.then(data => { progress(null, null); @@ -310,7 +310,7 @@ // dracut doesn't react to SIGINT, so let's not enable our Cancel button progress(_("Regenerating initrd"), null); return cockpit.spawn(["dracut", "--force", "--regenerate-all"], - { superuser: true, err: "message" }); + { superuser: "require", err: "message" }); } }); }); @@ -321,7 +321,7 @@ function ensure_root_nbde_support(steps, progress) { progress(_("Adding rd.neednet=1 to kernel command line"), null); return cockpit.spawn(["grubby", "--update-kernel=ALL", "--args=rd.neednet=1"], - { superuser: true, err: "message" }) + { superuser: "require", err: "message" }) .then(() => ensure_initrd_clevis_support(steps, progress, "clevis-dracut")); } @@ -374,7 +374,7 @@ return ensure_package_installed(steps, progress, package_name); } else return cockpit.spawn(["systemctl", "enable", name], - { superuser: true, err: "message" }); + { superuser: "require", err: "message" }); }); } diff -Nru cockpit-314/pkg/storaged/dialog.jsx cockpit-316/pkg/storaged/dialog.jsx --- cockpit-314/pkg/storaged/dialog.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/dialog.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -240,7 +240,7 @@ import { ListingTable } from "cockpit-components-table.jsx"; import { FormHelper } from "cockpit-components-form-helper"; -import { fmt_size, block_name, format_size_and_text, format_delay, for_each_async } from "./utils.js"; +import { fmt_size, block_name, format_size_and_text, format_delay, for_each_async, get_byte_units } from "./utils.js"; import { fmt_to_fragments } from "utils.jsx"; import client from "./client.js"; @@ -923,6 +923,7 @@ if (options.fields.length == 1) return fieldset; + // eslint-disable-next-line react/jsx-no-useless-fragment return <>{ fieldset }; } }; @@ -977,7 +978,7 @@ class SizeSliderElement extends React.Component { constructor(props) { super(); - this.units = cockpit.get_byte_units(props.value || props.max); + this.units = get_byte_units(props.value || props.max); this.state = { unit: this.units.find(u => u.selected).factor }; } diff -Nru cockpit-314/pkg/storaged/legacy-vdo/legacy-vdo.jsx cockpit-316/pkg/storaged/legacy-vdo/legacy-vdo.jsx --- cockpit-314/pkg/storaged/legacy-vdo/legacy-vdo.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/legacy-vdo/legacy-vdo.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -184,7 +184,7 @@ } if (path) - this.poll_process = cockpit.spawn([client.legacy_vdo_overlay.python, "--", "-", path], { superuser: true }) + this.poll_process = cockpit.spawn([client.legacy_vdo_overlay.python, "--", "-", path], { superuser: "require" }) .input(inotify_py + vdo_monitor_py) .stream((data) => { buf += data; @@ -263,7 +263,7 @@ if (block && block.IdUsage == "filesystem") return cockpit.spawn(["fsadm", "resize", decode_filename(block.Device)], - { superuser: true, err: "message" }); + { superuser: "require", err: "message" }); }); } } diff -Nru cockpit-314/pkg/storaged/lvm2/block-logical-volume.jsx cockpit-316/pkg/storaged/lvm2/block-logical-volume.jsx --- cockpit-314/pkg/storaged/lvm2/block-logical-volume.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/lvm2/block-logical-volume.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -395,15 +395,13 @@ ); return ( - <> - - {stripes} - {status} - {lvol.SyncRatio != 1.0 - ?
{cockpit.format(_("$0 synchronized"), lvol.SyncRatio * 100 + "%")}
- : null} -
- ); + + {stripes} + {status} + {lvol.SyncRatio != 1.0 + ?
{cockpit.format(_("$0 synchronized"), lvol.SyncRatio * 100 + "%")}
+ : null} +
); } return null; diff -Nru cockpit-314/pkg/storaged/nfs/nfs-mounts.py cockpit-316/pkg/storaged/nfs/nfs-mounts.py --- cockpit-314/pkg/storaged/nfs/nfs-mounts.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/nfs/nfs-mounts.py 2024-04-25 09:45:58.000000000 +0000 @@ -141,7 +141,7 @@ fstab_watcher = Watcher("/etc/fstab") mtab_file = open("/proc/self/mounts", "r") while True: - (r, w, x) = select.select([fstab_watcher.inotify.fd], [], [mtab_file]) + r, _w, x = select.select([fstab_watcher.inotify.fd], [], [mtab_file]) if mtab_file in x: process_mtab() report() diff -Nru cockpit-314/pkg/storaged/overview/overview.jsx cockpit-316/pkg/storaged/overview/overview.jsx --- cockpit-314/pkg/storaged/overview/overview.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/overview/overview.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -113,7 +113,7 @@ is_enabled: () => client.features.stratis, package: client.get_config("stratis_package", false), enable: () => { - return cockpit.spawn(["systemctl", "start", "stratisd"], { superuser: true }) + return cockpit.spawn(["systemctl", "start", "stratisd"], { superuser: "require" }) .then(() => client.stratis_start()); }, diff -Nru cockpit-314/pkg/storaged/test-util.js cockpit-316/pkg/storaged/test-util.js --- cockpit-314/pkg/storaged/test-util.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/test-util.js 2024-04-25 09:45:58.000000000 +0000 @@ -18,7 +18,7 @@ */ import * as utils from "./utils.js"; -import QUnit from "qunit-tests"; +import QUnit, { f } from "qunit-tests"; QUnit.test("format_delay", function (assert) { const checks = [ @@ -81,6 +81,79 @@ utils.mock_hostnamed(null); }); +QUnit.test("get_byte_units", function (assert) { + const mb = 1000 * 1000; + const gb = mb * 1000; + const tb = gb * 1000; + + const mb_unit = { factor: mb, name: "MB" }; + const gb_unit = { factor: gb, name: "GB" }; + const tb_unit = { factor: tb, name: "TB" }; + + function selected(unit) { + return { factor: unit.factor, name: unit.name, selected: true }; + } + + const checks = [ + [0 * mb, [selected(mb_unit), gb_unit, tb_unit]], + [20 * mb, [selected(mb_unit), gb_unit, tb_unit]], + [200 * mb, [selected(mb_unit), gb_unit, tb_unit]], + [2000 * mb, [selected(mb_unit), gb_unit, tb_unit]], + [20000 * mb, [mb_unit, selected(gb_unit), tb_unit]], + [20 * gb, [mb_unit, selected(gb_unit), tb_unit]], + [200 * gb, [mb_unit, selected(gb_unit), tb_unit]], + [2000 * gb, [mb_unit, selected(gb_unit), tb_unit]], + [20000 * gb, [mb_unit, gb_unit, selected(tb_unit)]] + ]; + + assert.expect(checks.length); + for (let i = 0; i < checks.length; i++) { + assert.deepEqual(utils.get_byte_units(checks[i][0]), checks[i][1], + "get_byte_units(" + checks[i][0] + ") = " + JSON.stringify(checks[i][1])); + } +}); + +QUnit.test("format_fsys_usage", function (assert) { + const [k, M, G, T] = [1_000, 1_000_000, 1_000_000_000, 1_000_000_000_000]; + + const sizes = [5, 200, 5 * k, 200 * k, 5 * M, 200 * M, 5 * G, 200 * G, 5 * T, 200 * T]; + /* For each "total" size, format all of the "used" sizes less than or equal to it. + * The results table lists the part that should come after and before the slash, respectively. + * For example: ["5 kB", ["0.01", "0.20", "5"]] + * means 5, 200 and 5k out of 5k are displayed as "0.01 / 5kB", "0.20 / 5kB" and "5 / 5kB" + */ + const results = [ + ["5 B", ["5"]], + ["200 B", ["5", "200"]], + ["5 kB", ["0.01", "0.20", "5"]], + ["200 kB", ["0.01", "0.20", "5", "200"]], + ["5 MB", ["0.01", "0.01", "0.01", "0.20", "5"]], + ["200 MB", ["0.01", "0.01", "0.01", "0.20", "5", "200"]], + ["5 GB", ["0.01", "0.01", "0.01", "0.01", "0.01", "0.20", "5"]], + ["200 GB", ["0.01", "0.01", "0.01", "0.01", "0.01", "0.20", "5", "200"]], + ["5 TB", ["0.01", "0.01", "0.01", "0.01", "0.01", "0.01", "0.01", "0.20", "5"]], + ["200 TB", ["0.01", "0.01", "0.01", "0.01", "0.01", "0.01", "0.01", "0.20", "5", "200"]], + ]; + + for (let total_i = 0; total_i < results.length; total_i++) { + const [total_string, used_strings] = results[total_i]; + assert.strictEqual(used_strings.length, total_i + 1); + for (let used_i = 0; used_i < used_strings.length; used_i++) { + const used_string = used_strings[used_i]; + + const used = sizes[used_i]; + const total = sizes[total_i]; + const expected_string = used_string + " / " + total_string; + + assert.strictEqual( + utils.format_fsys_usage(used, total), + expected_string, + f`format_fsys_usage(${used}, ${total})` + ); + } + } +}); + /* Wait until the hostnamed dbus proxy is actually ready; otherwise the test * finishes and kills the bridge before it can respond to the dbus channel open * request for the hostnamed connection, which can cause hangs in diff -Nru cockpit-314/pkg/storaged/utils.js cockpit-316/pkg/storaged/utils.js --- cockpit-314/pkg/storaged/utils.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/storaged/utils.js 2024-04-25 09:45:58.000000000 +0000 @@ -170,8 +170,8 @@ } export function fmt_size_long(bytes) { - const with_decimal_unit = cockpit.format_bytes(bytes, 1000); - const with_binary_unit = cockpit.format_bytes(bytes, 1024); + const with_decimal_unit = cockpit.format_bytes(bytes); + const with_binary_unit = cockpit.format_bytes(bytes, { base2: true }); /* Translators: Used in "..." */ return with_decimal_unit + ", " + with_binary_unit + ", " + bytes + " " + C_("format-bytes", "bytes"); } @@ -188,10 +188,11 @@ export function format_fsys_usage(used, total) { let text = ""; - let parts = cockpit.format_bytes(total, undefined, { separate: true, precision: 2 }); + let parts = cockpit.format_bytes(total, { separate: true, precision: 2 }); text = " / " + parts.join(" "); const unit = parts[1]; + // FIXME: passing explicit unit is deprecated, redesign this parts = cockpit.format_bytes(used, unit, { separate: true, precision: 2 }); return parts[0] + text; } @@ -1104,7 +1105,7 @@ export function is_mounted_synch(block) { return (cockpit.spawn(["findmnt", "-n", "-o", "TARGET", "-S", decode_filename(block.Device)], - { superuser: true, err: "message" }) + { superuser: "require", err: "message" }) .then(data => data.trim()) .catch(() => false)); } @@ -1140,3 +1141,16 @@ return mounted_at; } + +export function get_byte_units(guide_value) { + const units = [ + { factor: 1000 ** 2, name: "MB" }, + { factor: 1000 ** 3, name: "GB" }, + { factor: 1000 ** 4, name: "TB" }, + ]; + // Find the biggest unit which gives two digits left of the decimal point (>= 10) + const unit = units.findLastIndex(unit => guide_value / unit.factor >= 10); + // Mark it selected. If we couldn't find one (-1), then use MB. + units[Math.max(0, unit)].selected = true; + return units; +} diff -Nru cockpit-314/pkg/systemd/abrtLog.jsx cockpit-316/pkg/systemd/abrtLog.jsx --- cockpit-314/pkg/systemd/abrtLog.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/abrtLog.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -287,7 +287,7 @@ - }}> + {_("Delete")} }}> {_("Extended information")} diff -Nru cockpit-314/pkg/systemd/hw-detect.js cockpit-316/pkg/systemd/hw-detect.js --- cockpit-314/pkg/systemd/hw-detect.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/hw-detect.js 2024-04-25 09:45:58.000000000 +0000 @@ -80,7 +80,7 @@ for (let slot = 0; slot < devices; slot++) { let memorySize = parseInt(props[`MEMORY_DEVICE_${slot}_SIZE`], 10); if (memorySize) { - memorySize = cockpit.format_bytes(memorySize, 1024); + memorySize = cockpit.format_bytes(memorySize, { base2: true }); } else { memorySize = _("Unknown"); } diff -Nru cockpit-314/pkg/systemd/logsHelpers.js cockpit-316/pkg/systemd/logsHelpers.js --- cockpit-314/pkg/systemd/logsHelpers.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/logsHelpers.js 2024-04-25 09:45:58.000000000 +0000 @@ -55,14 +55,14 @@ options.service.split(",").forEach(s => { if (!s.endsWith(".service")) s = s + ".service"; - match.push(...['_SYSTEMD_UNIT=' + s, "+", "COREDUMP_UNIT=" + s, "+", "UNIT=" + s]); + match.push('_SYSTEMD_UNIT=' + s, "+", "COREDUMP_UNIT=" + s, "+", "UNIT=" + s); }); full_grep += "service:" + options.service + " "; } else if (options["user-service"]) { options["user-service"].split(",").forEach(s => { if (!s.endsWith(".service")) s = s + ".service"; - match.push(...['_SYSTEMD_USER_UNIT=' + s, "+", "COREDUMP_USER_UNIT=" + s, "+", "USER_UNIT=" + s]); + match.push('_SYSTEMD_USER_UNIT=' + s, "+", "COREDUMP_USER_UNIT=" + s, "+", "USER_UNIT=" + s); }); full_grep += "user-service:" + options["user-service"] + " "; } diff -Nru cockpit-314/pkg/systemd/overview-cards/configurationCard.jsx cockpit-316/pkg/systemd/overview-cards/configurationCard.jsx --- cockpit-314/pkg/systemd/overview-cards/configurationCard.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/overview-cards/configurationCard.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -57,51 +57,49 @@ : null; return ( - <> - - {_("Configuration")} - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +
{_("Hostname")} - {hostname && {hostname}} - {hostname_button} -
{_("System time")}
{_("Domain")}
{_("Performance profile")}
{_("Secure shell keys")} - +
+
+
); }; @@ -194,9 +192,7 @@ onClose={Dialogs.close} id="system_information_ssh_keys" title={_("Machine SSH key fingerprints")} - footer={<> - - } + footer={} > {body} diff -Nru cockpit-314/pkg/systemd/overview-cards/insights.jsx cockpit-316/pkg/systemd/overview-cards/insights.jsx --- cockpit-314/pkg/systemd/overview-cards/insights.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/overview-cards/insights.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -113,7 +113,7 @@ this.pollster = null; } if (data) - this.pollster = cockpit.script(insights_poll_hack_sh, [], { superuser: true }); + this.pollster = cockpit.script(insights_poll_hack_sh, [], { superuser: "require" }); }); } diff -Nru cockpit-314/pkg/systemd/overview-cards/ssh-list-host-keys.sh cockpit-316/pkg/systemd/overview-cards/ssh-list-host-keys.sh --- cockpit-314/pkg/systemd/overview-cards/ssh-list-host-keys.sh 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/overview-cards/ssh-list-host-keys.sh 2024-04-25 09:45:58.000000000 +0000 @@ -38,7 +38,7 @@ done # Check with systemd -systemd=$(systemctl show --property=Listen sshd.socket || true) +systemd=$(systemctl show --property=Listen sshd.socket || systemctl show --property=Listen ssh.socket || true) echo "$systemd" | while IFS='=' read -r name value; do if [ "$name" = "ListenStream" ]; then parse_addr "$value" diff -Nru cockpit-314/pkg/systemd/overview-cards/tuned-dialog.jsx cockpit-316/pkg/systemd/overview-cards/tuned-dialog.jsx --- cockpit-314/pkg/systemd/overview-cards/tuned-dialog.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/overview-cards/tuned-dialog.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -287,7 +287,7 @@ variant='link' isInline icon={} iconPosition="right" - href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/managing_systems_using_the_rhel_8_web_console/index#optimizing-the-system-performance-using-the-web-console_system-management-using-the-RHEL-8-web-console"> + href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/managing_systems_using_the_rhel_9_web_console/index#performance-tuning-options-in-the-web-console_optimizing-the-system-performance-using-the-web-console"> {_("Learn more")} } diff -Nru cockpit-314/pkg/systemd/overview-cards/usageCard.jsx cockpit-316/pkg/systemd/overview-cards/usageCard.jsx --- cockpit-314/pkg/systemd/overview-cards/usageCard.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/overview-cards/usageCard.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -108,7 +108,8 @@ let used_text; if (this.state.memTotal) { - const [total_fmt, unit] = cockpit.format_bytes(this.state.memTotal, 1024, { separate: true, precision: 2 }); + const [total_fmt, unit] = cockpit.format_bytes(this.state.memTotal, { base2: true, separate: true, precision: 2 }); + // FIXME: passing explicit unit is deprecated, redesign this const used_fmt = cockpit.format_bytes(this.samples[3], unit, { separate: true, precision: 2 })[0]; used_text = cockpit.format("$0 / $1 $2", used_fmt, total_fmt, unit); } else { diff -Nru cockpit-314/pkg/systemd/overview.jsx cockpit-316/pkg/systemd/overview.jsx --- cockpit-314/pkg/systemd/overview.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/overview.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -26,7 +26,8 @@ import { createRoot } from "react-dom/client"; import { Page, PageSection, PageSectionVariants } from "@patternfly/react-core/dist/esm/components/Page/index.js"; import { Gallery } from "@patternfly/react-core/dist/esm/layouts/Gallery/index.js"; -import { Dropdown, DropdownItem, DropdownPosition, DropdownToggle, DropdownToggleAction } from '@patternfly/react-core/dist/esm/deprecated/components/Dropdown/index.js'; +import { Dropdown, DropdownItem, DropdownList } from '@patternfly/react-core/dist/esm/components/Dropdown/index.js'; +import { MenuToggle, MenuToggleAction } from "@patternfly/react-core/dist/esm/components/MenuToggle"; import { superuser } from "superuser"; @@ -119,25 +120,34 @@ if (this.state.privileged) headerActions = ( this.setState({ actionIsOpen: true })} - toggle={ - Dialogs.show()}> - {_("Reboot")} - - ]} - toggleVariant="secondary" - splitButtonVariant="action" - onToggle={(_event, isOpen) => this.setState({ actionIsOpen: isOpen })} + toggle={(toggleRef) => ( + Dialogs.show()} + > + {_("Reboot")} + + ], + }} + onClick={() => this.setState({ actionIsOpen: !actionIsOpen })} id="shutdown-group" /> - } + )} isOpen={actionIsOpen} - position={DropdownPosition.right} - dropdownItems={dropdownItems} - />); + popperProps={{ position: "right" }} + > + + {dropdownItems} + + + ); const show_superuser = ( cockpit.transport.host && cockpit.transport.host != "localhost" && diff -Nru cockpit-314/pkg/systemd/reporting.jsx cockpit-316/pkg/systemd/reporting.jsx --- cockpit-314/pkg/systemd/reporting.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/reporting.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -122,7 +122,7 @@ const process = cockpit.spawn(["reporter-ureport", "-d", problem.ID], { err: "out", - superuser: "true", + superuser: "require", }) .stream((data) => setMessage(data)) .then(() => setProblemState(ProblemState.REPORTED)) diff -Nru cockpit-314/pkg/systemd/services.jsx cockpit-316/pkg/systemd/services.jsx --- cockpit-314/pkg/systemd/services.jsx 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/systemd/services.jsx 2024-04-25 09:45:58.000000000 +0000 @@ -811,7 +811,7 @@ filtersRef.current = onClearAllFilters; }, [filtersRef, onClearAllFilters]); - const toolbarItems = <> + const toolbarItems = {_("Toggle filters")}} breakpoint="sm" variant="filter-group" alignment={{ default: 'alignLeft' }}> @@ -854,8 +854,7 @@ value={option.label} />)} - - ; + ; return ( } - {repeat == "hourly" && <> + {repeat == "hourly" && { @@ -303,7 +303,7 @@ setRepeatPatterns(arr); }} validated={submitted && validationFailedMinute ? "error" : "default"} /> - } + } {repeat == "daily" && timePicker(idx)} {repeat == "weekly" && <> { return cockpit.spawn(["passwd", "-e", account.name], - { superuser: true, err: "message" }); + { superuser: "require", err: "message" }); } } ] diff -Nru cockpit-314/pkg/users/shell-dialog.js cockpit-316/pkg/users/shell-dialog.js --- cockpit-314/pkg/users/shell-dialog.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/users/shell-dialog.js 2024-04-25 09:45:58.000000000 +0000 @@ -80,7 +80,7 @@ clicked: () => { if (validate()) { return cockpit.spawn(["usermod", "--shell", state.shell, account.name], - { superuser: true, err: "message" }); + { superuser: "require", err: "message" }); } else { update(); return Promise.reject(); diff -Nru cockpit-314/pkg/users/users.js cockpit-316/pkg/users/users.js --- cockpit-314/pkg/users/users.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/pkg/users/users.js 2024-04-25 09:45:58.000000000 +0000 @@ -82,7 +82,7 @@ const handleShadow = cockpit.file("/etc/shadow", { superuser: "try" }); handleShadow.watch(() => debouncedGetLogins(), { read: false }); - const handleLogindef = cockpit.file("/etc/login.defs", { superuser: true }); + const handleLogindef = cockpit.file("/etc/login.defs"); handleLogindef.watch((logindef) => { if (logindef === null) return; @@ -208,9 +208,16 @@ const date_fields = splitLine.slice(-5); // this is impossible to parse with Date() (e.g. Firefox does not work with all time zones), so call `date` to parse it - return cockpit.spawn(["date", "+%s", "-d", date_fields.join(' ')], { environ: ["LC_ALL=C"], err: "out" }) - .then(out => ({ name, loggedIn, lastLogin: parseInt(out) * 1000, isLocked })) - .catch(e => console.warn(`Failed to parse date from lastlog line '${line}': ${e.toString()}`)); + let lastLogin = null; + try { + const out = await cockpit.spawn(["date", "+%s", "-d", date_fields.join(' ')], + { environ: ["LC_ALL=C"], err: "out" }); + lastLogin = parseInt(out) * 1000; + } catch (e) { + console.warn(`Failed to parse date from lastlog line '${line}': ${e.toString()}`); + } + + return { name, loggedIn, lastLogin, isLocked }; }); return Promise.all(promises); diff -Nru cockpit-314/po/cs.po cockpit-316/po/cs.po --- cockpit-314/po/cs.po 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/po/cs.po 2024-04-25 09:45:58.000000000 +0000 @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-26 02:47+0000\n" +"POT-Creation-Date: 2024-04-11 02:47+0000\n" "PO-Revision-Date: 2024-03-01 22:35+0000\n" "Last-Translator: Pavel Borecki \n" "Language-Team: Czech \n" "Language-Team: German \n" "Language-Team: Spanish \n" +"POT-Creation-Date: 2024-04-11 02:47+0000\n" +"PO-Revision-Date: 2024-04-02 19:35+0000\n" +"Last-Translator: Weblate Translation Memory \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -18,7 +19,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1\n" -"X-Generator: Weblate 5.3.1\n" +"X-Generator: Weblate 5.4\n" #: pkg/users/accounts-list.js:231 msgid "# of users" @@ -88,8 +89,8 @@ msgstr[0] "$0 päivä" msgstr[1] "$0 päivää" -#: pkg/playground/translate.js:26 pkg/playground/translate.js:29 -#: pkg/storaged/mdraid/mdraid.jsx:257 +#: pkg/storaged/mdraid/mdraid.jsx:257 pkg/playground/translate.js:26 +#: pkg/playground/translate.js:29 msgid "$0 disk is missing" msgid_plural "$0 disks are missing" msgstr[0] "$0 levyä ei löydy" @@ -106,7 +107,7 @@ msgid "$0 disks" msgstr "$0 levyt" -#: pkg/shell/topnav.jsx:152 +#: pkg/shell/topnav.jsx:154 msgid "$0 documentation" msgstr "$0 -dokumentaatio" @@ -114,11 +115,11 @@ msgid "$0 error" msgstr "$0 virhe" -#: pkg/lib/cockpit.js:2698 +#: pkg/lib/cockpit.js:2694 msgid "$0 exited with code $1" msgstr "$0 poistui koodilla $1" -#: pkg/lib/cockpit.js:2700 +#: pkg/lib/cockpit.js:2696 msgid "$0 failed" msgstr "$0 epäonnistui" @@ -155,16 +156,17 @@ msgid "$0 is an existing file" msgstr "$0 on olemassa oleva tiedosto" -#: pkg/storaged/stratis/filesystem.jsx:125 pkg/storaged/stratis/pool.jsx:137 -#: pkg/storaged/lvm2/volume-group.jsx:85 pkg/storaged/lvm2/volume-group.jsx:336 +#: pkg/storaged/partitions/partition.jsx:47 +#: pkg/storaged/partitions/format-disk-dialog.jsx:39 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:50 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:84 +#: pkg/storaged/block/format-dialog.jsx:212 pkg/storaged/block/resize.jsx:425 +#: pkg/storaged/block/resize.jsx:571 #: pkg/storaged/lvm2/block-logical-volume.jsx:68 #: pkg/storaged/lvm2/block-logical-volume.jsx:151 -#: pkg/storaged/block/format-dialog.jsx:212 pkg/storaged/block/resize.jsx:425 -#: pkg/storaged/block/resize.jsx:571 pkg/storaged/legacy-vdo/legacy-vdo.jsx:50 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:84 -#: pkg/storaged/partitions/format-disk-dialog.jsx:39 -#: pkg/storaged/partitions/partition.jsx:47 pkg/storaged/mdraid/mdraid.jsx:63 -#: pkg/storaged/mdraid/mdraid.jsx:116 +#: pkg/storaged/lvm2/volume-group.jsx:85 pkg/storaged/lvm2/volume-group.jsx:336 +#: pkg/storaged/stratis/pool.jsx:137 pkg/storaged/stratis/filesystem.jsx:125 +#: pkg/storaged/mdraid/mdraid.jsx:63 pkg/storaged/mdraid/mdraid.jsx:116 msgid "$0 is in use" msgstr "$0 on käytössä" @@ -173,11 +175,11 @@ msgid "$0 is not available from any repository." msgstr "$0 ei ole saatavilla mistään ohjelmistovarastosta." -#: pkg/static/login.js:759 pkg/shell/hosts_dialog.jsx:464 +#: pkg/shell/hosts_dialog.jsx:464 pkg/static/login.js:759 msgid "$0 key changed" msgstr "$0 avain muuttunut" -#: pkg/lib/cockpit.js:2696 +#: pkg/lib/cockpit.js:2692 msgid "$0 killed with signal $1" msgstr "$0 tapettu signaalilla $1" @@ -215,7 +217,7 @@ msgstr[0] "$0 paketti" msgstr[1] "$0 pakettia" -#: pkg/packagekit/updates.jsx:703 pkg/packagekit/updates.jsx:818 +#: pkg/packagekit/updates.jsx:702 pkg/packagekit/updates.jsx:817 msgid "$0 package needs a system reboot" msgid_plural "$0 packages need a system reboot" msgstr[0] "$0 paketti vaatii järjestelmän uudelleenkäynnistyksen" @@ -233,7 +235,7 @@ msgid "$0 partitions" msgstr "osio" -#: pkg/packagekit/updates.jsx:790 +#: pkg/packagekit/updates.jsx:789 msgid "$0 security fix available" msgid_plural "$0 security fixes available" msgstr[0] "$0 turvallisuuspäivitys saatavilla" @@ -245,13 +247,13 @@ msgstr[0] "$0 palvelu on epäonnistunut" msgstr[1] "$0 palvelua on epäonnistunut" -#: pkg/packagekit/updates.jsx:720 pkg/packagekit/updates.jsx:830 +#: pkg/packagekit/updates.jsx:719 pkg/packagekit/updates.jsx:829 msgid "$0 service needs to be restarted" msgid_plural "$0 services need to be restarted" msgstr[0] "$0 palvelu on käynnistettävä uudelleen" msgstr[1] "$0 palvelua on käynnistettävä uudelleen" -#: pkg/storaged/crypto/keyslots.jsx:778 +#: pkg/storaged/crypto/keyslots.jsx:812 msgid "$0 slot remains" msgid_plural "$0 slots remain" msgstr[0] "$0 paikka on jäljellä" @@ -263,18 +265,16 @@ msgstr[0] "$0 piikki" msgstr[1] "$0 piikkiä" -#: pkg/storaged/lvm2/block-logical-volume.jsx:403 -#, fuzzy -#| msgid "Not synchronized" +#: pkg/storaged/lvm2/block-logical-volume.jsx:402 msgid "$0 synchronized" -msgstr "Ei synkronisoitu" +msgstr "$0 synkronisoitu" #: pkg/metrics/metrics.jsx:722 pkg/metrics/metrics.jsx:884 #: pkg/metrics/metrics.jsx:950 msgid "$0 total" msgstr "$0 yhteensä" -#: pkg/packagekit/updates.jsx:798 +#: pkg/packagekit/updates.jsx:797 msgid "$0 update available" msgid_plural "$0 updates available" msgstr[0] "$0 päivitys saatavilla" @@ -308,11 +308,11 @@ msgid "$0: crash at $1" msgstr "$0: kaatui hetkellä $1" -#: pkg/storaged/utils.js:274 +#: pkg/storaged/utils.js:275 msgid "$name (from $host)" msgstr "$name (kohteesta $host)" -#: pkg/storaged/dialog.jsx:1222 +#: pkg/storaged/dialog.jsx:1224 #, fuzzy #| msgid "Creating partition $target" msgid "(Not part of target)" @@ -335,7 +335,7 @@ msgid "(recommended)" msgstr "(suositeltu)" -#: pkg/packagekit/updates.jsx:800 +#: pkg/packagekit/updates.jsx:799 msgid ", including $1 security fix" msgid_plural ", including $1 security fixes" msgstr[0] ", mukaan lukien $1 turvallisuuspäivitys" @@ -505,8 +505,8 @@ msgid "5 min" msgstr "5 min" -#: pkg/lib/cockpit-components-plot.jsx:267 #: pkg/lib/cockpit-components-shutdown.jsx:178 +#: pkg/lib/cockpit-components-plot.jsx:267 msgid "5 minutes" msgstr "5 minuuttia" @@ -635,11 +635,11 @@ msgid "ARP ping" msgstr "ARP:n ping" -#: pkg/shell/topnav.jsx:174 +#: pkg/shell/topnav.jsx:176 msgid "About Web Console" msgstr "Tietoja Verkkokonsolista" -#: pkg/systemd/hw-detect.js:114 pkg/lib/machine-info.js:247 +#: pkg/lib/machine-info.js:247 pkg/systemd/hw-detect.js:114 msgid "Absent" msgstr "Poissa" @@ -661,12 +661,12 @@ msgid "Account not available or cannot be edited." msgstr "Tili ei ole käytettävissä tai sitä ei voi muokata." -#: pkg/users/accounts-list.js:232 pkg/users/accounts-list.js:446 -#: pkg/users/account-details.js:236 pkg/users/manifest.json:0 +#: pkg/users/account-details.js:236 pkg/users/accounts-list.js:232 +#: pkg/users/accounts-list.js:446 pkg/users/manifest.json:0 msgid "Accounts" msgstr "Käyttäjätilit" -#: pkg/storaged/dialog.jsx:1244 +#: pkg/storaged/dialog.jsx:1246 msgid "Action" msgstr "Toiminto" @@ -694,7 +694,7 @@ msgid "Active backup" msgstr "Aktiivinen varmennus" -#: pkg/shell/topnav.jsx:212 pkg/shell/active-pages-modal.jsx:97 +#: pkg/shell/topnav.jsx:223 pkg/shell/active-pages-modal.jsx:97 #: pkg/shell/active-pages-modal.jsx:105 msgid "Active pages" msgstr "Aktiiviset sivut" @@ -716,17 +716,18 @@ msgid "Adaptive transmit load balancing" msgstr "Mukautuva lähtevän kuorman tasaus" -#: pkg/systemd/timer-dialog.jsx:367 pkg/networkmanager/dialogs-common.jsx:160 -#: pkg/storaged/stratis/pool.jsx:217 pkg/storaged/lvm2/volume-group.jsx:209 -#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/iscsi/create-dialog.jsx:120 +#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/crypto/keyslots.jsx:492 +#: pkg/storaged/crypto/keyslots.jsx:815 +#: pkg/storaged/iscsi/create-dialog.jsx:120 #: pkg/storaged/iscsi/create-dialog.jsx:144 -#: pkg/storaged/crypto/keyslots.jsx:458 pkg/storaged/crypto/keyslots.jsx:781 -#: pkg/storaged/mdraid/mdraid.jsx:167 pkg/shell/hosts_dialog.jsx:252 +#: pkg/storaged/lvm2/volume-group.jsx:209 pkg/storaged/stratis/pool.jsx:217 +#: pkg/storaged/mdraid/mdraid.jsx:167 pkg/networkmanager/dialogs-common.jsx:160 +#: pkg/systemd/timer-dialog.jsx:367 pkg/shell/hosts_dialog.jsx:252 #: pkg/shell/credentials.jsx:184 pkg/users/authorized-keys-panel.js:68 msgid "Add" msgstr "Lisää" -#: pkg/networkmanager/network-interface-members.jsx:166 +#: pkg/networkmanager/network-interface-members.jsx:167 #: pkg/lib/cockpit-components-firewalld-request.jsx:146 msgid "Add $0" msgstr "Lisää $0" @@ -738,7 +739,7 @@ msgid "Add DNS server" msgstr "Tang-avainpalvelin" -#: pkg/storaged/crypto/keyslots.jsx:385 +#: pkg/storaged/crypto/keyslots.jsx:419 msgid "Add Network Bound Disk Encryption" msgstr "Lisää verkkoon sidottu levyn salaus" @@ -797,12 +798,12 @@ msgid "Add disks" msgstr "Lisää levyjä" -#: pkg/storaged/iscsi/create-dialog.jsx:29 #: pkg/storaged/overview/overview.jsx:153 +#: pkg/storaged/iscsi/create-dialog.jsx:29 msgid "Add iSCSI portal" msgstr "Lisää iSCSI-portaali" -#: pkg/storaged/crypto/keyslots.jsx:422 pkg/shell/credentials.jsx:90 +#: pkg/storaged/crypto/keyslots.jsx:456 pkg/shell/credentials.jsx:90 #: pkg/users/authorized-keys-panel.js:112 msgid "Add key" msgstr "Lisää avain" @@ -813,7 +814,7 @@ msgid "Add keyserver" msgstr "Tang-avainpalvelin" -#: pkg/networkmanager/network-interface-members.jsx:186 +#: pkg/networkmanager/network-interface-members.jsx:187 msgid "Add member" msgstr "Lisää jäsen" @@ -836,10 +837,8 @@ msgstr "Lisää jäsen" #: pkg/storaged/lvm2/volume-group.jsx:243 -#, fuzzy -#| msgid "LVM2 physical volume" msgid "Add physical volume" -msgstr "LVM2 fyysinen taltio" +msgstr "Lisää fyysinen taltio" #: pkg/networkmanager/firewall.jsx:594 msgid "Add ports" @@ -879,7 +878,7 @@ msgid "Add services to zone $0" msgstr "Lisää palveluja vyöhykkeeseen $0" -#: pkg/networkmanager/network-main.jsx:143 pkg/networkmanager/team.jsx:154 +#: pkg/networkmanager/team.jsx:154 pkg/networkmanager/network-main.jsx:143 msgid "Add team" msgstr "Lisää joukkue" @@ -887,15 +886,15 @@ msgid "Add zone" msgstr "Lisää vyöhyke" -#: pkg/storaged/crypto/keyslots.jsx:327 +#: pkg/storaged/crypto/keyslots.jsx:361 msgid "Adding \"$0\" to encryption options" msgstr "Lisätään \"$0\" salauksen valintoihin" -#: pkg/storaged/crypto/keyslots.jsx:316 +#: pkg/storaged/crypto/keyslots.jsx:350 msgid "Adding \"$0\" to filesystem options" msgstr "Lisätään \"$0\" tiedostojärjestelmän asetuksiin" -#: pkg/networkmanager/network-interface-members.jsx:165 +#: pkg/networkmanager/network-interface-members.jsx:166 msgid "" "Adding $0 will break the connection to the server, and will make the " "administration UI unavailable." @@ -923,7 +922,7 @@ "Mukautettujen porttien lisääminen lataa firewalld:n uudelleen. " "Uudelleenlataus johtaa kaikkien vain-ajonaikaisen kokoonpanon menetykseen!" -#: pkg/storaged/crypto/keyslots.jsx:408 +#: pkg/storaged/crypto/keyslots.jsx:442 msgid "Adding key" msgstr "Avainta lisätään" @@ -931,7 +930,7 @@ msgid "Adding physical volume to $target" msgstr "Lisätään fyysinen taltio $target:een" -#: pkg/storaged/crypto/keyslots.jsx:288 +#: pkg/storaged/crypto/keyslots.jsx:322 msgid "Adding rd.neednet=1 to kernel command line" msgstr "Lisätään rd.neednet=1 kernelin komentoriville" @@ -959,9 +958,9 @@ msgid "Additional ports" msgstr "Ylimääräiset portit" +#: pkg/storaged/iscsi/create-dialog.jsx:111 pkg/storaged/iscsi/session.jsx:92 #: pkg/networkmanager/ip-settings.jsx:198 -#: pkg/networkmanager/ip-settings.jsx:358 pkg/storaged/iscsi/session.jsx:92 -#: pkg/storaged/iscsi/create-dialog.jsx:111 +#: pkg/networkmanager/ip-settings.jsx:358 msgid "Address" msgstr "Osoite" @@ -995,12 +994,12 @@ msgid "Administrative access" msgstr "Ylläpitäjän käyttöoikeudet" -#: pkg/sosreport/sosreport.jsx:415 +#: pkg/sosreport/sosreport.jsx:424 msgid "Administrative access is required to create and access reports." msgstr "" "Raporttien luomiseen ja käyttämiseen tarvitaan ylläpitäjän käyttöoikeudet." -#: pkg/sosreport/sosreport.jsx:414 +#: pkg/sosreport/sosreport.jsx:423 msgid "Administrative access required" msgstr "Tarvitaan ylläpitäjän käyttöoikeudet" @@ -1103,8 +1102,8 @@ msgid "Application information is missing" msgstr "" -#: pkg/apps/index.html:23 pkg/apps/application-list.jsx:184 -#: pkg/apps/application.jsx:146 pkg/apps/manifest.json:0 +#: pkg/apps/index.html:23 pkg/apps/application.jsx:146 +#: pkg/apps/application-list.jsx:184 pkg/apps/manifest.json:0 msgid "Applications" msgstr "Sovellukset" @@ -1140,7 +1139,7 @@ msgid "Applying updates failed" msgstr "Päivitysten asentaminen epäonnistui" -#: pkg/storaged/filesystem/mounting-dialog.jsx:74 +#: pkg/storaged/filesystem/mounting-dialog.jsx:77 msgid "Appropriate for critical mounts, such as /var" msgstr "Soveltuu kriittisiin liitoksiin, kuten /var" @@ -1149,9 +1148,6 @@ msgstr "Sovellukset" #: pkg/storaged/drive/drive.jsx:102 -#, fuzzy -#| msgctxt "storage" -#| msgid "Assessment" msgid "Assessment" msgstr "Arviointi" @@ -1159,7 +1155,7 @@ msgid "Asset tag" msgstr "Sisältötunniste" -#: pkg/storaged/filesystem/mounting-dialog.jsx:118 +#: pkg/storaged/filesystem/mounting-dialog.jsx:121 msgid "At boot" msgstr "Käynnistyksen yhteydessä" @@ -1173,8 +1169,9 @@ msgid "At least one block device is needed." msgstr "Vähintään yksi lohkolaite tarvitaan." -#: pkg/storaged/stratis/pool.jsx:211 pkg/storaged/lvm2/create-dialog.jsx:57 -#: pkg/storaged/lvm2/volume-group.jsx:203 pkg/storaged/mdraid/mdraid.jsx:161 +#: pkg/storaged/lvm2/create-dialog.jsx:57 +#: pkg/storaged/lvm2/volume-group.jsx:203 pkg/storaged/stratis/pool.jsx:211 +#: pkg/storaged/mdraid/mdraid.jsx:161 msgid "At least one disk is needed." msgstr "Vähintään yksi levy tarvitaan." @@ -1194,7 +1191,7 @@ msgid "At specific time" msgstr "Tiettynä aikana" -#: pkg/sosreport/sosreport.jsx:492 +#: pkg/sosreport/sosreport.jsx:501 msgid "Attributes" msgstr "Attribuutit" @@ -1243,10 +1240,10 @@ msgid "Authorized public SSH keys" msgstr "Valtuutetut julkiset SSH-avaimet" -#: pkg/networkmanager/network-interface.jsx:378 #: pkg/networkmanager/ip-settings.jsx:40 pkg/networkmanager/ip-settings.jsx:244 #: pkg/networkmanager/ip-settings.jsx:292 #: pkg/networkmanager/ip-settings.jsx:340 pkg/networkmanager/mtu.jsx:79 +#: pkg/networkmanager/network-interface.jsx:378 msgid "Automatic" msgstr "Automaattinen" @@ -1286,7 +1283,7 @@ msgid "Available targets on $0" msgstr "Käytettävät kohteet osoitteessa $0" -#: pkg/packagekit/updates.jsx:445 pkg/packagekit/updates.jsx:927 +#: pkg/packagekit/updates.jsx:444 pkg/packagekit/updates.jsx:926 msgid "Available updates" msgstr "Saatavilla olevat päivitykset" @@ -1353,9 +1350,9 @@ msgid "Block device for filesystems" msgstr "Lohkolaite tiedostojärjestelmille" +#: pkg/storaged/stratis/pool.jsx:206 pkg/storaged/stratis/pool.jsx:563 +#: pkg/storaged/stratis/create-dialog.jsx:55 #: pkg/storaged/stratis/stopped-pool.jsx:138 -#: pkg/storaged/stratis/create-dialog.jsx:55 pkg/storaged/stratis/pool.jsx:206 -#: pkg/storaged/stratis/pool.jsx:563 msgid "Block devices" msgstr "Lohkolaitteet" @@ -1373,14 +1370,14 @@ msgid "Boot" msgstr "Käynnistys" -#: pkg/storaged/filesystem/mounting-dialog.jsx:77 +#: pkg/storaged/filesystem/mounting-dialog.jsx:80 msgid "Boot fails if filesystem does not mount, preventing remote access" msgstr "" "Käynnistys epäonnistuu, jos tiedostojärjestelmä ei liity, mikä estää " "etäkäytön" -#: pkg/storaged/filesystem/mounting-dialog.jsx:88 -#: pkg/storaged/filesystem/mounting-dialog.jsx:99 +#: pkg/storaged/filesystem/mounting-dialog.jsx:91 +#: pkg/storaged/filesystem/mounting-dialog.jsx:102 msgid "Boot still succeeds when filesystem does not mount" msgstr "Käynnistys onnistuu vaikka tiedostojärjestelmä ei liity" @@ -1415,11 +1412,11 @@ msgid "Btrfs volume is mounted" msgstr "" -#: pkg/packagekit/updates.jsx:1437 +#: pkg/packagekit/updates.jsx:1436 msgid "Bug fix updates available" msgstr "Virheenkorjauspäivityksiä saatavilla" -#: pkg/packagekit/updates.jsx:387 +#: pkg/packagekit/updates.jsx:386 msgid "Bugs" msgstr "Viat" @@ -1443,7 +1440,7 @@ msgid "Bypass browser check" msgstr " Ohita selaimen tarkistus " -#: pkg/systemd/overview-cards/usageCard.jsx:132 pkg/systemd/hwinfo.jsx:114 +#: pkg/systemd/hwinfo.jsx:114 pkg/systemd/overview-cards/usageCard.jsx:132 #: pkg/metrics/metrics.jsx:109 pkg/metrics/metrics.jsx:820 #: pkg/metrics/metrics.jsx:1572 pkg/metrics/metrics.jsx:1949 msgid "CPU" @@ -1465,7 +1462,7 @@ msgid "CPU usage/load" msgstr "Suorittimen käyttö/kuorma" -#: pkg/packagekit/updates.jsx:369 +#: pkg/packagekit/updates.jsx:368 msgid "CVE" msgstr "CVE" @@ -1481,28 +1478,29 @@ msgid "Can not find any logs using the current combination of filters." msgstr "Lokeja ei löydy käyttämällä nykyistä suodatinten yhdistelmää." -#: pkg/static/login.html:141 pkg/playground/translate.html:39 -#: pkg/sosreport/sosreport.jsx:281 pkg/sosreport/sosreport.jsx:366 -#: pkg/systemd/timer-dialog.jsx:151 pkg/systemd/reporting.jsx:383 +#: pkg/playground/translate.html:39 pkg/static/login.html:141 +#: pkg/storaged/jobs-panel.jsx:140 pkg/apps/utils.jsx:69 +#: pkg/sosreport/sosreport.jsx:290 pkg/sosreport/sosreport.jsx:375 +#: pkg/networkmanager/dialogs-common.jsx:163 +#: pkg/networkmanager/firewall.jsx:613 pkg/networkmanager/firewall.jsx:814 +#: pkg/networkmanager/firewall.jsx:913 +#: pkg/lib/cockpit-components-dialog.jsx:131 +#: pkg/lib/cockpit-components-shutdown.jsx:193 pkg/kdump/kdump-view.jsx:235 +#: pkg/systemd/timer-dialog.jsx:151 pkg/systemd/hwinfo.jsx:231 #: pkg/systemd/overview-cards/motdCard.jsx:65 #: pkg/systemd/overview-cards/tuned-dialog.jsx:314 +#: pkg/systemd/overview-cards/realmd.jsx:434 +#: pkg/systemd/overview-cards/configurationCard.jsx:280 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:194 -#: pkg/systemd/overview-cards/configurationCard.jsx:284 -#: pkg/systemd/overview-cards/realmd.jsx:434 pkg/systemd/hwinfo.jsx:231 #: pkg/systemd/service-details.jsx:86 pkg/systemd/service-details.jsx:715 -#: pkg/metrics/metrics.jsx:1481 pkg/networkmanager/dialogs-common.jsx:163 -#: pkg/networkmanager/firewall.jsx:613 pkg/networkmanager/firewall.jsx:814 -#: pkg/networkmanager/firewall.jsx:913 pkg/kdump/kdump-view.jsx:235 -#: pkg/storaged/jobs-panel.jsx:140 pkg/shell/hosts_dialog.jsx:285 +#: pkg/systemd/reporting.jsx:383 pkg/shell/hosts_dialog.jsx:285 #: pkg/shell/hosts_dialog.jsx:382 pkg/shell/hosts_dialog.jsx:514 #: pkg/shell/hosts_dialog.jsx:891 pkg/shell/shell-modals.jsx:118 -#: pkg/shell/credentials.jsx:313 pkg/shell/superuser.jsx:182 -#: pkg/shell/superuser.jsx:219 pkg/shell/superuser.jsx:264 -#: pkg/shell/active-pages-modal.jsx:100 pkg/packagekit/kpatch.jsx:315 -#: pkg/packagekit/updates.jsx:542 pkg/packagekit/updates.jsx:580 -#: pkg/packagekit/autoupdates.jsx:274 pkg/apps/utils.jsx:69 -#: pkg/lib/cockpit-components-shutdown.jsx:193 -#: pkg/lib/cockpit-components-dialog.jsx:131 +#: pkg/shell/superuser.jsx:182 pkg/shell/superuser.jsx:219 +#: pkg/shell/superuser.jsx:264 pkg/shell/credentials.jsx:313 +#: pkg/shell/active-pages-modal.jsx:100 pkg/metrics/metrics.jsx:1481 +#: pkg/packagekit/updates.jsx:541 pkg/packagekit/updates.jsx:579 +#: pkg/packagekit/kpatch.jsx:315 pkg/packagekit/autoupdates.jsx:274 msgid "Cancel" msgstr "Peru" @@ -1522,7 +1520,7 @@ msgid "Cannot connect to an unknown host" msgstr "Ei voida yhdistää tuntemattomaan koneeseen" -#: pkg/lib/cockpit.js:3860 +#: pkg/lib/cockpit.js:3856 msgid "Cannot forward login credentials" msgstr "Kirjautumistietoja ei voi välittää eteenpäin" @@ -1537,8 +1535,8 @@ msgid "Cannot schedule event in the past" msgstr "Tapahtumaa ei voi aikatauluttaa menneisyyteen" -#: pkg/storaged/lvm2/volume-group.jsx:387 pkg/storaged/drive/drive.jsx:125 -#: pkg/storaged/mdraid/mdraid.jsx:293 pkg/storaged/btrfs/volume.jsx:128 +#: pkg/storaged/btrfs/volume.jsx:128 pkg/storaged/drive/drive.jsx:125 +#: pkg/storaged/lvm2/volume-group.jsx:387 pkg/storaged/mdraid/mdraid.jsx:293 msgid "Capacity" msgstr "Koko" @@ -1546,10 +1544,11 @@ msgid "Carrier" msgstr "Kuljetin" -#: pkg/systemd/overview-cards/configurationCard.jsx:283 -#: pkg/storaged/stratis/pool.jsx:531 pkg/storaged/iscsi/create-dialog.jsx:171 +#: pkg/storaged/iscsi/create-dialog.jsx:171 pkg/storaged/stratis/pool.jsx:531 +#: pkg/lib/serverTime.js:729 +#: pkg/systemd/overview-cards/configurationCard.jsx:279 #: pkg/users/expiration-dialogs.js:115 pkg/users/expiration-dialogs.js:217 -#: pkg/users/shell-dialog.js:78 pkg/lib/serverTime.js:729 +#: pkg/users/shell-dialog.js:78 msgid "Change" msgstr "Vaihda" @@ -1557,13 +1556,11 @@ msgid "Change cryptographic policy" msgstr "Muuta kryptografista käytäntöä" -#: pkg/systemd/overview-cards/configurationCard.jsx:281 +#: pkg/systemd/overview-cards/configurationCard.jsx:277 msgid "Change host name" msgstr "Vaihda konenimi" #: pkg/storaged/overview/overview.jsx:152 -#, fuzzy -#| msgid "Change iSCSI initiator name" msgid "Change iSCSI initiater name" msgstr "Vaihda iSCSI-aloittajan nimi" @@ -1572,12 +1569,10 @@ msgstr "Vaihda iSCSI-aloittajan nimi" #: pkg/storaged/btrfs/volume.jsx:87 -#, fuzzy -#| msgid "Change shell" msgid "Change label" -msgstr "Vaihda komentotulkkia" +msgstr "Vaihda nimiö" -#: pkg/storaged/stratis/pool.jsx:400 pkg/storaged/crypto/keyslots.jsx:480 +#: pkg/storaged/crypto/keyslots.jsx:514 pkg/storaged/stratis/pool.jsx:400 msgid "Change passphrase" msgstr "Vaihda tunnuslause" @@ -1631,7 +1626,7 @@ "Asetuksien vaihtaminen katkaisee yhteyden palvelimeen, jolloin " "hallintakäyttöliittymä ei ole saatavilla." -#: pkg/packagekit/updates.jsx:909 +#: pkg/packagekit/updates.jsx:908 msgid "Check for updates" msgstr "Etsi päivityksiä" @@ -1655,22 +1650,18 @@ msgstr "Tarkistetaan IP" #: pkg/storaged/jobs-panel.jsx:68 -#, fuzzy -#| msgid "Checking RAID device $target" msgid "Checking MDRAID device $target" -msgstr "Tarkistetaan RAID-laite $target" +msgstr "Tarkistetaan MDRAID-laite $target" #: pkg/storaged/jobs-panel.jsx:69 -#, fuzzy -#| msgid "Checking and repairing RAID device $target" msgid "Checking and repairing MDRAID device $target" -msgstr "Tarkistetaan ja korjataan RAID-laite $target" +msgstr "Tarkistetaan ja korjataan MDRAID-laite $target" -#: pkg/storaged/crypto/keyslots.jsx:231 +#: pkg/storaged/crypto/keyslots.jsx:265 msgid "Checking for $0 package" msgstr "Etsitään $0 pakettia" -#: pkg/storaged/crypto/keyslots.jsx:267 +#: pkg/storaged/crypto/keyslots.jsx:301 msgid "Checking for NBDE support in the initrd" msgstr "Tarkistetaan NBDE-tukea initrd:ssä" @@ -1678,7 +1669,7 @@ msgid "Checking for new applications" msgstr "Etsitään uusia sovelluksia" -#: pkg/packagekit/updates.jsx:1389 +#: pkg/packagekit/updates.jsx:1388 msgid "Checking for package updates..." msgstr "Tarkistetaan pakettipäivityksiä ..." @@ -1687,11 +1678,11 @@ msgid "Checking installed software" msgstr "Tarkistetaan asennettu ohjelmisto" -#: pkg/storaged/dialog.jsx:1271 +#: pkg/storaged/dialog.jsx:1273 msgid "Checking related processes" msgstr "Tarkastetaan liittyviä prosesseja" -#: pkg/packagekit/updates.jsx:1399 +#: pkg/packagekit/updates.jsx:1398 msgid "Checking software status" msgstr "Tarkistetaan ohjelmiston tila" @@ -1715,7 +1706,7 @@ msgid "Clear 'Failed to start'" msgstr "Tyhjennä \"Aloitus epäonnistui\"" -#: pkg/systemd/services-list.jsx:58 pkg/systemd/logsJournal.jsx:277 +#: pkg/systemd/logsJournal.jsx:277 pkg/systemd/services-list.jsx:58 msgid "Clear all filters" msgstr "Tyhjennä kaikki suodattimet" @@ -1731,14 +1722,15 @@ msgid "Client software" msgstr "Asiakasohjelmisto" -#: pkg/systemd/overview-cards/configurationCard.jsx:198 +#: pkg/storaged/dialog.jsx:456 pkg/apps/utils.jsx:87 +#: pkg/networkmanager/interfaces.js:43 +#: pkg/lib/cockpit-components-terminal.jsx:230 +#: pkg/lib/cockpit-components-modifications.jsx:76 #: pkg/systemd/overview-cards/realmd.jsx:278 -#: pkg/networkmanager/interfaces.js:43 pkg/storaged/dialog.jsx:456 +#: pkg/systemd/overview-cards/configurationCard.jsx:195 #: pkg/shell/hosts_dialog.jsx:92 pkg/shell/shell-modals.jsx:192 -#: pkg/shell/credentials.jsx:81 pkg/shell/superuser.jsx:190 -#: pkg/shell/superuser.jsx:198 pkg/apps/utils.jsx:87 -#: pkg/users/dialog-utils.js:58 pkg/lib/cockpit-components-terminal.jsx:230 -#: pkg/lib/cockpit-components-modifications.jsx:76 +#: pkg/shell/superuser.jsx:190 pkg/shell/superuser.jsx:198 +#: pkg/shell/credentials.jsx:81 pkg/users/dialog-utils.js:58 msgid "Close" msgstr "Sulje" @@ -1758,7 +1750,7 @@ msgid "Cockpit configuration of NetworkManager and Firewalld" msgstr "NetworkManagerin ja Firewalld:n Cockit-asetukset" -#: pkg/lib/cockpit.js:3866 +#: pkg/lib/cockpit.js:3862 msgid "Cockpit could not contact the given host." msgstr "Cockpit ei saanut yhteyttä koneeseen." @@ -1785,7 +1777,7 @@ msgstr "" "Cockpit on vuorovaikutteinen Linux-palvelimen ylläpitäjän käyttöliittymä." -#: pkg/lib/cockpit.js:3864 +#: pkg/lib/cockpit.js:3860 msgid "Cockpit is not compatible with the software on the system." msgstr "Cockpit ei ole yhteensopiva järjestelmän ohjelmiston kanssa." @@ -1793,7 +1785,7 @@ msgid "Cockpit is not installed" msgstr "Cockpit ei ole asennettu" -#: pkg/lib/cockpit.js:3858 +#: pkg/lib/cockpit.js:3854 msgid "Cockpit is not installed on the system." msgstr "Cockpit ei ole asennettu järjestelmässä." @@ -1835,8 +1827,8 @@ msgid "Comma-separated ports, ranges, and services are accepted" msgstr "Pilkuilla erotetut portit, alueet ja palvelut hyväksytään" -#: pkg/systemd/timer-dialog.jsx:174 pkg/storaged/dialog.jsx:1330 -#: pkg/storaged/dialog.jsx:1350 +#: pkg/storaged/dialog.jsx:1332 pkg/storaged/dialog.jsx:1352 +#: pkg/systemd/timer-dialog.jsx:174 msgid "Command" msgstr "Komento" @@ -1869,9 +1861,9 @@ msgid "Compress crash dumps to save space" msgstr "Tiivistä kaatumisen tyhjennys säästääksesi tilaa" -#: pkg/kdump/kdump-view.jsx:314 pkg/storaged/lvm2/vdo-pool.jsx:84 -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:229 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:325 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:229 +#: pkg/storaged/lvm2/vdo-pool.jsx:84 pkg/kdump/kdump-view.jsx:314 msgid "Compression" msgstr "Pakkaus" @@ -1883,7 +1875,7 @@ msgid "Condition failed" msgstr "Ehto epäonnistui" -#: pkg/systemd/overview-cards/configurationCard.jsx:62 +#: pkg/systemd/overview-cards/configurationCard.jsx:61 msgid "Configuration" msgstr "Kokoonpano" @@ -1903,12 +1895,12 @@ msgid "Configuring system settings" msgstr "Järjestelmäasetusten määrittäminen" -#: pkg/storaged/stratis/create-dialog.jsx:84 pkg/storaged/stratis/pool.jsx:380 -#: pkg/storaged/stratis/pool.jsx:409 pkg/storaged/block/format-dialog.jsx:343 +#: pkg/storaged/block/format-dialog.jsx:345 pkg/storaged/stratis/pool.jsx:380 +#: pkg/storaged/stratis/pool.jsx:409 pkg/storaged/stratis/create-dialog.jsx:84 msgid "Confirm" msgstr "Vahvista" -#: pkg/systemd/service-details.jsx:707 pkg/storaged/stratis/filesystem.jsx:133 +#: pkg/storaged/stratis/filesystem.jsx:133 pkg/systemd/service-details.jsx:707 msgid "Confirm deletion of $0" msgstr "Vahvista kohteen $0 poistaminen" @@ -1932,7 +1924,7 @@ msgid "Confirm removal of $0" msgstr "Vahvista $0:n poisto" -#: pkg/storaged/crypto/keyslots.jsx:589 +#: pkg/storaged/crypto/keyslots.jsx:623 msgid "Confirm removal with an alternate passphrase" msgstr "Vahvista poisto vaihtoehtoisella tunnuslauseella" @@ -1980,7 +1972,7 @@ msgid "Connection failed" msgstr "Yhteys epäonnistui" -#: pkg/lib/cockpit.js:3856 +#: pkg/lib/cockpit.js:3852 msgid "Connection has timed out." msgstr "Yhteys aikakatkaistiin." @@ -2000,7 +1992,7 @@ msgid "Contains:" msgstr "Sisältää:" -#: pkg/packagekit/updates.jsx:764 +#: pkg/packagekit/updates.jsx:763 msgid "Continue" msgstr "Jatka" @@ -2027,19 +2019,19 @@ #: pkg/shell/hosts_dialog.jsx:475 pkg/shell/hosts_dialog.jsx:478 #: pkg/shell/hosts_dialog.jsx:493 pkg/shell/hosts_dialog.jsx:495 -#: pkg/shell/credentials.jsx:212 pkg/shell/failures.jsx:44 +#: pkg/shell/failures.jsx:43 pkg/shell/credentials.jsx:212 msgid "Copied" msgstr "Kopioitu" -#: pkg/shell/hosts_dialog.jsx:475 pkg/shell/hosts_dialog.jsx:478 -#: pkg/shell/hosts_dialog.jsx:493 pkg/shell/hosts_dialog.jsx:495 -#: pkg/shell/credentials.jsx:212 pkg/shell/failures.jsx:44 -#: pkg/lib/cockpit-components-terminal.jsx:211 +#: pkg/lib/cockpit-components-terminal.jsx:211 pkg/shell/hosts_dialog.jsx:475 +#: pkg/shell/hosts_dialog.jsx:478 pkg/shell/hosts_dialog.jsx:493 +#: pkg/shell/hosts_dialog.jsx:495 pkg/shell/failures.jsx:43 +#: pkg/shell/credentials.jsx:212 msgid "Copy" msgstr "Kopio" -#: pkg/systemd/logs.jsx:417 pkg/storaged/crypto/tang.jsx:117 -#: pkg/lib/cockpit-components-modifications.jsx:73 +#: pkg/storaged/crypto/tang.jsx:117 +#: pkg/lib/cockpit-components-modifications.jsx:73 pkg/systemd/logs.jsx:417 msgid "Copy to clipboard" msgstr "Kopioi leikepöydälle" @@ -2063,17 +2055,17 @@ msgid "Crash system" msgstr "Kaatumisjärjestelmä" -#: pkg/storaged/stratis/create-dialog.jsx:122 pkg/storaged/stratis/pool.jsx:85 -#: pkg/storaged/lvm2/create-dialog.jsx:63 +#: pkg/storaged/btrfs/subvolume.jsx:141 +#: pkg/storaged/block/format-dialog.jsx:275 +#: pkg/storaged/block/format-dialog.jsx:285 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:269 -#: pkg/storaged/lvm2/volume-group.jsx:120 +#: pkg/storaged/lvm2/create-dialog.jsx:63 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:58 -#: pkg/storaged/block/format-dialog.jsx:273 -#: pkg/storaged/block/format-dialog.jsx:283 +#: pkg/storaged/lvm2/volume-group.jsx:120 pkg/storaged/stratis/pool.jsx:85 +#: pkg/storaged/stratis/create-dialog.jsx:122 #: pkg/storaged/mdraid/create-dialog.jsx:112 -#: pkg/storaged/btrfs/subvolume.jsx:141 pkg/users/group-create-dialog.js:141 -#: pkg/users/account-create-dialog.js:481 #: pkg/lib/cockpit-components-file-autocomplete.jsx:193 +#: pkg/users/group-create-dialog.js:141 pkg/users/account-create-dialog.js:481 msgid "Create" msgstr "Luo" @@ -2082,17 +2074,15 @@ msgstr "Luo LVM2-taltioryhmä" #: pkg/storaged/overview/overview.jsx:145 -#, fuzzy -#| msgid "Create RAID device" msgid "Create MDRAID device" -msgstr "Luo RAID-laite" +msgstr "Luo MDRAID-laite" #: pkg/storaged/mdraid/create-dialog.jsx:45 msgid "Create RAID device" msgstr "Luo RAID-laite" -#: pkg/storaged/stratis/create-dialog.jsx:48 #: pkg/storaged/overview/overview.jsx:147 +#: pkg/storaged/stratis/create-dialog.jsx:48 msgid "Create Stratis pool" msgstr "Luo stratisvaranto" @@ -2116,12 +2106,12 @@ msgid "Create and change ownership of home directory" msgstr "Luo kotihakemisto ja muuta sen omistajuus" -#: pkg/storaged/stratis/pool.jsx:80 pkg/storaged/block/format-dialog.jsx:268 #: pkg/storaged/btrfs/subvolume.jsx:135 +#: pkg/storaged/block/format-dialog.jsx:270 pkg/storaged/stratis/pool.jsx:80 msgid "Create and mount" msgstr "Luo ja liitä" -#: pkg/storaged/block/format-dialog.jsx:277 +#: pkg/storaged/block/format-dialog.jsx:279 #, fuzzy #| msgid "Create and mount" msgid "Create and start" @@ -2131,7 +2121,7 @@ msgid "Create filesystem" msgstr "Luo tiedostojärjestelmä" -#: pkg/networkmanager/dialogs-common.jsx:323 +#: pkg/networkmanager/dialogs-common.jsx:321 msgid "Create it" msgstr "Luo se" @@ -2147,7 +2137,7 @@ msgid "Create new filesystem" msgstr "Luo uusi tiedostojärjestelmä" -#: pkg/users/group-create-dialog.js:134 pkg/users/accounts-list.js:297 +#: pkg/users/accounts-list.js:297 pkg/users/group-create-dialog.js:134 msgid "Create new group" msgstr "Luo uusi ryhmä" @@ -2165,9 +2155,9 @@ msgid "Create new thinly provisioned logical volume" msgstr "Luo uusi looginen taltio" -#: pkg/storaged/stratis/pool.jsx:81 pkg/storaged/block/format-dialog.jsx:269 -#: pkg/storaged/block/format-dialog.jsx:278 #: pkg/storaged/btrfs/subvolume.jsx:136 +#: pkg/storaged/block/format-dialog.jsx:271 +#: pkg/storaged/block/format-dialog.jsx:280 pkg/storaged/stratis/pool.jsx:81 msgid "Create only" msgstr "Vain luominen" @@ -2220,7 +2210,7 @@ msgid "Create volume group" msgstr "Luo taltioryhmä" -#: pkg/sosreport/sosreport.jsx:491 +#: pkg/sosreport/sosreport.jsx:500 msgid "Created" msgstr "Luotu" @@ -2229,10 +2219,8 @@ msgstr "Luodaan LVM2 taltioryhmä $target" #: pkg/storaged/jobs-panel.jsx:67 -#, fuzzy -#| msgid "Creating RAID device $target" msgid "Creating MDRAID device $target" -msgstr "Luodaan RAID-laite $target" +msgstr "Luodaan MDRAID-laite $target" #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:284 msgid "Creating VDO device" @@ -2254,7 +2242,7 @@ msgid "Creating snapshot of $target" msgstr "Luodaan tilannevedos $target:sta" -#: pkg/networkmanager/dialogs-common.jsx:322 +#: pkg/networkmanager/dialogs-common.jsx:320 msgid "" "Creating this $0 will break the connection to the server, and will make the " "administration UI unavailable." @@ -2300,7 +2288,7 @@ msgid "Current top CPU usage" msgstr "Nykyinen korkein suoritinten käyttö" -#: pkg/storaged/dialog.jsx:1182 +#: pkg/storaged/dialog.jsx:1184 msgid "Currently in use" msgstr "Tällä hetkellä käytössä" @@ -2311,16 +2299,14 @@ msgstr "Tällä hetkellä käytössä" #: pkg/storaged/partitions/partition.jsx:154 -#, fuzzy -#| msgid "custom" msgid "Custom" -msgstr "mukautettu" +msgstr "Mukautettu" #: pkg/systemd/overview-cards/cryptoPolicies.jsx:142 msgid "Custom cryptographic policy" msgstr "Mukautettu kryptografinen käytäntö" -#: pkg/storaged/nfs/nfs.jsx:173 pkg/storaged/filesystem/mounting-dialog.jsx:61 +#: pkg/storaged/nfs/nfs.jsx:173 pkg/storaged/filesystem/mounting-dialog.jsx:64 msgid "Custom mount options" msgstr "Mukautetut liitosvalinnat" @@ -2362,11 +2348,11 @@ msgid "Daily" msgstr "Joka päivä" -#: pkg/packagekit/updates.jsx:934 +#: pkg/packagekit/updates.jsx:933 msgid "Danger alert:" msgstr "Vaaran hälytys:" -#: pkg/systemd/terminal.jsx:174 pkg/shell/topnav.jsx:193 +#: pkg/systemd/terminal.jsx:174 pkg/shell/topnav.jsx:203 msgid "Dark" msgstr "Tumma" @@ -2374,8 +2360,8 @@ msgid "Data" msgstr "Tiedot" -#: pkg/storaged/lvm2/vdo-pool.jsx:80 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:144 +#: pkg/storaged/lvm2/vdo-pool.jsx:80 msgid "Data used" msgstr "Dataa käytetty" @@ -2438,9 +2424,9 @@ "nykyiseen aikaan. Lopuksi suhteelliset ajat voidaan määrittää etuliitteellä " "'-' tai '+'" -#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:43 #: pkg/storaged/lvm2/block-logical-volume.jsx:161 #: pkg/storaged/lvm2/block-logical-volume.jsx:216 +#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:43 msgid "Deactivate" msgstr "Deaktivoi" @@ -2472,18 +2458,18 @@ msgid "Dedicated parity (RAID 4)" msgstr "RAID 4 (omistettu pariteetti)" -#: pkg/storaged/lvm2/vdo-pool.jsx:88 -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:234 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:334 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:234 +#: pkg/storaged/lvm2/vdo-pool.jsx:88 msgid "Deduplication" msgstr "Päällekkäisyyden poisto" -#: pkg/systemd/overview-cards/cryptoPolicies.jsx:37 pkg/shell/topnav.jsx:187 +#: pkg/systemd/overview-cards/cryptoPolicies.jsx:37 pkg/shell/topnav.jsx:197 msgid "Default" msgstr "Oletus" -#: pkg/systemd/timer-dialog.jsx:200 pkg/systemd/timer-dialog.jsx:209 -#: pkg/lib/cockpit-components-shutdown.jsx:201 +#: pkg/lib/cockpit-components-shutdown.jsx:201 pkg/systemd/timer-dialog.jsx:200 +#: pkg/systemd/timer-dialog.jsx:209 msgid "Delay" msgstr "Viive" @@ -2491,27 +2477,27 @@ msgid "Delay must be a number" msgstr "Viiveen tulee olla numero" -#: pkg/sosreport/sosreport.jsx:360 pkg/sosreport/sosreport.jsx:459 -#: pkg/systemd/abrtLog.jsx:290 pkg/systemd/service-details.jsx:151 -#: pkg/systemd/service-details.jsx:713 -#: pkg/networkmanager/network-interface.jsx:725 -#: pkg/networkmanager/firewall.jsx:117 pkg/networkmanager/firewall.jsx:178 -#: pkg/networkmanager/firewall.jsx:910 pkg/storaged/stratis/filesystem.jsx:137 -#: pkg/storaged/stratis/filesystem.jsx:175 pkg/storaged/stratis/pool.jsx:149 -#: pkg/storaged/lvm2/volume-group.jsx:97 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:109 -#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:44 +#: pkg/storaged/partitions/partition.jsx:58 +#: pkg/storaged/partitions/partition.jsx:112 +#: pkg/storaged/partitions/partition-table.jsx:61 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:122 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:152 +#: pkg/storaged/btrfs/subvolume.jsx:231 pkg/storaged/btrfs/subvolume.jsx:373 #: pkg/storaged/lvm2/block-logical-volume.jsx:79 #: pkg/storaged/lvm2/block-logical-volume.jsx:222 +#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:44 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:109 #: pkg/storaged/lvm2/inactive-logical-volume.jsx:42 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:122 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:152 -#: pkg/storaged/partitions/partition-table.jsx:61 -#: pkg/storaged/partitions/partition.jsx:58 -#: pkg/storaged/partitions/partition.jsx:112 pkg/storaged/mdraid/mdraid.jsx:126 -#: pkg/storaged/mdraid/mdraid.jsx:223 pkg/storaged/btrfs/subvolume.jsx:231 -#: pkg/storaged/btrfs/subvolume.jsx:373 pkg/users/delete-group-dialog.js:51 -#: pkg/users/delete-account-dialog.js:60 pkg/users/account-details.js:227 +#: pkg/storaged/lvm2/volume-group.jsx:97 pkg/storaged/stratis/pool.jsx:149 +#: pkg/storaged/stratis/filesystem.jsx:137 +#: pkg/storaged/stratis/filesystem.jsx:175 pkg/storaged/mdraid/mdraid.jsx:126 +#: pkg/storaged/mdraid/mdraid.jsx:223 pkg/sosreport/sosreport.jsx:369 +#: pkg/sosreport/sosreport.jsx:468 pkg/networkmanager/firewall.jsx:117 +#: pkg/networkmanager/firewall.jsx:178 pkg/networkmanager/firewall.jsx:910 +#: pkg/networkmanager/network-interface.jsx:725 pkg/systemd/abrtLog.jsx:290 +#: pkg/systemd/service-details.jsx:151 pkg/systemd/service-details.jsx:713 +#: pkg/users/account-details.js:227 pkg/users/delete-group-dialog.js:51 +#: pkg/users/delete-account-dialog.js:60 msgid "Delete" msgstr "Poista" @@ -2533,12 +2519,10 @@ msgstr "Poista ryhmä" #: pkg/storaged/stratis/pool.jsx:288 -#, fuzzy -#| msgid "Delete" msgid "Delete pool" -msgstr "Poista" +msgstr "Poista varanto" -#: pkg/sosreport/sosreport.jsx:352 +#: pkg/sosreport/sosreport.jsx:361 msgid "Delete report permanently?" msgstr "Poista raportti pysyvästi?" @@ -2575,10 +2559,8 @@ msgstr "Osion poistaminen tuhoaa kaiken sillä olevan datan." #: pkg/storaged/mdraid/mdraid.jsx:127 -#, fuzzy -#| msgid "Deleting erases all data on a RAID device." msgid "Deleting erases all data on a MDRAID device." -msgstr "Poistaminen tuhoaa kaiken RAID-laitteella olevan datan." +msgstr "Poistaminen tuhoaa kaiken MDRAID-laitteella olevan datan." #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:123 msgid "Deleting erases all data on a VDO device." @@ -2598,8 +2580,8 @@ msgid "Deletion will remove the following files:" msgstr "Poistaminen poistaa seuraavat tiedostot:" -#: pkg/systemd/timer-dialog.jsx:166 pkg/networkmanager/firewall.jsx:702 -#: pkg/networkmanager/firewall.jsx:846 pkg/storaged/dialog.jsx:1351 +#: pkg/storaged/dialog.jsx:1353 pkg/networkmanager/firewall.jsx:702 +#: pkg/networkmanager/firewall.jsx:846 pkg/systemd/timer-dialog.jsx:166 msgid "Description" msgstr "Kuvaus" @@ -2612,7 +2594,7 @@ msgstr "Irrotettava" #: pkg/systemd/overview-cards/realmd.jsx:416 pkg/shell/credentials.jsx:109 -#: pkg/packagekit/updates.jsx:451 +#: pkg/packagekit/updates.jsx:450 msgid "Details" msgstr "Yksityiskohdat" @@ -2620,25 +2602,23 @@ msgid "Development" msgstr "Kehitys" -#: pkg/metrics/metrics.jsx:785 pkg/storaged/dialog.jsx:1137 -#: pkg/storaged/dialog.jsx:1242 pkg/storaged/mdraid/mdraid.jsx:292 +#: pkg/storaged/dialog.jsx:1139 pkg/storaged/dialog.jsx:1244 +#: pkg/storaged/mdraid/mdraid.jsx:292 pkg/metrics/metrics.jsx:785 msgid "Device" msgstr "Laite" -#: pkg/storaged/block/other.jsx:62 pkg/storaged/drive/drive.jsx:132 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:287 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:287 pkg/storaged/block/other.jsx:62 +#: pkg/storaged/drive/drive.jsx:132 msgid "Device file" msgstr "Laitetiedosto" -#: pkg/storaged/partitions/actions.jsx:27 +#: pkg/storaged/partitions/actions.jsx:27 pkg/storaged/block/actions.jsx:28 msgid "Device is read-only" msgstr "Laite on vain-luku-muotoa" #: pkg/storaged/block/other.jsx:60 -#, fuzzy -#| msgid "Service name" msgid "Device number" -msgstr "Palvelun nimi" +msgstr "Laitenumero" #: pkg/sosreport/index.html:22 pkg/sosreport/manifest.json:0 #: src/appstream/org.cockpit-project.cockpit-sosreport.metainfo.xml.in:5 @@ -2666,10 +2646,11 @@ msgid "Disable tuned" msgstr "Poista tuned käytöstä" -#: pkg/systemd/services.jsx:246 pkg/systemd/services.jsx:687 -#: pkg/systemd/service-details.jsx:436 pkg/networkmanager/ip-settings.jsx:46 -#: pkg/networkmanager/firewall-switch.jsx:80 pkg/kdump/kdump-view.jsx:541 -#: pkg/packagekit/kpatch.jsx:253 pkg/packagekit/autoupdates.jsx:344 +#: pkg/networkmanager/firewall-switch.jsx:80 +#: pkg/networkmanager/ip-settings.jsx:46 pkg/kdump/kdump-view.jsx:541 +#: pkg/systemd/service-details.jsx:436 pkg/systemd/services.jsx:246 +#: pkg/systemd/services.jsx:687 pkg/packagekit/kpatch.jsx:253 +#: pkg/packagekit/autoupdates.jsx:344 msgid "Disabled" msgstr "Ei käytössä" @@ -2707,14 +2688,14 @@ msgid "Disk is failing" msgstr "Levy on rikkoutumassa" -#: pkg/storaged/crypto/keyslots.jsx:142 +#: pkg/storaged/crypto/keyslots.jsx:175 msgid "Disk passphrase" msgstr "Levyn tunnuslause" -#: pkg/metrics/metrics.jsx:918 pkg/storaged/lvm2/create-dialog.jsx:52 -#: pkg/storaged/lvm2/volume-group.jsx:198 -#: pkg/storaged/mdraid/create-dialog.jsx:99 pkg/storaged/mdraid/mdraid.jsx:156 -#: pkg/storaged/mdraid/mdraid.jsx:296 +#: pkg/storaged/lvm2/create-dialog.jsx:52 +#: pkg/storaged/lvm2/volume-group.jsx:198 pkg/storaged/mdraid/mdraid.jsx:156 +#: pkg/storaged/mdraid/mdraid.jsx:296 pkg/storaged/mdraid/create-dialog.jsx:99 +#: pkg/metrics/metrics.jsx:918 msgid "Disks" msgstr "Levyt" @@ -2723,11 +2704,8 @@ msgstr "Levyjen käyttö" #: pkg/storaged/lvm2/volume-group.jsx:371 -#, fuzzy -#| msgid "Dismiss $0 alert" -#| msgid_plural "Dismiss $0 alerts" msgid "Dismiss" -msgstr "Hylkää $0 hälytys" +msgstr "Hylkää" #: pkg/selinux/setroubleshoot-view.jsx:398 msgid "Dismiss $0 alert" @@ -2739,7 +2717,7 @@ msgid "Dismiss selected alerts" msgstr "Hylkää valitut hälytykset" -#: pkg/shell/shell-modals.jsx:115 pkg/shell/topnav.jsx:205 +#: pkg/shell/topnav.jsx:216 pkg/shell/shell-modals.jsx:115 msgid "Display language" msgstr "Käytettävä kieli" @@ -2750,7 +2728,7 @@ msgid "Distributed parity (RAID 5)" msgstr "RAID 5 (hajautettu pariteetti)" -#: pkg/storaged/filesystem/mounting-dialog.jsx:138 +#: pkg/storaged/filesystem/mounting-dialog.jsx:141 msgid "Do not mount" msgstr "Älä liitä" @@ -2767,12 +2745,12 @@ msgid "Does not automatically start" msgstr "Ei käynnisty automaattisesti" -#: pkg/storaged/filesystem/mounting-dialog.jsx:107 +#: pkg/storaged/filesystem/mounting-dialog.jsx:110 msgid "Does not mount during boot" msgstr "Ei liitetä käynnistyksen yhteydessä" -#: pkg/systemd/overview-cards/configurationCard.jsx:80 #: pkg/systemd/overview-cards/realmd.jsx:284 +#: pkg/systemd/overview-cards/configurationCard.jsx:79 msgid "Domain" msgstr "Toimialue" @@ -2812,7 +2790,7 @@ msgid "Double distributed parity (RAID 6)" msgstr "RAID 6 (kaksinkertainen hajautettu pariteetti)" -#: pkg/sosreport/sosreport.jsx:449 pkg/sosreport/sosreport.jsx:455 +#: pkg/sosreport/sosreport.jsx:458 pkg/sosreport/sosreport.jsx:464 msgid "Download" msgstr "Lataa" @@ -2828,7 +2806,7 @@ msgid "Downloading" msgstr "Ladataan" -#: pkg/storaged/crypto/keyslots.jsx:220 +#: pkg/storaged/crypto/keyslots.jsx:254 #: pkg/lib/cockpit-components-install-dialog.jsx:189 msgid "Downloading $0" msgstr "Ladataan $0" @@ -2837,21 +2815,19 @@ msgid "Drive" msgstr "Asema" -#: pkg/systemd/hw-detect.js:92 pkg/lib/machine-info.js:240 +#: pkg/lib/machine-info.js:240 pkg/systemd/hw-detect.js:92 msgid "Dual rank" msgstr "Kaksinkertainen sijoitus" #: pkg/storaged/partitions/partition.jsx:85 #: pkg/storaged/partitions/partition.jsx:123 #: pkg/storaged/partitions/partition.jsx:131 -#, fuzzy -#| msgid "Extended partition" msgid "EFI system partition" -msgstr "Laajennettu osio" +msgstr "EFI-järjestelmäosio" +#: pkg/storaged/nfs/nfs.jsx:312 pkg/storaged/crypto/keyslots.jsx:761 #: pkg/networkmanager/firewall.jsx:115 pkg/kdump/kdump-view.jsx:476 -#: pkg/storaged/nfs/nfs.jsx:312 pkg/storaged/crypto/keyslots.jsx:727 -#: pkg/shell/hosts.jsx:167 pkg/shell/indexes.jsx:352 +#: pkg/shell/indexes.jsx:352 pkg/shell/hosts.jsx:167 #: pkg/packagekit/kpatch.jsx:234 pkg/packagekit/autoupdates.jsx:407 msgid "Edit" msgstr "Muokkaa" @@ -2860,7 +2836,7 @@ msgid "Edit /etc/motd" msgstr "Muokkaa /etc/motd" -#: pkg/storaged/crypto/keyslots.jsx:507 +#: pkg/storaged/crypto/keyslots.jsx:541 msgid "Edit Tang keyserver" msgstr "Muokkaa Tang-avainpalvelinta" @@ -2902,9 +2878,8 @@ msgid "Edit motd" msgstr "Muokkaa motd-tiedostoa" -#: pkg/storaged/stratis/filesystem.jsx:170 +#: pkg/storaged/btrfs/subvolume.jsx:331 pkg/storaged/stratis/filesystem.jsx:170 #: pkg/storaged/filesystem/filesystem.jsx:100 -#: pkg/storaged/btrfs/subvolume.jsx:331 #, fuzzy #| msgid "Mount point" msgid "Edit mount point" @@ -2932,7 +2907,7 @@ msgid "Edit user" msgstr "Muokkaa käyttäjää" -#: pkg/storaged/crypto/keyslots.jsx:729 +#: pkg/storaged/crypto/keyslots.jsx:763 msgid "Editing a key requires a free slot" msgstr "Avaimen muokkaaminen vaatii vapaan paikan" @@ -2978,13 +2953,13 @@ msgid "Enable the firewall" msgstr "Ota palomuuri käyttöön" +#: pkg/networkmanager/firewall-switch.jsx:80 pkg/kdump/kdump-view.jsx:541 #: pkg/systemd/services.jsx:244 pkg/systemd/services.jsx:245 -#: pkg/systemd/services.jsx:686 pkg/networkmanager/firewall-switch.jsx:80 -#: pkg/kdump/kdump-view.jsx:541 pkg/packagekit/kpatch.jsx:256 +#: pkg/systemd/services.jsx:686 pkg/packagekit/kpatch.jsx:256 msgid "Enabled" msgstr "Käytössä" -#: pkg/storaged/crypto/keyslots.jsx:335 +#: pkg/storaged/crypto/keyslots.jsx:369 msgid "Enabling $0" msgstr "Otetaan käyttöön $0" @@ -3004,39 +2979,37 @@ msgid "Encrypt data with a passphrase" msgstr "Salauksen tunnuslause" -#: pkg/sosreport/sosreport.jsx:439 +#: pkg/sosreport/sosreport.jsx:448 msgid "Encrypted" msgstr "Salattu" -#: pkg/storaged/utils.js:366 +#: pkg/storaged/utils.js:367 msgid "Encrypted $0" msgstr "Salattu $0" #: pkg/storaged/stratis/pool.jsx:271 -#, fuzzy -#| msgid "Encrypted Stratis pool $0" msgid "Encrypted Stratis pool" -msgstr "Salattu Stratisvaranto $0" +msgstr "Salattu Stratisvaranto" -#: pkg/storaged/utils.js:358 +#: pkg/storaged/utils.js:359 msgid "Encrypted logical volume of $0" msgstr "Salattu looginen taltio $0" -#: pkg/storaged/utils.js:360 +#: pkg/storaged/utils.js:361 msgid "Encrypted partition of $0" msgstr "Salattu osio $0" -#: pkg/storaged/block/format-dialog.jsx:328 #: pkg/storaged/crypto/encryption.jsx:42 +#: pkg/storaged/block/format-dialog.jsx:330 msgid "Encryption" msgstr "Salaus" -#: pkg/storaged/block/format-dialog.jsx:371 #: pkg/storaged/crypto/encryption.jsx:189 +#: pkg/storaged/block/format-dialog.jsx:373 msgid "Encryption options" msgstr "Salauksen valinnat" -#: pkg/sosreport/sosreport.jsx:311 +#: pkg/sosreport/sosreport.jsx:320 msgid "Encryption passphrase" msgstr "Salauksen tunnuslause" @@ -3049,10 +3022,8 @@ msgstr "Päättynyt" #: pkg/networkmanager/wireguard.jsx:309 -#, fuzzy -#| msgid "Mount point" msgid "Endpoint" -msgstr "Liitoskohta" +msgstr "Päätepiste" #: pkg/networkmanager/wireguard.jsx:276 msgid "" @@ -3064,7 +3035,7 @@ msgid "Enforcing" msgstr "Pakottava" -#: pkg/packagekit/updates.jsx:1439 +#: pkg/packagekit/updates.jsx:1438 msgid "Enhancement updates available" msgstr "Parannuspäivitykset saatavilla" @@ -3084,14 +3055,14 @@ msgid "Erasing $target" msgstr "Tyhjennetään $target" -#: pkg/packagekit/updates.jsx:381 +#: pkg/packagekit/updates.jsx:380 msgid "Errata" msgstr "Virheet" -#: pkg/sosreport/sosreport.jsx:383 pkg/systemd/services.jsx:224 -#: pkg/systemd/service-details.jsx:274 pkg/storaged/storage-controls.jsx:105 -#: pkg/storaged/storage-controls.jsx:160 pkg/storaged/overview/overview.jsx:94 -#: pkg/storaged/multipath.jsx:60 pkg/apps/utils.jsx:81 +#: pkg/storaged/storage-controls.jsx:105 pkg/storaged/storage-controls.jsx:160 +#: pkg/storaged/overview/overview.jsx:94 pkg/storaged/multipath.jsx:60 +#: pkg/apps/utils.jsx:81 pkg/sosreport/sosreport.jsx:392 +#: pkg/systemd/service-details.jsx:274 pkg/systemd/services.jsx:224 msgid "Error" msgstr "Virhe" @@ -3103,12 +3074,12 @@ msgid "Error has occurred" msgstr "Tapahtui virhe" -#: pkg/storaged/crypto/keyslots.jsx:256 +#: pkg/storaged/crypto/keyslots.jsx:290 msgid "Error installing $0: PackageKit is not installed" msgstr "Virhe asennettaessa pakettia $0: PackageKit ei ole asennettu" -#: pkg/systemd/overview-cards/configurationCard.jsx:176 #: pkg/selinux/setroubleshoot-view.jsx:414 +#: pkg/systemd/overview-cards/configurationCard.jsx:174 msgid "Error message" msgstr "Virheviesti" @@ -3182,8 +3153,8 @@ msgid "Extended information" msgstr "Laajennettu tieto" -#: pkg/storaged/block/format-dialog.jsx:161 #: pkg/storaged/partitions/partition-table.jsx:58 +#: pkg/storaged/block/format-dialog.jsx:161 msgid "Extended partition" msgstr "Laajennettu osio" @@ -3195,7 +3166,7 @@ msgid "FIPS with further Common Criteria restrictions." msgstr "FIPS jossa muita yleisiä kriteerejä koskevia rajoituksia." -#: pkg/networkmanager/interfaces.js:811 pkg/storaged/mdraid/mdraid-disk.jsx:68 +#: pkg/storaged/mdraid/mdraid-disk.jsx:68 pkg/networkmanager/interfaces.js:811 msgid "Failed" msgstr "Epäonnistui" @@ -3215,8 +3186,8 @@ msgid "Failed to add zone" msgstr "Vyöhykkeen lisääminen epäonnistui" -#: pkg/users/password-dialogs.js:103 pkg/users/password-dialogs.js:125 -#: pkg/lib/credentials.js:232 +#: pkg/lib/credentials.js:232 pkg/users/password-dialogs.js:103 +#: pkg/users/password-dialogs.js:125 msgid "Failed to change password" msgstr "Salasanan vaihtaminen epäonnistui" @@ -3274,7 +3245,7 @@ "jäsentäminen epäonnistui. Poista mukautetut ohitukset määrittääksesi " "automaattiset päivitykset." -#: pkg/packagekit/updates.jsx:498 +#: pkg/packagekit/updates.jsx:497 msgid "Failed to restart service" msgstr "Ei voitu käynnistää uudelleen palvelua" @@ -3286,7 +3257,7 @@ msgid "Failed to save settings" msgstr "Asetusten tallentaminen epäonnistui" -#: pkg/systemd/services.jsx:235 pkg/systemd/service-details.jsx:445 +#: pkg/systemd/service-details.jsx:445 pkg/systemd/services.jsx:235 msgid "Failed to start" msgstr "Käynnistäminen epäonnistui" @@ -3311,7 +3282,7 @@ msgid "Filesystem name" msgstr "Tiedostojärjestelmän nimi" -#: pkg/storaged/dialog.jsx:1118 +#: pkg/storaged/dialog.jsx:1120 #, fuzzy #| msgid "Creating filesystem on $target" msgid "Filesystem outside the target" @@ -3354,13 +3325,10 @@ msgstr "Palomuuri ei ole saatavilla" #: pkg/storaged/drive/drive.jsx:122 -#, fuzzy -#| msgctxt "storage" -#| msgid "Firmware version" msgid "Firmware version" msgstr "Laiteohjelmiston versio" -#: pkg/storaged/crypto/keyslots.jsx:403 +#: pkg/storaged/crypto/keyslots.jsx:437 msgid "Fix NBDE support" msgstr "Korjaa NBDE-tuki" @@ -3384,15 +3352,8 @@ msgid "Force password change" msgstr "Pakota salasanan vaihdos" -#: pkg/storaged/stratis/blockdev.jsx:48 -#: pkg/storaged/lvm2/physical-volume.jsx:50 -#: pkg/storaged/block/format-dialog.jsx:273 -#: pkg/storaged/block/format-dialog.jsx:283 -#: pkg/storaged/block/unformatted-data.jsx:36 -#: pkg/storaged/block/unrecognized-data.jsx:41 pkg/storaged/swap/swap.jsx:100 -#: pkg/storaged/filesystem/filesystem.jsx:104 -#: pkg/storaged/crypto/locked-encrypted-data.jsx:38 -#: pkg/storaged/mdraid/mdraid-disk.jsx:47 pkg/storaged/btrfs/device.jsx:93 +#: pkg/storaged/block/format-dialog.jsx:275 +#: pkg/storaged/block/format-dialog.jsx:285 pkg/storaged/block/actions.jsx:31 msgid "Format" msgstr "Alusta" @@ -3400,22 +3361,22 @@ msgid "Format $0" msgstr "Alusta $0" -#: pkg/storaged/block/format-dialog.jsx:268 +#: pkg/storaged/block/format-dialog.jsx:270 msgid "Format and mount" msgstr "Alusta ja liitä" -#: pkg/storaged/block/format-dialog.jsx:277 +#: pkg/storaged/block/format-dialog.jsx:279 #, fuzzy #| msgid "Format and mount" msgid "Format and start" msgstr "Alusta ja liitä" -#: pkg/storaged/block/format-dialog.jsx:269 -#: pkg/storaged/block/format-dialog.jsx:278 +#: pkg/storaged/block/format-dialog.jsx:271 +#: pkg/storaged/block/format-dialog.jsx:280 msgid "Format only" msgstr "Vain alustus" -#: pkg/storaged/block/format-dialog.jsx:397 +#: pkg/storaged/block/format-dialog.jsx:399 msgid "Formatting erases all data on a storage device." msgstr "Talletuslaitteen alustaminen tuhoaa kaiken sillä olevan datan." @@ -3443,8 +3404,8 @@ msgid "From" msgstr "Lähde" -#: pkg/users/accounts-list.js:380 pkg/users/account-create-dialog.js:68 -#: pkg/users/account-details.js:248 +#: pkg/users/account-details.js:248 pkg/users/accounts-list.js:380 +#: pkg/users/account-create-dialog.js:68 msgid "Full name" msgstr "Koko nimi" @@ -3453,11 +3414,11 @@ msgid "Gateway" msgstr "Yhdyskäytävä" -#: pkg/systemd/abrtLog.jsx:296 pkg/networkmanager/network-interface.jsx:316 +#: pkg/networkmanager/network-interface.jsx:316 pkg/systemd/abrtLog.jsx:296 msgid "General" msgstr "Yleinen" -#: pkg/systemd/services.jsx:255 pkg/networkmanager/wireguard.jsx:214 +#: pkg/networkmanager/wireguard.jsx:214 pkg/systemd/services.jsx:255 msgid "Generated" msgstr "Luotu" @@ -3489,22 +3450,22 @@ msgid "Group name" msgstr "Ryhmän nimi" -#: pkg/users/accounts-list.js:313 pkg/users/accounts-list.js:317 -#: pkg/users/account-details.js:446 +#: pkg/users/account-details.js:446 pkg/users/accounts-list.js:313 +#: pkg/users/accounts-list.js:317 msgid "Groups" msgstr "Ryhmät" -#: pkg/storaged/lvm2/vdo-pool.jsx:48 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:104 -#: pkg/storaged/lvm2/block-logical-volume.jsx:211 -#: pkg/storaged/block/resize.jsx:521 pkg/storaged/legacy-vdo/legacy-vdo.jsx:259 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:315 #: pkg/storaged/partitions/partition.jsx:107 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:259 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:315 pkg/storaged/block/resize.jsx:521 +#: pkg/storaged/lvm2/block-logical-volume.jsx:211 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:104 +#: pkg/storaged/lvm2/vdo-pool.jsx:48 msgid "Grow" msgstr "Kasvata" -#: pkg/storaged/lvm2/block-logical-volume.jsx:281 #: pkg/storaged/partitions/partition.jsx:221 +#: pkg/storaged/lvm2/block-logical-volume.jsx:281 msgid "Grow content" msgstr "Kasvata sisältöä" @@ -3563,7 +3524,7 @@ msgstr "Tervehdysaika $hello_time" #: pkg/systemd/overview-cards/tuned-dialog.jsx:295 -#: pkg/systemd/overview-cards/cryptoPolicies.jsx:168 pkg/shell/topnav.jsx:255 +#: pkg/systemd/overview-cards/cryptoPolicies.jsx:168 pkg/shell/topnav.jsx:274 msgid "Help" msgstr "Ohje" @@ -3574,10 +3535,8 @@ msgstr "Vahvista salasana" #: pkg/lib/cockpit-components-password.jsx:139 -#, fuzzy -#| msgid "Use password" msgid "Hide password" -msgstr "Käytä salasanaa" +msgstr "Piilota salasana" #: pkg/systemd/abrtLog.jsx:128 msgid "Hierarchy ID" @@ -3592,7 +3551,7 @@ msgid "History package count" msgstr "Historian pakettien määrä" -#: pkg/users/account-create-dialog.js:84 pkg/users/account-details.js:326 +#: pkg/users/account-details.js:326 pkg/users/account-create-dialog.js:84 msgid "Home directory" msgstr "Kotihakemisto" @@ -3600,11 +3559,11 @@ msgid "Host" msgstr "Kone" -#: pkg/lib/cockpit.js:3852 +#: pkg/lib/cockpit.js:3848 msgid "Host key is incorrect" msgstr "Koneen avain on väärin" -#: pkg/systemd/overview-cards/configurationCard.jsx:67 +#: pkg/systemd/overview-cards/configurationCard.jsx:66 msgid "Hostname" msgstr "Koneen nimi" @@ -3624,10 +3583,10 @@ msgid "How to check" msgstr "Kuinka tarkastaa" -#: pkg/systemd/hwinfo.jsx:291 pkg/networkmanager/firewall.jsx:696 -#: pkg/storaged/pages.jsx:714 pkg/storaged/btrfs/subvolume.jsx:414 -#: pkg/users/group-create-dialog.js:47 pkg/users/accounts-list.js:230 -#: pkg/users/accounts-list.js:381 +#: pkg/storaged/btrfs/subvolume.jsx:414 pkg/storaged/pages.jsx:714 +#: pkg/networkmanager/firewall.jsx:696 pkg/systemd/hwinfo.jsx:291 +#: pkg/users/accounts-list.js:230 pkg/users/accounts-list.js:381 +#: pkg/users/group-create-dialog.js:47 msgid "ID" msgstr "Tunniste" @@ -3659,10 +3618,8 @@ msgstr "IPv4" #: pkg/networkmanager/wireguard.jsx:252 -#, fuzzy -#| msgid "IPv4 address" msgid "IPv4 addresses" -msgstr "IPv4-osoite" +msgstr "IPv4-osoitteet" #: pkg/networkmanager/ip-settings.jsx:162 msgid "IPv4 settings" @@ -3697,19 +3654,15 @@ "Muussa tapauksessa älä kirjaudu sisään ja ota yhteyttä ylläpitäjään." #: pkg/shell/hosts_dialog.jsx:480 -#, fuzzy -#| msgid "" -#| "If the fingerprint matches, click 'Accept key and connect'. Otherwise, do " -#| "not connect and contact your administrator." msgid "" "If the fingerprint matches, click 'Trust and add host'. Otherwise, do not " "connect and contact your administrator." msgstr "" -"Jos sormenjälki on sama, napsauta 'Hyväksy avain ja muodosta yhteys'. Muussa " +"Jos sormenjälki on sama, napsauta 'Luota ja lisää yhteys'. Muussa " "tapauksessa älä muodosta yhteyttä ja ota yhteyttä järjestelmänvalvojaan." -#: pkg/networkmanager/ip-settings.jsx:44 pkg/packagekit/updates.jsx:686 -#: pkg/packagekit/updates.jsx:763 +#: pkg/networkmanager/ip-settings.jsx:44 pkg/packagekit/updates.jsx:685 +#: pkg/packagekit/updates.jsx:762 msgid "Ignore" msgstr "Ohita" @@ -3735,9 +3688,9 @@ msgid "In sync" msgstr "Synkronoitu" -#: pkg/networkmanager/network-interface.jsx:256 #: pkg/networkmanager/interfaces.js:793 pkg/networkmanager/interfaces.js:1354 #: pkg/networkmanager/interfaces.js:1361 +#: pkg/networkmanager/network-interface.jsx:256 msgid "Inactive" msgstr "Epäaktiivinen" @@ -3772,7 +3725,7 @@ msgid "Indirect" msgstr "Epäsuora" -#: pkg/packagekit/updates.jsx:755 +#: pkg/packagekit/updates.jsx:754 msgid "Info" msgstr "Tiedot" @@ -3792,7 +3745,7 @@ msgid "Initializing erases all data on a disk." msgstr "Taltion alustaminen tuhoaa kaikki sillä olevat tiedot." -#: pkg/packagekit/updates.jsx:584 +#: pkg/packagekit/updates.jsx:583 msgid "Initializing..." msgstr "Alustetaan ..." @@ -3800,9 +3753,9 @@ msgid "Insights: " msgstr "Oivalluksia: " -#: pkg/packagekit/kpatch.jsx:250 pkg/apps/application-list.jsx:206 -#: pkg/apps/application.jsx:52 +#: pkg/apps/application.jsx:52 pkg/apps/application-list.jsx:206 #: pkg/lib/cockpit-components-install-dialog.jsx:126 +#: pkg/packagekit/kpatch.jsx:250 msgid "Install" msgstr "Asennus" @@ -3814,7 +3767,7 @@ msgid "Install Stratis support" msgstr "Asenna Stratis-tuki" -#: pkg/packagekit/updates.jsx:1416 +#: pkg/packagekit/updates.jsx:1415 msgid "Install all updates" msgstr "Asenna kaikki päivitykset" @@ -3828,7 +3781,7 @@ msgid "Install cockpit-pcp" msgstr "Asenna cockpit-pcp" -#: pkg/packagekit/updates.jsx:1429 +#: pkg/packagekit/updates.jsx:1428 msgid "Install kpatch updates" msgstr "Asenna kpatch-päivitykset" @@ -3836,7 +3789,7 @@ msgid "Install realmd support" msgstr "Asenna realmd-tuki" -#: pkg/packagekit/updates.jsx:1415 pkg/packagekit/updates.jsx:1422 +#: pkg/packagekit/updates.jsx:1414 pkg/packagekit/updates.jsx:1421 msgid "Install security updates" msgstr "Asenna tietoturvapäivitykset" @@ -3863,17 +3816,17 @@ msgid "Installed" msgstr "Asennettu" -#: pkg/packagekit/updates.jsx:105 pkg/apps/application.jsx:40 +#: pkg/apps/application.jsx:40 pkg/packagekit/updates.jsx:105 msgid "Installing" msgstr "Asennetaan" -#: pkg/storaged/crypto/keyslots.jsx:224 +#: pkg/storaged/crypto/keyslots.jsx:258 #: pkg/lib/cockpit-components-install-dialog.jsx:193 msgid "Installing $0" msgstr "Asennetaan $0" +#: pkg/storaged/crypto/keyslots.jsx:274 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:39 -#: pkg/storaged/crypto/keyslots.jsx:240 msgid "Installing $0 would remove $1." msgstr "Paketin $0 asentaminen poistaa paketin $1." @@ -3881,24 +3834,24 @@ msgid "Installing packages" msgstr "Asennetaan paketit" -#: pkg/metrics/metrics.jsx:814 pkg/networkmanager/firewall.jsx:196 +#: pkg/networkmanager/firewall.jsx:196 pkg/metrics/metrics.jsx:814 msgid "Interface" msgid_plural "Interfaces" msgstr[0] "Liitäntä" msgstr[1] "Liitännät" -#: pkg/networkmanager/network-interface-members.jsx:197 -#: pkg/networkmanager/network-interface-members.jsx:199 +#: pkg/networkmanager/network-interface-members.jsx:202 +#: pkg/networkmanager/network-interface-members.jsx:204 msgid "Interface members" msgstr "Liitännän jäsenet" -#: pkg/networkmanager/network-main.jsx:180 -#: pkg/networkmanager/network-interface-members.jsx:203 -#: pkg/networkmanager/bond.jsx:165 pkg/networkmanager/firewall.jsx:859 +#: pkg/networkmanager/network-main.jsx:180 pkg/networkmanager/firewall.jsx:859 +#: pkg/networkmanager/bond.jsx:165 +#: pkg/networkmanager/network-interface-members.jsx:208 msgid "Interfaces" msgstr "Liitännät" -#: pkg/lib/cockpit.js:3854 +#: pkg/lib/cockpit.js:3850 msgid "Internal error" msgstr "Sisäinen virhe" @@ -3958,8 +3911,8 @@ msgid "Invalid range" msgstr "Ei kelvollinen alue" -#: pkg/packagekit/autoupdates.jsx:323 #: pkg/lib/cockpit-components-shutdown.jsx:115 pkg/lib/serverTime.js:690 +#: pkg/packagekit/autoupdates.jsx:323 msgid "Invalid time format" msgstr "Virheellinen aikamuoto" @@ -4078,29 +4031,29 @@ msgid "Key password" msgstr "Avaimen salasana" -#: pkg/storaged/crypto/keyslots.jsx:761 +#: pkg/storaged/crypto/keyslots.jsx:795 msgid "Key slots with unknown types can not be edited here" msgstr "Avainpaikkoja tuntemattomilla tyypeillä ei voi muokata täällä" -#: pkg/storaged/crypto/keyslots.jsx:424 +#: pkg/storaged/crypto/keyslots.jsx:458 msgid "Key source" msgstr "Avainlähde" -#: pkg/storaged/crypto/keyslots.jsx:766 pkg/storaged/crypto/keyslots.jsx:789 +#: pkg/storaged/crypto/keyslots.jsx:800 pkg/storaged/crypto/keyslots.jsx:823 msgid "Keys" msgstr "Avaimet" -#: pkg/storaged/stratis/stopped-pool.jsx:134 pkg/storaged/stratis/pool.jsx:544 -#: pkg/storaged/crypto/keyslots.jsx:755 +#: pkg/storaged/crypto/keyslots.jsx:789 pkg/storaged/stratis/pool.jsx:544 +#: pkg/storaged/stratis/stopped-pool.jsx:134 msgid "Keyserver" msgstr "Avainpalvelin" -#: pkg/storaged/stratis/create-dialog.jsx:102 pkg/storaged/stratis/pool.jsx:456 -#: pkg/storaged/crypto/keyslots.jsx:451 pkg/storaged/crypto/keyslots.jsx:509 +#: pkg/storaged/crypto/keyslots.jsx:485 pkg/storaged/crypto/keyslots.jsx:543 +#: pkg/storaged/stratis/pool.jsx:456 pkg/storaged/stratis/create-dialog.jsx:102 msgid "Keyserver address" msgstr "Avainpalvelimen osoite" -#: pkg/storaged/stratis/pool.jsx:496 pkg/storaged/crypto/keyslots.jsx:635 +#: pkg/storaged/crypto/keyslots.jsx:669 pkg/storaged/stratis/pool.jsx:496 msgid "Keyserver removal may prevent unlocking $0." msgstr "Avaimenpalvelimen poisto voi estää lukituksen avaamisen$0." @@ -4119,39 +4072,33 @@ msgstr "VDO-varanto" #: pkg/storaged/lvm2/block-logical-volume.jsx:191 -#, fuzzy -#| msgid "Logical volume" msgid "LVM2 logical volume" -msgstr "Looginen taltio" +msgstr "LVM2 looginen taltio" #: pkg/storaged/lvm2/volume-group.jsx:257 #: pkg/storaged/lvm2/volume-group.jsx:298 -#, fuzzy -#| msgid "Logical volumes" msgid "LVM2 logical volumes" -msgstr "Loogiset taltiot" +msgstr "LVM2 loogiset taltiot" #: pkg/storaged/lvm2/physical-volume.jsx:40 msgid "LVM2 physical volume" msgstr "LVM2 fyysinen taltio" #: pkg/storaged/lvm2/volume-group.jsx:393 -#, fuzzy -#| msgid "LVM2 physical volume" msgid "LVM2 physical volumes" -msgstr "LVM2 fyysinen taltio" +msgstr "LVM2 fyysiset taltiot" #: pkg/storaged/lvm2/volume-group.jsx:231 msgid "LVM2 volume group" msgstr "LVM-taltioryhmä" -#: pkg/storaged/utils.js:340 +#: pkg/storaged/utils.js:341 msgid "LVM2 volume group $0" msgstr "LVM2-taltioryhmä $0" #: pkg/storaged/btrfs/volume.jsx:119 pkg/storaged/btrfs/filesystem.jsx:69 msgid "Label" -msgstr "" +msgstr "Nimiö" #: pkg/lib/machine-info.js:68 msgid "Laptop" @@ -4175,7 +4122,7 @@ msgid "Last cannot be removed" msgstr "Viimeistä avaimen paikkaa ei voida poistaa" -#: pkg/packagekit/updates.jsx:785 +#: pkg/packagekit/updates.jsx:784 msgid "Last checked: $0" msgstr "Viimeksi tarkistettu: $0 sitten" @@ -4202,11 +4149,11 @@ msgid "Layout" msgstr "" +#: pkg/networkmanager/bond.jsx:152 pkg/lib/cockpit-components-dialog.jsx:234 +#: pkg/lib/cockpit-components-dialog.jsx:241 #: pkg/systemd/overview-cards/tuned-dialog.jsx:291 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:119 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:164 -#: pkg/networkmanager/bond.jsx:152 pkg/lib/cockpit-components-dialog.jsx:234 -#: pkg/lib/cockpit-components-dialog.jsx:241 msgid "Learn more" msgstr "Opi lisää" @@ -4220,7 +4167,7 @@ msgid "Leave domain" msgstr "Jätä toimialue" -#: pkg/sosreport/sosreport.jsx:319 +#: pkg/sosreport/sosreport.jsx:328 msgid "Leave empty to skip encryption" msgstr "Jätä tyhjäksi ohittaaksesi salauksen" @@ -4228,7 +4175,7 @@ msgid "Licensed under GNU LGPL version 2.1" msgstr "Käytetään GNU LGPL -versio 2.1 lisenssiä" -#: pkg/systemd/terminal.jsx:175 pkg/shell/topnav.jsx:190 +#: pkg/systemd/terminal.jsx:175 pkg/shell/topnav.jsx:200 msgid "Light" msgstr "Vaalea" @@ -4348,11 +4295,11 @@ msgid "Loading earlier entries" msgstr "Ladataan aiemmat merkinnät" -#: pkg/systemd/overview-cards/configurationCard.jsx:179 +#: pkg/systemd/overview-cards/configurationCard.jsx:177 msgid "Loading keys..." msgstr "Ladataan avaimet..." -#: pkg/systemd/overview-cards/configurationCard.jsx:175 +#: pkg/systemd/overview-cards/configurationCard.jsx:173 msgid "Loading of SSH keys failed" msgstr "SSH-avainten lataaminen epäonnistui" @@ -4372,12 +4319,12 @@ msgid "Loading unit failed" msgstr "Yksiköiden lataus epäonnistui" +#: pkg/storaged/storaged.jsx:66 pkg/kdump/kdump-view.jsx:438 #: pkg/systemd/service.jsx:132 pkg/systemd/logDetails.jsx:173 -#: pkg/systemd/services.jsx:683 pkg/systemd/logsJournal.jsx:268 -#: pkg/metrics/metrics.jsx:1978 pkg/kdump/kdump-view.jsx:438 -#: pkg/storaged/storaged.jsx:66 pkg/users/accounts-list.js:318 -#: pkg/users/accounts-list.js:339 pkg/users/accounts-list.js:452 -#: pkg/users/account-details.js:176 +#: pkg/systemd/logsJournal.jsx:268 pkg/systemd/services.jsx:683 +#: pkg/metrics/metrics.jsx:1978 pkg/users/account-details.js:176 +#: pkg/users/accounts-list.js:318 pkg/users/accounts-list.js:339 +#: pkg/users/accounts-list.js:452 msgid "Loading..." msgstr "Ladataan..." @@ -4405,12 +4352,12 @@ msgid "Local, $0" msgstr "paikallisesti polussa $0" -#: pkg/kdump/kdump-view.jsx:243 pkg/storaged/pages.jsx:716 -#: pkg/storaged/dialog.jsx:1138 pkg/storaged/dialog.jsx:1243 +#: pkg/storaged/dialog.jsx:1140 pkg/storaged/dialog.jsx:1245 +#: pkg/storaged/pages.jsx:716 pkg/kdump/kdump-view.jsx:243 msgid "Location" msgstr "Sijainti" -#: pkg/storaged/crypto/actions.jsx:75 pkg/users/lock-account-dialog.js:36 +#: pkg/storaged/crypto/actions.jsx:73 pkg/users/lock-account-dialog.js:36 msgid "Lock" msgstr "Lukitse" @@ -4422,7 +4369,7 @@ msgid "Lock account" msgstr "Lukitse tili" -#: pkg/storaged/crypto/locked-encrypted-data.jsx:31 +#: pkg/storaged/crypto/locked-encrypted-data.jsx:30 #, fuzzy #| msgid "Locked" msgid "Locked data" @@ -4432,8 +4379,8 @@ msgid "Locking $target" msgstr "Lukitaan $target" -#: pkg/static/login.html:139 pkg/static/login.js:668 -#: pkg/shell/hosts_dialog.jsx:764 pkg/shell/failures.jsx:75 +#: pkg/static/login.html:139 pkg/shell/hosts_dialog.jsx:764 +#: pkg/shell/failures.jsx:73 pkg/static/login.js:668 msgid "Log in" msgstr "Kirjaudu sisään" @@ -4449,7 +4396,7 @@ msgid "Log messages" msgstr "Kirjaa viestit" -#: pkg/metrics/metrics.jsx:1806 pkg/shell/topnav.jsx:222 +#: pkg/shell/topnav.jsx:233 pkg/metrics/metrics.jsx:1806 #: pkg/users/logout-account-dialog.js:36 msgid "Log out" msgstr "Kirjaudu ulos" @@ -4458,7 +4405,7 @@ msgid "Log user out" msgstr "Kirjaa käyttäjä ulos" -#: pkg/users/accounts-list.js:161 pkg/users/account-details.js:212 +#: pkg/users/account-details.js:212 pkg/users/accounts-list.js:161 msgid "Logged in" msgstr "Kirjautunut sisään" @@ -4473,20 +4420,20 @@ msgid "Logical Volume Manager partition" msgstr "Looginen taltio (tilannevedos)" -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:213 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:249 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:213 msgid "Logical size" msgstr "Looginen koko" -#: pkg/storaged/utils.js:290 +#: pkg/storaged/utils.js:291 msgid "Logical volume" msgstr "Looginen taltio" -#: pkg/storaged/utils.js:288 +#: pkg/storaged/utils.js:289 msgid "Logical volume (snapshot)" msgstr "Looginen taltio (tilannevedos)" -#: pkg/storaged/utils.js:362 +#: pkg/storaged/utils.js:363 msgid "Logical volume of $0" msgstr "$0:n looginen taltio" @@ -4498,7 +4445,7 @@ msgid "Login again" msgstr "Kirjaudu sisään uudelleen" -#: pkg/lib/cockpit.js:3844 +#: pkg/lib/cockpit.js:3840 msgid "Login failed" msgstr "Kirjautuminen epäonnistui" @@ -4540,16 +4487,12 @@ #: pkg/storaged/mdraid/mdraid-disk.jsx:122 pkg/storaged/mdraid/mdraid.jsx:193 #: pkg/storaged/mdraid/mdraid.jsx:201 -#, fuzzy -#| msgid "RAID device" msgid "MDRAID device" -msgstr "RAID-laite" +msgstr "MDRAID-laite" -#: pkg/storaged/utils.js:334 -#, fuzzy -#| msgid "RAID device $0" +#: pkg/storaged/utils.js:335 msgid "MDRAID device $0" -msgstr "RAID-laite $0" +msgstr "MDRAID-laite $0" #: pkg/storaged/mdraid/mdraid-disk.jsx:89 #, fuzzy @@ -4591,7 +4534,7 @@ msgid "Machine ID" msgstr "Koneen ID" -#: pkg/systemd/overview-cards/configurationCard.jsx:196 +#: pkg/systemd/overview-cards/configurationCard.jsx:194 msgid "Machine SSH key fingerprints" msgstr "Koneen SSH-avaimen sormenjäljet" @@ -4693,8 +4636,8 @@ msgid "Mask service" msgstr "Piilota palvelu" -#: pkg/systemd/services.jsx:250 pkg/systemd/services.jsx:251 -#: pkg/systemd/service-details.jsx:426 +#: pkg/systemd/service-details.jsx:426 pkg/systemd/services.jsx:250 +#: pkg/systemd/services.jsx:251 msgid "Masked" msgstr "Piilotettu" @@ -4719,10 +4662,11 @@ msgid "Media drive" msgstr "Optinen asema" -#: pkg/systemd/overview-cards/usageCard.jsx:144 pkg/systemd/hwinfo.jsx:290 -#: pkg/systemd/hwinfo.jsx:334 pkg/systemd/service-details.jsx:659 -#: pkg/metrics/metrics.jsx:123 pkg/metrics/metrics.jsx:880 -#: pkg/metrics/metrics.jsx:1572 pkg/metrics/metrics.jsx:1950 +#: pkg/systemd/hwinfo.jsx:290 pkg/systemd/hwinfo.jsx:334 +#: pkg/systemd/overview-cards/usageCard.jsx:144 +#: pkg/systemd/service-details.jsx:659 pkg/metrics/metrics.jsx:123 +#: pkg/metrics/metrics.jsx:880 pkg/metrics/metrics.jsx:1572 +#: pkg/metrics/metrics.jsx:1950 msgid "Memory" msgstr "Muisti" @@ -4746,12 +4690,12 @@ msgid "Message to logged in users" msgstr "Viesti sisäänkirjautuneille käyttäjille" -#: pkg/shell/failures.jsx:43 +#: pkg/shell/failures.jsx:42 msgid "Messages related to the failure might be found in the journal:" msgstr "Virheeseen liittyvät viestit saattavat löytyä päiväkirjasta:" -#: pkg/storaged/lvm2/vdo-pool.jsx:83 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:145 +#: pkg/storaged/lvm2/vdo-pool.jsx:83 msgid "Metadata used" msgstr "Metadataa käytetty" @@ -4808,8 +4752,8 @@ msgid "Mode" msgstr "Tila" +#: pkg/storaged/drive/drive.jsx:121 pkg/systemd/hwinfo.jsx:277 #: pkg/systemd/overview-cards/systemInformationCard.jsx:111 -#: pkg/systemd/hwinfo.jsx:277 pkg/storaged/drive/drive.jsx:121 msgid "Model" msgstr "Malli" @@ -4834,14 +4778,14 @@ msgid "Monthly" msgstr "Joka kuukausi" -#: pkg/packagekit/updates.jsx:941 +#: pkg/packagekit/updates.jsx:940 msgid "More info..." msgstr "Lisätietoja..." -#: pkg/storaged/stratis/filesystem.jsx:173 pkg/storaged/nfs/nfs.jsx:310 -#: pkg/storaged/filesystem/mounting-dialog.jsx:338 +#: pkg/storaged/nfs/nfs.jsx:310 pkg/storaged/btrfs/subvolume.jsx:343 +#: pkg/storaged/stratis/filesystem.jsx:173 +#: pkg/storaged/filesystem/mounting-dialog.jsx:356 #: pkg/storaged/filesystem/filesystem.jsx:103 -#: pkg/storaged/btrfs/subvolume.jsx:343 msgid "Mount" msgstr "Liitos" @@ -4849,7 +4793,7 @@ msgid "Mount Point" msgstr "Liitoskohta" -#: pkg/storaged/filesystem/mounting-dialog.jsx:134 +#: pkg/storaged/filesystem/mounting-dialog.jsx:137 msgid "Mount after network becomes available, ignore failure" msgstr "Liitä, kun verkko tulee saataville, jätä vika huomiotta" @@ -4866,15 +4810,15 @@ msgid "Mount automatically on $0 on boot" msgstr "Liitä automaattisesti $0:een käynnistyksessä" -#: pkg/storaged/filesystem/mounting-dialog.jsx:126 +#: pkg/storaged/filesystem/mounting-dialog.jsx:129 msgid "Mount before services start" msgstr "Liitä ennen palveluiden aloittamista" -#: pkg/storaged/filesystem/mounting-dialog.jsx:334 +#: pkg/storaged/filesystem/mounting-dialog.jsx:352 msgid "Mount configuration" msgstr "Liitoksen kokoonpano" -#: pkg/storaged/filesystem/mounting-dialog.jsx:332 +#: pkg/storaged/filesystem/mounting-dialog.jsx:350 msgid "Mount filesystem" msgstr "Liitoksen tiedostojärjestelmä" @@ -4890,12 +4834,12 @@ msgid "Mount options" msgstr "Liitosvalinnat" +#: pkg/storaged/nfs/nfs.jsx:329 pkg/storaged/btrfs/subvolume.jsx:415 +#: pkg/storaged/block/format-dialog.jsx:299 pkg/storaged/stratis/pool.jsx:103 #: pkg/storaged/stratis/filesystem.jsx:90 -#: pkg/storaged/stratis/filesystem.jsx:222 pkg/storaged/stratis/pool.jsx:103 -#: pkg/storaged/block/format-dialog.jsx:297 pkg/storaged/nfs/nfs.jsx:329 -#: pkg/storaged/filesystem/mounting-dialog.jsx:307 +#: pkg/storaged/stratis/filesystem.jsx:222 +#: pkg/storaged/filesystem/mounting-dialog.jsx:326 #: pkg/storaged/filesystem/filesystem.jsx:147 -#: pkg/storaged/btrfs/subvolume.jsx:415 msgid "Mount point" msgstr "Liitoskohta" @@ -4915,11 +4859,11 @@ msgid "Mount point must start with \"/\"." msgstr "Liitoskohdan täytyy alkaa \"/\":lla." -#: pkg/storaged/nfs/nfs.jsx:172 pkg/storaged/filesystem/mounting-dialog.jsx:60 +#: pkg/storaged/nfs/nfs.jsx:172 pkg/storaged/filesystem/mounting-dialog.jsx:61 msgid "Mount read only" msgstr "Liitä vain luku -tilassa" -#: pkg/storaged/filesystem/mounting-dialog.jsx:130 +#: pkg/storaged/filesystem/mounting-dialog.jsx:133 msgid "Mount without waiting, ignore failure" msgstr "Liitä odottamatta, jätä vika huomiotta" @@ -4927,15 +4871,15 @@ msgid "Mounting $target" msgstr "Liitetään $target" -#: pkg/storaged/filesystem/mounting-dialog.jsx:71 +#: pkg/storaged/filesystem/mounting-dialog.jsx:74 msgid "Mounts before services start" msgstr "Liittyy ennen palveluiden aloittamista" -#: pkg/storaged/filesystem/mounting-dialog.jsx:85 +#: pkg/storaged/filesystem/mounting-dialog.jsx:88 msgid "Mounts in parallel with services" msgstr "Liittyy yhtäaikaa palveluiden aloittamisten kanssa" -#: pkg/storaged/filesystem/mounting-dialog.jsx:96 +#: pkg/storaged/filesystem/mounting-dialog.jsx:99 msgid "Mounts in parallel with services, but after network is available" msgstr "" "Liittyy yhtäaikaa palveluiden aloittamisten kanssa, mutta sen jälkeen, kun " @@ -4946,9 +4890,6 @@ msgstr "Monijärjestelmäinen alusta" #: pkg/storaged/drive/drive.jsx:135 -#, fuzzy -#| msgctxt "storage" -#| msgid "Multipathed devices" msgid "Multipathed devices" msgstr "Monipolkuiset laitteet" @@ -4969,35 +4910,34 @@ msgid "NTP server" msgstr "NTP-palvelin" -#: pkg/systemd/timer-dialog.jsx:157 pkg/systemd/hwinfo.jsx:86 -#: pkg/networkmanager/network-main.jsx:185 -#: pkg/networkmanager/network-main.jsx:200 -#: pkg/networkmanager/dialogs-common.jsx:142 -#: pkg/storaged/stratis/create-dialog.jsx:50 -#: pkg/storaged/stratis/filesystem.jsx:85 -#: pkg/storaged/stratis/filesystem.jsx:193 -#: pkg/storaged/stratis/filesystem.jsx:217 pkg/storaged/stratis/pool.jsx:92 -#: pkg/storaged/stratis/pool.jsx:166 pkg/storaged/stratis/pool.jsx:514 -#: pkg/storaged/lvm2/vdo-pool.jsx:78 pkg/storaged/lvm2/create-dialog.jsx:47 +#: pkg/storaged/partitions/partition.jsx:227 pkg/storaged/btrfs/volume.jsx:89 +#: pkg/storaged/btrfs/subvolume.jsx:148 pkg/storaged/btrfs/subvolume.jsx:413 +#: pkg/storaged/block/format-dialog.jsx:293 +#: pkg/storaged/iscsi/create-dialog.jsx:111 +#: pkg/storaged/iscsi/create-dialog.jsx:168 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:166 -#: pkg/storaged/lvm2/volume-group.jsx:64 pkg/storaged/lvm2/volume-group.jsx:116 -#: pkg/storaged/lvm2/volume-group.jsx:380 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:44 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:138 #: pkg/storaged/lvm2/block-logical-volume.jsx:49 #: pkg/storaged/lvm2/block-logical-volume.jsx:238 #: pkg/storaged/lvm2/block-logical-volume.jsx:286 -#: pkg/storaged/block/format-dialog.jsx:291 -#: pkg/storaged/iscsi/create-dialog.jsx:111 -#: pkg/storaged/iscsi/create-dialog.jsx:168 +#: pkg/storaged/lvm2/create-dialog.jsx:47 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:44 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:138 +#: pkg/storaged/lvm2/volume-group.jsx:64 pkg/storaged/lvm2/volume-group.jsx:116 +#: pkg/storaged/lvm2/volume-group.jsx:380 pkg/storaged/lvm2/vdo-pool.jsx:78 +#: pkg/storaged/stratis/pool.jsx:92 pkg/storaged/stratis/pool.jsx:166 +#: pkg/storaged/stratis/pool.jsx:514 pkg/storaged/stratis/create-dialog.jsx:50 +#: pkg/storaged/stratis/filesystem.jsx:85 +#: pkg/storaged/stratis/filesystem.jsx:193 +#: pkg/storaged/stratis/filesystem.jsx:217 #: pkg/storaged/filesystem/filesystem.jsx:119 #: pkg/storaged/filesystem/filesystem.jsx:141 -#: pkg/storaged/partitions/partition.jsx:227 -#: pkg/storaged/mdraid/create-dialog.jsx:47 pkg/storaged/mdraid/mdraid.jsx:285 -#: pkg/storaged/btrfs/volume.jsx:89 pkg/storaged/btrfs/subvolume.jsx:148 -#: pkg/storaged/btrfs/subvolume.jsx:413 pkg/shell/credentials.jsx:101 -#: pkg/packagekit/updates.jsx:448 pkg/users/authorized-keys-panel.js:127 -#: pkg/users/group-create-dialog.js:39 +#: pkg/storaged/mdraid/mdraid.jsx:285 pkg/storaged/mdraid/create-dialog.jsx:47 +#: pkg/networkmanager/network-main.jsx:185 +#: pkg/networkmanager/network-main.jsx:200 +#: pkg/networkmanager/dialogs-common.jsx:142 pkg/systemd/timer-dialog.jsx:157 +#: pkg/systemd/hwinfo.jsx:86 pkg/shell/credentials.jsx:101 +#: pkg/packagekit/updates.jsx:447 pkg/users/group-create-dialog.js:39 +#: pkg/users/authorized-keys-panel.js:127 msgid "Name" msgstr "Nimi" @@ -5005,19 +4945,19 @@ msgid "Name can not be empty." msgstr "Nimi ei voi olla tyhjä." -#: pkg/storaged/utils.js:212 pkg/storaged/btrfs/utils.jsx:85 +#: pkg/storaged/btrfs/utils.jsx:85 pkg/storaged/utils.js:213 msgid "Name cannot be empty." msgstr "Nimi ei voi olla tyhjä." -#: pkg/storaged/utils.js:241 +#: pkg/storaged/utils.js:242 msgid "Name cannot be longer than $0 bytes" msgstr "Nimi voi olla enintään $0 tavua pitkä" -#: pkg/storaged/utils.js:239 +#: pkg/storaged/utils.js:240 msgid "Name cannot be longer than $0 characters" msgstr "Nimi voi sisältää enintään $0 merkkiä" -#: pkg/storaged/utils.js:214 +#: pkg/storaged/utils.js:215 msgid "Name cannot be longer than 127 characters." msgstr "Nimi voi sisältää enintään 127 merkkiä." @@ -5027,7 +4967,7 @@ msgid "Name cannot be longer than 255 characters." msgstr "Nimi voi sisältää enintään 127 merkkiä." -#: pkg/storaged/utils.js:218 +#: pkg/storaged/utils.js:219 msgid "Name cannot contain the character '$0'." msgstr "Nimi ei voi sisältää merkkiä '$0'." @@ -5037,7 +4977,7 @@ msgid "Name cannot contain the character '/'." msgstr "Nimi ei voi sisältää merkkiä '$0'." -#: pkg/storaged/utils.js:220 +#: pkg/storaged/utils.js:221 msgid "Name cannot contain whitespace." msgstr "Nimi ei voi sisältää välilyöntiä." @@ -5088,9 +5028,9 @@ msgid "Networked storage" msgstr "Verkon käyttö" -#: pkg/networkmanager/index.html:23 +#: pkg/networkmanager/index.html:23 pkg/networkmanager/firewall.jsx:1053 #: pkg/networkmanager/network-interface.jsx:705 -#: pkg/networkmanager/firewall.jsx:1053 pkg/networkmanager/manifest.json:0 +#: pkg/networkmanager/manifest.json:0 #: src/appstream/org.cockpit-project.cockpit-networkmanager.metainfo.xml.in:5 msgid "Networking" msgstr "Verkko" @@ -5099,11 +5039,11 @@ msgid "Never" msgstr "Ei koskaan" -#: pkg/users/expiration-dialogs.js:42 pkg/users/account-details.js:75 +#: pkg/users/account-details.js:75 pkg/users/expiration-dialogs.js:42 msgid "Never expire account" msgstr "Älä koskaan vanhenna tiliä" -#: pkg/users/expiration-dialogs.js:154 pkg/users/account-details.js:67 +#: pkg/users/account-details.js:67 pkg/users/expiration-dialogs.js:154 msgid "Never expire password" msgstr "Älä koskaan vanhenna salasanaa" @@ -5133,8 +5073,8 @@ msgid "New name" msgstr "Uusi nimi" -#: pkg/storaged/stratis/pool.jsx:407 pkg/storaged/crypto/keyslots.jsx:435 -#: pkg/storaged/crypto/keyslots.jsx:485 +#: pkg/storaged/crypto/keyslots.jsx:469 pkg/storaged/crypto/keyslots.jsx:519 +#: pkg/storaged/stratis/pool.jsx:407 msgid "New passphrase" msgstr "Uusi tunnuslause" @@ -5142,7 +5082,7 @@ msgid "New password" msgstr "Uusi salasana" -#: pkg/users/password-dialogs.js:86 pkg/lib/credentials.js:241 +#: pkg/lib/credentials.js:241 pkg/users/password-dialogs.js:86 msgid "New password was not accepted" msgstr "Uutta salasanaa ei hyväksytty" @@ -5150,7 +5090,7 @@ msgid "Next" msgstr "Seuraava" -#: pkg/systemd/reporting.jsx:290 pkg/networkmanager/network-interface.jsx:241 +#: pkg/networkmanager/network-interface.jsx:241 pkg/systemd/reporting.jsx:290 msgid "No" msgstr "Ei" @@ -5166,7 +5106,7 @@ msgid "No applications installed or available." msgstr "Ei sovelluksia asennettuna tai saatavilla." -#: pkg/storaged/crypto/keyslots.jsx:778 +#: pkg/storaged/crypto/keyslots.jsx:812 msgid "No available slots" msgstr "Ei käytettävissä olevia paikkoja" @@ -5174,11 +5114,9 @@ msgid "No block devices are available." msgstr "Lohkolaitteita ei ole saatavilla." -#: pkg/storaged/stratis/stopped-pool.jsx:140 pkg/storaged/stratis/pool.jsx:565 -#, fuzzy -#| msgid "No boot device found" +#: pkg/storaged/stratis/pool.jsx:565 pkg/storaged/stratis/stopped-pool.jsx:140 msgid "No block devices found" -msgstr "Käynnistyslaitetta ei löytynyt" +msgstr "Lohkolaitetta ei löytynyt" #: pkg/networkmanager/interfaces.js:1356 msgid "No carrier" @@ -5214,9 +5152,9 @@ msgid "No devices found" msgstr "Käynnistyslaitetta ei löytynyt" -#: pkg/storaged/stratis/pool.jsx:208 pkg/storaged/lvm2/create-dialog.jsx:54 -#: pkg/storaged/lvm2/volume-group.jsx:200 -#: pkg/storaged/mdraid/create-dialog.jsx:101 pkg/storaged/mdraid/mdraid.jsx:158 +#: pkg/storaged/lvm2/create-dialog.jsx:54 +#: pkg/storaged/lvm2/volume-group.jsx:200 pkg/storaged/stratis/pool.jsx:208 +#: pkg/storaged/mdraid/mdraid.jsx:158 pkg/storaged/mdraid/create-dialog.jsx:101 msgid "No disks are available." msgstr "Levyjä ei ole saatavilla." @@ -5248,7 +5186,7 @@ msgid "No filesystems" msgstr "Ei tiedostojärjestelmää" -#: pkg/storaged/crypto/keyslots.jsx:783 +#: pkg/storaged/crypto/keyslots.jsx:817 msgid "No free key slots" msgstr "Ei vapaita avainpaikkoja" @@ -5266,7 +5204,7 @@ msgid "No group name specified" msgstr "Ryhmän nimeä ei ole määritetty" -#: pkg/systemd/overview-cards/configurationCard.jsx:181 +#: pkg/systemd/overview-cards/configurationCard.jsx:179 msgid "No host keys found." msgstr "Koneen avaimia ei löytynyt." @@ -5274,7 +5212,7 @@ msgid "No installation package found for this application." msgstr "Tälle sovellukselle ei löytynyt asennuspakettia." -#: pkg/storaged/crypto/keyslots.jsx:700 +#: pkg/storaged/crypto/keyslots.jsx:734 msgid "No keys added" msgstr "Ei avaimia lisätty" @@ -5286,8 +5224,8 @@ msgid "No log entries" msgstr "Ei lokimerkintöjä" -#: pkg/storaged/lvm2/volume-group.jsx:297 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:126 +#: pkg/storaged/lvm2/volume-group.jsx:297 msgid "No logical volumes" msgstr "Ei loogisia taltioita" @@ -5351,8 +5289,8 @@ msgid "No storage found" msgstr "Ei tallennustilaa" -#: pkg/storaged/btrfs/volume.jsx:157 pkg/storaged/btrfs/filesystem.jsx:86 -#: pkg/storaged/btrfs/subvolume.jsx:423 +#: pkg/storaged/btrfs/volume.jsx:157 pkg/storaged/btrfs/subvolume.jsx:423 +#: pkg/storaged/btrfs/filesystem.jsx:86 #, fuzzy #| msgid "No logical volumes" msgid "No subvolumes" @@ -5367,7 +5305,7 @@ msgid "No system modifications" msgstr "Ei järjestelmän muutoksia" -#: pkg/sosreport/sosreport.jsx:488 +#: pkg/sosreport/sosreport.jsx:497 msgid "No system reports." msgstr "Ei järjestelmän ilmoituksia." @@ -5379,8 +5317,8 @@ msgid "No user name specified" msgstr "Käyttäjänimeä ei ole määritetty" -#: pkg/systemd/overview-cards/tuned-dialog.jsx:232 #: pkg/networkmanager/firewall.jsx:854 pkg/kdump/kdump-view.jsx:488 +#: pkg/systemd/overview-cards/tuned-dialog.jsx:232 msgid "None" msgstr "Ei yhtään" @@ -5413,24 +5351,20 @@ msgstr "Ei yhdistetty koneeseen" #: pkg/storaged/lvm2/physical-volume.jsx:78 -#, fuzzy -#| msgid "Not enough space" msgid "Not enough free space" -msgstr "Ei tarpeeksi tilaa" +msgstr "Ei tarpeeksi levytilaa vapaana" -#: pkg/storaged/stratis/filesystem.jsx:75 pkg/storaged/stratis/pool.jsx:306 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:95 +#: pkg/storaged/stratis/pool.jsx:306 pkg/storaged/stratis/filesystem.jsx:75 msgid "Not enough space" msgstr "Ei tarpeeksi tilaa" #: pkg/storaged/lvm2/block-logical-volume.jsx:183 -#, fuzzy -#| msgid "Not enough space to grow." msgid "Not enough space to grow" -msgstr "Ei tarpeeksi tilaa kasvaa." +msgstr "Ei tarpeeksi tilaa kasvaa" -#: pkg/systemd/services.jsx:222 pkg/storaged/pages.jsx:278 -#: pkg/storaged/pages.jsx:283 +#: pkg/storaged/pages.jsx:278 pkg/storaged/pages.jsx:283 +#: pkg/systemd/services.jsx:222 msgid "Not found" msgstr "Ei löytynyt" @@ -5448,7 +5382,7 @@ msgid "Not permitted to configure realms" msgstr "Alueen määrittäminen ei ole sallittua" -#: pkg/lib/cockpit.js:3842 +#: pkg/lib/cockpit.js:3838 msgid "Not permitted to perform this action." msgstr "Ei oikeutta suorittaa tätä toimintoa." @@ -5456,13 +5390,13 @@ msgid "Not ready" msgstr "Ei valmiina" -#: pkg/packagekit/updates.jsx:1366 +#: pkg/packagekit/updates.jsx:1365 msgid "Not registered" msgstr "Ei rekisteröity" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:466 #: pkg/systemd/services.jsx:234 pkg/systemd/services.jsx:237 -#: pkg/systemd/services.jsx:697 pkg/systemd/service-details.jsx:466 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:697 msgid "Not running" msgstr "Ei käynnissä" @@ -5486,11 +5420,11 @@ msgid "Notice and above" msgstr "Ilmoitus ja yli" -#: pkg/sosreport/sosreport.jsx:322 +#: pkg/sosreport/sosreport.jsx:331 msgid "Obfuscate network addresses, hostnames, and usernames" msgstr "Hämärrä verkko-osoitteet, isäntänimet ja käyttäjänimet" -#: pkg/sosreport/sosreport.jsx:443 +#: pkg/sosreport/sosreport.jsx:452 msgid "Obfuscated" msgstr "Hämärretty" @@ -5502,8 +5436,8 @@ msgid "Occurred between $0 and $1" msgstr "Tapahtui välillä $0 ja $1" -#: pkg/selinux/setroubleshoot-view.jsx:414 #: pkg/lib/cockpit-components-logs-panel.jsx:98 +#: pkg/selinux/setroubleshoot-view.jsx:414 msgid "Occurrences" msgstr "Tapahtumat" @@ -5511,7 +5445,7 @@ msgid "Ok" msgstr "OK" -#: pkg/storaged/stratis/pool.jsx:402 pkg/storaged/crypto/keyslots.jsx:482 +#: pkg/storaged/crypto/keyslots.jsx:516 pkg/storaged/stratis/pool.jsx:402 msgid "Old passphrase" msgstr "Vanha tunnuslause" @@ -5519,7 +5453,7 @@ msgid "Old password" msgstr "Vanha salasana" -#: pkg/users/password-dialogs.js:55 pkg/lib/credentials.js:221 +#: pkg/lib/credentials.js:221 pkg/users/password-dialogs.js:55 msgid "Old password not accepted" msgstr "Vanhaa salasanaa ei hyväksytty" @@ -5557,7 +5491,7 @@ "Käytä vain hyväksyttyjä ja sallittuja algoritmeja käynnistettäessä FIPS-" "tilassa." -#: pkg/shell/topnav.jsx:244 +#: pkg/shell/topnav.jsx:255 msgid "Ooops!" msgstr "Hups!" @@ -5569,10 +5503,10 @@ msgid "Operation '$operation' on $target" msgstr "Toimi '$operation' $target:lla" -#: pkg/sosreport/sosreport.jsx:321 pkg/networkmanager/bridge.jsx:104 -#: pkg/storaged/stratis/create-dialog.jsx:64 +#: pkg/storaged/crypto/encryption.jsx:234 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:223 -#: pkg/storaged/crypto/encryption.jsx:234 pkg/users/account-details.js:269 +#: pkg/storaged/stratis/create-dialog.jsx:64 pkg/sosreport/sosreport.jsx:330 +#: pkg/networkmanager/bridge.jsx:104 pkg/users/account-details.js:269 msgid "Options" msgstr "Valinnat" @@ -5584,7 +5518,7 @@ msgid "Other" msgstr "Muu" -#: pkg/users/account-create-dialog.js:131 pkg/users/account-details.js:279 +#: pkg/users/account-details.js:279 pkg/users/account-create-dialog.js:131 msgid "" "Other authentication methods are still available even when interactive " "password authentication is not allowed." @@ -5605,13 +5539,13 @@ msgid "Overview" msgstr "Esittely" -#: pkg/storaged/block/format-dialog.jsx:322 #: pkg/storaged/partitions/format-disk-dialog.jsx:61 +#: pkg/storaged/block/format-dialog.jsx:324 msgid "Overwrite" msgstr "Korvaa" -#: pkg/storaged/block/format-dialog.jsx:325 #: pkg/storaged/partitions/format-disk-dialog.jsx:64 +#: pkg/storaged/block/format-dialog.jsx:327 msgid "Overwrite existing data with zeros (slower)" msgstr "Korvaa olemassa olevat tiedot nollilla (hitaampi)" @@ -5619,7 +5553,7 @@ msgid "PCI" msgstr "PCI" -#: pkg/storaged/dialog.jsx:1329 +#: pkg/storaged/dialog.jsx:1331 msgid "PID" msgstr "PID" @@ -5627,7 +5561,7 @@ msgid "Package cockpit-pcp is missing for metrics history" msgstr "Paketti cockpit-pcp puuttuu, mittarihistoriaa ei voida näyttää" -#: pkg/packagekit/updates.jsx:690 pkg/packagekit/updates.jsx:769 +#: pkg/packagekit/updates.jsx:689 pkg/packagekit/updates.jsx:768 msgid "Package information" msgstr "Pakettitiedot" @@ -5635,15 +5569,15 @@ msgid "PackageKit crashed" msgstr "PackageKit kaatui" -#: pkg/packagekit/updates.jsx:1104 +#: pkg/packagekit/updates.jsx:1103 msgid "PackageKit is not installed" msgstr "PackageKit ei ole asennettu" -#: pkg/packagekit/updates.jsx:1305 +#: pkg/packagekit/updates.jsx:1304 msgid "PackageKit reported error code $0" msgstr "PackageKit raportoi virhekoodin $0" -#: pkg/packagekit/updates.jsx:364 +#: pkg/packagekit/updates.jsx:363 msgid "Packages" msgstr "Paketit" @@ -5671,7 +5605,7 @@ msgid "Partition" msgstr "Osio" -#: pkg/storaged/utils.js:364 +#: pkg/storaged/utils.js:365 msgid "Partition of $0" msgstr "$0:n osio" @@ -5694,53 +5628,53 @@ msgid "Passive" msgstr "Passiivinen" +#: pkg/storaged/crypto/actions.jsx:42 pkg/storaged/crypto/keyslots.jsx:464 +#: pkg/storaged/crypto/keyslots.jsx:784 +#: pkg/storaged/block/format-dialog.jsx:336 +#: pkg/storaged/block/format-dialog.jsx:364 pkg/storaged/stratis/pool.jsx:201 +#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 +#: pkg/storaged/stratis/create-dialog.jsx:75 #: pkg/storaged/stratis/stopped-pool.jsx:58 #: pkg/storaged/stratis/stopped-pool.jsx:129 -#: pkg/storaged/stratis/create-dialog.jsx:75 pkg/storaged/stratis/pool.jsx:201 -#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 -#: pkg/storaged/block/format-dialog.jsx:334 -#: pkg/storaged/block/format-dialog.jsx:362 -#: pkg/storaged/filesystem/mounting-dialog.jsx:323 -#: pkg/storaged/crypto/actions.jsx:43 pkg/storaged/crypto/keyslots.jsx:430 -#: pkg/storaged/crypto/keyslots.jsx:750 +#: pkg/storaged/filesystem/mounting-dialog.jsx:341 msgid "Passphrase" msgstr "Tunnuslause" -#: pkg/storaged/crypto/keyslots.jsx:573 +#: pkg/storaged/crypto/keyslots.jsx:607 msgid "Passphrase can not be empty" msgstr "Tunnuslause ei voi olla tyhjä" -#: pkg/storaged/stratis/create-dialog.jsx:79 pkg/storaged/stratis/pool.jsx:204 +#: pkg/storaged/crypto/keyslots.jsx:178 pkg/storaged/crypto/keyslots.jsx:472 +#: pkg/storaged/crypto/keyslots.jsx:517 pkg/storaged/crypto/keyslots.jsx:521 +#: pkg/storaged/block/format-dialog.jsx:340 +#: pkg/storaged/block/format-dialog.jsx:368 pkg/storaged/stratis/pool.jsx:204 #: pkg/storaged/stratis/pool.jsx:379 pkg/storaged/stratis/pool.jsx:405 #: pkg/storaged/stratis/pool.jsx:408 pkg/storaged/stratis/pool.jsx:463 -#: pkg/storaged/block/format-dialog.jsx:338 -#: pkg/storaged/block/format-dialog.jsx:366 -#: pkg/storaged/filesystem/mounting-dialog.jsx:326 -#: pkg/storaged/crypto/keyslots.jsx:145 pkg/storaged/crypto/keyslots.jsx:438 -#: pkg/storaged/crypto/keyslots.jsx:483 pkg/storaged/crypto/keyslots.jsx:487 +#: pkg/storaged/stratis/create-dialog.jsx:79 +#: pkg/storaged/filesystem/mounting-dialog.jsx:344 msgid "Passphrase cannot be empty" msgstr "Tunnuslause ei voi olla tyhjä" -#: pkg/storaged/crypto/keyslots.jsx:595 +#: pkg/storaged/crypto/keyslots.jsx:629 msgid "Passphrase from any other key slot" msgstr "Tunnuslause mistä tahansa muusta avainpaikasta" -#: pkg/storaged/stratis/pool.jsx:439 pkg/storaged/crypto/keyslots.jsx:586 +#: pkg/storaged/crypto/keyslots.jsx:620 pkg/storaged/stratis/pool.jsx:439 msgid "Passphrase removal may prevent unlocking $0." msgstr "Salalauseen poisto voi estää laitteen $0 lukituksen avaamisen." -#: pkg/storaged/stratis/create-dialog.jsx:88 pkg/storaged/stratis/pool.jsx:381 -#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/block/format-dialog.jsx:347 -#: pkg/storaged/crypto/keyslots.jsx:447 pkg/storaged/crypto/keyslots.jsx:492 +#: pkg/storaged/crypto/keyslots.jsx:481 pkg/storaged/crypto/keyslots.jsx:526 +#: pkg/storaged/block/format-dialog.jsx:349 pkg/storaged/stratis/pool.jsx:381 +#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/stratis/create-dialog.jsx:88 msgid "Passphrases do not match" msgstr "Tunnuslauseet eivät täsmää" #: pkg/static/login.html:99 pkg/storaged/iscsi/create-dialog.jsx:34 #: pkg/storaged/iscsi/create-dialog.jsx:140 pkg/shell/hosts_dialog.jsx:845 -#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/credentials.jsx:119 -#: pkg/shell/credentials.jsx:262 pkg/shell/credentials.jsx:318 -#: pkg/shell/superuser.jsx:144 pkg/users/account-create-dialog.js:139 -#: pkg/users/account-details.js:296 +#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/superuser.jsx:144 +#: pkg/shell/credentials.jsx:119 pkg/shell/credentials.jsx:262 +#: pkg/shell/credentials.jsx:318 pkg/users/account-details.js:296 +#: pkg/users/account-create-dialog.js:139 msgid "Password" msgstr "Salasana" @@ -5822,8 +5756,8 @@ msgid "Path to directory" msgstr "Polku hakemistoon" -#: pkg/shell/credentials.jsx:172 #: pkg/lib/cockpit-components-file-autocomplete.jsx:169 +#: pkg/shell/credentials.jsx:172 msgid "Path to file" msgstr "Polku tiedostoon" @@ -5847,7 +5781,7 @@ #: pkg/networkmanager/wireguard.jsx:268 msgid "Peers" -msgstr "" +msgstr "Osapuolet" #: pkg/networkmanager/wireguard.jsx:273 msgid "" @@ -5863,7 +5797,7 @@ "Performance Co-Pilot kerää ja analysoi suorituskykymittareita " "järjestelmästäsi." -#: pkg/systemd/overview-cards/configurationCard.jsx:85 +#: pkg/systemd/overview-cards/configurationCard.jsx:84 msgid "Performance profile" msgstr "Suorituskykyprofiili" @@ -5879,9 +5813,10 @@ msgid "Permanently delete $0 group?" msgstr "Poista ryhmä $0 pysyvästi?" -#: pkg/storaged/stratis/pool.jsx:145 pkg/storaged/lvm2/volume-group.jsx:93 +#: pkg/storaged/partitions/partition.jsx:54 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:119 -#: pkg/storaged/partitions/partition.jsx:54 pkg/storaged/mdraid/mdraid.jsx:123 +#: pkg/storaged/lvm2/volume-group.jsx:93 pkg/storaged/stratis/pool.jsx:145 +#: pkg/storaged/mdraid/mdraid.jsx:123 msgid "Permanently delete $0?" msgstr "Poista $0 pysyvästi?" @@ -5909,27 +5844,23 @@ msgid "Physical" msgstr "Fyysinen" +#: pkg/storaged/block/resize.jsx:436 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:180 #: pkg/storaged/lvm2/block-logical-volume.jsx:130 -#: pkg/storaged/block/resize.jsx:436 -#, fuzzy -#| msgid "Physical volumes" msgid "Physical Volumes" msgstr "Fyysiset taltiot" -#: pkg/storaged/lvm2/volume-group.jsx:390 #: pkg/storaged/lvm2/block-logical-volume.jsx:356 +#: pkg/storaged/lvm2/volume-group.jsx:390 msgid "Physical volumes" msgstr "Fyysiset taltiot" #: pkg/storaged/block/resize.jsx:279 -#, fuzzy -#| msgid "Physical volumes can not be resized here." msgid "Physical volumes can not be resized here" -msgstr "Fyysisten taltioiden kokoja ei voida muuttaa tässä." +msgstr "Fyysisten taltioiden kokoja ei voida muuttaa tässä" -#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 #: pkg/lib/cockpit-components-shutdown.jsx:211 pkg/lib/serverTime.js:599 +#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 msgid "Pick date" msgstr "Valitse päivämäärä" @@ -5981,7 +5912,7 @@ msgid "Please unmount them first." msgstr "" -#: pkg/storaged/utils.js:284 +#: pkg/storaged/utils.js:285 msgid "Pool for thin logical volumes" msgstr "Varanto ohuita loogisia taltioita varten" @@ -6009,8 +5940,8 @@ msgid "Portable" msgstr "Kannettava" -#: pkg/networkmanager/network-interface-members.jsx:203 #: pkg/networkmanager/team.jsx:159 pkg/networkmanager/bridge.jsx:101 +#: pkg/networkmanager/network-interface-members.jsx:208 msgid "Ports" msgstr "Portit" @@ -6033,7 +5964,7 @@ msgid "Preparing" msgstr "Valmistellaan" -#: pkg/systemd/hw-detect.js:114 pkg/lib/machine-info.js:247 +#: pkg/lib/machine-info.js:247 pkg/systemd/hw-detect.js:114 msgid "Present" msgstr "Nykyinen" @@ -6041,7 +5972,7 @@ msgid "Preserve" msgstr "Säilytä" -#: pkg/systemd/overview-cards/configurationCard.jsx:288 +#: pkg/systemd/overview-cards/configurationCard.jsx:284 msgid "Pretty host name" msgstr "Tyylikäs konenimi" @@ -6053,8 +5984,8 @@ msgid "Primary" msgstr "Ensisijainen" -#: pkg/systemd/logs.jsx:208 pkg/networkmanager/bridgeport.jsx:80 -#: pkg/networkmanager/teamport.jsx:84 +#: pkg/networkmanager/bridgeport.jsx:80 pkg/networkmanager/teamport.jsx:84 +#: pkg/systemd/logs.jsx:208 msgid "Priority" msgstr "Prioriteetti" @@ -6081,11 +6012,11 @@ msgid "Problem info" msgstr "Ongelmatiedot" -#: pkg/storaged/dialog.jsx:1171 +#: pkg/storaged/dialog.jsx:1173 msgid "Processes using the location" msgstr "Prosessit, jotka käyttävät sijaintia" -#: pkg/sosreport/sosreport.jsx:292 +#: pkg/sosreport/sosreport.jsx:301 msgid "Progress: $0" msgstr "Edistyminen: $0" @@ -6189,7 +6120,7 @@ msgid "RAID chassis" msgstr "RAID-runko" -#: pkg/storaged/mdraid/create-dialog.jsx:51 pkg/storaged/mdraid/mdraid.jsx:286 +#: pkg/storaged/mdraid/mdraid.jsx:286 pkg/storaged/mdraid/create-dialog.jsx:51 msgid "RAID level" msgstr "RAID-taso" @@ -6255,11 +6186,11 @@ msgid "Ready" msgstr "Valmis" -#: pkg/systemd/overview-cards/configurationCard.jsx:291 +#: pkg/systemd/overview-cards/configurationCard.jsx:287 msgid "Real host name" msgstr "Oikea konenimi" -#: pkg/systemd/overview-cards/configurationCard.jsx:258 +#: pkg/systemd/overview-cards/configurationCard.jsx:254 msgid "" "Real host name can only contain lower-case characters, digits, dashes, and " "periods (with populated subdomains)" @@ -6267,7 +6198,7 @@ "Oikea konenimi voi sisältää vain pieniä kirjaimia, numeroita, viivoja ja " "pisteitä (täytetyillä alitoimialueilla)" -#: pkg/systemd/overview-cards/configurationCard.jsx:256 +#: pkg/systemd/overview-cards/configurationCard.jsx:252 msgid "Real host name must be 64 characters or less" msgstr "Oikea konenimi saa sisältää enintään 64 merkkiä" @@ -6275,14 +6206,14 @@ msgid "Reapply and reboot" msgstr "Ota käyttöön uudelleen ja käynnistä uudelleen" -#: pkg/systemd/overview.jsx:109 pkg/systemd/overview.jsx:128 -#: pkg/lib/cockpit-components-logs-panel.jsx:114 #: pkg/lib/cockpit-components-shutdown.jsx:190 #: pkg/lib/cockpit-components-shutdown.jsx:192 +#: pkg/lib/cockpit-components-logs-panel.jsx:114 pkg/systemd/overview.jsx:110 +#: pkg/systemd/overview.jsx:135 msgid "Reboot" msgstr "Käynnistä uudelleen" -#: pkg/packagekit/updates.jsx:614 +#: pkg/packagekit/updates.jsx:613 msgid "Reboot after completion" msgstr "Käynnistä uudelleen päivitysten asentamisen jälkeen" @@ -6290,15 +6221,14 @@ msgid "Reboot recommended" msgstr "Uudelleenkäynnistystä suositellaan" -#: pkg/packagekit/updates.jsx:685 pkg/packagekit/updates.jsx:760 -#: pkg/packagekit/updates.jsx:824 +#: pkg/packagekit/updates.jsx:684 pkg/packagekit/updates.jsx:759 +#: pkg/packagekit/updates.jsx:823 msgid "Reboot system..." msgstr "Käynnistä järjestelmä uudelleen..." #: pkg/networkmanager/network-main.jsx:188 -#: pkg/networkmanager/network-main.jsx:203 -#: pkg/networkmanager/network-interface-members.jsx:205 -#: pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-main.jsx:203 pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-interface-members.jsx:210 msgid "Receiving" msgstr "Vastaanotetaan" @@ -6310,7 +6240,7 @@ msgid "Recommended, secure settings for current threat models." msgstr "Suositeltu, turvalliset asetukset nykyisiä uhkamalleja vastaan." -#: pkg/shell/failures.jsx:74 +#: pkg/shell/failures.jsx:72 msgid "Reconnect" msgstr "Yhdistä uudelleen" @@ -6319,10 +6249,8 @@ msgstr "Palautetaan" #: pkg/storaged/jobs-panel.jsx:70 -#, fuzzy -#| msgid "Recovering RAID device $target" msgid "Recovering MDRAID device $target" -msgstr "Palautetaan RAID-laite $target" +msgstr "Palautetaan MDRAID-laite $target" #: pkg/packagekit/updates.jsx:98 msgid "Refreshing package information" @@ -6346,23 +6274,23 @@ msgid "Regenerate" msgstr "Luotu" -#: pkg/storaged/crypto/keyslots.jsx:277 +#: pkg/storaged/crypto/keyslots.jsx:311 msgid "Regenerating initrd" msgstr "Luodaan uudelleen initrd" -#: pkg/packagekit/updates.jsx:1378 +#: pkg/packagekit/updates.jsx:1377 msgid "Register…" msgstr "Rekisteröi…" -#: pkg/storaged/dialog.jsx:1259 +#: pkg/storaged/dialog.jsx:1261 msgid "Related processes and services will be forcefully stopped." msgstr "Liittyvät prosessit ja palvelut lopetetaan väkisin." -#: pkg/storaged/dialog.jsx:1261 +#: pkg/storaged/dialog.jsx:1263 msgid "Related processes will be forcefully stopped." msgstr "Liittyvät prosessit lopetetaan väkisin." -#: pkg/storaged/dialog.jsx:1263 +#: pkg/storaged/dialog.jsx:1265 msgid "Related services will be forcefully stopped." msgstr "Liittyvät palvelut lopetetaan väkisin." @@ -6378,7 +6306,7 @@ msgid "Reloading" msgstr "Ladataan uudelleen" -#: pkg/packagekit/updates.jsx:510 +#: pkg/packagekit/updates.jsx:509 msgid "Reloading the state of remaining services" msgstr "Ladataan jäljellä olevien palvelujen tila" @@ -6418,19 +6346,19 @@ msgid "Removals:" msgstr "Poistot:" -#: pkg/systemd/timer-dialog.jsx:361 pkg/storaged/stratis/pool.jsx:443 +#: pkg/storaged/nfs/nfs.jsx:315 pkg/storaged/crypto/keyslots.jsx:649 +#: pkg/storaged/crypto/keyslots.jsx:684 pkg/storaged/crypto/keyslots.jsx:769 +#: pkg/storaged/lvm2/physical-volume.jsx:88 +#: pkg/storaged/lvm2/volume-group.jsx:347 pkg/storaged/stratis/pool.jsx:443 #: pkg/storaged/stratis/pool.jsx:500 pkg/storaged/stratis/pool.jsx:535 -#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/lvm2/volume-group.jsx:347 -#: pkg/storaged/lvm2/physical-volume.jsx:88 pkg/storaged/nfs/nfs.jsx:315 -#: pkg/storaged/crypto/keyslots.jsx:615 pkg/storaged/crypto/keyslots.jsx:650 -#: pkg/storaged/crypto/keyslots.jsx:735 pkg/storaged/mdraid/mdraid-disk.jsx:98 -#: pkg/shell/hosts.jsx:170 pkg/apps/application.jsx:50 -#: pkg/users/authorized-keys-panel.js:142 +#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/mdraid/mdraid-disk.jsx:98 +#: pkg/apps/application.jsx:50 pkg/systemd/timer-dialog.jsx:361 +#: pkg/shell/hosts.jsx:170 pkg/users/authorized-keys-panel.js:142 #: pkg/users/authorized-keys-panel.js:150 msgid "Remove" msgstr "Poista" -#: pkg/networkmanager/network-interface-members.jsx:110 +#: pkg/networkmanager/network-interface-members.jsx:111 msgid "Remove $0" msgstr "Poista $0" @@ -6438,11 +6366,11 @@ msgid "Remove $0 service from $1 zone" msgstr "Poista palvelu $0 vyöhykkeeltä $1" -#: pkg/storaged/stratis/pool.jsx:495 pkg/storaged/crypto/keyslots.jsx:634 +#: pkg/storaged/crypto/keyslots.jsx:668 pkg/storaged/stratis/pool.jsx:495 msgid "Remove $0?" msgstr "Poistetaanko $0?" -#: pkg/storaged/stratis/pool.jsx:493 pkg/storaged/crypto/keyslots.jsx:644 +#: pkg/storaged/crypto/keyslots.jsx:678 pkg/storaged/stratis/pool.jsx:493 msgid "Remove Tang keyserver?" msgstr "Poista Tang-avainpalvelin?" @@ -6467,7 +6395,7 @@ msgid "Remove missing physical volumes?" msgstr "Fyysinen taltio poistetaan $Target:sta" -#: pkg/storaged/crypto/keyslots.jsx:608 +#: pkg/storaged/crypto/keyslots.jsx:642 msgid "Remove passphrase in key slot $0?" msgstr "Poista tunnuslause avainpaikasta $0?" @@ -6487,12 +6415,12 @@ msgid "Removing" msgstr "Poistetaan" -#: pkg/storaged/crypto/keyslots.jsx:222 +#: pkg/storaged/crypto/keyslots.jsx:256 #: pkg/lib/cockpit-components-install-dialog.jsx:191 msgid "Removing $0" msgstr "Poistetaan $0" -#: pkg/networkmanager/network-interface-members.jsx:109 +#: pkg/networkmanager/network-interface-members.jsx:110 msgid "" "Removing $0 will break the connection to the server, and will make the " "administration UI unavailable." @@ -6501,12 +6429,10 @@ "hallintakäyttöliittymä ei ole saatavilla." #: pkg/storaged/jobs-panel.jsx:66 -#, fuzzy -#| msgid "Removing $target from RAID device" msgid "Removing $target from MDRAID device" -msgstr "$Target poistetaan RAID-laitteesta" +msgstr "$Target poistetaan MDRAID-laitteesta" -#: pkg/storaged/crypto/keyslots.jsx:593 +#: pkg/storaged/crypto/keyslots.jsx:627 msgid "" "Removing a passphrase without confirmation of another passphrase may prevent " "unlocking or key management, if other passphrases are forgotten or lost." @@ -6533,11 +6459,10 @@ msgid "Removing the zone will remove all services within it." msgstr "Vyöhykkeen poistaminen poistaa kaikki sen sisäiset palvelut." -#: pkg/storaged/stratis/filesystem.jsx:200 pkg/storaged/stratis/pool.jsx:173 -#: pkg/storaged/lvm2/volume-group.jsx:71 #: pkg/storaged/lvm2/block-logical-volume.jsx:53 #: pkg/storaged/lvm2/block-logical-volume.jsx:242 -#: pkg/users/rename-group-dialog.jsx:69 +#: pkg/storaged/lvm2/volume-group.jsx:71 pkg/storaged/stratis/pool.jsx:173 +#: pkg/storaged/stratis/filesystem.jsx:200 pkg/users/rename-group-dialog.jsx:69 msgid "Rename" msgstr "Nimeä uudelleen" @@ -6599,8 +6524,8 @@ msgid "Repeat monthly" msgstr "Toista joka kuukausi" -#: pkg/storaged/crypto/keyslots.jsx:428 pkg/storaged/crypto/keyslots.jsx:441 -#: pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:462 pkg/storaged/crypto/keyslots.jsx:475 +#: pkg/storaged/crypto/keyslots.jsx:524 msgid "Repeat passphrase" msgstr "Toista tunnuslause" @@ -6608,11 +6533,11 @@ msgid "Repeat weekly" msgstr "Toista joka viikko" -#: pkg/sosreport/sosreport.jsx:490 pkg/systemd/reporting.jsx:392 +#: pkg/sosreport/sosreport.jsx:499 pkg/systemd/reporting.jsx:392 msgid "Report" msgstr "Raportoi" -#: pkg/sosreport/sosreport.jsx:308 +#: pkg/sosreport/sosreport.jsx:317 msgid "Report label" msgstr "Raportin nimiö" @@ -6632,7 +6557,7 @@ msgid "Reporting was canceled" msgstr "Raportointi peruutettiin" -#: pkg/sosreport/sosreport.jsx:485 +#: pkg/sosreport/sosreport.jsx:494 msgid "Reports" msgstr "Ilmoitukset" @@ -6687,7 +6612,7 @@ msgid "Reserved memory" msgstr "Varattu muisti" -#: pkg/systemd/terminal.jsx:183 pkg/systemd/logs.jsx:406 +#: pkg/systemd/logs.jsx:406 pkg/systemd/terminal.jsx:183 msgid "Reset" msgstr "Nollaa" @@ -6712,11 +6637,11 @@ msgid "Restart" msgstr "Käynnistä uudelleen" -#: pkg/packagekit/updates.jsx:525 pkg/packagekit/updates.jsx:539 +#: pkg/packagekit/updates.jsx:524 pkg/packagekit/updates.jsx:538 msgid "Restart services" msgstr "Käynnistä palvelut uudelleen" -#: pkg/packagekit/updates.jsx:761 pkg/packagekit/updates.jsx:836 +#: pkg/packagekit/updates.jsx:760 pkg/packagekit/updates.jsx:835 msgid "Restart services..." msgstr "Käynnistä palvelut uudelleen..." @@ -6776,7 +6701,7 @@ msgid "Run at" msgstr "Aja klo" -#: pkg/sosreport/sosreport.jsx:295 +#: pkg/sosreport/sosreport.jsx:304 msgid "Run new report" msgstr "Tee uusi raportti" @@ -6784,7 +6709,7 @@ msgid "Run on" msgstr "Aja kohteessa" -#: pkg/sosreport/sosreport.jsx:273 pkg/sosreport/sosreport.jsx:482 +#: pkg/sosreport/sosreport.jsx:282 pkg/sosreport/sosreport.jsx:491 msgid "Run report" msgstr "Tee raportti" @@ -6797,13 +6722,13 @@ msgid "Runner" msgstr "Suorittaja" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:458 #: pkg/systemd/services.jsx:232 pkg/systemd/services.jsx:236 -#: pkg/systemd/services.jsx:696 pkg/systemd/service-details.jsx:458 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:696 msgid "Running" msgstr "Käynnissä" -#: pkg/storaged/dialog.jsx:1332 pkg/storaged/dialog.jsx:1352 +#: pkg/storaged/dialog.jsx:1334 pkg/storaged/dialog.jsx:1354 msgid "Runtime" msgstr "Ajonaikainen" @@ -6848,7 +6773,7 @@ msgid "SMART self-test of $target" msgstr "Levyn $target SMART-itsetesti" -#: pkg/sosreport/sosreport.jsx:304 +#: pkg/sosreport/sosreport.jsx:313 msgid "" "SOS reporting collects system information to help with diagnosing problems." msgstr "" @@ -6863,8 +6788,8 @@ msgid "SSH key isn't a path" msgstr "SSH-avain ei ole polku" -#: pkg/shell/credentials.jsx:79 pkg/shell/credentials.jsx:95 -#: pkg/shell/topnav.jsx:218 +#: pkg/shell/topnav.jsx:229 pkg/shell/credentials.jsx:79 +#: pkg/shell/credentials.jsx:95 msgid "SSH keys" msgstr "SSH-avaimet" @@ -6884,7 +6809,7 @@ msgid "STP priority" msgstr "STP:n prioriteetti" -#: pkg/shell/failures.jsx:46 +#: pkg/shell/failures.jsx:45 msgid "" "Safari users need to import and trust the certificate of the self-signing CA:" msgstr "" @@ -6895,16 +6820,15 @@ msgid "Saturdays" msgstr "Lauantai" -#: pkg/systemd/timer-dialog.jsx:148 pkg/metrics/metrics.jsx:1478 -#: pkg/networkmanager/dialogs-common.jsx:160 pkg/storaged/stratis/pool.jsx:384 +#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/partitions/partition.jsx:197 +#: pkg/storaged/btrfs/volume.jsx:96 pkg/storaged/crypto/encryption.jsx:168 +#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:531 +#: pkg/storaged/crypto/keyslots.jsx:550 pkg/storaged/stratis/pool.jsx:384 #: pkg/storaged/stratis/pool.jsx:413 pkg/storaged/stratis/pool.jsx:468 -#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/filesystem/mounting-dialog.jsx:340 +#: pkg/storaged/filesystem/mounting-dialog.jsx:358 #: pkg/storaged/filesystem/filesystem.jsx:126 -#: pkg/storaged/crypto/encryption.jsx:168 -#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:497 -#: pkg/storaged/crypto/keyslots.jsx:516 -#: pkg/storaged/partitions/partition.jsx:197 pkg/storaged/btrfs/volume.jsx:96 -#: pkg/packagekit/kpatch.jsx:310 +#: pkg/networkmanager/dialogs-common.jsx:160 pkg/systemd/timer-dialog.jsx:148 +#: pkg/metrics/metrics.jsx:1478 pkg/packagekit/kpatch.jsx:310 msgid "Save" msgstr "Tallenna" @@ -6912,7 +6836,7 @@ msgid "Save and reboot" msgstr "Tallenna ja käynnistä uudelleen" -#: pkg/systemd/overview-cards/motdCard.jsx:61 pkg/kdump/kdump-view.jsx:229 +#: pkg/kdump/kdump-view.jsx:229 pkg/systemd/overview-cards/motdCard.jsx:61 #: pkg/packagekit/autoupdates.jsx:269 msgid "Save changes" msgstr "Tallenna muutokset" @@ -6925,8 +6849,8 @@ msgid "Save space by storing identical data blocks just once" msgstr "Säästä tilaa tallentamalla identtiset tietolohkot vain kerran" -#: pkg/storaged/crypto/keyslots.jsx:401 pkg/storaged/crypto/keyslots.jsx:456 -#: pkg/storaged/crypto/keyslots.jsx:514 pkg/storaged/crypto/keyslots.jsx:542 +#: pkg/storaged/crypto/keyslots.jsx:435 pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:548 pkg/storaged/crypto/keyslots.jsx:576 msgid "" "Saving a new passphrase requires unlocking the disk. Please provide a " "current disk passphrase." @@ -6970,7 +6894,7 @@ msgid "Seconds" msgstr "Sekunnit" -#: pkg/systemd/overview-cards/configurationCard.jsx:92 +#: pkg/systemd/overview-cards/configurationCard.jsx:91 msgid "Secure shell keys" msgstr "Secure shell -avaimet" @@ -6982,7 +6906,7 @@ msgid "Security Enhanced Linux configuration and troubleshooting" msgstr "Security Enhanced Linuxin asetukset ja ongelmanratkaisu" -#: pkg/packagekit/updates.jsx:1435 +#: pkg/packagekit/updates.jsx:1434 msgid "Security updates available" msgstr "Tietoturvapäivityksiä saatavilla" @@ -7018,20 +6942,17 @@ #: pkg/networkmanager/network-main.jsx:187 #: pkg/networkmanager/network-main.jsx:202 -#: pkg/networkmanager/network-interface-members.jsx:204 +#: pkg/networkmanager/network-interface-members.jsx:209 msgid "Sending" msgstr "Lähetetään" #: pkg/storaged/drive/drive.jsx:123 -#, fuzzy -#| msgctxt "storage" -#| msgid "Serial number" msgid "Serial number" msgstr "Sarjanumero" -#: pkg/static/login.html:159 pkg/networkmanager/ip-settings.jsx:262 -#: pkg/kdump/kdump-view.jsx:267 pkg/kdump/kdump-view.jsx:289 -#: pkg/storaged/nfs/nfs.jsx:328 +#: pkg/static/login.html:159 pkg/storaged/nfs/nfs.jsx:328 +#: pkg/networkmanager/ip-settings.jsx:262 pkg/kdump/kdump-view.jsx:267 +#: pkg/kdump/kdump-view.jsx:289 msgid "Server" msgstr "Palvelin" @@ -7047,7 +6968,7 @@ msgid "Server cannot be empty." msgstr "Palvelin ei voi olla tyhjä." -#: pkg/lib/cockpit.js:3862 +#: pkg/lib/cockpit.js:3858 msgid "Server has closed the connection." msgstr "Palvelin on sulkenut yhteyden." @@ -7055,10 +6976,10 @@ msgid "Server software" msgstr "Palvelinohjelmisto" +#: pkg/storaged/dialog.jsx:1351 pkg/networkmanager/firewall.jsx:207 #: pkg/metrics/metrics.jsx:812 pkg/metrics/metrics.jsx:813 #: pkg/metrics/metrics.jsx:868 pkg/metrics/metrics.jsx:906 #: pkg/metrics/metrics.jsx:966 pkg/metrics/metrics.jsx:972 -#: pkg/networkmanager/firewall.jsx:207 pkg/storaged/dialog.jsx:1349 msgid "Service" msgstr "Palvelu" @@ -7070,17 +6991,17 @@ msgid "Service logs" msgstr "Palvelulokit" -#: pkg/systemd/services.html:4 pkg/systemd/service-tabs.jsx:40 -#: pkg/systemd/service.jsx:151 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/services.html:4 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/service.jsx:151 pkg/systemd/service-tabs.jsx:40 #: pkg/systemd/manifest.json:0 msgid "Services" msgstr "Palvelut" -#: pkg/storaged/dialog.jsx:1157 +#: pkg/storaged/dialog.jsx:1159 msgid "Services using the location" msgstr "Palvelut, jotka käyttävät sijaintia" -#: pkg/shell/topnav.jsx:273 +#: pkg/shell/topnav.jsx:303 msgid "Session" msgstr "Istunto" @@ -7102,8 +7023,8 @@ msgid "Set partition type of $0" msgstr "Luo osio $0:een" -#: pkg/users/password-dialogs.js:226 pkg/users/password-dialogs.js:233 -#: pkg/users/account-details.js:301 +#: pkg/users/account-details.js:301 pkg/users/password-dialogs.js:226 +#: pkg/users/password-dialogs.js:233 msgid "Set password" msgstr "Aseta salasana" @@ -7137,11 +7058,11 @@ msgid "Setting up loop device $target" msgstr "Silmukkalaitteen $target asettaminen" -#: pkg/packagekit/updates.jsx:919 +#: pkg/packagekit/updates.jsx:918 msgid "Settings" msgstr "Asetukset" -#: pkg/packagekit/updates.jsx:375 pkg/packagekit/updates.jsx:450 +#: pkg/packagekit/updates.jsx:374 pkg/packagekit/updates.jsx:449 msgid "Severity" msgstr "Vakavuus" @@ -7149,7 +7070,7 @@ msgid "Shared" msgstr "Jaettu" -#: pkg/users/account-create-dialog.js:93 pkg/users/account-details.js:329 +#: pkg/users/account-details.js:329 pkg/users/account-create-dialog.js:93 msgid "Shell" msgstr "Komentotulkki" @@ -7177,7 +7098,7 @@ msgid "Show confirmation password" msgstr "Vahvista salasana" -#: pkg/systemd/overview-cards/configurationCard.jsx:96 +#: pkg/systemd/overview-cards/configurationCard.jsx:95 msgid "Show fingerprints" msgstr "Näytä sormenjäljet" @@ -7198,17 +7119,15 @@ msgstr "Näytä lisää suhteita" #: pkg/lib/cockpit-components-password.jsx:139 -#, fuzzy -#| msgid "New password" msgid "Show password" -msgstr "Uusi salasana" +msgstr "Näytä salasana" #: pkg/systemd/service-details.jsx:680 msgid "Show relationships" msgstr "Näytä suhteet" +#: pkg/storaged/partitions/partition.jsx:101 pkg/storaged/block/resize.jsx:635 #: pkg/storaged/lvm2/block-logical-volume.jsx:205 -#: pkg/storaged/block/resize.jsx:635 pkg/storaged/partitions/partition.jsx:101 msgid "Shrink" msgstr "Kutista" @@ -7216,7 +7135,7 @@ msgid "Shrink logical volume" msgstr "Kutista looginen taltio" -#: pkg/storaged/block/resize.jsx:557 pkg/storaged/partitions/partition.jsx:218 +#: pkg/storaged/partitions/partition.jsx:218 pkg/storaged/block/resize.jsx:557 #, fuzzy #| msgid "partition" msgid "Shrink partition" @@ -7231,7 +7150,7 @@ msgid "Shut down" msgstr "Sammuta" -#: pkg/systemd/overview.jsx:114 +#: pkg/systemd/overview.jsx:115 msgid "Shutdown" msgstr "Sammuta" @@ -7239,40 +7158,40 @@ msgid "Since" msgstr "Siitä asti kun" -#: pkg/systemd/hw-detect.js:90 pkg/lib/machine-info.js:238 +#: pkg/lib/machine-info.js:238 pkg/systemd/hw-detect.js:90 msgid "Single rank" msgstr "Yksi sijoitus" -#: pkg/systemd/hwinfo.jsx:291 pkg/storaged/stratis/pool.jsx:96 -#: pkg/storaged/lvm2/vdo-pool.jsx:79 +#: pkg/storaged/nfs/nfs.jsx:330 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/block/format-dialog.jsx:315 pkg/storaged/block/resize.jsx:448 +#: pkg/storaged/block/resize.jsx:581 pkg/storaged/pages.jsx:717 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:199 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:206 +#: pkg/storaged/lvm2/block-logical-volume.jsx:291 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:49 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:143 -#: pkg/storaged/lvm2/block-logical-volume.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:313 pkg/storaged/block/resize.jsx:448 -#: pkg/storaged/block/resize.jsx:581 pkg/storaged/nfs/nfs.jsx:330 -#: pkg/storaged/pages.jsx:717 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/lvm2/vdo-pool.jsx:79 pkg/storaged/stratis/pool.jsx:96 +#: pkg/systemd/hwinfo.jsx:291 msgid "Size" msgstr "Koko" -#: pkg/storaged/dialog.jsx:1074 +#: pkg/storaged/dialog.jsx:1076 msgid "Size cannot be negative" msgstr "Koko ei voi olla negatiivinen" -#: pkg/storaged/dialog.jsx:1072 +#: pkg/storaged/dialog.jsx:1074 msgid "Size cannot be zero" msgstr "Koko ei voi olla nolla" -#: pkg/storaged/dialog.jsx:1076 +#: pkg/storaged/dialog.jsx:1078 msgid "Size is too large" msgstr "Koko on liian suuri" -#: pkg/storaged/dialog.jsx:1070 +#: pkg/storaged/dialog.jsx:1072 msgid "Size must be a number" msgstr "Koon tulee olla numero" -#: pkg/storaged/dialog.jsx:1078 +#: pkg/storaged/dialog.jsx:1080 msgid "Size must be at least $0" msgstr "Koon tulee olla vähintään $0" @@ -7288,7 +7207,7 @@ msgid "Slot" msgstr "Paikka" -#: pkg/storaged/crypto/keyslots.jsx:723 pkg/storaged/mdraid/mdraid-disk.jsx:80 +#: pkg/storaged/crypto/keyslots.jsx:757 pkg/storaged/mdraid/mdraid-disk.jsx:80 msgid "Slot $0" msgstr "Paikka $0" @@ -7344,14 +7263,14 @@ "Some other program is currently using the package manager, please wait..." msgstr "Joku muu ohjelma käyttää tällä hetkellä paketinhallintaa, odota ..." -#: pkg/packagekit/updates.jsx:737 pkg/packagekit/updates.jsx:844 +#: pkg/packagekit/updates.jsx:736 pkg/packagekit/updates.jsx:843 #: pkg/packagekit/updates.jsx:1536 msgid "Some software needs to be restarted manually" msgstr "Jotkin ohjelmistot on käynnistettävä uudelleen manuaalisesti" #: pkg/storaged/storage-controls.jsx:88 msgid "Sorry" -msgstr "" +msgstr "Pahoittelut" #: pkg/networkmanager/firewall.jsx:825 msgid "Sorted from least to most trusted" @@ -7385,10 +7304,9 @@ msgid "Stable" msgstr "Vakaa" +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 pkg/storaged/swap/swap.jsx:98 +#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/mdraid/mdraid.jsx:210 #: pkg/systemd/service-details.jsx:144 -#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/swap/swap.jsx:98 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 -#: pkg/storaged/mdraid/mdraid.jsx:210 msgid "Start" msgstr "Käynnistä" @@ -7400,7 +7318,7 @@ msgid "Start multipath" msgstr "Käynnistä monipolku" -#: pkg/systemd/service-details.jsx:447 pkg/networkmanager/networkmanager.jsx:78 +#: pkg/networkmanager/networkmanager.jsx:78 pkg/systemd/service-details.jsx:447 msgid "Start service" msgstr "Käynnistä palvelu" @@ -7419,27 +7337,25 @@ msgstr "Aloitettu" #: pkg/storaged/jobs-panel.jsx:64 -#, fuzzy -#| msgid "Starting RAID device $target" msgid "Starting MDRAID device $target" -msgstr "Käynnistetään RAID-laite $target" +msgstr "Käynnistetään MDRAID-laite $target" #: pkg/storaged/jobs-panel.jsx:46 msgid "Starting swapspace $target" msgstr "Aloitetaan sivutustila $target" -#: pkg/systemd/hwinfo.jsx:291 pkg/systemd/services-list.jsx:40 -#: pkg/systemd/services-list.jsx:46 pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/services-list.jsx:40 +#: pkg/systemd/services-list.jsx:46 pkg/systemd/hwinfo.jsx:291 msgid "State" msgstr "Tila" -#: pkg/systemd/services.jsx:252 pkg/systemd/services.jsx:688 -#: pkg/systemd/service-details.jsx:476 +#: pkg/systemd/service-details.jsx:476 pkg/systemd/services.jsx:252 +#: pkg/systemd/services.jsx:688 msgid "Static" msgstr "Staattinen" -#: pkg/systemd/service-details.jsx:648 -#: pkg/networkmanager/network-interface.jsx:265 pkg/packagekit/updates.jsx:908 +#: pkg/networkmanager/network-interface.jsx:265 +#: pkg/systemd/service-details.jsx:648 pkg/packagekit/updates.jsx:907 msgid "Status" msgstr "Tila" @@ -7451,10 +7367,9 @@ msgid "Sticky" msgstr "Tahmea" -#: pkg/systemd/service-details.jsx:140 pkg/storaged/swap/swap.jsx:95 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:62 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 -#: pkg/storaged/mdraid/mdraid.jsx:289 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 pkg/storaged/swap/swap.jsx:95 +#: pkg/storaged/mdraid/mdraid.jsx:289 pkg/systemd/service-details.jsx:140 msgid "Stop" msgstr "Pysäytä" @@ -7478,15 +7393,13 @@ msgid "Stop editing hosts" msgstr "Lopeta koneiden muokkaaminen" -#: pkg/sosreport/sosreport.jsx:277 +#: pkg/sosreport/sosreport.jsx:286 msgid "Stop report" msgstr "Pysäytä raportti" #: pkg/storaged/jobs-panel.jsx:63 -#, fuzzy -#| msgid "Stopping RAID device $target" msgid "Stopping MDRAID device $target" -msgstr "Pysäytetään RAID-laite $target" +msgstr "Pysäytetään MDRAID-laite $target" #: pkg/storaged/jobs-panel.jsx:47 msgid "Stopping swapspace $target" @@ -7507,7 +7420,7 @@ msgid "Storage logs" msgstr "Tallennustilan lokit" -#: pkg/storaged/block/format-dialog.jsx:359 +#: pkg/storaged/block/format-dialog.jsx:361 msgid "Store passphrase" msgstr "Tallenna tunnuslause" @@ -7518,16 +7431,12 @@ msgstr "Tallennettu tunnuslause" #: pkg/storaged/stratis/blockdev.jsx:41 -#, fuzzy -#| msgid "$0 block device" msgid "Stratis block device" -msgstr "$0 lohkolaite" +msgstr "Stratis-lohkolaite" -#: pkg/storaged/stratis/stopped-pool.jsx:141 pkg/storaged/stratis/pool.jsx:566 -#, fuzzy -#| msgid "Add block devices" +#: pkg/storaged/stratis/pool.jsx:566 pkg/storaged/stratis/stopped-pool.jsx:141 msgid "Stratis block devices" -msgstr "Lisää lohkolaitteita" +msgstr "Stratis-lohkolaiteet" #: pkg/storaged/block/resize.jsx:187 pkg/storaged/block/resize.jsx:276 #, fuzzy @@ -7553,8 +7462,8 @@ msgid "Stratis filesystems pool" msgstr "Luo tiedostojärjestelmä" -#: pkg/storaged/stratis/stopped-pool.jsx:98 pkg/storaged/stratis/pool.jsx:271 -#: pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/pool.jsx:271 pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/stopped-pool.jsx:98 msgid "Stratis pool" msgstr "Stratis-varanto" @@ -7568,7 +7477,7 @@ msgid "Striped and mirrored (RAID 10)" msgstr "" -#: pkg/storaged/lvm2/block-logical-volume.jsx:399 +#: pkg/storaged/lvm2/block-logical-volume.jsx:398 msgid "Stripes" msgstr "" @@ -7582,7 +7491,7 @@ msgid "Stub" msgstr "Tynkä" -#: pkg/shell/topnav.jsx:184 +#: pkg/shell/topnav.jsx:193 msgid "Style" msgstr "Tyyli" @@ -7620,8 +7529,8 @@ msgid "Sundays" msgstr "Sunnuntai" -#: pkg/metrics/metrics.jsx:130 pkg/metrics/metrics.jsx:725 -#: pkg/metrics/metrics.jsx:1950 pkg/storaged/swap/swap.jsx:88 +#: pkg/storaged/swap/swap.jsx:88 pkg/metrics/metrics.jsx:130 +#: pkg/metrics/metrics.jsx:725 pkg/metrics/metrics.jsx:1950 msgid "Swap" msgstr "Sivutus" @@ -7635,16 +7544,16 @@ msgid "Swap out" msgstr "Sivutettu" -#: pkg/networkmanager/network-interface-members.jsx:67 +#: pkg/networkmanager/network-interface-members.jsx:68 msgid "Switch of $0" msgstr "Vaihda $0" -#: pkg/networkmanager/network-interface-members.jsx:87 +#: pkg/networkmanager/network-interface-members.jsx:88 #: pkg/networkmanager/network-interface.jsx:163 msgid "Switch off $0" msgstr "Kytke $0 pois päältä" -#: pkg/networkmanager/network-interface-members.jsx:78 +#: pkg/networkmanager/network-interface-members.jsx:79 #: pkg/networkmanager/network-interface.jsx:144 msgid "Switch on $0" msgstr "Kytke $0 päälle" @@ -7657,7 +7566,7 @@ msgid "Switch to limited access" msgstr "Vaihda rajoitettuun käyttöön" -#: pkg/networkmanager/network-interface-members.jsx:86 +#: pkg/networkmanager/network-interface-members.jsx:87 #: pkg/networkmanager/network-interface.jsx:162 msgid "" "Switching off $0 will break the connection to the server, and will make the " @@ -7666,7 +7575,7 @@ "$0 kytkeminen pois päältä katkaisee yhteyden palvelimeen ja tekee hallinnon " "käyttöliittymän ei saataville." -#: pkg/networkmanager/network-interface-members.jsx:77 +#: pkg/networkmanager/network-interface-members.jsx:78 #: pkg/networkmanager/network-interface.jsx:143 msgid "" "Switching on $0 will break the connection to the server, and will make the " @@ -7688,21 +7597,19 @@ msgstr "Synkronoidaan" #: pkg/storaged/jobs-panel.jsx:71 -#, fuzzy -#| msgid "Synchronizing RAID device $target" msgid "Synchronizing MDRAID device $target" -msgstr "Synkronoidaan RAID-laitetta $target" +msgstr "Synkronoidaan MDRAID-laitetta $target" -#: pkg/systemd/services.jsx:913 pkg/shell/nav.jsx:46 pkg/shell/indexes.jsx:343 +#: pkg/systemd/services.jsx:912 pkg/shell/indexes.jsx:343 pkg/shell/nav.jsx:46 msgid "System" msgstr "Järjestelmä" -#: pkg/sosreport/sosreport.jsx:509 +#: pkg/sosreport/sosreport.jsx:518 msgid "System diagnostics" msgstr "Järjestelmän diagnostiikka" -#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 #: pkg/systemd/hwinfo.jsx:315 +#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 msgid "System information" msgstr "Järjestelmätiedot" @@ -7714,7 +7621,7 @@ msgid "System modifications" msgstr "Järjestelmän muutokset" -#: pkg/systemd/overview-cards/configurationCard.jsx:75 +#: pkg/systemd/overview-cards/configurationCard.jsx:74 msgid "System time" msgstr "Järjestelmän aika" @@ -7730,7 +7637,7 @@ msgid "Tablet" msgstr "Tabletti" -#: pkg/storaged/crypto/keyslots.jsx:431 +#: pkg/storaged/crypto/keyslots.jsx:465 msgid "Tang keyserver" msgstr "Tang-avainpalvelin" @@ -7795,7 +7702,7 @@ msgid "Testing connection" msgstr "Testataan yhteyttä" -#: pkg/storaged/crypto/keyslots.jsx:242 +#: pkg/storaged/crypto/keyslots.jsx:276 msgid "The $0 package is not available from any repository." msgstr "$0 paketti ei ole saatavilla mistään ohjelmistovarastosta." @@ -7803,7 +7710,7 @@ msgid "The $0 package must be installed to create Stratis pools." msgstr "Paketti $0 on asennettava Stratis-varannon luomiseen." -#: pkg/storaged/crypto/keyslots.jsx:237 pkg/storaged/crypto/keyslots.jsx:253 +#: pkg/storaged/crypto/keyslots.jsx:271 pkg/storaged/crypto/keyslots.jsx:287 msgid "The $0 package must be installed." msgstr "Paketti $0 on asennettava." @@ -7816,10 +7723,8 @@ msgstr "IP-osoite tai konenimi ei voi sisältää välilyöntiä." #: pkg/storaged/mdraid/mdraid.jsx:262 -#, fuzzy -#| msgid "The RAID array is in a degraded state" msgid "The MDRAID device is in a degraded state" -msgstr "RAID-pakka on heikentyneessä tilassa" +msgstr "MDRAID-laite on heikentyneessä tilassa" #: pkg/storaged/mdraid/mdraid-disk.jsx:87 #, fuzzy @@ -7879,19 +7784,19 @@ "The creation of this VDO device did not finish and the device can't be used." msgstr "Tämän VDO-laitteen luominen ei päättynyt eikä laitetta voida käyttää." -#: pkg/storaged/crypto/keyslots.jsx:696 +#: pkg/storaged/crypto/keyslots.jsx:730 msgid "" "The currently logged in user is not permitted to see information about keys." msgstr "" "Tällä hetkellä kirjautuneena oleva käyttäjä ei saa nähdä tietoja avaimista." -#: pkg/storaged/block/format-dialog.jsx:369 +#: pkg/storaged/block/format-dialog.jsx:371 msgid "" "The disk needs to be unlocked before formatting. Please provide a existing " "passphrase." msgstr "Levy on avattava ennen alustamista. Anna olemassa oleva tunnuslause." -#: pkg/sosreport/sosreport.jsx:370 +#: pkg/sosreport/sosreport.jsx:379 msgid "The file $0 will be deleted." msgstr "Tiedosto $0 poistetaan." @@ -7962,7 +7867,7 @@ msgid "The fingerprint should match:" msgstr "Näytä sormenjäljet" -#: pkg/packagekit/updates.jsx:515 +#: pkg/packagekit/updates.jsx:514 msgid "The following service will be restarted:" msgid_plural "The following services will be restarted:" msgstr[0] "Seuraava palvelu käynnistetään uudelleen:" @@ -7992,7 +7897,7 @@ "Kotihakemisto $0 on jo olemassa. Sen omistajuus vaihdetaan uudelle " "käyttäjälle." -#: pkg/storaged/crypto/keyslots.jsx:274 +#: pkg/storaged/crypto/keyslots.jsx:308 msgid "The initrd must be regenerated." msgstr "Initrd on luotava uudelleen." @@ -8008,19 +7913,19 @@ msgid "The key you provided was not valid." msgstr "Antamasi avain ei ollut kelvollinen." -#: pkg/storaged/crypto/keyslots.jsx:736 +#: pkg/storaged/crypto/keyslots.jsx:770 msgid "The last key slot can not be removed" msgstr "Viimeistä avaimen paikkaa ei voida poistaa" -#: pkg/storaged/dialog.jsx:1367 +#: pkg/storaged/dialog.jsx:1369 msgid "The listed processes and services will be forcefully stopped." msgstr "Listatut prosessit ja palvelut lopetetaan väkisin." -#: pkg/storaged/dialog.jsx:1369 +#: pkg/storaged/dialog.jsx:1371 msgid "The listed processes will be forcefully stopped." msgstr "Listatut palvelut lopetetaan väkisin." -#: pkg/storaged/dialog.jsx:1371 +#: pkg/storaged/dialog.jsx:1373 msgid "The listed services will be forcefully stopped." msgstr "Listatut palvelut lopetetaan väkisin." @@ -8032,11 +7937,11 @@ msgid "The machine is rebooting" msgstr "Kone käynnistyy uudelleen" -#: pkg/storaged/dialog.jsx:1325 +#: pkg/storaged/dialog.jsx:1327 msgid "The mount point $0 is in use by these processes:" msgstr "Liitoskohta $0 on näiden prosessien käytössä:" -#: pkg/storaged/dialog.jsx:1345 +#: pkg/storaged/dialog.jsx:1347 msgid "The mount point $0 is in use by these services:" msgstr "Liitoskohta $0 on näiden palveluiden käytössä:" @@ -8079,12 +7984,12 @@ "Palvelin kieltäytyi todentamasta käyttäjää '$0' salasanatodennusta käyttäen, " "eikä muita tuettuja todennustapoja ole käytettävissä." -#: pkg/lib/cockpit.js:3846 +#: pkg/lib/cockpit.js:3842 msgid "The server refused to authenticate using any supported methods." msgstr "" "Palvelin kieltäytyi tunnistautumista käyttäen mitään tuetuista tavoista." -#: pkg/storaged/crypto/keyslots.jsx:391 +#: pkg/storaged/crypto/keyslots.jsx:425 msgid "" "The system does not currently support unlocking a filesystem with a Tang " "keyserver during boot." @@ -8092,7 +7997,7 @@ "Järjestelmä ei tällä hetkellä tue tiedostojärjestelmän lukituksen avaamista " "Tang-avainpalvelimella käynnistyksen aikana." -#: pkg/storaged/crypto/keyslots.jsx:390 +#: pkg/storaged/crypto/keyslots.jsx:424 msgid "" "The system does not currently support unlocking the root filesystem with a " "Tang keyserver." @@ -8171,19 +8076,19 @@ "Varannossa ei ole tarpeeksi tilaa tilannevedoksen tekemiseen tästä " "tiedostojärjestelmästä. Vähintään $0 vaaditaan, mutta vain $1 on saatavilla." -#: pkg/shell/failures.jsx:42 +#: pkg/shell/failures.jsx:41 msgid "There was an unexpected error while connecting to the machine." msgstr "Laitteeseen yhdistämisessä tapahtui odottamaton virhe." -#: pkg/storaged/crypto/keyslots.jsx:395 +#: pkg/storaged/crypto/keyslots.jsx:429 msgid "These additional steps are necessary:" msgstr "Nämä lisävaiheet ovat välttämättömiä:" -#: pkg/storaged/dialog.jsx:1239 +#: pkg/storaged/dialog.jsx:1241 msgid "These changes will be made:" msgstr "Nämä muutokset tullaan tekemään:" -#: pkg/storaged/utils.js:286 +#: pkg/storaged/utils.js:287 msgid "Thin logical volume" msgstr "Ohut looginen taltio" @@ -8195,15 +8100,11 @@ msgstr "Varanto ohuesti varattuja taltioita varten" #: pkg/storaged/mdraid/mdraid.jsx:274 -#, fuzzy -#| msgid "" -#| "This RAID array has no write-intent bitmap. Such a bitmap can reduce " -#| "sychronization times significantly." msgid "" "This MDRAID device has no write-intent bitmap. Such a bitmap can reduce " "sychronization times significantly." msgstr "" -"Tällä RAID-ryhmällä ei ole kirjoitusaikeista bittikarttaa. Tällainen " +"Tällä MDRAID-laitteella ei ole kirjoitusaikeista bittikarttaa. Tällainen " "bittikartta voi lyhentää synkronointiaikoja merkittävästi." #: pkg/storaged/nfs/nfs.jsx:111 @@ -8215,8 +8116,8 @@ msgid "This VDO device does not use all of its backing device." msgstr "Tämä VDO-laite ei käytä kaikkia sen tukilaitetta." -#: pkg/storaged/block/format-dialog.jsx:244 -#: pkg/storaged/filesystem/mounting-dialog.jsx:156 +#: pkg/storaged/block/format-dialog.jsx:246 +#: pkg/storaged/filesystem/mounting-dialog.jsx:159 #, fuzzy #| msgid "This device cannot be managed here." msgid "This device can not be used for the installation target." @@ -8226,7 +8127,7 @@ msgid "This device cannot be managed here." msgstr "Tätä laitetta ei voida hallita täällä." -#: pkg/storaged/dialog.jsx:1134 +#: pkg/storaged/dialog.jsx:1136 msgid "This device is currently in use." msgstr "Tämä laite on tällä hetkellä käytössä." @@ -8243,7 +8144,7 @@ msgid "This host will reboot after updates are installed." msgstr "Tämä kone käynnistyy uudelleen, kun päivitykset on asennettu." -#: pkg/sosreport/sosreport.jsx:305 +#: pkg/sosreport/sosreport.jsx:314 msgid "This information is stored only on the system." msgstr "Nämä tiedot tallennetaan vain järjestelmään." @@ -8306,7 +8207,7 @@ msgid "This pool is in a degraded state." msgstr "Varanto on heikentyneessä tilassa." -#: pkg/packagekit/updates.jsx:1373 +#: pkg/packagekit/updates.jsx:1372 msgid "This system is not registered" msgstr "Tätä järjestelmää ei ole rekisteröity" @@ -8466,7 +8367,7 @@ "Tarkista koneen avaimen sormenjälki varmistaaksesi, että haitallinen kolmas " "osapuoli ei sieppaa yhteyttä:" -#: pkg/packagekit/updates.jsx:1376 +#: pkg/packagekit/updates.jsx:1375 msgid "" "To get software updates, this system needs to be registered with Red Hat, " "either using the Red Hat Customer Portal or a local subscription server." @@ -8475,7 +8376,7 @@ "Hatille joko käyttämällä Red Hat -asiakasportaalia tai paikallista " "tilauspalvelinta." -#: pkg/static/login.js:768 pkg/shell/hosts_dialog.jsx:477 +#: pkg/shell/hosts_dialog.jsx:477 pkg/static/login.js:768 msgid "" "To verify a fingerprint, run the following on $0 while physically sitting at " "the machine or through a trusted network:" @@ -8491,8 +8392,8 @@ msgid "Toggle" msgstr "Vaihda" -#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 #: pkg/lib/cockpit-components-shutdown.jsx:212 pkg/lib/serverTime.js:600 +#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 msgid "Toggle date picker" msgstr "Vaihda päivämäärän valitsin" @@ -8500,7 +8401,7 @@ msgid "Toggle filters" msgstr "Vaihda suodattimet" -#: pkg/lib/cockpit.js:3868 +#: pkg/lib/cockpit.js:3864 msgid "Too much data" msgstr "Liian paljon dataa" @@ -8562,7 +8463,7 @@ msgid "Trust and add host" msgstr "Epäluotettava kone" -#: pkg/storaged/stratis/utils.jsx:86 pkg/storaged/crypto/keyslots.jsx:544 +#: pkg/storaged/crypto/keyslots.jsx:578 pkg/storaged/stratis/utils.jsx:86 msgid "Trust key" msgstr "Luottamusavain" @@ -8612,12 +8513,12 @@ msgid "Turn on administrative access" msgstr "Ota ylläpitäjän käyttöoikeudet käyttöön" -#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:308 -#: pkg/storaged/block/unrecognized-data.jsx:52 pkg/storaged/pages.jsx:715 #: pkg/storaged/partitions/partition.jsx:183 -#: pkg/storaged/partitions/partition.jsx:229 pkg/shell/credentials.jsx:199 -#: pkg/packagekit/autoupdates.jsx:279 +#: pkg/storaged/partitions/partition.jsx:229 +#: pkg/storaged/block/format-dialog.jsx:310 +#: pkg/storaged/block/unrecognized-data.jsx:51 pkg/storaged/pages.jsx:715 +#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 +#: pkg/shell/credentials.jsx:199 pkg/packagekit/autoupdates.jsx:279 msgid "Type" msgstr "Tyyppi" @@ -8643,12 +8544,11 @@ msgid "UDP" msgstr "UDP" -#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/stratis/pool.jsx:519 -#: pkg/storaged/lvm2/volume-group.jsx:386 +#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/btrfs/volume.jsx:127 +#: pkg/storaged/btrfs/device.jsx:78 pkg/storaged/btrfs/filesystem.jsx:77 #: pkg/storaged/lvm2/physical-volume.jsx:117 -#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/mdraid/mdraid.jsx:291 -#: pkg/storaged/btrfs/volume.jsx:127 pkg/storaged/btrfs/device.jsx:78 -#: pkg/storaged/btrfs/filesystem.jsx:77 +#: pkg/storaged/lvm2/volume-group.jsx:386 pkg/storaged/stratis/pool.jsx:519 +#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/mdraid/mdraid.jsx:291 msgid "UUID" msgstr "UUID" @@ -8739,7 +8639,7 @@ msgid "Undo" msgstr "Kumoa" -#: pkg/storaged/crypto/keyslots.jsx:258 +#: pkg/storaged/crypto/keyslots.jsx:292 msgid "Unexpected PackageKit error during installation of $0: $1" msgstr "Odottamaton PackageKit-virhe paketin $0 asennuksen aikana: $1" @@ -8748,27 +8648,27 @@ msgid "Unexpected error" msgstr "Odottamaton virhe" -#: pkg/storaged/block/unformatted-data.jsx:31 +#: pkg/storaged/block/unformatted-data.jsx:30 #, fuzzy #| msgid "Unrecognized data" msgid "Unformatted data" msgstr "Tunnistamaton data" -#: pkg/systemd/logs.jsx:368 pkg/systemd/services-list.jsx:39 -#: pkg/systemd/services-list.jsx:44 +#: pkg/systemd/services-list.jsx:39 pkg/systemd/services-list.jsx:44 +#: pkg/systemd/logs.jsx:368 msgid "Unit" msgstr "Yksikkö" -#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 -#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 -#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 +#: pkg/storaged/swap/swap.jsx:116 pkg/networkmanager/interfaces.js:510 +#: pkg/networkmanager/interfaces.js:1035 #: pkg/networkmanager/network-interface.jsx:199 -#: pkg/networkmanager/network-interface.jsx:201 -#: pkg/networkmanager/interfaces.js:510 pkg/networkmanager/interfaces.js:1035 -#: pkg/storaged/swap/swap.jsx:116 pkg/lib/machine-info.js:61 +#: pkg/networkmanager/network-interface.jsx:201 pkg/lib/machine-info.js:61 #: pkg/lib/machine-info.js:226 pkg/lib/machine-info.js:234 #: pkg/lib/machine-info.js:236 pkg/lib/machine-info.js:243 #: pkg/lib/machine-info.js:245 pkg/lib/machine-info.js:249 +#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 +#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 +#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 msgid "Unknown" msgstr "Tuntematon" @@ -8797,14 +8697,13 @@ msgid "Unknown service name" msgstr "Tuntematon palvelun nimi" -#: pkg/storaged/crypto/keyslots.jsx:760 +#: pkg/storaged/crypto/keyslots.jsx:794 msgid "Unknown type" msgstr "Tuntematon tyyppi" -#: pkg/storaged/stratis/stopped-pool.jsx:61 -#: pkg/storaged/crypto/locked-encrypted-data.jsx:37 -#: pkg/storaged/crypto/actions.jsx:41 pkg/storaged/crypto/actions.jsx:46 -#: pkg/shell/credentials.jsx:312 +#: pkg/storaged/crypto/locked-encrypted-data.jsx:36 +#: pkg/storaged/crypto/actions.jsx:40 pkg/storaged/crypto/actions.jsx:45 +#: pkg/storaged/stratis/stopped-pool.jsx:61 pkg/shell/credentials.jsx:312 msgid "Unlock" msgstr "Avaa" @@ -8828,7 +8727,7 @@ msgid "Unlocking $target" msgstr "Avataan $target" -#: pkg/storaged/crypto/keyslots.jsx:188 +#: pkg/storaged/crypto/keyslots.jsx:221 msgid "Unlocking disk" msgstr "Avataan levyn lukitus" @@ -8837,14 +8736,14 @@ msgid "Unmanaged interfaces" msgstr "Hallitsemattomat liitännät" -#: pkg/storaged/stratis/filesystem.jsx:172 pkg/storaged/nfs/nfs.jsx:309 -#: pkg/storaged/filesystem/mounting-dialog.jsx:339 +#: pkg/storaged/nfs/nfs.jsx:309 pkg/storaged/btrfs/subvolume.jsx:338 +#: pkg/storaged/stratis/filesystem.jsx:172 +#: pkg/storaged/filesystem/mounting-dialog.jsx:357 #: pkg/storaged/filesystem/filesystem.jsx:102 -#: pkg/storaged/btrfs/subvolume.jsx:338 msgid "Unmount" msgstr "Irroita" -#: pkg/storaged/filesystem/mounting-dialog.jsx:333 +#: pkg/storaged/filesystem/mounting-dialog.jsx:351 msgid "Unmount filesystem $0" msgstr "Irrota tiedostojärjestelmä $0" @@ -8865,15 +8764,13 @@ msgid "Unpin unit" msgstr "Poista yksikön merkkaus" -#: pkg/storaged/block/unrecognized-data.jsx:35 +#: pkg/storaged/block/unrecognized-data.jsx:34 msgid "Unrecognized data" msgstr "Tunnistamaton data" #: pkg/storaged/block/resize.jsx:306 -#, fuzzy -#| msgid "Unrecognized data can not be made smaller here." msgid "Unrecognized data can not be made smaller here" -msgstr "Tunnistamatonta dataa ei voi pienentää täällä." +msgstr "Tunnistamatonta dataa ei voi pienentää täällä" #: pkg/storaged/block/resize.jsx:195 msgid "Unrecognized data can not be made smaller here." @@ -8889,7 +8786,7 @@ msgid "Until" msgstr "Kunnes" -#: pkg/lib/cockpit.js:3848 pkg/lib/cockpit.js:3850 +#: pkg/lib/cockpit.js:3844 pkg/lib/cockpit.js:3846 msgid "Untrusted host" msgstr "Epäluotettava kone" @@ -8897,11 +8794,11 @@ msgid "Update" msgstr "Päivitä" -#: pkg/packagekit/updates.jsx:754 +#: pkg/packagekit/updates.jsx:753 msgid "Update Success Table" msgstr "Päivityksen onnistumisen taulukko" -#: pkg/packagekit/updates.jsx:957 +#: pkg/packagekit/updates.jsx:956 msgid "Update history" msgstr "Päivityshistoria" @@ -8909,7 +8806,7 @@ msgid "Update package information" msgstr "Päivitä pakettitiedot" -#: pkg/packagekit/updates.jsx:679 pkg/packagekit/updates.jsx:749 +#: pkg/packagekit/updates.jsx:678 pkg/packagekit/updates.jsx:748 msgid "Update was successful" msgstr "Päivitys onnistui" @@ -8917,13 +8814,13 @@ msgid "Updated" msgstr "Päivitetty" -#: pkg/packagekit/updates.jsx:682 +#: pkg/packagekit/updates.jsx:681 msgid "Updated packages may require a reboot to take effect." msgstr "" "Päivitetyt paketit saattavat vaatia uudelleenkäynnistyksen, jotta muutokset " "tulevat voimaan." -#: pkg/packagekit/updates.jsx:1441 +#: pkg/packagekit/updates.jsx:1440 msgid "Updates available" msgstr "Päivityksiä saatavilla" @@ -8947,13 +8844,15 @@ msgid "Uptime" msgstr "Toiminta-aika" +#: pkg/storaged/btrfs/volume.jsx:129 pkg/storaged/btrfs/device.jsx:80 +#: pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/storaged/block/unrecognized-data.jsx:50 +#: pkg/storaged/lvm2/physical-volume.jsx:119 pkg/storaged/stratis/pool.jsx:521 +#: pkg/storaged/stratis/filesystem.jsx:226 +#: pkg/storaged/filesystem/filesystem.jsx:152 #: pkg/systemd/overview-cards/usageCard.jsx:127 pkg/metrics/metrics.jsx:1949 #: pkg/metrics/metrics.jsx:1950 pkg/metrics/metrics.jsx:1951 -#: pkg/metrics/metrics.jsx:1952 pkg/storaged/stratis/filesystem.jsx:226 -#: pkg/storaged/stratis/pool.jsx:521 pkg/storaged/lvm2/physical-volume.jsx:119 -#: pkg/storaged/block/unrecognized-data.jsx:51 -#: pkg/storaged/filesystem/filesystem.jsx:152 pkg/storaged/btrfs/volume.jsx:129 -#: pkg/storaged/btrfs/device.jsx:80 pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/metrics/metrics.jsx:1952 msgid "Usage" msgstr "Käyttö" @@ -8961,16 +8860,16 @@ msgid "Usage of $0" msgstr "$0 käyttö" -#: pkg/networkmanager/dialogs-common.jsx:103 pkg/storaged/dialog.jsx:624 -#: pkg/storaged/dialog.jsx:1139 +#: pkg/storaged/dialog.jsx:624 pkg/storaged/dialog.jsx:1141 +#: pkg/networkmanager/dialogs-common.jsx:103 msgid "Use" msgstr "Käytä" -#: pkg/storaged/lvm2/vdo-pool.jsx:85 pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 pkg/storaged/lvm2/vdo-pool.jsx:85 msgid "Use compression" msgstr "Käytä pakkausta" -#: pkg/storaged/lvm2/vdo-pool.jsx:89 pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 pkg/storaged/lvm2/vdo-pool.jsx:89 msgid "Use deduplication" msgstr "Käytä päällekkäisyyden poistoa" @@ -8986,23 +8885,23 @@ msgid "Use the following keys to authenticate against other systems" msgstr "Käytä seuraavia avaimia todentamaan muita järjestelmiä kohden" -#: pkg/sosreport/sosreport.jsx:324 +#: pkg/sosreport/sosreport.jsx:333 msgid "Use verbose logging" msgstr "Käytä monisanaista lokia" -#: pkg/metrics/metrics.jsx:813 pkg/metrics/metrics.jsx:907 -#: pkg/storaged/swap/swap.jsx:125 +#: pkg/storaged/swap/swap.jsx:125 pkg/metrics/metrics.jsx:813 +#: pkg/metrics/metrics.jsx:907 msgid "Used" msgstr "Käytetty" -#: pkg/storaged/filesystem/mounting-dialog.jsx:110 +#: pkg/storaged/filesystem/mounting-dialog.jsx:113 msgid "" "Useful for mounts that are optional or need interaction (such as passphrases)" msgstr "" "Hyödyllinen liitoksille, jotka ovat valinnaisia tai tarvitsevat " "vuorovaikutusta (kuten tunnuslauseita)" -#: pkg/systemd/services.jsx:917 pkg/storaged/dialog.jsx:1331 +#: pkg/storaged/dialog.jsx:1333 pkg/systemd/services.jsx:916 msgid "User" msgstr "Käyttäjä" @@ -9027,7 +8926,7 @@ msgstr "Käyttäjän ID-numero ei saa olla pienempi kuin $0" #: pkg/static/login.html:94 pkg/shell/hosts_dialog.jsx:264 -#: pkg/users/account-create-dialog.js:76 pkg/users/account-details.js:262 +#: pkg/users/account-details.js:262 pkg/users/account-create-dialog.js:76 msgid "User name" msgstr "Käyttäjänimi" @@ -9052,7 +8951,7 @@ msgid "VDO backing devices can not be made smaller" msgstr "VDO-taustalaitteita ei voi tehdä pienemmiksi" -#: pkg/storaged/utils.js:345 pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 pkg/storaged/utils.js:346 msgid "VDO device $0" msgstr "VDO-laite $0" @@ -9078,7 +8977,7 @@ msgid "Validating authentication token" msgstr "Vahvistetaan todennustunnus" -#: pkg/systemd/hwinfo.jsx:278 pkg/storaged/drive/drive.jsx:120 +#: pkg/storaged/drive/drive.jsx:120 pkg/systemd/hwinfo.jsx:278 msgid "Vendor" msgstr "Toimittaja" @@ -9087,12 +8986,10 @@ msgstr "Vahvistettu" #: pkg/shell/hosts_dialog.jsx:489 -#, fuzzy -#| msgid "Fingerprint" msgid "Verify fingerprint" -msgstr "Sormenjälki" +msgstr "Vahvista sormenjälki" -#: pkg/storaged/stratis/utils.jsx:83 pkg/storaged/crypto/keyslots.jsx:540 +#: pkg/storaged/crypto/keyslots.jsx:574 pkg/storaged/stratis/utils.jsx:83 msgid "Verify key" msgstr "Vahvista avain" @@ -9100,7 +8997,7 @@ msgid "Verifying" msgstr "Varmistetaan" -#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:449 +#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:448 msgid "Version" msgstr "Versio" @@ -9124,8 +9021,8 @@ msgid "View all services" msgstr "Katso kaikki palvelut" -#: pkg/kdump/kdump-view.jsx:526 #: pkg/lib/cockpit-components-modifications.jsx:154 +#: pkg/kdump/kdump-view.jsx:526 msgid "View automation script" msgstr "Näytä automaatio-komentosarja" @@ -9163,7 +9060,7 @@ msgid "View report" msgstr "Tarkastele raporttia" -#: pkg/packagekit/updates.jsx:619 +#: pkg/packagekit/updates.jsx:618 msgid "View update log" msgstr "Katso päivityslokit" @@ -9181,8 +9078,8 @@ msgid "Volume group" msgstr "Taltioryhmä" -#: pkg/storaged/lvm2/volume-group.jsx:223 #: pkg/storaged/lvm2/physical-volume.jsx:71 +#: pkg/storaged/lvm2/volume-group.jsx:223 #, fuzzy #| msgid "Removing physical volume from $target" msgid "Volume group is missing physical volumes" @@ -9209,7 +9106,7 @@ msgid "Waiting for other programs to finish using the package manager..." msgstr "Odotetaan muiden ohjelmien paketinhallinnan käyttämisen päättymistä..." -#: pkg/storaged/crypto/keyslots.jsx:216 +#: pkg/storaged/crypto/keyslots.jsx:250 #: pkg/lib/cockpit-components-install-dialog.jsx:150 #: pkg/lib/cockpit-components-install-dialog.jsx:185 msgid "Waiting for other software management operations to finish" @@ -9245,7 +9142,7 @@ msgid "Web Console for Linux servers" msgstr "Verkkokonsoli Linux-palvelimille" -#: pkg/packagekit/updates.jsx:530 pkg/packagekit/updates.jsx:935 +#: pkg/packagekit/updates.jsx:529 pkg/packagekit/updates.jsx:934 msgid "Web Console will restart" msgstr "Verkkokonsoli käynnistyy uudelleen" @@ -9277,7 +9174,7 @@ msgid "When empty, connect with the current user" msgstr "Tyhjänä ollessa, muodosta yhteys nykyisenä käyttäjänä" -#: pkg/packagekit/updates.jsx:533 pkg/packagekit/updates.jsx:940 +#: pkg/packagekit/updates.jsx:532 pkg/packagekit/updates.jsx:939 msgid "" "When the Web Console is restarted, you will no longer see progress " "information. However, the update process will continue in the background. " @@ -9320,9 +9217,6 @@ msgstr "" #: pkg/storaged/drive/drive.jsx:124 -#, fuzzy -#| msgctxt "storage" -#| msgid "World wide name" msgid "World wide name" msgstr "Maailmanlaajuinen nimi" @@ -9351,11 +9245,11 @@ msgid "Yearly" msgstr "Vuosittain" -#: pkg/systemd/reporting.jsx:281 pkg/networkmanager/network-interface.jsx:241 +#: pkg/networkmanager/network-interface.jsx:241 pkg/systemd/reporting.jsx:281 msgid "Yes" msgstr "Kyllä" -#: pkg/static/login.js:765 pkg/shell/hosts_dialog.jsx:488 +#: pkg/shell/hosts_dialog.jsx:488 pkg/static/login.js:765 msgid "You are connecting to $0 for the first time." msgstr "Yhdistät koneeseen $0 ensimmäistä kertaa." @@ -9425,11 +9319,11 @@ "Palvelimesi sulkee yhteyden pian. Voit muodostaa yhteyden uudelleen, kun " "palvelin on käynnistynyt uudelleen." -#: pkg/lib/cockpit.js:3838 +#: pkg/lib/cockpit.js:3834 msgid "Your session has been terminated." msgstr "Istuntosi on päätetty." -#: pkg/lib/cockpit.js:3840 +#: pkg/lib/cockpit.js:3836 msgid "Your session has expired. Please log in again." msgstr "Istuntosi on vahventunut. Ole hyvä ja kirjaudu uudelleen sisään." @@ -9495,7 +9389,7 @@ msgid "average: $0%" msgstr "keskiarvo: $0%" -#: pkg/storaged/dialog.jsx:1116 +#: pkg/storaged/dialog.jsx:1118 msgid "backing device for VDO device" msgstr "taustalaite VDO-laitteelle" @@ -9538,42 +9432,36 @@ msgstr "Luo tiedostojärjestelmä" #: pkg/storaged/btrfs/subvolume.jsx:386 -#, fuzzy -#| msgid "Storage volume" msgid "btrfs subvolume" -msgstr "Varastointivarannon taltio" +msgstr "Btrfs-alataltio" #: pkg/storaged/filesystem/utils.jsx:81 msgid "btrfs subvolume $0 of $1" msgstr "" #: pkg/storaged/btrfs/volume.jsx:146 pkg/storaged/btrfs/volume.jsx:158 -#: pkg/storaged/btrfs/filesystem.jsx:87 pkg/storaged/btrfs/subvolume.jsx:424 +#: pkg/storaged/btrfs/subvolume.jsx:424 pkg/storaged/btrfs/filesystem.jsx:87 #, fuzzy #| msgid "Storage volumes" msgid "btrfs subvolumes" msgstr "Varastoinnin taltiot" #: pkg/storaged/btrfs/volume.jsx:68 pkg/storaged/btrfs/device.jsx:69 -#, fuzzy -#| msgid "Storage volume" msgid "btrfs volume" -msgstr "Varastointivarannon taltio" +msgstr "Btrfs-taltio" -#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:318 msgid "bug fix" msgstr "viankorjaus" -#: pkg/storaged/utils.js:175 +#: pkg/storaged/utils.js:176 msgctxt "format-bytes" msgid "bytes" msgstr "tavua" #: pkg/storaged/stratis/blockdev.jsx:57 -#, fuzzy -#| msgid "Cache" msgid "cache" -msgstr "Välimuisti" +msgstr "välimuisti" #: pkg/systemd/manifest.json:0 msgid "cgroups" @@ -9603,23 +9491,19 @@ msgid "cpu" msgstr "suoritin" -#: pkg/systemd/manifest.json:0 pkg/kdump/manifest.json:0 +#: pkg/kdump/manifest.json:0 pkg/systemd/manifest.json:0 msgid "crash" msgstr "kaatuminen" #: pkg/storaged/stratis/blockdev.jsx:55 -#, fuzzy -#| msgid "$0 data" msgid "data" -msgstr "$0 tiedot" +msgstr "tiedot" #: pkg/systemd/manifest.json:0 msgid "date" msgstr "päivämäärä" #: pkg/storaged/lvm2/block-logical-volume.jsx:147 -#, fuzzy -#| msgid "Deactivate" msgid "deactivate" msgstr "Deaktivoi" @@ -9627,18 +9511,19 @@ msgid "debug" msgstr "virheenjäljitys" -#: pkg/storaged/stratis/filesystem.jsx:121 pkg/storaged/stratis/pool.jsx:133 -#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 -#: pkg/storaged/lvm2/block-logical-volume.jsx:64 -#: pkg/storaged/block/format-dialog.jsx:208 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 +#: pkg/storaged/partitions/partition.jsx:43 #: pkg/storaged/partitions/format-disk-dialog.jsx:35 -#: pkg/storaged/partitions/partition.jsx:43 pkg/storaged/mdraid/mdraid.jsx:112 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 #: pkg/storaged/btrfs/subvolume.jsx:217 +#: pkg/storaged/block/format-dialog.jsx:208 +#: pkg/storaged/lvm2/block-logical-volume.jsx:64 +#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 +#: pkg/storaged/stratis/pool.jsx:133 pkg/storaged/stratis/filesystem.jsx:121 +#: pkg/storaged/mdraid/mdraid.jsx:112 msgid "delete" msgstr "Poista" -#: pkg/storaged/dialog.jsx:1119 +#: pkg/storaged/dialog.jsx:1121 msgid "device of btrfs volume" msgstr "" @@ -9670,19 +9555,19 @@ msgid "drive" msgstr "asema" -#: pkg/systemd/overview-cards/configurationCard.jsx:55 -#: pkg/networkmanager/network-interface.jsx:349 -#: pkg/networkmanager/dialogs-common.jsx:262 -#: pkg/storaged/stratis/filesystem.jsx:220 pkg/storaged/stratis/pool.jsx:517 -#: pkg/storaged/lvm2/volume-group.jsx:384 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 +#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/storaged/crypto/encryption.jsx:233 +#: pkg/storaged/crypto/encryption.jsx:236 #: pkg/storaged/lvm2/block-logical-volume.jsx:288 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/lvm2/volume-group.jsx:384 pkg/storaged/stratis/pool.jsx:517 +#: pkg/storaged/stratis/filesystem.jsx:220 +#: pkg/storaged/filesystem/utils.jsx:221 #: pkg/storaged/filesystem/filesystem.jsx:145 -#: pkg/storaged/filesystem/utils.jsx:221 pkg/storaged/crypto/encryption.jsx:233 -#: pkg/storaged/crypto/encryption.jsx:236 -#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 -#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/users/account-details.js:291 -#: pkg/users/account-details.js:321 +#: pkg/networkmanager/dialogs-common.jsx:261 +#: pkg/networkmanager/network-interface.jsx:349 +#: pkg/systemd/overview-cards/configurationCard.jsx:55 +#: pkg/users/account-details.js:291 pkg/users/account-details.js:321 msgid "edit" msgstr "muokkaa" @@ -9691,16 +9576,14 @@ msgstr "ota käyttöön" #: pkg/storaged/crypto/encryption.jsx:44 -#, fuzzy -#| msgid "Encrypted" msgid "encrypted" -msgstr "Salattu" +msgstr "salattu" #: pkg/storaged/manifest.json:0 msgid "encryption" msgstr "salaus" -#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:318 msgid "enhancement" msgstr "parannus" @@ -9744,7 +9627,7 @@ msgid "extension" msgstr "laajennus" -#: pkg/systemd/overview-cards/configurationCard.jsx:153 +#: pkg/systemd/overview-cards/configurationCard.jsx:151 msgid "failed to list ssh host keys: $0" msgstr "ssh-koneavainten luettelointi epäonnistui: $0" @@ -9912,13 +9795,11 @@ msgid "max: $0%" msgstr "maksimi: $0%" -#: pkg/storaged/dialog.jsx:1115 -#, fuzzy -#| msgid "member of RAID device" +#: pkg/storaged/dialog.jsx:1117 msgid "member of MDRAID device" -msgstr "RAID-laitteen jäsenenä" +msgstr "MDRAID-laitteen jäsen" -#: pkg/storaged/dialog.jsx:1117 +#: pkg/storaged/dialog.jsx:1119 msgid "member of Stratis pool" msgstr "Stratis-varannon jäsen" @@ -9942,7 +9823,7 @@ msgid "more details" msgstr "lisätietoja" -#: pkg/storaged/utils.js:887 pkg/storaged/manifest.json:0 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "mount" msgstr "liitos" @@ -9950,7 +9831,7 @@ msgid "nbde" msgstr "nbde" -#: pkg/systemd/manifest.json:0 pkg/networkmanager/manifest.json:0 +#: pkg/networkmanager/manifest.json:0 pkg/systemd/manifest.json:0 msgid "network" msgstr "verkko" @@ -9978,11 +9859,11 @@ msgid "nice" msgstr "nice" -#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 -#: pkg/storaged/stratis/stopped-pool.jsx:130 -#: pkg/storaged/stratis/stopped-pool.jsx:134 #: pkg/storaged/crypto/encryption.jsx:232 #: pkg/storaged/crypto/encryption.jsx:235 +#: pkg/storaged/stratis/stopped-pool.jsx:130 +#: pkg/storaged/stratis/stopped-pool.jsx:134 +#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 msgid "none" msgstr "Ei mitään" @@ -10029,7 +9910,7 @@ msgid "password quality" msgstr "salasanan laatu" -#: pkg/packagekit/updates.jsx:344 +#: pkg/packagekit/updates.jsx:343 msgid "patches" msgstr "paikkauksia" @@ -10049,7 +9930,7 @@ msgid "performance" msgstr "suorituskyky" -#: pkg/storaged/dialog.jsx:1114 +#: pkg/storaged/dialog.jsx:1116 msgid "physical volume of LVM2 volume group" msgstr "LVM2-taltioryhmän fyysinen taltio" @@ -10097,17 +9978,15 @@ msgid "recommended" msgstr "suositeltu" -#: pkg/storaged/utils.js:946 +#: pkg/storaged/utils.js:947 msgid "remove from LVM2" msgstr "poista LVM2:sta" -#: pkg/storaged/utils.js:935 -#, fuzzy -#| msgid "remove from RAID" +#: pkg/storaged/utils.js:936 msgid "remove from MDRAID" -msgstr "poista RAID:ista" +msgstr "poista MDRAID:ista" -#: pkg/storaged/utils.js:905 +#: pkg/storaged/utils.js:906 #, fuzzy #| msgid "remove from LVM2" msgid "remove from btrfs volume" @@ -10121,11 +10000,11 @@ msgid "roles" msgstr "roolit" -#: pkg/systemd/overview.jsx:159 +#: pkg/systemd/overview.jsx:169 msgid "running $0" msgstr "käyttöjärjestelmänä $0" -#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:311 +#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:310 #: pkg/packagekit/manifest.json:0 msgid "security" msgstr "turvallisuus" @@ -10199,7 +10078,7 @@ msgid "ssh server is empty" msgstr "SSH-palvelin on tyhjä" -#: pkg/storaged/utils.js:924 pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 pkg/storaged/utils.js:925 #: pkg/storaged/mdraid/mdraid.jsx:59 msgid "stop" msgstr "pysäytä" @@ -10209,10 +10088,8 @@ msgstr "pysäyttä käynnistyksen epäonnistuessa" #: pkg/storaged/stratis/stopped-pool.jsx:99 pkg/storaged/mdraid/mdraid.jsx:200 -#, fuzzy -#| msgid "Stopped" msgid "stopped" -msgstr "Pysäytetty" +msgstr "pysäytetty" #: pkg/metrics/metrics.jsx:112 msgid "sys" @@ -10262,8 +10139,8 @@ msgid "unit" msgstr "yksikkö" -#: pkg/systemd/services.jsx:555 pkg/systemd/services.jsx:565 -#: pkg/systemd/hw-detect.js:129 +#: pkg/systemd/hw-detect.js:129 pkg/systemd/services.jsx:555 +#: pkg/systemd/services.jsx:565 msgid "unknown" msgstr "tuntematon" @@ -10275,12 +10152,12 @@ msgid "unmask" msgstr "poista peite" -#: pkg/storaged/utils.js:874 pkg/storaged/utils.js:887 -#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/manifest.json:0 +#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/utils.js:875 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "unmount" msgstr "irrota" -#: pkg/storaged/utils.js:533 +#: pkg/storaged/utils.js:534 msgid "unpartitioned space on $0" msgstr "osioimaton tila levyllä $0" diff -Nru cockpit-314/po/fr.po cockpit-316/po/fr.po --- cockpit-314/po/fr.po 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/po/fr.po 2024-04-25 09:45:58.000000000 +0000 @@ -21,8 +21,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-26 02:47+0000\n" -"PO-Revision-Date: 2024-03-26 07:38+0000\n" +"POT-Creation-Date: 2024-04-11 02:47+0000\n" +"PO-Revision-Date: 2024-04-01 17:36+0000\n" "Last-Translator: William Modave \n" "Language-Team: French \n" @@ -101,8 +101,8 @@ msgstr[0] "$0 jour" msgstr[1] "$0 jours" -#: pkg/playground/translate.js:26 pkg/playground/translate.js:29 -#: pkg/storaged/mdraid/mdraid.jsx:257 +#: pkg/storaged/mdraid/mdraid.jsx:257 pkg/playground/translate.js:26 +#: pkg/playground/translate.js:29 msgid "$0 disk is missing" msgid_plural "$0 disks are missing" msgstr[0] "$0 disque est manquant" @@ -119,7 +119,7 @@ msgid "$0 disks" msgstr "$0 Disques" -#: pkg/shell/topnav.jsx:152 +#: pkg/shell/topnav.jsx:154 msgid "$0 documentation" msgstr "$0 documentation" @@ -127,11 +127,11 @@ msgid "$0 error" msgstr "$0 erreur" -#: pkg/lib/cockpit.js:2698 +#: pkg/lib/cockpit.js:2694 msgid "$0 exited with code $1" msgstr "$0 quitté avec le code $1" -#: pkg/lib/cockpit.js:2700 +#: pkg/lib/cockpit.js:2696 msgid "$0 failed" msgstr "$0 échoué" @@ -165,16 +165,17 @@ msgid "$0 is an existing file" msgstr "$0 est un fichier existant" -#: pkg/storaged/stratis/filesystem.jsx:125 pkg/storaged/stratis/pool.jsx:137 -#: pkg/storaged/lvm2/volume-group.jsx:85 pkg/storaged/lvm2/volume-group.jsx:336 +#: pkg/storaged/partitions/partition.jsx:47 +#: pkg/storaged/partitions/format-disk-dialog.jsx:39 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:50 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:84 +#: pkg/storaged/block/format-dialog.jsx:212 pkg/storaged/block/resize.jsx:425 +#: pkg/storaged/block/resize.jsx:571 #: pkg/storaged/lvm2/block-logical-volume.jsx:68 #: pkg/storaged/lvm2/block-logical-volume.jsx:151 -#: pkg/storaged/block/format-dialog.jsx:212 pkg/storaged/block/resize.jsx:425 -#: pkg/storaged/block/resize.jsx:571 pkg/storaged/legacy-vdo/legacy-vdo.jsx:50 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:84 -#: pkg/storaged/partitions/format-disk-dialog.jsx:39 -#: pkg/storaged/partitions/partition.jsx:47 pkg/storaged/mdraid/mdraid.jsx:63 -#: pkg/storaged/mdraid/mdraid.jsx:116 +#: pkg/storaged/lvm2/volume-group.jsx:85 pkg/storaged/lvm2/volume-group.jsx:336 +#: pkg/storaged/stratis/pool.jsx:137 pkg/storaged/stratis/filesystem.jsx:125 +#: pkg/storaged/mdraid/mdraid.jsx:63 pkg/storaged/mdraid/mdraid.jsx:116 msgid "$0 is in use" msgstr "$0 est en cours d’utilisation" @@ -183,11 +184,11 @@ msgid "$0 is not available from any repository." msgstr "$0 n’est disponible dans aucun référentiel." -#: pkg/static/login.js:759 pkg/shell/hosts_dialog.jsx:464 +#: pkg/shell/hosts_dialog.jsx:464 pkg/static/login.js:759 msgid "$0 key changed" msgstr "$0 clé modifiée" -#: pkg/lib/cockpit.js:2696 +#: pkg/lib/cockpit.js:2692 msgid "$0 killed with signal $1" msgstr "$0 killed avec un signal $1" @@ -225,7 +226,7 @@ msgstr[0] "$0 paquet" msgstr[1] "$0 paquets" -#: pkg/packagekit/updates.jsx:703 pkg/packagekit/updates.jsx:818 +#: pkg/packagekit/updates.jsx:702 pkg/packagekit/updates.jsx:817 msgid "$0 package needs a system reboot" msgid_plural "$0 packages need a system reboot" msgstr[0] "$0 le paquet a besoin d’un redémarrage du système" @@ -241,7 +242,7 @@ msgid "$0 partitions" msgstr "$0 partitions" -#: pkg/packagekit/updates.jsx:790 +#: pkg/packagekit/updates.jsx:789 msgid "$0 security fix available" msgid_plural "$0 security fixes available" msgstr[0] "$0 correctif de sécurité disponible" @@ -253,13 +254,13 @@ msgstr[0] "$0 service a échoué" msgstr[1] "$0 services ont échoué" -#: pkg/packagekit/updates.jsx:720 pkg/packagekit/updates.jsx:830 +#: pkg/packagekit/updates.jsx:719 pkg/packagekit/updates.jsx:829 msgid "$0 service needs to be restarted" msgid_plural "$0 services need to be restarted" msgstr[0] "$0 le service doit être relancé" msgstr[1] "$0 les services doivent être redémarrés" -#: pkg/storaged/crypto/keyslots.jsx:778 +#: pkg/storaged/crypto/keyslots.jsx:812 msgid "$0 slot remains" msgid_plural "$0 slots remain" msgstr[0] "$0 il reste un créneau" @@ -271,7 +272,7 @@ msgstr[0] "$0 pic" msgstr[1] "$0 pics" -#: pkg/storaged/lvm2/block-logical-volume.jsx:403 +#: pkg/storaged/lvm2/block-logical-volume.jsx:402 msgid "$0 synchronized" msgstr "$0 synchronisé" @@ -280,7 +281,7 @@ msgid "$0 total" msgstr "$0 total" -#: pkg/packagekit/updates.jsx:798 +#: pkg/packagekit/updates.jsx:797 msgid "$0 update available" msgid_plural "$0 updates available" msgstr[0] "$0 mise à jour disponible" @@ -314,11 +315,11 @@ msgid "$0: crash at $1" msgstr "$0 : plantage à $1" -#: pkg/storaged/utils.js:274 +#: pkg/storaged/utils.js:275 msgid "$name (from $host)" msgstr "$name (de $host )" -#: pkg/storaged/dialog.jsx:1222 +#: pkg/storaged/dialog.jsx:1224 #, fuzzy #| msgid "Creating partition $target" msgid "(Not part of target)" @@ -339,7 +340,7 @@ msgid "(recommended)" msgstr "(recommandé)" -#: pkg/packagekit/updates.jsx:800 +#: pkg/packagekit/updates.jsx:799 msgid ", including $1 security fix" msgid_plural ", including $1 security fixes" msgstr[0] ", y compris $1 correctif de sécurité" @@ -509,8 +510,8 @@ msgid "5 min" msgstr "5 min" -#: pkg/lib/cockpit-components-plot.jsx:267 #: pkg/lib/cockpit-components-shutdown.jsx:178 +#: pkg/lib/cockpit-components-plot.jsx:267 msgid "5 minutes" msgstr "5 minutes" @@ -640,11 +641,11 @@ msgid "ARP ping" msgstr "Ping ARP" -#: pkg/shell/topnav.jsx:174 +#: pkg/shell/topnav.jsx:176 msgid "About Web Console" msgstr "À propos de la console web" -#: pkg/systemd/hw-detect.js:114 pkg/lib/machine-info.js:247 +#: pkg/lib/machine-info.js:247 pkg/systemd/hw-detect.js:114 msgid "Absent" msgstr "Absent" @@ -666,12 +667,12 @@ msgid "Account not available or cannot be edited." msgstr "Le compte n’est pas disponible ou ne peut pas être modifié." -#: pkg/users/accounts-list.js:232 pkg/users/accounts-list.js:446 -#: pkg/users/account-details.js:236 pkg/users/manifest.json:0 +#: pkg/users/account-details.js:236 pkg/users/accounts-list.js:232 +#: pkg/users/accounts-list.js:446 pkg/users/manifest.json:0 msgid "Accounts" msgstr "Comptes" -#: pkg/storaged/dialog.jsx:1244 +#: pkg/storaged/dialog.jsx:1246 msgid "Action" msgstr "Action" @@ -699,7 +700,7 @@ msgid "Active backup" msgstr "Sauvegarde active" -#: pkg/shell/topnav.jsx:212 pkg/shell/active-pages-modal.jsx:97 +#: pkg/shell/topnav.jsx:223 pkg/shell/active-pages-modal.jsx:97 #: pkg/shell/active-pages-modal.jsx:105 msgid "Active pages" msgstr "Pages actives" @@ -721,17 +722,18 @@ msgid "Adaptive transmit load balancing" msgstr "Répartition adaptative de la charge d’émission" -#: pkg/systemd/timer-dialog.jsx:367 pkg/networkmanager/dialogs-common.jsx:160 -#: pkg/storaged/stratis/pool.jsx:217 pkg/storaged/lvm2/volume-group.jsx:209 -#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/iscsi/create-dialog.jsx:120 +#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/crypto/keyslots.jsx:492 +#: pkg/storaged/crypto/keyslots.jsx:815 +#: pkg/storaged/iscsi/create-dialog.jsx:120 #: pkg/storaged/iscsi/create-dialog.jsx:144 -#: pkg/storaged/crypto/keyslots.jsx:458 pkg/storaged/crypto/keyslots.jsx:781 -#: pkg/storaged/mdraid/mdraid.jsx:167 pkg/shell/hosts_dialog.jsx:252 +#: pkg/storaged/lvm2/volume-group.jsx:209 pkg/storaged/stratis/pool.jsx:217 +#: pkg/storaged/mdraid/mdraid.jsx:167 pkg/networkmanager/dialogs-common.jsx:160 +#: pkg/systemd/timer-dialog.jsx:367 pkg/shell/hosts_dialog.jsx:252 #: pkg/shell/credentials.jsx:184 pkg/users/authorized-keys-panel.js:68 msgid "Add" msgstr "Ajouter" -#: pkg/networkmanager/network-interface-members.jsx:166 +#: pkg/networkmanager/network-interface-members.jsx:167 #: pkg/lib/cockpit-components-firewalld-request.jsx:146 msgid "Add $0" msgstr "Ajouter $0" @@ -743,7 +745,7 @@ msgid "Add DNS server" msgstr "Serveur de clés Tang" -#: pkg/storaged/crypto/keyslots.jsx:385 +#: pkg/storaged/crypto/keyslots.jsx:419 msgid "Add Network Bound Disk Encryption" msgstr "Ajouter le cryptage de disque lié au réseau" @@ -800,12 +802,12 @@ msgid "Add disks" msgstr "Ajouter des disques" -#: pkg/storaged/iscsi/create-dialog.jsx:29 #: pkg/storaged/overview/overview.jsx:153 +#: pkg/storaged/iscsi/create-dialog.jsx:29 msgid "Add iSCSI portal" msgstr "Ajouter un portail iSCSI" -#: pkg/storaged/crypto/keyslots.jsx:422 pkg/shell/credentials.jsx:90 +#: pkg/storaged/crypto/keyslots.jsx:456 pkg/shell/credentials.jsx:90 #: pkg/users/authorized-keys-panel.js:112 msgid "Add key" msgstr "Ajouter une clé" @@ -816,7 +818,7 @@ msgid "Add keyserver" msgstr "Serveur de clés Tang" -#: pkg/networkmanager/network-interface-members.jsx:186 +#: pkg/networkmanager/network-interface-members.jsx:187 msgid "Add member" msgstr "Ajouter un membre" @@ -882,7 +884,7 @@ msgid "Add services to zone $0" msgstr "Ajouter des services à la zone $0" -#: pkg/networkmanager/network-main.jsx:143 pkg/networkmanager/team.jsx:154 +#: pkg/networkmanager/team.jsx:154 pkg/networkmanager/network-main.jsx:143 msgid "Add team" msgstr "Ajouter une équipe" @@ -890,15 +892,15 @@ msgid "Add zone" msgstr "Ajouter une zone" -#: pkg/storaged/crypto/keyslots.jsx:327 +#: pkg/storaged/crypto/keyslots.jsx:361 msgid "Adding \"$0\" to encryption options" msgstr "Ajout de \"$0\" aux options de cryptage" -#: pkg/storaged/crypto/keyslots.jsx:316 +#: pkg/storaged/crypto/keyslots.jsx:350 msgid "Adding \"$0\" to filesystem options" msgstr "Ajout de \"$0\" aux options du système de fichiers" -#: pkg/networkmanager/network-interface-members.jsx:165 +#: pkg/networkmanager/network-interface-members.jsx:166 msgid "" "Adding $0 will break the connection to the server, and will make the " "administration UI unavailable." @@ -926,7 +928,7 @@ "Ajouter des ports personnalisés rechargera firewalld. Le rechargement de la " "configuration entraînera la perte de celle en cours d’exécution !" -#: pkg/storaged/crypto/keyslots.jsx:408 +#: pkg/storaged/crypto/keyslots.jsx:442 msgid "Adding key" msgstr "Ajout d’une clé" @@ -934,7 +936,7 @@ msgid "Adding physical volume to $target" msgstr "Ajout d’un volume physique à $target" -#: pkg/storaged/crypto/keyslots.jsx:288 +#: pkg/storaged/crypto/keyslots.jsx:322 msgid "Adding rd.neednet=1 to kernel command line" msgstr "Ajout de rd.neednet=1 à la ligne de commande du noyau" @@ -962,9 +964,9 @@ msgid "Additional ports" msgstr "Ports additionnels" +#: pkg/storaged/iscsi/create-dialog.jsx:111 pkg/storaged/iscsi/session.jsx:92 #: pkg/networkmanager/ip-settings.jsx:198 -#: pkg/networkmanager/ip-settings.jsx:358 pkg/storaged/iscsi/session.jsx:92 -#: pkg/storaged/iscsi/create-dialog.jsx:111 +#: pkg/networkmanager/ip-settings.jsx:358 msgid "Address" msgstr "Adresse" @@ -998,12 +1000,12 @@ msgid "Administrative access" msgstr "Accès administrateur" -#: pkg/sosreport/sosreport.jsx:415 +#: pkg/sosreport/sosreport.jsx:424 msgid "Administrative access is required to create and access reports." msgstr "" "Un accès administratif est nécessaire pour créer et accéder aux rapports." -#: pkg/sosreport/sosreport.jsx:414 +#: pkg/sosreport/sosreport.jsx:423 msgid "Administrative access required" msgstr "Accès administratif requis" @@ -1106,8 +1108,8 @@ msgid "Application information is missing" msgstr "" -#: pkg/apps/index.html:23 pkg/apps/application-list.jsx:184 -#: pkg/apps/application.jsx:146 pkg/apps/manifest.json:0 +#: pkg/apps/index.html:23 pkg/apps/application.jsx:146 +#: pkg/apps/application-list.jsx:184 pkg/apps/manifest.json:0 msgid "Applications" msgstr "Applications" @@ -1145,7 +1147,7 @@ msgid "Applying updates failed" msgstr "L’application des mises à jour a échoué" -#: pkg/storaged/filesystem/mounting-dialog.jsx:74 +#: pkg/storaged/filesystem/mounting-dialog.jsx:77 msgid "Appropriate for critical mounts, such as /var" msgstr "Approprié pour les montages critiques, tels que /var" @@ -1161,7 +1163,7 @@ msgid "Asset tag" msgstr "Étiquette d’inventaire" -#: pkg/storaged/filesystem/mounting-dialog.jsx:118 +#: pkg/storaged/filesystem/mounting-dialog.jsx:121 msgid "At boot" msgstr "Au démarrage" @@ -1175,8 +1177,9 @@ msgid "At least one block device is needed." msgstr "Au moins un périphérique en mode bloc est nécessaire." -#: pkg/storaged/stratis/pool.jsx:211 pkg/storaged/lvm2/create-dialog.jsx:57 -#: pkg/storaged/lvm2/volume-group.jsx:203 pkg/storaged/mdraid/mdraid.jsx:161 +#: pkg/storaged/lvm2/create-dialog.jsx:57 +#: pkg/storaged/lvm2/volume-group.jsx:203 pkg/storaged/stratis/pool.jsx:211 +#: pkg/storaged/mdraid/mdraid.jsx:161 msgid "At least one disk is needed." msgstr "Au moins un disque est nécessaire." @@ -1196,7 +1199,7 @@ msgid "At specific time" msgstr "À un moment précis" -#: pkg/sosreport/sosreport.jsx:492 +#: pkg/sosreport/sosreport.jsx:501 msgid "Attributes" msgstr "Attributs" @@ -1245,10 +1248,10 @@ msgid "Authorized public SSH keys" msgstr "Clés SSH publiques autorisées" -#: pkg/networkmanager/network-interface.jsx:378 #: pkg/networkmanager/ip-settings.jsx:40 pkg/networkmanager/ip-settings.jsx:244 #: pkg/networkmanager/ip-settings.jsx:292 #: pkg/networkmanager/ip-settings.jsx:340 pkg/networkmanager/mtu.jsx:79 +#: pkg/networkmanager/network-interface.jsx:378 msgid "Automatic" msgstr "Automatique" @@ -1288,7 +1291,7 @@ msgid "Available targets on $0" msgstr "Cibles disponibles sur $0" -#: pkg/packagekit/updates.jsx:445 pkg/packagekit/updates.jsx:927 +#: pkg/packagekit/updates.jsx:444 pkg/packagekit/updates.jsx:926 msgid "Available updates" msgstr "Mises à jour disponibles" @@ -1357,9 +1360,9 @@ msgid "Block device for filesystems" msgstr "Périphérique bloc pour système de fichiers" +#: pkg/storaged/stratis/pool.jsx:206 pkg/storaged/stratis/pool.jsx:563 +#: pkg/storaged/stratis/create-dialog.jsx:55 #: pkg/storaged/stratis/stopped-pool.jsx:138 -#: pkg/storaged/stratis/create-dialog.jsx:55 pkg/storaged/stratis/pool.jsx:206 -#: pkg/storaged/stratis/pool.jsx:563 msgid "Block devices" msgstr "Périphérique en mode bloc" @@ -1377,14 +1380,14 @@ msgid "Boot" msgstr "Amorçage" -#: pkg/storaged/filesystem/mounting-dialog.jsx:77 +#: pkg/storaged/filesystem/mounting-dialog.jsx:80 msgid "Boot fails if filesystem does not mount, preventing remote access" msgstr "" "Le démarrage échoue si le système de fichiers n'est pas monté, ce qui " "empêche l'accès à distance" -#: pkg/storaged/filesystem/mounting-dialog.jsx:88 -#: pkg/storaged/filesystem/mounting-dialog.jsx:99 +#: pkg/storaged/filesystem/mounting-dialog.jsx:91 +#: pkg/storaged/filesystem/mounting-dialog.jsx:102 msgid "Boot still succeeds when filesystem does not mount" msgstr "" "Le démarrage réussit toujours lorsque le système de fichiers n'est pas monté" @@ -1420,11 +1423,11 @@ msgid "Btrfs volume is mounted" msgstr "" -#: pkg/packagekit/updates.jsx:1437 +#: pkg/packagekit/updates.jsx:1436 msgid "Bug fix updates available" msgstr "Mises à jour des corrections de bogues disponibles" -#: pkg/packagekit/updates.jsx:387 +#: pkg/packagekit/updates.jsx:386 msgid "Bugs" msgstr "Anomalies" @@ -1448,7 +1451,7 @@ msgid "Bypass browser check" msgstr " Ignorer la vérification du navigateur " -#: pkg/systemd/overview-cards/usageCard.jsx:132 pkg/systemd/hwinfo.jsx:114 +#: pkg/systemd/hwinfo.jsx:114 pkg/systemd/overview-cards/usageCard.jsx:132 #: pkg/metrics/metrics.jsx:109 pkg/metrics/metrics.jsx:820 #: pkg/metrics/metrics.jsx:1572 pkg/metrics/metrics.jsx:1949 msgid "CPU" @@ -1470,7 +1473,7 @@ msgid "CPU usage/load" msgstr "Utilisation/charge CPU" -#: pkg/packagekit/updates.jsx:369 +#: pkg/packagekit/updates.jsx:368 msgid "CVE" msgstr "CVE" @@ -1490,28 +1493,29 @@ "Impossible de trouver des journaux en utilisant la combinaison actuelle de " "filtres." -#: pkg/static/login.html:141 pkg/playground/translate.html:39 -#: pkg/sosreport/sosreport.jsx:281 pkg/sosreport/sosreport.jsx:366 -#: pkg/systemd/timer-dialog.jsx:151 pkg/systemd/reporting.jsx:383 +#: pkg/playground/translate.html:39 pkg/static/login.html:141 +#: pkg/storaged/jobs-panel.jsx:140 pkg/apps/utils.jsx:69 +#: pkg/sosreport/sosreport.jsx:290 pkg/sosreport/sosreport.jsx:375 +#: pkg/networkmanager/dialogs-common.jsx:163 +#: pkg/networkmanager/firewall.jsx:613 pkg/networkmanager/firewall.jsx:814 +#: pkg/networkmanager/firewall.jsx:913 +#: pkg/lib/cockpit-components-dialog.jsx:131 +#: pkg/lib/cockpit-components-shutdown.jsx:193 pkg/kdump/kdump-view.jsx:235 +#: pkg/systemd/timer-dialog.jsx:151 pkg/systemd/hwinfo.jsx:231 #: pkg/systemd/overview-cards/motdCard.jsx:65 #: pkg/systemd/overview-cards/tuned-dialog.jsx:314 +#: pkg/systemd/overview-cards/realmd.jsx:434 +#: pkg/systemd/overview-cards/configurationCard.jsx:280 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:194 -#: pkg/systemd/overview-cards/configurationCard.jsx:284 -#: pkg/systemd/overview-cards/realmd.jsx:434 pkg/systemd/hwinfo.jsx:231 #: pkg/systemd/service-details.jsx:86 pkg/systemd/service-details.jsx:715 -#: pkg/metrics/metrics.jsx:1481 pkg/networkmanager/dialogs-common.jsx:163 -#: pkg/networkmanager/firewall.jsx:613 pkg/networkmanager/firewall.jsx:814 -#: pkg/networkmanager/firewall.jsx:913 pkg/kdump/kdump-view.jsx:235 -#: pkg/storaged/jobs-panel.jsx:140 pkg/shell/hosts_dialog.jsx:285 +#: pkg/systemd/reporting.jsx:383 pkg/shell/hosts_dialog.jsx:285 #: pkg/shell/hosts_dialog.jsx:382 pkg/shell/hosts_dialog.jsx:514 #: pkg/shell/hosts_dialog.jsx:891 pkg/shell/shell-modals.jsx:118 -#: pkg/shell/credentials.jsx:313 pkg/shell/superuser.jsx:182 -#: pkg/shell/superuser.jsx:219 pkg/shell/superuser.jsx:264 -#: pkg/shell/active-pages-modal.jsx:100 pkg/packagekit/kpatch.jsx:315 -#: pkg/packagekit/updates.jsx:542 pkg/packagekit/updates.jsx:580 -#: pkg/packagekit/autoupdates.jsx:274 pkg/apps/utils.jsx:69 -#: pkg/lib/cockpit-components-shutdown.jsx:193 -#: pkg/lib/cockpit-components-dialog.jsx:131 +#: pkg/shell/superuser.jsx:182 pkg/shell/superuser.jsx:219 +#: pkg/shell/superuser.jsx:264 pkg/shell/credentials.jsx:313 +#: pkg/shell/active-pages-modal.jsx:100 pkg/metrics/metrics.jsx:1481 +#: pkg/packagekit/updates.jsx:541 pkg/packagekit/updates.jsx:579 +#: pkg/packagekit/kpatch.jsx:315 pkg/packagekit/autoupdates.jsx:274 msgid "Cancel" msgstr "Annuler" @@ -1531,7 +1535,7 @@ msgid "Cannot connect to an unknown host" msgstr "Impossible de se connecter à une machine inconnue" -#: pkg/lib/cockpit.js:3860 +#: pkg/lib/cockpit.js:3856 msgid "Cannot forward login credentials" msgstr "Impossible de transférer les identifiants de connexion" @@ -1546,8 +1550,8 @@ msgid "Cannot schedule event in the past" msgstr "Impossible de planifier un événement dans le passé" -#: pkg/storaged/lvm2/volume-group.jsx:387 pkg/storaged/drive/drive.jsx:125 -#: pkg/storaged/mdraid/mdraid.jsx:293 pkg/storaged/btrfs/volume.jsx:128 +#: pkg/storaged/btrfs/volume.jsx:128 pkg/storaged/drive/drive.jsx:125 +#: pkg/storaged/lvm2/volume-group.jsx:387 pkg/storaged/mdraid/mdraid.jsx:293 msgid "Capacity" msgstr "Capacité" @@ -1555,10 +1559,11 @@ msgid "Carrier" msgstr "Opérateur" -#: pkg/systemd/overview-cards/configurationCard.jsx:283 -#: pkg/storaged/stratis/pool.jsx:531 pkg/storaged/iscsi/create-dialog.jsx:171 +#: pkg/storaged/iscsi/create-dialog.jsx:171 pkg/storaged/stratis/pool.jsx:531 +#: pkg/lib/serverTime.js:729 +#: pkg/systemd/overview-cards/configurationCard.jsx:279 #: pkg/users/expiration-dialogs.js:115 pkg/users/expiration-dialogs.js:217 -#: pkg/users/shell-dialog.js:78 pkg/lib/serverTime.js:729 +#: pkg/users/shell-dialog.js:78 msgid "Change" msgstr "Modification" @@ -1568,7 +1573,7 @@ msgid "Change cryptographic policy" msgstr "Changer la stratégie de chiffrement" -#: pkg/systemd/overview-cards/configurationCard.jsx:281 +#: pkg/systemd/overview-cards/configurationCard.jsx:277 msgid "Change host name" msgstr "Modifier le nom d’hôte" @@ -1584,7 +1589,7 @@ msgid "Change label" msgstr "Changer l’étiquette" -#: pkg/storaged/stratis/pool.jsx:400 pkg/storaged/crypto/keyslots.jsx:480 +#: pkg/storaged/crypto/keyslots.jsx:514 pkg/storaged/stratis/pool.jsx:400 msgid "Change passphrase" msgstr "Modifier la phrase secrète" @@ -1640,7 +1645,7 @@ "La modification des paramètres interrompt la connexion au serveur et rend " "l’interface utilisateur d’administration indisponible." -#: pkg/packagekit/updates.jsx:909 +#: pkg/packagekit/updates.jsx:908 msgid "Check for updates" msgstr "Vérifier les mises à jour" @@ -1669,11 +1674,11 @@ msgid "Checking and repairing MDRAID device $target" msgstr "Vérification et réparation du périphérique MDRAID $target" -#: pkg/storaged/crypto/keyslots.jsx:231 +#: pkg/storaged/crypto/keyslots.jsx:265 msgid "Checking for $0 package" msgstr "Vérification du paquet $0" -#: pkg/storaged/crypto/keyslots.jsx:267 +#: pkg/storaged/crypto/keyslots.jsx:301 msgid "Checking for NBDE support in the initrd" msgstr "Vérification du support NBDE dans initrd" @@ -1681,7 +1686,7 @@ msgid "Checking for new applications" msgstr "Vérification de nouvelles applications" -#: pkg/packagekit/updates.jsx:1389 +#: pkg/packagekit/updates.jsx:1388 msgid "Checking for package updates..." msgstr "Vérification des mises à jour des paquets..." @@ -1690,11 +1695,11 @@ msgid "Checking installed software" msgstr "Vérification des logiciels installés" -#: pkg/storaged/dialog.jsx:1271 +#: pkg/storaged/dialog.jsx:1273 msgid "Checking related processes" msgstr "Vérification des processus connexes" -#: pkg/packagekit/updates.jsx:1399 +#: pkg/packagekit/updates.jsx:1398 msgid "Checking software status" msgstr "Vérification de l’état des logiciels" @@ -1718,7 +1723,7 @@ msgid "Clear 'Failed to start'" msgstr "Effacer « Échec du démarrage »" -#: pkg/systemd/services-list.jsx:58 pkg/systemd/logsJournal.jsx:277 +#: pkg/systemd/logsJournal.jsx:277 pkg/systemd/services-list.jsx:58 msgid "Clear all filters" msgstr "Supprimer tous les filtres" @@ -1734,14 +1739,15 @@ msgid "Client software" msgstr "Logiciel client" -#: pkg/systemd/overview-cards/configurationCard.jsx:198 +#: pkg/storaged/dialog.jsx:456 pkg/apps/utils.jsx:87 +#: pkg/networkmanager/interfaces.js:43 +#: pkg/lib/cockpit-components-terminal.jsx:230 +#: pkg/lib/cockpit-components-modifications.jsx:76 #: pkg/systemd/overview-cards/realmd.jsx:278 -#: pkg/networkmanager/interfaces.js:43 pkg/storaged/dialog.jsx:456 +#: pkg/systemd/overview-cards/configurationCard.jsx:195 #: pkg/shell/hosts_dialog.jsx:92 pkg/shell/shell-modals.jsx:192 -#: pkg/shell/credentials.jsx:81 pkg/shell/superuser.jsx:190 -#: pkg/shell/superuser.jsx:198 pkg/apps/utils.jsx:87 -#: pkg/users/dialog-utils.js:58 pkg/lib/cockpit-components-terminal.jsx:230 -#: pkg/lib/cockpit-components-modifications.jsx:76 +#: pkg/shell/superuser.jsx:190 pkg/shell/superuser.jsx:198 +#: pkg/shell/credentials.jsx:81 pkg/users/dialog-utils.js:58 msgid "Close" msgstr "Fermer" @@ -1761,7 +1767,7 @@ msgid "Cockpit configuration of NetworkManager and Firewalld" msgstr "Configuration du cockpit de NetworkManager et Firewalld" -#: pkg/lib/cockpit.js:3866 +#: pkg/lib/cockpit.js:3862 msgid "Cockpit could not contact the given host." msgstr "Cockpit n’a pas pu contacter l’hôte indiqué." @@ -1788,7 +1794,7 @@ msgstr "" "Cockpit est une interface interactive d’administration de serveur Linux." -#: pkg/lib/cockpit.js:3864 +#: pkg/lib/cockpit.js:3860 msgid "Cockpit is not compatible with the software on the system." msgstr "Cockpit n’est pas compatible avec le logiciel sur le système." @@ -1796,7 +1802,7 @@ msgid "Cockpit is not installed" msgstr "Cockpit n’est pas installé" -#: pkg/lib/cockpit.js:3858 +#: pkg/lib/cockpit.js:3854 msgid "Cockpit is not installed on the system." msgstr "Cockpit n’est pas installé sur le système." @@ -1840,8 +1846,8 @@ msgstr "" "Les ports, les plages et les services séparés par des virgules sont acceptés" -#: pkg/systemd/timer-dialog.jsx:174 pkg/storaged/dialog.jsx:1330 -#: pkg/storaged/dialog.jsx:1350 +#: pkg/storaged/dialog.jsx:1332 pkg/storaged/dialog.jsx:1352 +#: pkg/systemd/timer-dialog.jsx:174 msgid "Command" msgstr "Commander" @@ -1874,9 +1880,9 @@ msgstr "" "Compresser les vidages de mémoire sur incidents pour économiser de l’espace" -#: pkg/kdump/kdump-view.jsx:314 pkg/storaged/lvm2/vdo-pool.jsx:84 -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:229 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:325 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:229 +#: pkg/storaged/lvm2/vdo-pool.jsx:84 pkg/kdump/kdump-view.jsx:314 msgid "Compression" msgstr "Compression" @@ -1888,7 +1894,7 @@ msgid "Condition failed" msgstr "Condition non remplie" -#: pkg/systemd/overview-cards/configurationCard.jsx:62 +#: pkg/systemd/overview-cards/configurationCard.jsx:61 msgid "Configuration" msgstr "Configuration" @@ -1908,12 +1914,12 @@ msgid "Configuring system settings" msgstr "Modification des paramètres système" -#: pkg/storaged/stratis/create-dialog.jsx:84 pkg/storaged/stratis/pool.jsx:380 -#: pkg/storaged/stratis/pool.jsx:409 pkg/storaged/block/format-dialog.jsx:343 +#: pkg/storaged/block/format-dialog.jsx:345 pkg/storaged/stratis/pool.jsx:380 +#: pkg/storaged/stratis/pool.jsx:409 pkg/storaged/stratis/create-dialog.jsx:84 msgid "Confirm" msgstr "Confirmer" -#: pkg/systemd/service-details.jsx:707 pkg/storaged/stratis/filesystem.jsx:133 +#: pkg/storaged/stratis/filesystem.jsx:133 pkg/systemd/service-details.jsx:707 msgid "Confirm deletion of $0" msgstr "Confirmer la suppression de $0" @@ -1937,7 +1943,7 @@ msgid "Confirm removal of $0" msgstr "Confirmer la suppression de $0" -#: pkg/storaged/crypto/keyslots.jsx:589 +#: pkg/storaged/crypto/keyslots.jsx:623 msgid "Confirm removal with an alternate passphrase" msgstr "Confirmer la suppression avec une phrase secrète alternative" @@ -1985,7 +1991,7 @@ msgid "Connection failed" msgstr "Échec de la connexion" -#: pkg/lib/cockpit.js:3856 +#: pkg/lib/cockpit.js:3852 msgid "Connection has timed out." msgstr "La connexion a expiré." @@ -2005,7 +2011,7 @@ msgid "Contains:" msgstr "Contient :" -#: pkg/packagekit/updates.jsx:764 +#: pkg/packagekit/updates.jsx:763 msgid "Continue" msgstr "Poursuivre" @@ -2032,19 +2038,19 @@ #: pkg/shell/hosts_dialog.jsx:475 pkg/shell/hosts_dialog.jsx:478 #: pkg/shell/hosts_dialog.jsx:493 pkg/shell/hosts_dialog.jsx:495 -#: pkg/shell/credentials.jsx:212 pkg/shell/failures.jsx:44 +#: pkg/shell/failures.jsx:43 pkg/shell/credentials.jsx:212 msgid "Copied" msgstr "Copié" -#: pkg/shell/hosts_dialog.jsx:475 pkg/shell/hosts_dialog.jsx:478 -#: pkg/shell/hosts_dialog.jsx:493 pkg/shell/hosts_dialog.jsx:495 -#: pkg/shell/credentials.jsx:212 pkg/shell/failures.jsx:44 -#: pkg/lib/cockpit-components-terminal.jsx:211 +#: pkg/lib/cockpit-components-terminal.jsx:211 pkg/shell/hosts_dialog.jsx:475 +#: pkg/shell/hosts_dialog.jsx:478 pkg/shell/hosts_dialog.jsx:493 +#: pkg/shell/hosts_dialog.jsx:495 pkg/shell/failures.jsx:43 +#: pkg/shell/credentials.jsx:212 msgid "Copy" msgstr "Copier" -#: pkg/systemd/logs.jsx:417 pkg/storaged/crypto/tang.jsx:117 -#: pkg/lib/cockpit-components-modifications.jsx:73 +#: pkg/storaged/crypto/tang.jsx:117 +#: pkg/lib/cockpit-components-modifications.jsx:73 pkg/systemd/logs.jsx:417 msgid "Copy to clipboard" msgstr "Copier dans le presse-papier" @@ -2068,17 +2074,17 @@ msgid "Crash system" msgstr "Système de plantage" -#: pkg/storaged/stratis/create-dialog.jsx:122 pkg/storaged/stratis/pool.jsx:85 -#: pkg/storaged/lvm2/create-dialog.jsx:63 +#: pkg/storaged/btrfs/subvolume.jsx:141 +#: pkg/storaged/block/format-dialog.jsx:275 +#: pkg/storaged/block/format-dialog.jsx:285 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:269 -#: pkg/storaged/lvm2/volume-group.jsx:120 +#: pkg/storaged/lvm2/create-dialog.jsx:63 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:58 -#: pkg/storaged/block/format-dialog.jsx:273 -#: pkg/storaged/block/format-dialog.jsx:283 +#: pkg/storaged/lvm2/volume-group.jsx:120 pkg/storaged/stratis/pool.jsx:85 +#: pkg/storaged/stratis/create-dialog.jsx:122 #: pkg/storaged/mdraid/create-dialog.jsx:112 -#: pkg/storaged/btrfs/subvolume.jsx:141 pkg/users/group-create-dialog.js:141 -#: pkg/users/account-create-dialog.js:481 #: pkg/lib/cockpit-components-file-autocomplete.jsx:193 +#: pkg/users/group-create-dialog.js:141 pkg/users/account-create-dialog.js:481 msgid "Create" msgstr "Créer" @@ -2094,8 +2100,8 @@ msgid "Create RAID device" msgstr "Créer Périphérique RAID" -#: pkg/storaged/stratis/create-dialog.jsx:48 #: pkg/storaged/overview/overview.jsx:147 +#: pkg/storaged/stratis/create-dialog.jsx:48 msgid "Create Stratis pool" msgstr "Créer un pool Stratis" @@ -2119,12 +2125,12 @@ msgid "Create and change ownership of home directory" msgstr "Créer et modifier la propriété du répertoire personnel" -#: pkg/storaged/stratis/pool.jsx:80 pkg/storaged/block/format-dialog.jsx:268 #: pkg/storaged/btrfs/subvolume.jsx:135 +#: pkg/storaged/block/format-dialog.jsx:270 pkg/storaged/stratis/pool.jsx:80 msgid "Create and mount" msgstr "Créer et monter" -#: pkg/storaged/block/format-dialog.jsx:277 +#: pkg/storaged/block/format-dialog.jsx:279 #, fuzzy #| msgid "Create and mount" msgid "Create and start" @@ -2134,7 +2140,7 @@ msgid "Create filesystem" msgstr "Créer un système de fichiers" -#: pkg/networkmanager/dialogs-common.jsx:323 +#: pkg/networkmanager/dialogs-common.jsx:321 msgid "Create it" msgstr "Créez-le" @@ -2150,7 +2156,7 @@ msgid "Create new filesystem" msgstr "Créer un nouveau système de fichiers" -#: pkg/users/group-create-dialog.js:134 pkg/users/accounts-list.js:297 +#: pkg/users/accounts-list.js:297 pkg/users/group-create-dialog.js:134 msgid "Create new group" msgstr "Créer un nouveau groupe" @@ -2168,9 +2174,9 @@ msgid "Create new thinly provisioned logical volume" msgstr "Créer un nouveau volume logique" -#: pkg/storaged/stratis/pool.jsx:81 pkg/storaged/block/format-dialog.jsx:269 -#: pkg/storaged/block/format-dialog.jsx:278 #: pkg/storaged/btrfs/subvolume.jsx:136 +#: pkg/storaged/block/format-dialog.jsx:271 +#: pkg/storaged/block/format-dialog.jsx:280 pkg/storaged/stratis/pool.jsx:81 msgid "Create only" msgstr "Créer uniquement" @@ -2223,7 +2229,7 @@ msgid "Create volume group" msgstr "Créer Groupe de volumes" -#: pkg/sosreport/sosreport.jsx:491 +#: pkg/sosreport/sosreport.jsx:500 msgid "Created" msgstr "Créé" @@ -2255,7 +2261,7 @@ msgid "Creating snapshot of $target" msgstr "Création d’un instantané de $target" -#: pkg/networkmanager/dialogs-common.jsx:322 +#: pkg/networkmanager/dialogs-common.jsx:320 msgid "" "Creating this $0 will break the connection to the server, and will make the " "administration UI unavailable." @@ -2303,7 +2309,7 @@ msgid "Current top CPU usage" msgstr "Pic d’utilisation du processeur" -#: pkg/storaged/dialog.jsx:1182 +#: pkg/storaged/dialog.jsx:1184 msgid "Currently in use" msgstr "Actuellement en cours d’utilisation" @@ -2323,7 +2329,7 @@ msgid "Custom cryptographic policy" msgstr "Stratégie de chiffrement personnalisée" -#: pkg/storaged/nfs/nfs.jsx:173 pkg/storaged/filesystem/mounting-dialog.jsx:61 +#: pkg/storaged/nfs/nfs.jsx:173 pkg/storaged/filesystem/mounting-dialog.jsx:64 msgid "Custom mount options" msgstr "Options de montage personnalisées" @@ -2365,11 +2371,11 @@ msgid "Daily" msgstr "Tous les jours" -#: pkg/packagekit/updates.jsx:934 +#: pkg/packagekit/updates.jsx:933 msgid "Danger alert:" msgstr "Alerte de danger :" -#: pkg/systemd/terminal.jsx:174 pkg/shell/topnav.jsx:193 +#: pkg/systemd/terminal.jsx:174 pkg/shell/topnav.jsx:203 msgid "Dark" msgstr "Sombre" @@ -2377,8 +2383,8 @@ msgid "Data" msgstr "Données" -#: pkg/storaged/lvm2/vdo-pool.jsx:80 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:144 +#: pkg/storaged/lvm2/vdo-pool.jsx:80 msgid "Data used" msgstr "Données utilisées" @@ -2441,9 +2447,9 @@ "comprises. « maintenant » fait référence à l’heure actuellement. Enfin, des " "temps relatifs peuvent être spécifiés, précédés de « - » ou « + »" -#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:43 #: pkg/storaged/lvm2/block-logical-volume.jsx:161 #: pkg/storaged/lvm2/block-logical-volume.jsx:216 +#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:43 msgid "Deactivate" msgstr "Désactiver" @@ -2475,18 +2481,18 @@ msgid "Dedicated parity (RAID 4)" msgstr "RAID 4 (Parité dédiée)" -#: pkg/storaged/lvm2/vdo-pool.jsx:88 -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:234 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:334 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:234 +#: pkg/storaged/lvm2/vdo-pool.jsx:88 msgid "Deduplication" msgstr "Déduplication" -#: pkg/systemd/overview-cards/cryptoPolicies.jsx:37 pkg/shell/topnav.jsx:187 +#: pkg/systemd/overview-cards/cryptoPolicies.jsx:37 pkg/shell/topnav.jsx:197 msgid "Default" msgstr "Par défaut" -#: pkg/systemd/timer-dialog.jsx:200 pkg/systemd/timer-dialog.jsx:209 -#: pkg/lib/cockpit-components-shutdown.jsx:201 +#: pkg/lib/cockpit-components-shutdown.jsx:201 pkg/systemd/timer-dialog.jsx:200 +#: pkg/systemd/timer-dialog.jsx:209 msgid "Delay" msgstr "Retard" @@ -2494,27 +2500,27 @@ msgid "Delay must be a number" msgstr "Le retard doit correspondre à un nombre" -#: pkg/sosreport/sosreport.jsx:360 pkg/sosreport/sosreport.jsx:459 -#: pkg/systemd/abrtLog.jsx:290 pkg/systemd/service-details.jsx:151 -#: pkg/systemd/service-details.jsx:713 -#: pkg/networkmanager/network-interface.jsx:725 -#: pkg/networkmanager/firewall.jsx:117 pkg/networkmanager/firewall.jsx:178 -#: pkg/networkmanager/firewall.jsx:910 pkg/storaged/stratis/filesystem.jsx:137 -#: pkg/storaged/stratis/filesystem.jsx:175 pkg/storaged/stratis/pool.jsx:149 -#: pkg/storaged/lvm2/volume-group.jsx:97 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:109 -#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:44 +#: pkg/storaged/partitions/partition.jsx:58 +#: pkg/storaged/partitions/partition.jsx:112 +#: pkg/storaged/partitions/partition-table.jsx:61 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:122 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:152 +#: pkg/storaged/btrfs/subvolume.jsx:231 pkg/storaged/btrfs/subvolume.jsx:373 #: pkg/storaged/lvm2/block-logical-volume.jsx:79 #: pkg/storaged/lvm2/block-logical-volume.jsx:222 +#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:44 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:109 #: pkg/storaged/lvm2/inactive-logical-volume.jsx:42 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:122 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:152 -#: pkg/storaged/partitions/partition-table.jsx:61 -#: pkg/storaged/partitions/partition.jsx:58 -#: pkg/storaged/partitions/partition.jsx:112 pkg/storaged/mdraid/mdraid.jsx:126 -#: pkg/storaged/mdraid/mdraid.jsx:223 pkg/storaged/btrfs/subvolume.jsx:231 -#: pkg/storaged/btrfs/subvolume.jsx:373 pkg/users/delete-group-dialog.js:51 -#: pkg/users/delete-account-dialog.js:60 pkg/users/account-details.js:227 +#: pkg/storaged/lvm2/volume-group.jsx:97 pkg/storaged/stratis/pool.jsx:149 +#: pkg/storaged/stratis/filesystem.jsx:137 +#: pkg/storaged/stratis/filesystem.jsx:175 pkg/storaged/mdraid/mdraid.jsx:126 +#: pkg/storaged/mdraid/mdraid.jsx:223 pkg/sosreport/sosreport.jsx:369 +#: pkg/sosreport/sosreport.jsx:468 pkg/networkmanager/firewall.jsx:117 +#: pkg/networkmanager/firewall.jsx:178 pkg/networkmanager/firewall.jsx:910 +#: pkg/networkmanager/network-interface.jsx:725 pkg/systemd/abrtLog.jsx:290 +#: pkg/systemd/service-details.jsx:151 pkg/systemd/service-details.jsx:713 +#: pkg/users/account-details.js:227 pkg/users/delete-group-dialog.js:51 +#: pkg/users/delete-account-dialog.js:60 msgid "Delete" msgstr "Supprimer" @@ -2539,7 +2545,7 @@ msgid "Delete pool" msgstr "Supprimer le pool" -#: pkg/sosreport/sosreport.jsx:352 +#: pkg/sosreport/sosreport.jsx:361 msgid "Delete report permanently?" msgstr "Supprimer définitivement le rapport ?" @@ -2604,8 +2610,8 @@ msgid "Deletion will remove the following files:" msgstr "La suppression supprimera les fichiers suivants :" -#: pkg/systemd/timer-dialog.jsx:166 pkg/networkmanager/firewall.jsx:702 -#: pkg/networkmanager/firewall.jsx:846 pkg/storaged/dialog.jsx:1351 +#: pkg/storaged/dialog.jsx:1353 pkg/networkmanager/firewall.jsx:702 +#: pkg/networkmanager/firewall.jsx:846 pkg/systemd/timer-dialog.jsx:166 msgid "Description" msgstr "Description" @@ -2618,7 +2624,7 @@ msgstr "Détachable" #: pkg/systemd/overview-cards/realmd.jsx:416 pkg/shell/credentials.jsx:109 -#: pkg/packagekit/updates.jsx:451 +#: pkg/packagekit/updates.jsx:450 msgid "Details" msgstr "Détails" @@ -2626,17 +2632,17 @@ msgid "Development" msgstr "Développement" -#: pkg/metrics/metrics.jsx:785 pkg/storaged/dialog.jsx:1137 -#: pkg/storaged/dialog.jsx:1242 pkg/storaged/mdraid/mdraid.jsx:292 +#: pkg/storaged/dialog.jsx:1139 pkg/storaged/dialog.jsx:1244 +#: pkg/storaged/mdraid/mdraid.jsx:292 pkg/metrics/metrics.jsx:785 msgid "Device" msgstr "Périphérique" -#: pkg/storaged/block/other.jsx:62 pkg/storaged/drive/drive.jsx:132 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:287 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:287 pkg/storaged/block/other.jsx:62 +#: pkg/storaged/drive/drive.jsx:132 msgid "Device file" msgstr "Fichier de périphérique" -#: pkg/storaged/partitions/actions.jsx:27 +#: pkg/storaged/partitions/actions.jsx:27 pkg/storaged/block/actions.jsx:28 msgid "Device is read-only" msgstr "Périphérique en lecture seule" @@ -2670,10 +2676,11 @@ msgid "Disable tuned" msgstr "Désactiver tuned" -#: pkg/systemd/services.jsx:246 pkg/systemd/services.jsx:687 -#: pkg/systemd/service-details.jsx:436 pkg/networkmanager/ip-settings.jsx:46 -#: pkg/networkmanager/firewall-switch.jsx:80 pkg/kdump/kdump-view.jsx:541 -#: pkg/packagekit/kpatch.jsx:253 pkg/packagekit/autoupdates.jsx:344 +#: pkg/networkmanager/firewall-switch.jsx:80 +#: pkg/networkmanager/ip-settings.jsx:46 pkg/kdump/kdump-view.jsx:541 +#: pkg/systemd/service-details.jsx:436 pkg/systemd/services.jsx:246 +#: pkg/systemd/services.jsx:687 pkg/packagekit/kpatch.jsx:253 +#: pkg/packagekit/autoupdates.jsx:344 msgid "Disabled" msgstr "Désactivé" @@ -2711,14 +2718,14 @@ msgid "Disk is failing" msgstr "Le disque est défaillant" -#: pkg/storaged/crypto/keyslots.jsx:142 +#: pkg/storaged/crypto/keyslots.jsx:175 msgid "Disk passphrase" msgstr "Phrase secrète du disque" -#: pkg/metrics/metrics.jsx:918 pkg/storaged/lvm2/create-dialog.jsx:52 -#: pkg/storaged/lvm2/volume-group.jsx:198 -#: pkg/storaged/mdraid/create-dialog.jsx:99 pkg/storaged/mdraid/mdraid.jsx:156 -#: pkg/storaged/mdraid/mdraid.jsx:296 +#: pkg/storaged/lvm2/create-dialog.jsx:52 +#: pkg/storaged/lvm2/volume-group.jsx:198 pkg/storaged/mdraid/mdraid.jsx:156 +#: pkg/storaged/mdraid/mdraid.jsx:296 pkg/storaged/mdraid/create-dialog.jsx:99 +#: pkg/metrics/metrics.jsx:918 msgid "Disks" msgstr "Disques" @@ -2740,7 +2747,7 @@ msgid "Dismiss selected alerts" msgstr "Rejeter les alertes sélectionnées" -#: pkg/shell/shell-modals.jsx:115 pkg/shell/topnav.jsx:205 +#: pkg/shell/topnav.jsx:216 pkg/shell/shell-modals.jsx:115 msgid "Display language" msgstr "Langue d’affichage" @@ -2751,7 +2758,7 @@ msgid "Distributed parity (RAID 5)" msgstr "RAID 5 (Parité répartie)" -#: pkg/storaged/filesystem/mounting-dialog.jsx:138 +#: pkg/storaged/filesystem/mounting-dialog.jsx:141 msgid "Do not mount" msgstr "Ne pas monter" @@ -2768,12 +2775,12 @@ msgid "Does not automatically start" msgstr "Ne démarre pas automatiquement" -#: pkg/storaged/filesystem/mounting-dialog.jsx:107 +#: pkg/storaged/filesystem/mounting-dialog.jsx:110 msgid "Does not mount during boot" msgstr "Ne se monte pas au démarrage" -#: pkg/systemd/overview-cards/configurationCard.jsx:80 #: pkg/systemd/overview-cards/realmd.jsx:284 +#: pkg/systemd/overview-cards/configurationCard.jsx:79 msgid "Domain" msgstr "Domaine" @@ -2813,7 +2820,7 @@ msgid "Double distributed parity (RAID 6)" msgstr "RAID 6 (Double parité répartie)" -#: pkg/sosreport/sosreport.jsx:449 pkg/sosreport/sosreport.jsx:455 +#: pkg/sosreport/sosreport.jsx:458 pkg/sosreport/sosreport.jsx:464 msgid "Download" msgstr "Télécharger" @@ -2829,7 +2836,7 @@ msgid "Downloading" msgstr "Téléchargement" -#: pkg/storaged/crypto/keyslots.jsx:220 +#: pkg/storaged/crypto/keyslots.jsx:254 #: pkg/lib/cockpit-components-install-dialog.jsx:189 msgid "Downloading $0" msgstr "Téléchargement $0" @@ -2838,7 +2845,7 @@ msgid "Drive" msgstr "Lecteur" -#: pkg/systemd/hw-detect.js:92 pkg/lib/machine-info.js:240 +#: pkg/lib/machine-info.js:240 pkg/systemd/hw-detect.js:92 msgid "Dual rank" msgstr "Double rang" @@ -2848,9 +2855,9 @@ msgid "EFI system partition" msgstr "Partition système EFI" +#: pkg/storaged/nfs/nfs.jsx:312 pkg/storaged/crypto/keyslots.jsx:761 #: pkg/networkmanager/firewall.jsx:115 pkg/kdump/kdump-view.jsx:476 -#: pkg/storaged/nfs/nfs.jsx:312 pkg/storaged/crypto/keyslots.jsx:727 -#: pkg/shell/hosts.jsx:167 pkg/shell/indexes.jsx:352 +#: pkg/shell/indexes.jsx:352 pkg/shell/hosts.jsx:167 #: pkg/packagekit/kpatch.jsx:234 pkg/packagekit/autoupdates.jsx:407 msgid "Edit" msgstr "Modifier" @@ -2859,7 +2866,7 @@ msgid "Edit /etc/motd" msgstr "Editer /etc/motd" -#: pkg/storaged/crypto/keyslots.jsx:507 +#: pkg/storaged/crypto/keyslots.jsx:541 msgid "Edit Tang keyserver" msgstr "Modifier le serveur de clés Tang" @@ -2901,9 +2908,8 @@ msgid "Edit motd" msgstr "Modifier motd" -#: pkg/storaged/stratis/filesystem.jsx:170 +#: pkg/storaged/btrfs/subvolume.jsx:331 pkg/storaged/stratis/filesystem.jsx:170 #: pkg/storaged/filesystem/filesystem.jsx:100 -#: pkg/storaged/btrfs/subvolume.jsx:331 #, fuzzy #| msgid "Mount point" msgid "Edit mount point" @@ -2931,7 +2937,7 @@ msgid "Edit user" msgstr "Modifier l'utilisateur" -#: pkg/storaged/crypto/keyslots.jsx:729 +#: pkg/storaged/crypto/keyslots.jsx:763 msgid "Editing a key requires a free slot" msgstr "La modification d’une clé nécessite un emplacement libre" @@ -2977,13 +2983,13 @@ msgid "Enable the firewall" msgstr "Activer le pare-feu" +#: pkg/networkmanager/firewall-switch.jsx:80 pkg/kdump/kdump-view.jsx:541 #: pkg/systemd/services.jsx:244 pkg/systemd/services.jsx:245 -#: pkg/systemd/services.jsx:686 pkg/networkmanager/firewall-switch.jsx:80 -#: pkg/kdump/kdump-view.jsx:541 pkg/packagekit/kpatch.jsx:256 +#: pkg/systemd/services.jsx:686 pkg/packagekit/kpatch.jsx:256 msgid "Enabled" msgstr "Activée" -#: pkg/storaged/crypto/keyslots.jsx:335 +#: pkg/storaged/crypto/keyslots.jsx:369 msgid "Enabling $0" msgstr "Permettre l'accès à $0" @@ -3003,11 +3009,11 @@ msgid "Encrypt data with a passphrase" msgstr "Phrase de chiffrement" -#: pkg/sosreport/sosreport.jsx:439 +#: pkg/sosreport/sosreport.jsx:448 msgid "Encrypted" msgstr "Chiffré" -#: pkg/storaged/utils.js:366 +#: pkg/storaged/utils.js:367 msgid "Encrypted $0" msgstr "Chiffré $0" @@ -3015,25 +3021,25 @@ msgid "Encrypted Stratis pool" msgstr "Pool Stratis chiffré $0" -#: pkg/storaged/utils.js:358 +#: pkg/storaged/utils.js:359 msgid "Encrypted logical volume of $0" msgstr "Volume logique chiffré de $0" -#: pkg/storaged/utils.js:360 +#: pkg/storaged/utils.js:361 msgid "Encrypted partition of $0" msgstr "Partition chiffrée de $0" -#: pkg/storaged/block/format-dialog.jsx:328 #: pkg/storaged/crypto/encryption.jsx:42 +#: pkg/storaged/block/format-dialog.jsx:330 msgid "Encryption" msgstr "Chiffrement" -#: pkg/storaged/block/format-dialog.jsx:371 #: pkg/storaged/crypto/encryption.jsx:189 +#: pkg/storaged/block/format-dialog.jsx:373 msgid "Encryption options" msgstr "Options de chiffrement" -#: pkg/sosreport/sosreport.jsx:311 +#: pkg/sosreport/sosreport.jsx:320 msgid "Encryption passphrase" msgstr "Phrase de chiffrement" @@ -3059,7 +3065,7 @@ msgid "Enforcing" msgstr "Imposer les règles" -#: pkg/packagekit/updates.jsx:1439 +#: pkg/packagekit/updates.jsx:1438 msgid "Enhancement updates available" msgstr "Mises à jour des améliorations disponibles" @@ -3079,14 +3085,14 @@ msgid "Erasing $target" msgstr "Effacement de $target" -#: pkg/packagekit/updates.jsx:381 +#: pkg/packagekit/updates.jsx:380 msgid "Errata" msgstr "Errata" -#: pkg/sosreport/sosreport.jsx:383 pkg/systemd/services.jsx:224 -#: pkg/systemd/service-details.jsx:274 pkg/storaged/storage-controls.jsx:105 -#: pkg/storaged/storage-controls.jsx:160 pkg/storaged/overview/overview.jsx:94 -#: pkg/storaged/multipath.jsx:60 pkg/apps/utils.jsx:81 +#: pkg/storaged/storage-controls.jsx:105 pkg/storaged/storage-controls.jsx:160 +#: pkg/storaged/overview/overview.jsx:94 pkg/storaged/multipath.jsx:60 +#: pkg/apps/utils.jsx:81 pkg/sosreport/sosreport.jsx:392 +#: pkg/systemd/service-details.jsx:274 pkg/systemd/services.jsx:224 msgid "Error" msgstr "Erreur" @@ -3098,12 +3104,12 @@ msgid "Error has occurred" msgstr "Une erreur s’est produite" -#: pkg/storaged/crypto/keyslots.jsx:256 +#: pkg/storaged/crypto/keyslots.jsx:290 msgid "Error installing $0: PackageKit is not installed" msgstr "Erreur d'installation de $0 : PackageKit n'est pas installé" -#: pkg/systemd/overview-cards/configurationCard.jsx:176 #: pkg/selinux/setroubleshoot-view.jsx:414 +#: pkg/systemd/overview-cards/configurationCard.jsx:174 msgid "Error message" msgstr "Message d’erreur" @@ -3178,8 +3184,8 @@ msgid "Extended information" msgstr "Informations complémentaires" -#: pkg/storaged/block/format-dialog.jsx:161 #: pkg/storaged/partitions/partition-table.jsx:58 +#: pkg/storaged/block/format-dialog.jsx:161 msgid "Extended partition" msgstr "Partition étendue" @@ -3191,7 +3197,7 @@ msgid "FIPS with further Common Criteria restrictions." msgstr "FIPS avec des restrictions supplémentaires liées aux critères communs." -#: pkg/networkmanager/interfaces.js:811 pkg/storaged/mdraid/mdraid-disk.jsx:68 +#: pkg/storaged/mdraid/mdraid-disk.jsx:68 pkg/networkmanager/interfaces.js:811 msgid "Failed" msgstr "Échoué" @@ -3211,8 +3217,8 @@ msgid "Failed to add zone" msgstr "Échec de l’ajout de la zone" -#: pkg/users/password-dialogs.js:103 pkg/users/password-dialogs.js:125 -#: pkg/lib/credentials.js:232 +#: pkg/lib/credentials.js:232 pkg/users/password-dialogs.js:103 +#: pkg/users/password-dialogs.js:125 msgid "Failed to change password" msgstr "Échec de la modification du mot de passe" @@ -3270,7 +3276,7 @@ "automatic-install.timer. Veuillez supprimer les remplacements personnalisés " "pour configurer les mises à jour automatiques." -#: pkg/packagekit/updates.jsx:498 +#: pkg/packagekit/updates.jsx:497 msgid "Failed to restart service" msgstr "Échec du redémarrage du service" @@ -3282,7 +3288,7 @@ msgid "Failed to save settings" msgstr "Échec de l’enregistrement des paramètres" -#: pkg/systemd/services.jsx:235 pkg/systemd/service-details.jsx:445 +#: pkg/systemd/service-details.jsx:445 pkg/systemd/services.jsx:235 msgid "Failed to start" msgstr "Échec du démarrage" @@ -3307,7 +3313,7 @@ msgid "Filesystem name" msgstr "Nom du système de fichiers" -#: pkg/storaged/dialog.jsx:1118 +#: pkg/storaged/dialog.jsx:1120 #, fuzzy #| msgid "Creating filesystem on $target" msgid "Filesystem outside the target" @@ -3352,7 +3358,7 @@ msgid "Firmware version" msgstr "Version du micrologiciel" -#: pkg/storaged/crypto/keyslots.jsx:403 +#: pkg/storaged/crypto/keyslots.jsx:437 msgid "Fix NBDE support" msgstr "Correction du support NBDE" @@ -3376,15 +3382,8 @@ msgid "Force password change" msgstr "Forcer la modification de mot de passe" -#: pkg/storaged/stratis/blockdev.jsx:48 -#: pkg/storaged/lvm2/physical-volume.jsx:50 -#: pkg/storaged/block/format-dialog.jsx:273 -#: pkg/storaged/block/format-dialog.jsx:283 -#: pkg/storaged/block/unformatted-data.jsx:36 -#: pkg/storaged/block/unrecognized-data.jsx:41 pkg/storaged/swap/swap.jsx:100 -#: pkg/storaged/filesystem/filesystem.jsx:104 -#: pkg/storaged/crypto/locked-encrypted-data.jsx:38 -#: pkg/storaged/mdraid/mdraid-disk.jsx:47 pkg/storaged/btrfs/device.jsx:93 +#: pkg/storaged/block/format-dialog.jsx:275 +#: pkg/storaged/block/format-dialog.jsx:285 pkg/storaged/block/actions.jsx:31 msgid "Format" msgstr "Formater" @@ -3392,22 +3391,22 @@ msgid "Format $0" msgstr "Formater $0" -#: pkg/storaged/block/format-dialog.jsx:268 +#: pkg/storaged/block/format-dialog.jsx:270 msgid "Format and mount" msgstr "Format et montage" -#: pkg/storaged/block/format-dialog.jsx:277 +#: pkg/storaged/block/format-dialog.jsx:279 #, fuzzy #| msgid "Format and mount" msgid "Format and start" msgstr "Format et montage" -#: pkg/storaged/block/format-dialog.jsx:269 -#: pkg/storaged/block/format-dialog.jsx:278 +#: pkg/storaged/block/format-dialog.jsx:271 +#: pkg/storaged/block/format-dialog.jsx:280 msgid "Format only" msgstr "Format uniquement" -#: pkg/storaged/block/format-dialog.jsx:397 +#: pkg/storaged/block/format-dialog.jsx:399 msgid "Formatting erases all data on a storage device." msgstr "Le formatage efface toutes les données d’un périphérique de stockage." @@ -3435,8 +3434,8 @@ msgid "From" msgstr "De" -#: pkg/users/accounts-list.js:380 pkg/users/account-create-dialog.js:68 -#: pkg/users/account-details.js:248 +#: pkg/users/account-details.js:248 pkg/users/accounts-list.js:380 +#: pkg/users/account-create-dialog.js:68 msgid "Full name" msgstr "Nom complet" @@ -3445,11 +3444,11 @@ msgid "Gateway" msgstr "Passerelle" -#: pkg/systemd/abrtLog.jsx:296 pkg/networkmanager/network-interface.jsx:316 +#: pkg/networkmanager/network-interface.jsx:316 pkg/systemd/abrtLog.jsx:296 msgid "General" msgstr "Général" -#: pkg/systemd/services.jsx:255 pkg/networkmanager/wireguard.jsx:214 +#: pkg/networkmanager/wireguard.jsx:214 pkg/systemd/services.jsx:255 msgid "Generated" msgstr "Généré" @@ -3481,22 +3480,22 @@ msgid "Group name" msgstr "Nom du groupe" -#: pkg/users/accounts-list.js:313 pkg/users/accounts-list.js:317 -#: pkg/users/account-details.js:446 +#: pkg/users/account-details.js:446 pkg/users/accounts-list.js:313 +#: pkg/users/accounts-list.js:317 msgid "Groups" msgstr "Groupes" -#: pkg/storaged/lvm2/vdo-pool.jsx:48 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:104 -#: pkg/storaged/lvm2/block-logical-volume.jsx:211 -#: pkg/storaged/block/resize.jsx:521 pkg/storaged/legacy-vdo/legacy-vdo.jsx:259 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:315 #: pkg/storaged/partitions/partition.jsx:107 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:259 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:315 pkg/storaged/block/resize.jsx:521 +#: pkg/storaged/lvm2/block-logical-volume.jsx:211 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:104 +#: pkg/storaged/lvm2/vdo-pool.jsx:48 msgid "Grow" msgstr "Augmenter" -#: pkg/storaged/lvm2/block-logical-volume.jsx:281 #: pkg/storaged/partitions/partition.jsx:221 +#: pkg/storaged/lvm2/block-logical-volume.jsx:281 msgid "Grow content" msgstr "Augmenter le contenu" @@ -3555,7 +3554,7 @@ msgstr "Bonjour $hello_time" #: pkg/systemd/overview-cards/tuned-dialog.jsx:295 -#: pkg/systemd/overview-cards/cryptoPolicies.jsx:168 pkg/shell/topnav.jsx:255 +#: pkg/systemd/overview-cards/cryptoPolicies.jsx:168 pkg/shell/topnav.jsx:274 msgid "Help" msgstr "Aide" @@ -3581,7 +3580,7 @@ msgid "History package count" msgstr "Comptage des paquets d’historique" -#: pkg/users/account-create-dialog.js:84 pkg/users/account-details.js:326 +#: pkg/users/account-details.js:326 pkg/users/account-create-dialog.js:84 msgid "Home directory" msgstr "Répertoire utilisateur" @@ -3589,11 +3588,11 @@ msgid "Host" msgstr "Hôte" -#: pkg/lib/cockpit.js:3852 +#: pkg/lib/cockpit.js:3848 msgid "Host key is incorrect" msgstr "La clé de l’hôte est incorrecte" -#: pkg/systemd/overview-cards/configurationCard.jsx:67 +#: pkg/systemd/overview-cards/configurationCard.jsx:66 msgid "Hostname" msgstr "Nom d’hôte" @@ -3613,10 +3612,10 @@ msgid "How to check" msgstr "Comment vérifier" -#: pkg/systemd/hwinfo.jsx:291 pkg/networkmanager/firewall.jsx:696 -#: pkg/storaged/pages.jsx:714 pkg/storaged/btrfs/subvolume.jsx:414 -#: pkg/users/group-create-dialog.js:47 pkg/users/accounts-list.js:230 -#: pkg/users/accounts-list.js:381 +#: pkg/storaged/btrfs/subvolume.jsx:414 pkg/storaged/pages.jsx:714 +#: pkg/networkmanager/firewall.jsx:696 pkg/systemd/hwinfo.jsx:291 +#: pkg/users/accounts-list.js:230 pkg/users/accounts-list.js:381 +#: pkg/users/group-create-dialog.js:47 msgid "ID" msgstr "ID" @@ -3693,8 +3692,8 @@ "Si l’empreinte digitale correspond, cliquez sur « Accepter la clé et ajouter " "l'hôte ». Sinon, ne vous connectez pas et contactez votre administrateur." -#: pkg/networkmanager/ip-settings.jsx:44 pkg/packagekit/updates.jsx:686 -#: pkg/packagekit/updates.jsx:763 +#: pkg/networkmanager/ip-settings.jsx:44 pkg/packagekit/updates.jsx:685 +#: pkg/packagekit/updates.jsx:762 msgid "Ignore" msgstr "Ignorer" @@ -3720,9 +3719,9 @@ msgid "In sync" msgstr "En sync" -#: pkg/networkmanager/network-interface.jsx:256 #: pkg/networkmanager/interfaces.js:793 pkg/networkmanager/interfaces.js:1354 #: pkg/networkmanager/interfaces.js:1361 +#: pkg/networkmanager/network-interface.jsx:256 msgid "Inactive" msgstr "Inactif" @@ -3759,7 +3758,7 @@ msgid "Indirect" msgstr "Indirect" -#: pkg/packagekit/updates.jsx:755 +#: pkg/packagekit/updates.jsx:754 msgid "Info" msgstr "Info" @@ -3779,7 +3778,7 @@ msgid "Initializing erases all data on a disk." msgstr "L’initialisation efface toutes les données d’un disque." -#: pkg/packagekit/updates.jsx:584 +#: pkg/packagekit/updates.jsx:583 msgid "Initializing..." msgstr "Initialisation..." @@ -3787,9 +3786,9 @@ msgid "Insights: " msgstr "Aperçus : " -#: pkg/packagekit/kpatch.jsx:250 pkg/apps/application-list.jsx:206 -#: pkg/apps/application.jsx:52 +#: pkg/apps/application.jsx:52 pkg/apps/application-list.jsx:206 #: pkg/lib/cockpit-components-install-dialog.jsx:126 +#: pkg/packagekit/kpatch.jsx:250 msgid "Install" msgstr "Installer" @@ -3801,7 +3800,7 @@ msgid "Install Stratis support" msgstr "Installer le support Stratis" -#: pkg/packagekit/updates.jsx:1416 +#: pkg/packagekit/updates.jsx:1415 msgid "Install all updates" msgstr "Installer toutes les mises à jour" @@ -3815,7 +3814,7 @@ msgid "Install cockpit-pcp" msgstr "Installer le cockpit-pcp" -#: pkg/packagekit/updates.jsx:1429 +#: pkg/packagekit/updates.jsx:1428 msgid "Install kpatch updates" msgstr "Installer les mises à jour de kpatch" @@ -3823,7 +3822,7 @@ msgid "Install realmd support" msgstr "Installer le support realmd" -#: pkg/packagekit/updates.jsx:1415 pkg/packagekit/updates.jsx:1422 +#: pkg/packagekit/updates.jsx:1414 pkg/packagekit/updates.jsx:1421 msgid "Install security updates" msgstr "Installer les mises à jour de sécurité" @@ -3849,17 +3848,17 @@ msgid "Installed" msgstr "installée" -#: pkg/packagekit/updates.jsx:105 pkg/apps/application.jsx:40 +#: pkg/apps/application.jsx:40 pkg/packagekit/updates.jsx:105 msgid "Installing" msgstr "Installation" -#: pkg/storaged/crypto/keyslots.jsx:224 +#: pkg/storaged/crypto/keyslots.jsx:258 #: pkg/lib/cockpit-components-install-dialog.jsx:193 msgid "Installing $0" msgstr "Installation de $0" +#: pkg/storaged/crypto/keyslots.jsx:274 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:39 -#: pkg/storaged/crypto/keyslots.jsx:240 msgid "Installing $0 would remove $1." msgstr "L’installation de $0 supprimerait $1." @@ -3867,24 +3866,24 @@ msgid "Installing packages" msgstr "Installation des paquets" -#: pkg/metrics/metrics.jsx:814 pkg/networkmanager/firewall.jsx:196 +#: pkg/networkmanager/firewall.jsx:196 pkg/metrics/metrics.jsx:814 msgid "Interface" msgid_plural "Interfaces" msgstr[0] "Interface" msgstr[1] "Interfaces" -#: pkg/networkmanager/network-interface-members.jsx:197 -#: pkg/networkmanager/network-interface-members.jsx:199 +#: pkg/networkmanager/network-interface-members.jsx:202 +#: pkg/networkmanager/network-interface-members.jsx:204 msgid "Interface members" msgstr "Membres de l’interface" -#: pkg/networkmanager/network-main.jsx:180 -#: pkg/networkmanager/network-interface-members.jsx:203 -#: pkg/networkmanager/bond.jsx:165 pkg/networkmanager/firewall.jsx:859 +#: pkg/networkmanager/network-main.jsx:180 pkg/networkmanager/firewall.jsx:859 +#: pkg/networkmanager/bond.jsx:165 +#: pkg/networkmanager/network-interface-members.jsx:208 msgid "Interfaces" msgstr "Interfaces" -#: pkg/lib/cockpit.js:3854 +#: pkg/lib/cockpit.js:3850 msgid "Internal error" msgstr "Erreur interne" @@ -3944,8 +3943,8 @@ msgid "Invalid range" msgstr "Plage invalide" -#: pkg/packagekit/autoupdates.jsx:323 #: pkg/lib/cockpit-components-shutdown.jsx:115 pkg/lib/serverTime.js:690 +#: pkg/packagekit/autoupdates.jsx:323 msgid "Invalid time format" msgstr "Format d’heure non valide" @@ -4064,29 +4063,29 @@ msgid "Key password" msgstr "Mot de passe clé" -#: pkg/storaged/crypto/keyslots.jsx:761 +#: pkg/storaged/crypto/keyslots.jsx:795 msgid "Key slots with unknown types can not be edited here" msgstr "Les emplacements de clé de type inconnu ne peuvent pas être édités ici" -#: pkg/storaged/crypto/keyslots.jsx:424 +#: pkg/storaged/crypto/keyslots.jsx:458 msgid "Key source" msgstr "Source de la clé" -#: pkg/storaged/crypto/keyslots.jsx:766 pkg/storaged/crypto/keyslots.jsx:789 +#: pkg/storaged/crypto/keyslots.jsx:800 pkg/storaged/crypto/keyslots.jsx:823 msgid "Keys" msgstr "Clés" -#: pkg/storaged/stratis/stopped-pool.jsx:134 pkg/storaged/stratis/pool.jsx:544 -#: pkg/storaged/crypto/keyslots.jsx:755 +#: pkg/storaged/crypto/keyslots.jsx:789 pkg/storaged/stratis/pool.jsx:544 +#: pkg/storaged/stratis/stopped-pool.jsx:134 msgid "Keyserver" msgstr "Serveur de clés" -#: pkg/storaged/stratis/create-dialog.jsx:102 pkg/storaged/stratis/pool.jsx:456 -#: pkg/storaged/crypto/keyslots.jsx:451 pkg/storaged/crypto/keyslots.jsx:509 +#: pkg/storaged/crypto/keyslots.jsx:485 pkg/storaged/crypto/keyslots.jsx:543 +#: pkg/storaged/stratis/pool.jsx:456 pkg/storaged/stratis/create-dialog.jsx:102 msgid "Keyserver address" msgstr "Adresse du serveur" -#: pkg/storaged/stratis/pool.jsx:496 pkg/storaged/crypto/keyslots.jsx:635 +#: pkg/storaged/crypto/keyslots.jsx:669 pkg/storaged/stratis/pool.jsx:496 msgid "Keyserver removal may prevent unlocking $0." msgstr "" "La suppression du serveur de clés peut empêcher le déverrouillage de $0." @@ -4130,7 +4129,7 @@ msgid "LVM2 volume group" msgstr "Groupe de volumes LVM2" -#: pkg/storaged/utils.js:340 +#: pkg/storaged/utils.js:341 msgid "LVM2 volume group $0" msgstr "Groupe de volumes LVM2 $0" @@ -4160,7 +4159,7 @@ msgid "Last cannot be removed" msgstr "Le dernier logement de clé ne peut pas être retiré" -#: pkg/packagekit/updates.jsx:785 +#: pkg/packagekit/updates.jsx:784 msgid "Last checked: $0" msgstr "Dernière vérification : $0" @@ -4187,11 +4186,11 @@ msgid "Layout" msgstr "Disposition" +#: pkg/networkmanager/bond.jsx:152 pkg/lib/cockpit-components-dialog.jsx:234 +#: pkg/lib/cockpit-components-dialog.jsx:241 #: pkg/systemd/overview-cards/tuned-dialog.jsx:291 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:119 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:164 -#: pkg/networkmanager/bond.jsx:152 pkg/lib/cockpit-components-dialog.jsx:234 -#: pkg/lib/cockpit-components-dialog.jsx:241 msgid "Learn more" msgstr "En savoir plus" @@ -4205,7 +4204,7 @@ msgid "Leave domain" msgstr "Quitter le domaine" -#: pkg/sosreport/sosreport.jsx:319 +#: pkg/sosreport/sosreport.jsx:328 msgid "Leave empty to skip encryption" msgstr "Laissez vide pour ignorer le cryptage" @@ -4213,7 +4212,7 @@ msgid "Licensed under GNU LGPL version 2.1" msgstr "Sous licence GNU LGPL version 2.1" -#: pkg/systemd/terminal.jsx:175 pkg/shell/topnav.jsx:190 +#: pkg/systemd/terminal.jsx:175 pkg/shell/topnav.jsx:200 msgid "Light" msgstr "Clair" @@ -4335,11 +4334,11 @@ msgid "Loading earlier entries" msgstr "Chargement des entrées antérieures" -#: pkg/systemd/overview-cards/configurationCard.jsx:179 +#: pkg/systemd/overview-cards/configurationCard.jsx:177 msgid "Loading keys..." msgstr "Chargement des clés..." -#: pkg/systemd/overview-cards/configurationCard.jsx:175 +#: pkg/systemd/overview-cards/configurationCard.jsx:173 msgid "Loading of SSH keys failed" msgstr "Le chargement des clés SSH a échoué" @@ -4359,12 +4358,12 @@ msgid "Loading unit failed" msgstr "Échec du chargement de l'unité" +#: pkg/storaged/storaged.jsx:66 pkg/kdump/kdump-view.jsx:438 #: pkg/systemd/service.jsx:132 pkg/systemd/logDetails.jsx:173 -#: pkg/systemd/services.jsx:683 pkg/systemd/logsJournal.jsx:268 -#: pkg/metrics/metrics.jsx:1978 pkg/kdump/kdump-view.jsx:438 -#: pkg/storaged/storaged.jsx:66 pkg/users/accounts-list.js:318 -#: pkg/users/accounts-list.js:339 pkg/users/accounts-list.js:452 -#: pkg/users/account-details.js:176 +#: pkg/systemd/logsJournal.jsx:268 pkg/systemd/services.jsx:683 +#: pkg/metrics/metrics.jsx:1978 pkg/users/account-details.js:176 +#: pkg/users/accounts-list.js:318 pkg/users/accounts-list.js:339 +#: pkg/users/accounts-list.js:452 msgid "Loading..." msgstr "Chargement..." @@ -4392,12 +4391,12 @@ msgid "Local, $0" msgstr "localement dans $0" -#: pkg/kdump/kdump-view.jsx:243 pkg/storaged/pages.jsx:716 -#: pkg/storaged/dialog.jsx:1138 pkg/storaged/dialog.jsx:1243 +#: pkg/storaged/dialog.jsx:1140 pkg/storaged/dialog.jsx:1245 +#: pkg/storaged/pages.jsx:716 pkg/kdump/kdump-view.jsx:243 msgid "Location" msgstr "Emplacement" -#: pkg/storaged/crypto/actions.jsx:75 pkg/users/lock-account-dialog.js:36 +#: pkg/storaged/crypto/actions.jsx:73 pkg/users/lock-account-dialog.js:36 msgid "Lock" msgstr "Verrouillage" @@ -4409,7 +4408,7 @@ msgid "Lock account" msgstr "Verrouiller le compte" -#: pkg/storaged/crypto/locked-encrypted-data.jsx:31 +#: pkg/storaged/crypto/locked-encrypted-data.jsx:30 #, fuzzy #| msgid "Locked" msgid "Locked data" @@ -4419,8 +4418,8 @@ msgid "Locking $target" msgstr "Verrouillage de $target" -#: pkg/static/login.html:139 pkg/static/login.js:668 -#: pkg/shell/hosts_dialog.jsx:764 pkg/shell/failures.jsx:75 +#: pkg/static/login.html:139 pkg/shell/hosts_dialog.jsx:764 +#: pkg/shell/failures.jsx:73 pkg/static/login.js:668 msgid "Log in" msgstr "Connexion" @@ -4436,7 +4435,7 @@ msgid "Log messages" msgstr "Enregistrer les messages" -#: pkg/metrics/metrics.jsx:1806 pkg/shell/topnav.jsx:222 +#: pkg/shell/topnav.jsx:233 pkg/metrics/metrics.jsx:1806 #: pkg/users/logout-account-dialog.js:36 msgid "Log out" msgstr "Déconnexion" @@ -4445,7 +4444,7 @@ msgid "Log user out" msgstr "Déconnexion de l'utilisateur" -#: pkg/users/accounts-list.js:161 pkg/users/account-details.js:212 +#: pkg/users/account-details.js:212 pkg/users/accounts-list.js:161 msgid "Logged in" msgstr "Connecté" @@ -4460,20 +4459,20 @@ msgid "Logical Volume Manager partition" msgstr "Volume logique (instantané)" -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:213 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:249 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:213 msgid "Logical size" msgstr "Taille logique" -#: pkg/storaged/utils.js:290 +#: pkg/storaged/utils.js:291 msgid "Logical volume" msgstr "Volume logique" -#: pkg/storaged/utils.js:288 +#: pkg/storaged/utils.js:289 msgid "Logical volume (snapshot)" msgstr "Volume logique (instantané)" -#: pkg/storaged/utils.js:362 +#: pkg/storaged/utils.js:363 msgid "Logical volume of $0" msgstr "Volume logique de $0" @@ -4485,7 +4484,7 @@ msgid "Login again" msgstr "Se connecter à nouveau" -#: pkg/lib/cockpit.js:3844 +#: pkg/lib/cockpit.js:3840 msgid "Login failed" msgstr "Échec de la connexion" @@ -4530,7 +4529,7 @@ msgid "MDRAID device" msgstr "Périphérique MDRAID" -#: pkg/storaged/utils.js:334 +#: pkg/storaged/utils.js:335 msgid "MDRAID device $0" msgstr "Périphérique MDRAID $0" @@ -4574,7 +4573,7 @@ msgid "Machine ID" msgstr "ID machine" -#: pkg/systemd/overview-cards/configurationCard.jsx:196 +#: pkg/systemd/overview-cards/configurationCard.jsx:194 msgid "Machine SSH key fingerprints" msgstr "Empreintes des clés SSH de la machine" @@ -4678,8 +4677,8 @@ msgid "Mask service" msgstr "Service Masque" -#: pkg/systemd/services.jsx:250 pkg/systemd/services.jsx:251 -#: pkg/systemd/service-details.jsx:426 +#: pkg/systemd/service-details.jsx:426 pkg/systemd/services.jsx:250 +#: pkg/systemd/services.jsx:251 msgid "Masked" msgstr "Masqué" @@ -4704,10 +4703,11 @@ msgid "Media drive" msgstr "Lecteur optique" -#: pkg/systemd/overview-cards/usageCard.jsx:144 pkg/systemd/hwinfo.jsx:290 -#: pkg/systemd/hwinfo.jsx:334 pkg/systemd/service-details.jsx:659 -#: pkg/metrics/metrics.jsx:123 pkg/metrics/metrics.jsx:880 -#: pkg/metrics/metrics.jsx:1572 pkg/metrics/metrics.jsx:1950 +#: pkg/systemd/hwinfo.jsx:290 pkg/systemd/hwinfo.jsx:334 +#: pkg/systemd/overview-cards/usageCard.jsx:144 +#: pkg/systemd/service-details.jsx:659 pkg/metrics/metrics.jsx:123 +#: pkg/metrics/metrics.jsx:880 pkg/metrics/metrics.jsx:1572 +#: pkg/metrics/metrics.jsx:1950 msgid "Memory" msgstr "Mémoire" @@ -4731,12 +4731,12 @@ msgid "Message to logged in users" msgstr "Message aux utilisateurs connectés" -#: pkg/shell/failures.jsx:43 +#: pkg/shell/failures.jsx:42 msgid "Messages related to the failure might be found in the journal:" msgstr "Les messages relatifs à la défaillance se trouvent dans le journal :" -#: pkg/storaged/lvm2/vdo-pool.jsx:83 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:145 +#: pkg/storaged/lvm2/vdo-pool.jsx:83 msgid "Metadata used" msgstr "Méta-données utilisées" @@ -4793,8 +4793,8 @@ msgid "Mode" msgstr "Mode" +#: pkg/storaged/drive/drive.jsx:121 pkg/systemd/hwinfo.jsx:277 #: pkg/systemd/overview-cards/systemInformationCard.jsx:111 -#: pkg/systemd/hwinfo.jsx:277 pkg/storaged/drive/drive.jsx:121 msgid "Model" msgstr "Modèle" @@ -4819,14 +4819,14 @@ msgid "Monthly" msgstr "Mensuel" -#: pkg/packagekit/updates.jsx:941 +#: pkg/packagekit/updates.jsx:940 msgid "More info..." msgstr "Plus d’infos..." -#: pkg/storaged/stratis/filesystem.jsx:173 pkg/storaged/nfs/nfs.jsx:310 -#: pkg/storaged/filesystem/mounting-dialog.jsx:338 +#: pkg/storaged/nfs/nfs.jsx:310 pkg/storaged/btrfs/subvolume.jsx:343 +#: pkg/storaged/stratis/filesystem.jsx:173 +#: pkg/storaged/filesystem/mounting-dialog.jsx:356 #: pkg/storaged/filesystem/filesystem.jsx:103 -#: pkg/storaged/btrfs/subvolume.jsx:343 msgid "Mount" msgstr "Monter" @@ -4834,7 +4834,7 @@ msgid "Mount Point" msgstr "Point de montage" -#: pkg/storaged/filesystem/mounting-dialog.jsx:134 +#: pkg/storaged/filesystem/mounting-dialog.jsx:137 msgid "Mount after network becomes available, ignore failure" msgstr "Monter après que le réseau soit devenu disponible, ignorer les échecs" @@ -4851,15 +4851,15 @@ msgid "Mount automatically on $0 on boot" msgstr "Montage automatique $0 au démarrage" -#: pkg/storaged/filesystem/mounting-dialog.jsx:126 +#: pkg/storaged/filesystem/mounting-dialog.jsx:129 msgid "Mount before services start" msgstr "Montage avant le début des services" -#: pkg/storaged/filesystem/mounting-dialog.jsx:334 +#: pkg/storaged/filesystem/mounting-dialog.jsx:352 msgid "Mount configuration" msgstr "Configuration de montage" -#: pkg/storaged/filesystem/mounting-dialog.jsx:332 +#: pkg/storaged/filesystem/mounting-dialog.jsx:350 msgid "Mount filesystem" msgstr "Monter le système de fichiers" @@ -4875,12 +4875,12 @@ msgid "Mount options" msgstr "Options de montage" +#: pkg/storaged/nfs/nfs.jsx:329 pkg/storaged/btrfs/subvolume.jsx:415 +#: pkg/storaged/block/format-dialog.jsx:299 pkg/storaged/stratis/pool.jsx:103 #: pkg/storaged/stratis/filesystem.jsx:90 -#: pkg/storaged/stratis/filesystem.jsx:222 pkg/storaged/stratis/pool.jsx:103 -#: pkg/storaged/block/format-dialog.jsx:297 pkg/storaged/nfs/nfs.jsx:329 -#: pkg/storaged/filesystem/mounting-dialog.jsx:307 +#: pkg/storaged/stratis/filesystem.jsx:222 +#: pkg/storaged/filesystem/mounting-dialog.jsx:326 #: pkg/storaged/filesystem/filesystem.jsx:147 -#: pkg/storaged/btrfs/subvolume.jsx:415 msgid "Mount point" msgstr "Point de montage" @@ -4900,11 +4900,11 @@ msgid "Mount point must start with \"/\"." msgstr "Le point de montage doit commencer par « / »." -#: pkg/storaged/nfs/nfs.jsx:172 pkg/storaged/filesystem/mounting-dialog.jsx:60 +#: pkg/storaged/nfs/nfs.jsx:172 pkg/storaged/filesystem/mounting-dialog.jsx:61 msgid "Mount read only" msgstr "Monter en lecture seule" -#: pkg/storaged/filesystem/mounting-dialog.jsx:130 +#: pkg/storaged/filesystem/mounting-dialog.jsx:133 msgid "Mount without waiting, ignore failure" msgstr "Monter sans attendre, ignorer les échecs" @@ -4912,15 +4912,15 @@ msgid "Mounting $target" msgstr "Montage de $target" -#: pkg/storaged/filesystem/mounting-dialog.jsx:71 +#: pkg/storaged/filesystem/mounting-dialog.jsx:74 msgid "Mounts before services start" msgstr "Montage avant le démarrage des services" -#: pkg/storaged/filesystem/mounting-dialog.jsx:85 +#: pkg/storaged/filesystem/mounting-dialog.jsx:88 msgid "Mounts in parallel with services" msgstr "Montage en parallèle avec les services" -#: pkg/storaged/filesystem/mounting-dialog.jsx:96 +#: pkg/storaged/filesystem/mounting-dialog.jsx:99 msgid "Mounts in parallel with services, but after network is available" msgstr "" "Montage en parallèle avec les services, mais après que le réseau soit " @@ -4953,35 +4953,34 @@ msgid "NTP server" msgstr "Serveur NTP" -#: pkg/systemd/timer-dialog.jsx:157 pkg/systemd/hwinfo.jsx:86 -#: pkg/networkmanager/network-main.jsx:185 -#: pkg/networkmanager/network-main.jsx:200 -#: pkg/networkmanager/dialogs-common.jsx:142 -#: pkg/storaged/stratis/create-dialog.jsx:50 -#: pkg/storaged/stratis/filesystem.jsx:85 -#: pkg/storaged/stratis/filesystem.jsx:193 -#: pkg/storaged/stratis/filesystem.jsx:217 pkg/storaged/stratis/pool.jsx:92 -#: pkg/storaged/stratis/pool.jsx:166 pkg/storaged/stratis/pool.jsx:514 -#: pkg/storaged/lvm2/vdo-pool.jsx:78 pkg/storaged/lvm2/create-dialog.jsx:47 +#: pkg/storaged/partitions/partition.jsx:227 pkg/storaged/btrfs/volume.jsx:89 +#: pkg/storaged/btrfs/subvolume.jsx:148 pkg/storaged/btrfs/subvolume.jsx:413 +#: pkg/storaged/block/format-dialog.jsx:293 +#: pkg/storaged/iscsi/create-dialog.jsx:111 +#: pkg/storaged/iscsi/create-dialog.jsx:168 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:166 -#: pkg/storaged/lvm2/volume-group.jsx:64 pkg/storaged/lvm2/volume-group.jsx:116 -#: pkg/storaged/lvm2/volume-group.jsx:380 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:44 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:138 #: pkg/storaged/lvm2/block-logical-volume.jsx:49 #: pkg/storaged/lvm2/block-logical-volume.jsx:238 #: pkg/storaged/lvm2/block-logical-volume.jsx:286 -#: pkg/storaged/block/format-dialog.jsx:291 -#: pkg/storaged/iscsi/create-dialog.jsx:111 -#: pkg/storaged/iscsi/create-dialog.jsx:168 +#: pkg/storaged/lvm2/create-dialog.jsx:47 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:44 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:138 +#: pkg/storaged/lvm2/volume-group.jsx:64 pkg/storaged/lvm2/volume-group.jsx:116 +#: pkg/storaged/lvm2/volume-group.jsx:380 pkg/storaged/lvm2/vdo-pool.jsx:78 +#: pkg/storaged/stratis/pool.jsx:92 pkg/storaged/stratis/pool.jsx:166 +#: pkg/storaged/stratis/pool.jsx:514 pkg/storaged/stratis/create-dialog.jsx:50 +#: pkg/storaged/stratis/filesystem.jsx:85 +#: pkg/storaged/stratis/filesystem.jsx:193 +#: pkg/storaged/stratis/filesystem.jsx:217 #: pkg/storaged/filesystem/filesystem.jsx:119 #: pkg/storaged/filesystem/filesystem.jsx:141 -#: pkg/storaged/partitions/partition.jsx:227 -#: pkg/storaged/mdraid/create-dialog.jsx:47 pkg/storaged/mdraid/mdraid.jsx:285 -#: pkg/storaged/btrfs/volume.jsx:89 pkg/storaged/btrfs/subvolume.jsx:148 -#: pkg/storaged/btrfs/subvolume.jsx:413 pkg/shell/credentials.jsx:101 -#: pkg/packagekit/updates.jsx:448 pkg/users/authorized-keys-panel.js:127 -#: pkg/users/group-create-dialog.js:39 +#: pkg/storaged/mdraid/mdraid.jsx:285 pkg/storaged/mdraid/create-dialog.jsx:47 +#: pkg/networkmanager/network-main.jsx:185 +#: pkg/networkmanager/network-main.jsx:200 +#: pkg/networkmanager/dialogs-common.jsx:142 pkg/systemd/timer-dialog.jsx:157 +#: pkg/systemd/hwinfo.jsx:86 pkg/shell/credentials.jsx:101 +#: pkg/packagekit/updates.jsx:447 pkg/users/group-create-dialog.js:39 +#: pkg/users/authorized-keys-panel.js:127 msgid "Name" msgstr "Nom" @@ -4989,19 +4988,19 @@ msgid "Name can not be empty." msgstr "Le nom ne peut pas être vide." -#: pkg/storaged/utils.js:212 pkg/storaged/btrfs/utils.jsx:85 +#: pkg/storaged/btrfs/utils.jsx:85 pkg/storaged/utils.js:213 msgid "Name cannot be empty." msgstr "Le nom ne peut pas être vide." -#: pkg/storaged/utils.js:241 +#: pkg/storaged/utils.js:242 msgid "Name cannot be longer than $0 bytes" msgstr "Le nom ne peut pas dépasser $0 octets" -#: pkg/storaged/utils.js:239 +#: pkg/storaged/utils.js:240 msgid "Name cannot be longer than $0 characters" msgstr "Le nom ne peut pas dépasser $0 caractères" -#: pkg/storaged/utils.js:214 +#: pkg/storaged/utils.js:215 msgid "Name cannot be longer than 127 characters." msgstr "Le nom ne peut pas dépasser 127 caractères." @@ -5011,7 +5010,7 @@ msgid "Name cannot be longer than 255 characters." msgstr "Le nom ne peut pas dépasser 127 caractères." -#: pkg/storaged/utils.js:218 +#: pkg/storaged/utils.js:219 msgid "Name cannot contain the character '$0'." msgstr "Le nom ne peut pas contenir le caractère « $0 »." @@ -5021,7 +5020,7 @@ msgid "Name cannot contain the character '/'." msgstr "Le nom ne peut pas contenir le caractère « $0 »." -#: pkg/storaged/utils.js:220 +#: pkg/storaged/utils.js:221 msgid "Name cannot contain whitespace." msgstr "Le nom ne peut pas contenir d’espace." @@ -5072,9 +5071,9 @@ msgid "Networked storage" msgstr "Utilisation du réseau" -#: pkg/networkmanager/index.html:23 +#: pkg/networkmanager/index.html:23 pkg/networkmanager/firewall.jsx:1053 #: pkg/networkmanager/network-interface.jsx:705 -#: pkg/networkmanager/firewall.jsx:1053 pkg/networkmanager/manifest.json:0 +#: pkg/networkmanager/manifest.json:0 #: src/appstream/org.cockpit-project.cockpit-networkmanager.metainfo.xml.in:5 msgid "Networking" msgstr "Réseau" @@ -5083,11 +5082,11 @@ msgid "Never" msgstr "Jamais" -#: pkg/users/expiration-dialogs.js:42 pkg/users/account-details.js:75 +#: pkg/users/account-details.js:75 pkg/users/expiration-dialogs.js:42 msgid "Never expire account" msgstr "Ne jamais expirer le compte" -#: pkg/users/expiration-dialogs.js:154 pkg/users/account-details.js:67 +#: pkg/users/account-details.js:67 pkg/users/expiration-dialogs.js:154 msgid "Never expire password" msgstr "Ne jamais faire expirer le mot de passe" @@ -5117,8 +5116,8 @@ msgid "New name" msgstr "Nouveau nom" -#: pkg/storaged/stratis/pool.jsx:407 pkg/storaged/crypto/keyslots.jsx:435 -#: pkg/storaged/crypto/keyslots.jsx:485 +#: pkg/storaged/crypto/keyslots.jsx:469 pkg/storaged/crypto/keyslots.jsx:519 +#: pkg/storaged/stratis/pool.jsx:407 msgid "New passphrase" msgstr "Nouvelle phrase secrète" @@ -5126,7 +5125,7 @@ msgid "New password" msgstr "Nouveau mot de passe" -#: pkg/users/password-dialogs.js:86 pkg/lib/credentials.js:241 +#: pkg/lib/credentials.js:241 pkg/users/password-dialogs.js:86 msgid "New password was not accepted" msgstr "Le nouveau mot de passe n’a pas été accepté" @@ -5134,7 +5133,7 @@ msgid "Next" msgstr "Prochain" -#: pkg/systemd/reporting.jsx:290 pkg/networkmanager/network-interface.jsx:241 +#: pkg/networkmanager/network-interface.jsx:241 pkg/systemd/reporting.jsx:290 msgid "No" msgstr "Non" @@ -5150,7 +5149,7 @@ msgid "No applications installed or available." msgstr "Aucune application installée ou disponible." -#: pkg/storaged/crypto/keyslots.jsx:778 +#: pkg/storaged/crypto/keyslots.jsx:812 msgid "No available slots" msgstr "Pas d’emplacements disponibles" @@ -5158,9 +5157,10 @@ msgid "No block devices are available." msgstr "Aucun périphérique en mode bloc n’est disponible." -#: pkg/storaged/stratis/stopped-pool.jsx:140 pkg/storaged/stratis/pool.jsx:565 +#: pkg/storaged/stratis/pool.jsx:565 pkg/storaged/stratis/stopped-pool.jsx:140 +#, fuzzy msgid "No block devices found" -msgstr "Aucun périphérique de démarrage trouvé" +msgstr "Aucun périphérique de blocs trouvé" #: pkg/networkmanager/interfaces.js:1356 msgid "No carrier" @@ -5196,9 +5196,9 @@ msgid "No devices found" msgstr "Aucun périphérique de démarrage trouvé" -#: pkg/storaged/stratis/pool.jsx:208 pkg/storaged/lvm2/create-dialog.jsx:54 -#: pkg/storaged/lvm2/volume-group.jsx:200 -#: pkg/storaged/mdraid/create-dialog.jsx:101 pkg/storaged/mdraid/mdraid.jsx:158 +#: pkg/storaged/lvm2/create-dialog.jsx:54 +#: pkg/storaged/lvm2/volume-group.jsx:200 pkg/storaged/stratis/pool.jsx:208 +#: pkg/storaged/mdraid/mdraid.jsx:158 pkg/storaged/mdraid/create-dialog.jsx:101 msgid "No disks are available." msgstr "Aucun disque disponible." @@ -5230,7 +5230,7 @@ msgid "No filesystems" msgstr "Aucun système de fichiers" -#: pkg/storaged/crypto/keyslots.jsx:783 +#: pkg/storaged/crypto/keyslots.jsx:817 msgid "No free key slots" msgstr "Pas d’emplacements libres pour les clés" @@ -5248,7 +5248,7 @@ msgid "No group name specified" msgstr "Aucun nom de groupe spécifié" -#: pkg/systemd/overview-cards/configurationCard.jsx:181 +#: pkg/systemd/overview-cards/configurationCard.jsx:179 msgid "No host keys found." msgstr "Aucune clé d’hôte trouvée." @@ -5256,7 +5256,7 @@ msgid "No installation package found for this application." msgstr "Aucun paquet d’installation n’a été trouvé pour cette application." -#: pkg/storaged/crypto/keyslots.jsx:700 +#: pkg/storaged/crypto/keyslots.jsx:734 msgid "No keys added" msgstr "Aucune clé n’a été ajoutée" @@ -5268,8 +5268,8 @@ msgid "No log entries" msgstr "Aucune entrée de journal" -#: pkg/storaged/lvm2/volume-group.jsx:297 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:126 +#: pkg/storaged/lvm2/volume-group.jsx:297 msgid "No logical volumes" msgstr "Pas de volumes logiques" @@ -5333,8 +5333,8 @@ msgid "No storage found" msgstr "Aucun stockage" -#: pkg/storaged/btrfs/volume.jsx:157 pkg/storaged/btrfs/filesystem.jsx:86 -#: pkg/storaged/btrfs/subvolume.jsx:423 +#: pkg/storaged/btrfs/volume.jsx:157 pkg/storaged/btrfs/subvolume.jsx:423 +#: pkg/storaged/btrfs/filesystem.jsx:86 #, fuzzy #| msgid "No logical volumes" msgid "No subvolumes" @@ -5349,7 +5349,7 @@ msgid "No system modifications" msgstr "Aucune modification système" -#: pkg/sosreport/sosreport.jsx:488 +#: pkg/sosreport/sosreport.jsx:497 msgid "No system reports." msgstr "Aucun rapport sur le système." @@ -5361,8 +5361,8 @@ msgid "No user name specified" msgstr "Aucun nom d’utilisateur n’est renseigné" -#: pkg/systemd/overview-cards/tuned-dialog.jsx:232 #: pkg/networkmanager/firewall.jsx:854 pkg/kdump/kdump-view.jsx:488 +#: pkg/systemd/overview-cards/tuned-dialog.jsx:232 msgid "None" msgstr "Aucun" @@ -5400,8 +5400,8 @@ msgid "Not enough free space" msgstr "Espace insuffisant pour propager." -#: pkg/storaged/stratis/filesystem.jsx:75 pkg/storaged/stratis/pool.jsx:306 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:95 +#: pkg/storaged/stratis/pool.jsx:306 pkg/storaged/stratis/filesystem.jsx:75 #, fuzzy #| msgid "Not enough space to grow." msgid "Not enough space" @@ -5413,8 +5413,8 @@ msgid "Not enough space to grow" msgstr "Espace insuffisant pour propager." -#: pkg/systemd/services.jsx:222 pkg/storaged/pages.jsx:278 -#: pkg/storaged/pages.jsx:283 +#: pkg/storaged/pages.jsx:278 pkg/storaged/pages.jsx:283 +#: pkg/systemd/services.jsx:222 msgid "Not found" msgstr "Non trouvé" @@ -5432,7 +5432,7 @@ msgid "Not permitted to configure realms" msgstr "Non autorisé à configurer les domaines" -#: pkg/lib/cockpit.js:3842 +#: pkg/lib/cockpit.js:3838 msgid "Not permitted to perform this action." msgstr "Non autorisé à effectuer cette action." @@ -5440,13 +5440,13 @@ msgid "Not ready" msgstr "Pas prêt" -#: pkg/packagekit/updates.jsx:1366 +#: pkg/packagekit/updates.jsx:1365 msgid "Not registered" msgstr "Non inscrit" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:466 #: pkg/systemd/services.jsx:234 pkg/systemd/services.jsx:237 -#: pkg/systemd/services.jsx:697 pkg/systemd/service-details.jsx:466 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:697 msgid "Not running" msgstr "Pas en cours d’exécution" @@ -5470,12 +5470,12 @@ msgid "Notice and above" msgstr "Notification et au-dessus" -#: pkg/sosreport/sosreport.jsx:322 +#: pkg/sosreport/sosreport.jsx:331 msgid "Obfuscate network addresses, hostnames, and usernames" msgstr "" "Obscurcir les adresses réseau, les noms d'hôtes et les noms d'utilisateurs" -#: pkg/sosreport/sosreport.jsx:443 +#: pkg/sosreport/sosreport.jsx:452 msgid "Obfuscated" msgstr "Rendu obscure" @@ -5487,8 +5487,8 @@ msgid "Occurred between $0 and $1" msgstr "S’est produit entre $0 et $1" -#: pkg/selinux/setroubleshoot-view.jsx:414 #: pkg/lib/cockpit-components-logs-panel.jsx:98 +#: pkg/selinux/setroubleshoot-view.jsx:414 msgid "Occurrences" msgstr "Occurrences" @@ -5496,7 +5496,7 @@ msgid "Ok" msgstr "Ok" -#: pkg/storaged/stratis/pool.jsx:402 pkg/storaged/crypto/keyslots.jsx:482 +#: pkg/storaged/crypto/keyslots.jsx:516 pkg/storaged/stratis/pool.jsx:402 msgid "Old passphrase" msgstr "Ancienne phrase secrète" @@ -5504,7 +5504,7 @@ msgid "Old password" msgstr "Ancien mot de passe" -#: pkg/users/password-dialogs.js:55 pkg/lib/credentials.js:221 +#: pkg/lib/credentials.js:221 pkg/users/password-dialogs.js:55 msgid "Old password not accepted" msgstr "Ancien mot de passe non accepté" @@ -5543,7 +5543,7 @@ "N’utiliser que des algorithmes approuvés et autorisés lors du démarrage en " "mode FIPS." -#: pkg/shell/topnav.jsx:244 +#: pkg/shell/topnav.jsx:255 msgid "Ooops!" msgstr "Zut !" @@ -5556,10 +5556,10 @@ msgid "Operation '$operation' on $target" msgstr "Opération « $operation » sur $target" -#: pkg/sosreport/sosreport.jsx:321 pkg/networkmanager/bridge.jsx:104 -#: pkg/storaged/stratis/create-dialog.jsx:64 +#: pkg/storaged/crypto/encryption.jsx:234 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:223 -#: pkg/storaged/crypto/encryption.jsx:234 pkg/users/account-details.js:269 +#: pkg/storaged/stratis/create-dialog.jsx:64 pkg/sosreport/sosreport.jsx:330 +#: pkg/networkmanager/bridge.jsx:104 pkg/users/account-details.js:269 msgid "Options" msgstr "Options" @@ -5571,7 +5571,7 @@ msgid "Other" msgstr "Autre" -#: pkg/users/account-create-dialog.js:131 pkg/users/account-details.js:279 +#: pkg/users/account-details.js:279 pkg/users/account-create-dialog.js:131 msgid "" "Other authentication methods are still available even when interactive " "password authentication is not allowed." @@ -5592,13 +5592,13 @@ msgid "Overview" msgstr "Aperçu" -#: pkg/storaged/block/format-dialog.jsx:322 #: pkg/storaged/partitions/format-disk-dialog.jsx:61 +#: pkg/storaged/block/format-dialog.jsx:324 msgid "Overwrite" msgstr "Écraser" -#: pkg/storaged/block/format-dialog.jsx:325 #: pkg/storaged/partitions/format-disk-dialog.jsx:64 +#: pkg/storaged/block/format-dialog.jsx:327 msgid "Overwrite existing data with zeros (slower)" msgstr "Ecraser les données existantes avec des zéros (plus lent)" @@ -5606,7 +5606,7 @@ msgid "PCI" msgstr "PCI" -#: pkg/storaged/dialog.jsx:1329 +#: pkg/storaged/dialog.jsx:1331 msgid "PID" msgstr "PID" @@ -5614,7 +5614,7 @@ msgid "Package cockpit-pcp is missing for metrics history" msgstr "Le paquet cockpit-pcp est manquant pour l’historique des métriques" -#: pkg/packagekit/updates.jsx:690 pkg/packagekit/updates.jsx:769 +#: pkg/packagekit/updates.jsx:689 pkg/packagekit/updates.jsx:768 msgid "Package information" msgstr "Informations sur le paquet" @@ -5622,15 +5622,15 @@ msgid "PackageKit crashed" msgstr "Plantage de « PackageKit »" -#: pkg/packagekit/updates.jsx:1104 +#: pkg/packagekit/updates.jsx:1103 msgid "PackageKit is not installed" msgstr "PackageKit non installé" -#: pkg/packagekit/updates.jsx:1305 +#: pkg/packagekit/updates.jsx:1304 msgid "PackageKit reported error code $0" msgstr "PackageKit a signalé le code d’erreur $0" -#: pkg/packagekit/updates.jsx:364 +#: pkg/packagekit/updates.jsx:363 msgid "Packages" msgstr "Paquets" @@ -5658,7 +5658,7 @@ msgid "Partition" msgstr "Partition" -#: pkg/storaged/utils.js:364 +#: pkg/storaged/utils.js:365 msgid "Partition of $0" msgstr "Partition de $0" @@ -5681,54 +5681,54 @@ msgid "Passive" msgstr "Passif" +#: pkg/storaged/crypto/actions.jsx:42 pkg/storaged/crypto/keyslots.jsx:464 +#: pkg/storaged/crypto/keyslots.jsx:784 +#: pkg/storaged/block/format-dialog.jsx:336 +#: pkg/storaged/block/format-dialog.jsx:364 pkg/storaged/stratis/pool.jsx:201 +#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 +#: pkg/storaged/stratis/create-dialog.jsx:75 #: pkg/storaged/stratis/stopped-pool.jsx:58 #: pkg/storaged/stratis/stopped-pool.jsx:129 -#: pkg/storaged/stratis/create-dialog.jsx:75 pkg/storaged/stratis/pool.jsx:201 -#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 -#: pkg/storaged/block/format-dialog.jsx:334 -#: pkg/storaged/block/format-dialog.jsx:362 -#: pkg/storaged/filesystem/mounting-dialog.jsx:323 -#: pkg/storaged/crypto/actions.jsx:43 pkg/storaged/crypto/keyslots.jsx:430 -#: pkg/storaged/crypto/keyslots.jsx:750 +#: pkg/storaged/filesystem/mounting-dialog.jsx:341 msgid "Passphrase" msgstr "Phrase secrète" -#: pkg/storaged/crypto/keyslots.jsx:573 +#: pkg/storaged/crypto/keyslots.jsx:607 msgid "Passphrase can not be empty" msgstr "La phrase secrète ne peut pas être vide" -#: pkg/storaged/stratis/create-dialog.jsx:79 pkg/storaged/stratis/pool.jsx:204 +#: pkg/storaged/crypto/keyslots.jsx:178 pkg/storaged/crypto/keyslots.jsx:472 +#: pkg/storaged/crypto/keyslots.jsx:517 pkg/storaged/crypto/keyslots.jsx:521 +#: pkg/storaged/block/format-dialog.jsx:340 +#: pkg/storaged/block/format-dialog.jsx:368 pkg/storaged/stratis/pool.jsx:204 #: pkg/storaged/stratis/pool.jsx:379 pkg/storaged/stratis/pool.jsx:405 #: pkg/storaged/stratis/pool.jsx:408 pkg/storaged/stratis/pool.jsx:463 -#: pkg/storaged/block/format-dialog.jsx:338 -#: pkg/storaged/block/format-dialog.jsx:366 -#: pkg/storaged/filesystem/mounting-dialog.jsx:326 -#: pkg/storaged/crypto/keyslots.jsx:145 pkg/storaged/crypto/keyslots.jsx:438 -#: pkg/storaged/crypto/keyslots.jsx:483 pkg/storaged/crypto/keyslots.jsx:487 +#: pkg/storaged/stratis/create-dialog.jsx:79 +#: pkg/storaged/filesystem/mounting-dialog.jsx:344 msgid "Passphrase cannot be empty" msgstr "La phrase secrète ne peut pas être vide" -#: pkg/storaged/crypto/keyslots.jsx:595 +#: pkg/storaged/crypto/keyslots.jsx:629 msgid "Passphrase from any other key slot" msgstr "Phrase secrète de n’importe quel autre emplacement de clé" -#: pkg/storaged/stratis/pool.jsx:439 pkg/storaged/crypto/keyslots.jsx:586 +#: pkg/storaged/crypto/keyslots.jsx:620 pkg/storaged/stratis/pool.jsx:439 msgid "Passphrase removal may prevent unlocking $0." msgstr "" "La suppression de la phrase secrète peut empêcher le déverrouillage de $0." -#: pkg/storaged/stratis/create-dialog.jsx:88 pkg/storaged/stratis/pool.jsx:381 -#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/block/format-dialog.jsx:347 -#: pkg/storaged/crypto/keyslots.jsx:447 pkg/storaged/crypto/keyslots.jsx:492 +#: pkg/storaged/crypto/keyslots.jsx:481 pkg/storaged/crypto/keyslots.jsx:526 +#: pkg/storaged/block/format-dialog.jsx:349 pkg/storaged/stratis/pool.jsx:381 +#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/stratis/create-dialog.jsx:88 msgid "Passphrases do not match" msgstr "Les phrases secrète ne correspondent pas" #: pkg/static/login.html:99 pkg/storaged/iscsi/create-dialog.jsx:34 #: pkg/storaged/iscsi/create-dialog.jsx:140 pkg/shell/hosts_dialog.jsx:845 -#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/credentials.jsx:119 -#: pkg/shell/credentials.jsx:262 pkg/shell/credentials.jsx:318 -#: pkg/shell/superuser.jsx:144 pkg/users/account-create-dialog.js:139 -#: pkg/users/account-details.js:296 +#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/superuser.jsx:144 +#: pkg/shell/credentials.jsx:119 pkg/shell/credentials.jsx:262 +#: pkg/shell/credentials.jsx:318 pkg/users/account-details.js:296 +#: pkg/users/account-create-dialog.js:139 msgid "Password" msgstr "Mot de passe" @@ -5810,8 +5810,8 @@ msgid "Path to directory" msgstr "Chemin vers le répertoire" -#: pkg/shell/credentials.jsx:172 #: pkg/lib/cockpit-components-file-autocomplete.jsx:169 +#: pkg/shell/credentials.jsx:172 msgid "Path to file" msgstr "Chemin d’accès au fichier" @@ -5851,7 +5851,7 @@ "Performance Co-Pilot recueille et analyse les mesures de performance de " "votre système." -#: pkg/systemd/overview-cards/configurationCard.jsx:85 +#: pkg/systemd/overview-cards/configurationCard.jsx:84 msgid "Performance profile" msgstr "Profil de performance" @@ -5867,9 +5867,10 @@ msgid "Permanently delete $0 group?" msgstr "Supprimer définitivement le groupe $0 ?" -#: pkg/storaged/stratis/pool.jsx:145 pkg/storaged/lvm2/volume-group.jsx:93 +#: pkg/storaged/partitions/partition.jsx:54 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:119 -#: pkg/storaged/partitions/partition.jsx:54 pkg/storaged/mdraid/mdraid.jsx:123 +#: pkg/storaged/lvm2/volume-group.jsx:93 pkg/storaged/stratis/pool.jsx:145 +#: pkg/storaged/mdraid/mdraid.jsx:123 msgid "Permanently delete $0?" msgstr "Supprimer définitivement $0 ?" @@ -5897,16 +5898,16 @@ msgid "Physical" msgstr "Physique" +#: pkg/storaged/block/resize.jsx:436 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:180 #: pkg/storaged/lvm2/block-logical-volume.jsx:130 -#: pkg/storaged/block/resize.jsx:436 #, fuzzy #| msgid "Physical volumes" msgid "Physical Volumes" msgstr "Volumes physiques" -#: pkg/storaged/lvm2/volume-group.jsx:390 #: pkg/storaged/lvm2/block-logical-volume.jsx:356 +#: pkg/storaged/lvm2/volume-group.jsx:390 msgid "Physical volumes" msgstr "Volumes physiques" @@ -5916,8 +5917,8 @@ msgid "Physical volumes can not be resized here" msgstr "Les volumes physiques ne peuvent pas être redimensionnés ici." -#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 #: pkg/lib/cockpit-components-shutdown.jsx:211 pkg/lib/serverTime.js:599 +#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 msgid "Pick date" msgstr "Choisissez une date" @@ -5969,7 +5970,7 @@ msgid "Please unmount them first." msgstr "" -#: pkg/storaged/utils.js:284 +#: pkg/storaged/utils.js:285 msgid "Pool for thin logical volumes" msgstr "Pool pour les volumes logiques dynamiques" @@ -5997,8 +5998,8 @@ msgid "Portable" msgstr "Portable" -#: pkg/networkmanager/network-interface-members.jsx:203 #: pkg/networkmanager/team.jsx:159 pkg/networkmanager/bridge.jsx:101 +#: pkg/networkmanager/network-interface-members.jsx:208 msgid "Ports" msgstr "Ports" @@ -6021,7 +6022,7 @@ msgid "Preparing" msgstr "Préparation en cours" -#: pkg/systemd/hw-detect.js:114 pkg/lib/machine-info.js:247 +#: pkg/lib/machine-info.js:247 pkg/systemd/hw-detect.js:114 msgid "Present" msgstr "Présent" @@ -6029,7 +6030,7 @@ msgid "Preserve" msgstr "Préserver" -#: pkg/systemd/overview-cards/configurationCard.jsx:288 +#: pkg/systemd/overview-cards/configurationCard.jsx:284 msgid "Pretty host name" msgstr "Nom d’hôte pretty" @@ -6041,8 +6042,8 @@ msgid "Primary" msgstr "Primaire" -#: pkg/systemd/logs.jsx:208 pkg/networkmanager/bridgeport.jsx:80 -#: pkg/networkmanager/teamport.jsx:84 +#: pkg/networkmanager/bridgeport.jsx:80 pkg/networkmanager/teamport.jsx:84 +#: pkg/systemd/logs.jsx:208 msgid "Priority" msgstr "Priorité" @@ -6069,11 +6070,11 @@ msgid "Problem info" msgstr "Informations sur le problème" -#: pkg/storaged/dialog.jsx:1171 +#: pkg/storaged/dialog.jsx:1173 msgid "Processes using the location" msgstr "Processus utilisant l’emplacement" -#: pkg/sosreport/sosreport.jsx:292 +#: pkg/sosreport/sosreport.jsx:301 msgid "Progress: $0" msgstr "Progrès : $0" @@ -6180,7 +6181,7 @@ msgid "RAID chassis" msgstr "Châssis RAID" -#: pkg/storaged/mdraid/create-dialog.jsx:51 pkg/storaged/mdraid/mdraid.jsx:286 +#: pkg/storaged/mdraid/mdraid.jsx:286 pkg/storaged/mdraid/create-dialog.jsx:51 msgid "RAID level" msgstr "Niveau RAID" @@ -6246,11 +6247,11 @@ msgid "Ready" msgstr "Prêt" -#: pkg/systemd/overview-cards/configurationCard.jsx:291 +#: pkg/systemd/overview-cards/configurationCard.jsx:287 msgid "Real host name" msgstr "Nom d’hôte réel" -#: pkg/systemd/overview-cards/configurationCard.jsx:258 +#: pkg/systemd/overview-cards/configurationCard.jsx:254 msgid "" "Real host name can only contain lower-case characters, digits, dashes, and " "periods (with populated subdomains)" @@ -6258,7 +6259,7 @@ "Le nom d’hôte réel ne peut contenir que des caractères minuscules, des " "chiffres, des tirets et des points (avec des sous-domaines remplis)" -#: pkg/systemd/overview-cards/configurationCard.jsx:256 +#: pkg/systemd/overview-cards/configurationCard.jsx:252 msgid "Real host name must be 64 characters or less" msgstr "Le nom d’hôte réel doit comporter 64 caractères ou moins" @@ -6266,14 +6267,14 @@ msgid "Reapply and reboot" msgstr "Appliquer à nouveau et redémarrer" -#: pkg/systemd/overview.jsx:109 pkg/systemd/overview.jsx:128 -#: pkg/lib/cockpit-components-logs-panel.jsx:114 #: pkg/lib/cockpit-components-shutdown.jsx:190 #: pkg/lib/cockpit-components-shutdown.jsx:192 +#: pkg/lib/cockpit-components-logs-panel.jsx:114 pkg/systemd/overview.jsx:110 +#: pkg/systemd/overview.jsx:135 msgid "Reboot" msgstr "Redémarrer" -#: pkg/packagekit/updates.jsx:614 +#: pkg/packagekit/updates.jsx:613 msgid "Reboot after completion" msgstr "Redémarrage une fois terminé" @@ -6281,15 +6282,14 @@ msgid "Reboot recommended" msgstr "Redémarrage recommandé" -#: pkg/packagekit/updates.jsx:685 pkg/packagekit/updates.jsx:760 -#: pkg/packagekit/updates.jsx:824 +#: pkg/packagekit/updates.jsx:684 pkg/packagekit/updates.jsx:759 +#: pkg/packagekit/updates.jsx:823 msgid "Reboot system..." msgstr "Redémarrer le système..." #: pkg/networkmanager/network-main.jsx:188 -#: pkg/networkmanager/network-main.jsx:203 -#: pkg/networkmanager/network-interface-members.jsx:205 -#: pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-main.jsx:203 pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-interface-members.jsx:210 msgid "Receiving" msgstr "Réception" @@ -6301,7 +6301,7 @@ msgid "Recommended, secure settings for current threat models." msgstr "Recommandé, paramètres de sécurité pour les modèles actuels de menace." -#: pkg/shell/failures.jsx:74 +#: pkg/shell/failures.jsx:72 msgid "Reconnect" msgstr "Reconnecter" @@ -6315,7 +6315,7 @@ #: pkg/packagekit/updates.jsx:98 msgid "Refreshing package information" -msgstr "Actualisation des informations sur le paquet" +msgstr "Actualisation des informations du paquet" #: pkg/static/login.js:923 msgid "Refusing to connect. Host is unknown" @@ -6323,35 +6323,33 @@ #: pkg/static/login.js:925 msgid "Refusing to connect. Hostkey does not match" -msgstr "Connexion refusée. Hostkey ne correspond pas" +msgstr "Connexion refusée. La clé hôte ne correspond pas" #: pkg/static/login.js:921 msgid "Refusing to connect. Hostkey is unknown" -msgstr "Connexion refusée. Hostkey est inconnu" +msgstr "Connexion refusée. La clé hôte est inconnu" #: pkg/networkmanager/wireguard.jsx:224 -#, fuzzy -#| msgid "Generated" msgid "Regenerate" -msgstr "Généré" +msgstr "Régénéré" -#: pkg/storaged/crypto/keyslots.jsx:277 +#: pkg/storaged/crypto/keyslots.jsx:311 msgid "Regenerating initrd" msgstr "Régénération d’ initrd" -#: pkg/packagekit/updates.jsx:1378 +#: pkg/packagekit/updates.jsx:1377 msgid "Register…" msgstr "Enregistrement…" -#: pkg/storaged/dialog.jsx:1259 +#: pkg/storaged/dialog.jsx:1261 msgid "Related processes and services will be forcefully stopped." msgstr "Les processus et services connexes seront arrêtés de force." -#: pkg/storaged/dialog.jsx:1261 +#: pkg/storaged/dialog.jsx:1263 msgid "Related processes will be forcefully stopped." msgstr "Les processus connexes seront arrêtés de force." -#: pkg/storaged/dialog.jsx:1263 +#: pkg/storaged/dialog.jsx:1265 msgid "Related services will be forcefully stopped." msgstr "Les services connexes seront arrêtés par la force." @@ -6367,7 +6365,7 @@ msgid "Reloading" msgstr "Rechargement" -#: pkg/packagekit/updates.jsx:510 +#: pkg/packagekit/updates.jsx:509 msgid "Reloading the state of remaining services" msgstr "Recharger l’état des services restants" @@ -6407,19 +6405,19 @@ msgid "Removals:" msgstr "Suppressions :" -#: pkg/systemd/timer-dialog.jsx:361 pkg/storaged/stratis/pool.jsx:443 +#: pkg/storaged/nfs/nfs.jsx:315 pkg/storaged/crypto/keyslots.jsx:649 +#: pkg/storaged/crypto/keyslots.jsx:684 pkg/storaged/crypto/keyslots.jsx:769 +#: pkg/storaged/lvm2/physical-volume.jsx:88 +#: pkg/storaged/lvm2/volume-group.jsx:347 pkg/storaged/stratis/pool.jsx:443 #: pkg/storaged/stratis/pool.jsx:500 pkg/storaged/stratis/pool.jsx:535 -#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/lvm2/volume-group.jsx:347 -#: pkg/storaged/lvm2/physical-volume.jsx:88 pkg/storaged/nfs/nfs.jsx:315 -#: pkg/storaged/crypto/keyslots.jsx:615 pkg/storaged/crypto/keyslots.jsx:650 -#: pkg/storaged/crypto/keyslots.jsx:735 pkg/storaged/mdraid/mdraid-disk.jsx:98 -#: pkg/shell/hosts.jsx:170 pkg/apps/application.jsx:50 -#: pkg/users/authorized-keys-panel.js:142 +#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/mdraid/mdraid-disk.jsx:98 +#: pkg/apps/application.jsx:50 pkg/systemd/timer-dialog.jsx:361 +#: pkg/shell/hosts.jsx:170 pkg/users/authorized-keys-panel.js:142 #: pkg/users/authorized-keys-panel.js:150 msgid "Remove" msgstr "Retirer" -#: pkg/networkmanager/network-interface-members.jsx:110 +#: pkg/networkmanager/network-interface-members.jsx:111 msgid "Remove $0" msgstr "Supprimer $0" @@ -6427,11 +6425,11 @@ msgid "Remove $0 service from $1 zone" msgstr "Supprimer le service $0 de la zone $1" -#: pkg/storaged/stratis/pool.jsx:495 pkg/storaged/crypto/keyslots.jsx:634 +#: pkg/storaged/crypto/keyslots.jsx:668 pkg/storaged/stratis/pool.jsx:495 msgid "Remove $0?" msgstr "Supprimer $0 ?" -#: pkg/storaged/stratis/pool.jsx:493 pkg/storaged/crypto/keyslots.jsx:644 +#: pkg/storaged/crypto/keyslots.jsx:678 pkg/storaged/stratis/pool.jsx:493 msgid "Remove Tang keyserver?" msgstr "Supprimer le serveur de clés Tang ?" @@ -6456,7 +6454,7 @@ msgid "Remove missing physical volumes?" msgstr "Suppression du volume physique de $target" -#: pkg/storaged/crypto/keyslots.jsx:608 +#: pkg/storaged/crypto/keyslots.jsx:642 msgid "Remove passphrase in key slot $0?" msgstr "Supprimer la phrase de secrète dans l’emplacement de la clé $0 ?" @@ -6476,12 +6474,12 @@ msgid "Removing" msgstr "Suppression" -#: pkg/storaged/crypto/keyslots.jsx:222 +#: pkg/storaged/crypto/keyslots.jsx:256 #: pkg/lib/cockpit-components-install-dialog.jsx:191 msgid "Removing $0" msgstr "Suppression de $0" -#: pkg/networkmanager/network-interface-members.jsx:109 +#: pkg/networkmanager/network-interface-members.jsx:110 msgid "" "Removing $0 will break the connection to the server, and will make the " "administration UI unavailable." @@ -6493,7 +6491,7 @@ msgid "Removing $target from MDRAID device" msgstr "Supprimer $target du périphérique MDRAID" -#: pkg/storaged/crypto/keyslots.jsx:593 +#: pkg/storaged/crypto/keyslots.jsx:627 msgid "" "Removing a passphrase without confirmation of another passphrase may prevent " "unlocking or key management, if other passphrases are forgotten or lost." @@ -6520,11 +6518,10 @@ msgid "Removing the zone will remove all services within it." msgstr "La suppression de la zone supprime tous les services qui s’y trouvent." -#: pkg/storaged/stratis/filesystem.jsx:200 pkg/storaged/stratis/pool.jsx:173 -#: pkg/storaged/lvm2/volume-group.jsx:71 #: pkg/storaged/lvm2/block-logical-volume.jsx:53 #: pkg/storaged/lvm2/block-logical-volume.jsx:242 -#: pkg/users/rename-group-dialog.jsx:69 +#: pkg/storaged/lvm2/volume-group.jsx:71 pkg/storaged/stratis/pool.jsx:173 +#: pkg/storaged/stratis/filesystem.jsx:200 pkg/users/rename-group-dialog.jsx:69 msgid "Rename" msgstr "Renommer" @@ -6584,8 +6581,8 @@ msgid "Repeat monthly" msgstr "Répéter chaque mois" -#: pkg/storaged/crypto/keyslots.jsx:428 pkg/storaged/crypto/keyslots.jsx:441 -#: pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:462 pkg/storaged/crypto/keyslots.jsx:475 +#: pkg/storaged/crypto/keyslots.jsx:524 msgid "Repeat passphrase" msgstr "Répéter la phrase secrète" @@ -6593,11 +6590,11 @@ msgid "Repeat weekly" msgstr "Répéter chaque semaine" -#: pkg/sosreport/sosreport.jsx:490 pkg/systemd/reporting.jsx:392 +#: pkg/sosreport/sosreport.jsx:499 pkg/systemd/reporting.jsx:392 msgid "Report" msgstr "Signaler" -#: pkg/sosreport/sosreport.jsx:308 +#: pkg/sosreport/sosreport.jsx:317 msgid "Report label" msgstr "Étiquette de rapport" @@ -6617,7 +6614,7 @@ msgid "Reporting was canceled" msgstr "La déclaration a été annulée" -#: pkg/sosreport/sosreport.jsx:485 +#: pkg/sosreport/sosreport.jsx:494 msgid "Reports" msgstr "Rapports" @@ -6672,7 +6669,7 @@ msgid "Reserved memory" msgstr "Mémoire réservée" -#: pkg/systemd/terminal.jsx:183 pkg/systemd/logs.jsx:406 +#: pkg/systemd/logs.jsx:406 pkg/systemd/terminal.jsx:183 msgid "Reset" msgstr "Réinitialiser" @@ -6697,11 +6694,11 @@ msgid "Restart" msgstr "Redémarrer" -#: pkg/packagekit/updates.jsx:525 pkg/packagekit/updates.jsx:539 +#: pkg/packagekit/updates.jsx:524 pkg/packagekit/updates.jsx:538 msgid "Restart services" msgstr "Redémarrage des services" -#: pkg/packagekit/updates.jsx:761 pkg/packagekit/updates.jsx:836 +#: pkg/packagekit/updates.jsx:760 pkg/packagekit/updates.jsx:835 msgid "Restart services..." msgstr "Redémarrer les services..." @@ -6759,7 +6756,7 @@ msgid "Run at" msgstr "Exécuter à" -#: pkg/sosreport/sosreport.jsx:295 +#: pkg/sosreport/sosreport.jsx:304 msgid "Run new report" msgstr "Exécuter un nouveau rapport" @@ -6767,7 +6764,7 @@ msgid "Run on" msgstr "Exécuter sur" -#: pkg/sosreport/sosreport.jsx:273 pkg/sosreport/sosreport.jsx:482 +#: pkg/sosreport/sosreport.jsx:282 pkg/sosreport/sosreport.jsx:491 msgid "Run report" msgstr "Exécuter le rapport" @@ -6780,13 +6777,13 @@ msgid "Runner" msgstr "Exécuteur" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:458 #: pkg/systemd/services.jsx:232 pkg/systemd/services.jsx:236 -#: pkg/systemd/services.jsx:696 pkg/systemd/service-details.jsx:458 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:696 msgid "Running" msgstr "En cours" -#: pkg/storaged/dialog.jsx:1332 pkg/storaged/dialog.jsx:1352 +#: pkg/storaged/dialog.jsx:1334 pkg/storaged/dialog.jsx:1354 msgid "Runtime" msgstr "Temps d’exécution" @@ -6831,7 +6828,7 @@ msgid "SMART self-test of $target" msgstr "SMART auto-test de $target" -#: pkg/sosreport/sosreport.jsx:304 +#: pkg/sosreport/sosreport.jsx:313 msgid "" "SOS reporting collects system information to help with diagnosing problems." msgstr "" @@ -6846,8 +6843,8 @@ msgid "SSH key isn't a path" msgstr "La clé SSH n'est pas un chemin" -#: pkg/shell/credentials.jsx:79 pkg/shell/credentials.jsx:95 -#: pkg/shell/topnav.jsx:218 +#: pkg/shell/topnav.jsx:229 pkg/shell/credentials.jsx:79 +#: pkg/shell/credentials.jsx:95 msgid "SSH keys" msgstr "Clés SSH" @@ -6867,7 +6864,7 @@ msgid "STP priority" msgstr "Priorité STP" -#: pkg/shell/failures.jsx:46 +#: pkg/shell/failures.jsx:45 msgid "" "Safari users need to import and trust the certificate of the self-signing CA:" msgstr "" @@ -6878,16 +6875,15 @@ msgid "Saturdays" msgstr "Samedis" -#: pkg/systemd/timer-dialog.jsx:148 pkg/metrics/metrics.jsx:1478 -#: pkg/networkmanager/dialogs-common.jsx:160 pkg/storaged/stratis/pool.jsx:384 +#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/partitions/partition.jsx:197 +#: pkg/storaged/btrfs/volume.jsx:96 pkg/storaged/crypto/encryption.jsx:168 +#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:531 +#: pkg/storaged/crypto/keyslots.jsx:550 pkg/storaged/stratis/pool.jsx:384 #: pkg/storaged/stratis/pool.jsx:413 pkg/storaged/stratis/pool.jsx:468 -#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/filesystem/mounting-dialog.jsx:340 +#: pkg/storaged/filesystem/mounting-dialog.jsx:358 #: pkg/storaged/filesystem/filesystem.jsx:126 -#: pkg/storaged/crypto/encryption.jsx:168 -#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:497 -#: pkg/storaged/crypto/keyslots.jsx:516 -#: pkg/storaged/partitions/partition.jsx:197 pkg/storaged/btrfs/volume.jsx:96 -#: pkg/packagekit/kpatch.jsx:310 +#: pkg/networkmanager/dialogs-common.jsx:160 pkg/systemd/timer-dialog.jsx:148 +#: pkg/metrics/metrics.jsx:1478 pkg/packagekit/kpatch.jsx:310 msgid "Save" msgstr "Enregistrer" @@ -6895,7 +6891,7 @@ msgid "Save and reboot" msgstr "Enregistrer et redémarrer" -#: pkg/systemd/overview-cards/motdCard.jsx:61 pkg/kdump/kdump-view.jsx:229 +#: pkg/kdump/kdump-view.jsx:229 pkg/systemd/overview-cards/motdCard.jsx:61 #: pkg/packagekit/autoupdates.jsx:269 msgid "Save changes" msgstr "Enregistrer les modifications" @@ -6910,8 +6906,8 @@ "Économiser de l’espace en stockant une seule fois les blocs de données " "identiques" -#: pkg/storaged/crypto/keyslots.jsx:401 pkg/storaged/crypto/keyslots.jsx:456 -#: pkg/storaged/crypto/keyslots.jsx:514 pkg/storaged/crypto/keyslots.jsx:542 +#: pkg/storaged/crypto/keyslots.jsx:435 pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:548 pkg/storaged/crypto/keyslots.jsx:576 msgid "" "Saving a new passphrase requires unlocking the disk. Please provide a " "current disk passphrase." @@ -6955,7 +6951,7 @@ msgid "Seconds" msgstr "Secondes" -#: pkg/systemd/overview-cards/configurationCard.jsx:92 +#: pkg/systemd/overview-cards/configurationCard.jsx:91 msgid "Secure shell keys" msgstr "Clés Secure Shell" @@ -6967,7 +6963,7 @@ msgid "Security Enhanced Linux configuration and troubleshooting" msgstr "Configuration et dépannage de Linux avec renforcement de la sécurité" -#: pkg/packagekit/updates.jsx:1435 +#: pkg/packagekit/updates.jsx:1434 msgid "Security updates available" msgstr "Mises à jour de sécurité disponibles" @@ -7003,7 +6999,7 @@ #: pkg/networkmanager/network-main.jsx:187 #: pkg/networkmanager/network-main.jsx:202 -#: pkg/networkmanager/network-interface-members.jsx:204 +#: pkg/networkmanager/network-interface-members.jsx:209 msgid "Sending" msgstr "Envoi" @@ -7011,9 +7007,9 @@ msgid "Serial number" msgstr "Numéro de série" -#: pkg/static/login.html:159 pkg/networkmanager/ip-settings.jsx:262 -#: pkg/kdump/kdump-view.jsx:267 pkg/kdump/kdump-view.jsx:289 -#: pkg/storaged/nfs/nfs.jsx:328 +#: pkg/static/login.html:159 pkg/storaged/nfs/nfs.jsx:328 +#: pkg/networkmanager/ip-settings.jsx:262 pkg/kdump/kdump-view.jsx:267 +#: pkg/kdump/kdump-view.jsx:289 msgid "Server" msgstr "Serveur" @@ -7029,7 +7025,7 @@ msgid "Server cannot be empty." msgstr "Le serveur ne peut pas être vide." -#: pkg/lib/cockpit.js:3862 +#: pkg/lib/cockpit.js:3858 msgid "Server has closed the connection." msgstr "Le serveur a fermé la connexion." @@ -7037,10 +7033,10 @@ msgid "Server software" msgstr "Logiciels du serveur" +#: pkg/storaged/dialog.jsx:1351 pkg/networkmanager/firewall.jsx:207 #: pkg/metrics/metrics.jsx:812 pkg/metrics/metrics.jsx:813 #: pkg/metrics/metrics.jsx:868 pkg/metrics/metrics.jsx:906 #: pkg/metrics/metrics.jsx:966 pkg/metrics/metrics.jsx:972 -#: pkg/networkmanager/firewall.jsx:207 pkg/storaged/dialog.jsx:1349 msgid "Service" msgstr "Service" @@ -7052,17 +7048,17 @@ msgid "Service logs" msgstr "Journaux de service" -#: pkg/systemd/services.html:4 pkg/systemd/service-tabs.jsx:40 -#: pkg/systemd/service.jsx:151 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/services.html:4 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/service.jsx:151 pkg/systemd/service-tabs.jsx:40 #: pkg/systemd/manifest.json:0 msgid "Services" msgstr "Services" -#: pkg/storaged/dialog.jsx:1157 +#: pkg/storaged/dialog.jsx:1159 msgid "Services using the location" msgstr "Services utilisant l’emplacement" -#: pkg/shell/topnav.jsx:273 +#: pkg/shell/topnav.jsx:303 msgid "Session" msgstr "Session" @@ -7084,8 +7080,8 @@ msgid "Set partition type of $0" msgstr "Créer une partition sur $0" -#: pkg/users/password-dialogs.js:226 pkg/users/password-dialogs.js:233 -#: pkg/users/account-details.js:301 +#: pkg/users/account-details.js:301 pkg/users/password-dialogs.js:226 +#: pkg/users/password-dialogs.js:233 msgid "Set password" msgstr "Définir le mot de passe" @@ -7120,11 +7116,11 @@ msgid "Setting up loop device $target" msgstr "Configuration du périphérique de boucle $target" -#: pkg/packagekit/updates.jsx:919 +#: pkg/packagekit/updates.jsx:918 msgid "Settings" msgstr "Paramètres" -#: pkg/packagekit/updates.jsx:375 pkg/packagekit/updates.jsx:450 +#: pkg/packagekit/updates.jsx:374 pkg/packagekit/updates.jsx:449 msgid "Severity" msgstr "Gravité" @@ -7132,7 +7128,7 @@ msgid "Shared" msgstr "Partagé" -#: pkg/users/account-create-dialog.js:93 pkg/users/account-details.js:329 +#: pkg/users/account-details.js:329 pkg/users/account-create-dialog.js:93 msgid "Shell" msgstr "Interpréteur de commande" @@ -7160,7 +7156,7 @@ msgid "Show confirmation password" msgstr "Confirmer le mot de passe" -#: pkg/systemd/overview-cards/configurationCard.jsx:96 +#: pkg/systemd/overview-cards/configurationCard.jsx:95 msgid "Show fingerprints" msgstr "Afficher les empreintes" @@ -7188,8 +7184,8 @@ msgid "Show relationships" msgstr "Afficher les relations" +#: pkg/storaged/partitions/partition.jsx:101 pkg/storaged/block/resize.jsx:635 #: pkg/storaged/lvm2/block-logical-volume.jsx:205 -#: pkg/storaged/block/resize.jsx:635 pkg/storaged/partitions/partition.jsx:101 msgid "Shrink" msgstr "Réduire" @@ -7197,7 +7193,7 @@ msgid "Shrink logical volume" msgstr "Réduire le volume logique" -#: pkg/storaged/block/resize.jsx:557 pkg/storaged/partitions/partition.jsx:218 +#: pkg/storaged/partitions/partition.jsx:218 pkg/storaged/block/resize.jsx:557 #, fuzzy #| msgid "partition" msgid "Shrink partition" @@ -7212,7 +7208,7 @@ msgid "Shut down" msgstr "Fermeture" -#: pkg/systemd/overview.jsx:114 +#: pkg/systemd/overview.jsx:115 msgid "Shutdown" msgstr "Éteindre" @@ -7220,40 +7216,40 @@ msgid "Since" msgstr "Depuis" -#: pkg/systemd/hw-detect.js:90 pkg/lib/machine-info.js:238 +#: pkg/lib/machine-info.js:238 pkg/systemd/hw-detect.js:90 msgid "Single rank" msgstr "Rang unique" -#: pkg/systemd/hwinfo.jsx:291 pkg/storaged/stratis/pool.jsx:96 -#: pkg/storaged/lvm2/vdo-pool.jsx:79 +#: pkg/storaged/nfs/nfs.jsx:330 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/block/format-dialog.jsx:315 pkg/storaged/block/resize.jsx:448 +#: pkg/storaged/block/resize.jsx:581 pkg/storaged/pages.jsx:717 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:199 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:206 +#: pkg/storaged/lvm2/block-logical-volume.jsx:291 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:49 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:143 -#: pkg/storaged/lvm2/block-logical-volume.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:313 pkg/storaged/block/resize.jsx:448 -#: pkg/storaged/block/resize.jsx:581 pkg/storaged/nfs/nfs.jsx:330 -#: pkg/storaged/pages.jsx:717 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/lvm2/vdo-pool.jsx:79 pkg/storaged/stratis/pool.jsx:96 +#: pkg/systemd/hwinfo.jsx:291 msgid "Size" msgstr "Taille" -#: pkg/storaged/dialog.jsx:1074 +#: pkg/storaged/dialog.jsx:1076 msgid "Size cannot be negative" msgstr "La taille ne peut pas être négative" -#: pkg/storaged/dialog.jsx:1072 +#: pkg/storaged/dialog.jsx:1074 msgid "Size cannot be zero" msgstr "La taille ne peut pas être nulle" -#: pkg/storaged/dialog.jsx:1076 +#: pkg/storaged/dialog.jsx:1078 msgid "Size is too large" msgstr "La taille est trop grande" -#: pkg/storaged/dialog.jsx:1070 +#: pkg/storaged/dialog.jsx:1072 msgid "Size must be a number" msgstr "La taille doit correspondre à un nombre" -#: pkg/storaged/dialog.jsx:1078 +#: pkg/storaged/dialog.jsx:1080 msgid "Size must be at least $0" msgstr "La taille doit être au moins $0" @@ -7269,7 +7265,7 @@ msgid "Slot" msgstr "Emplacement" -#: pkg/storaged/crypto/keyslots.jsx:723 pkg/storaged/mdraid/mdraid-disk.jsx:80 +#: pkg/storaged/crypto/keyslots.jsx:757 pkg/storaged/mdraid/mdraid-disk.jsx:80 msgid "Slot $0" msgstr "Emplacement $0" @@ -7326,7 +7322,7 @@ "Un autre programme utilise actuellement le gestionnaire de paquets, veuillez " "patienter..." -#: pkg/packagekit/updates.jsx:737 pkg/packagekit/updates.jsx:844 +#: pkg/packagekit/updates.jsx:736 pkg/packagekit/updates.jsx:843 #: pkg/packagekit/updates.jsx:1536 msgid "Some software needs to be restarted manually" msgstr "Certains logiciels doivent être redémarrés manuellement" @@ -7367,10 +7363,9 @@ msgid "Stable" msgstr "Stable" +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 pkg/storaged/swap/swap.jsx:98 +#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/mdraid/mdraid.jsx:210 #: pkg/systemd/service-details.jsx:144 -#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/swap/swap.jsx:98 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 -#: pkg/storaged/mdraid/mdraid.jsx:210 msgid "Start" msgstr "Démarrer" @@ -7382,7 +7377,7 @@ msgid "Start multipath" msgstr "Démarrer Multipath" -#: pkg/systemd/service-details.jsx:447 pkg/networkmanager/networkmanager.jsx:78 +#: pkg/networkmanager/networkmanager.jsx:78 pkg/systemd/service-details.jsx:447 msgid "Start service" msgstr "Démarrer le service" @@ -7408,18 +7403,18 @@ msgid "Starting swapspace $target" msgstr "Démarrage de swapspace $target" -#: pkg/systemd/hwinfo.jsx:291 pkg/systemd/services-list.jsx:40 -#: pkg/systemd/services-list.jsx:46 pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/services-list.jsx:40 +#: pkg/systemd/services-list.jsx:46 pkg/systemd/hwinfo.jsx:291 msgid "State" msgstr "État" -#: pkg/systemd/services.jsx:252 pkg/systemd/services.jsx:688 -#: pkg/systemd/service-details.jsx:476 +#: pkg/systemd/service-details.jsx:476 pkg/systemd/services.jsx:252 +#: pkg/systemd/services.jsx:688 msgid "Static" msgstr "Statique" -#: pkg/systemd/service-details.jsx:648 -#: pkg/networkmanager/network-interface.jsx:265 pkg/packagekit/updates.jsx:908 +#: pkg/networkmanager/network-interface.jsx:265 +#: pkg/systemd/service-details.jsx:648 pkg/packagekit/updates.jsx:907 msgid "Status" msgstr "État" @@ -7431,10 +7426,9 @@ msgid "Sticky" msgstr "Persistant" -#: pkg/systemd/service-details.jsx:140 pkg/storaged/swap/swap.jsx:95 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:62 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 -#: pkg/storaged/mdraid/mdraid.jsx:289 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 pkg/storaged/swap/swap.jsx:95 +#: pkg/storaged/mdraid/mdraid.jsx:289 pkg/systemd/service-details.jsx:140 msgid "Stop" msgstr "Arrêter" @@ -7458,7 +7452,7 @@ msgid "Stop editing hosts" msgstr "Arrêter de modifier les hôtes" -#: pkg/sosreport/sosreport.jsx:277 +#: pkg/sosreport/sosreport.jsx:286 msgid "Stop report" msgstr "Arrêter le rapport" @@ -7485,7 +7479,7 @@ msgid "Storage logs" msgstr "Journaux de stockage" -#: pkg/storaged/block/format-dialog.jsx:359 +#: pkg/storaged/block/format-dialog.jsx:361 msgid "Store passphrase" msgstr "Stocker la phrase secrète" @@ -7499,7 +7493,7 @@ msgid "Stratis block device" msgstr "Périphérique Stratis" -#: pkg/storaged/stratis/stopped-pool.jsx:141 pkg/storaged/stratis/pool.jsx:566 +#: pkg/storaged/stratis/pool.jsx:566 pkg/storaged/stratis/stopped-pool.jsx:141 msgid "Stratis block devices" msgstr "Périphérique Stratis" @@ -7527,8 +7521,8 @@ msgid "Stratis filesystems pool" msgstr "Créer un système de fichiers" -#: pkg/storaged/stratis/stopped-pool.jsx:98 pkg/storaged/stratis/pool.jsx:271 -#: pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/pool.jsx:271 pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/stopped-pool.jsx:98 msgid "Stratis pool" msgstr "Pool Stratis" @@ -7542,7 +7536,7 @@ msgid "Striped and mirrored (RAID 10)" msgstr "" -#: pkg/storaged/lvm2/block-logical-volume.jsx:399 +#: pkg/storaged/lvm2/block-logical-volume.jsx:398 msgid "Stripes" msgstr "" @@ -7556,7 +7550,7 @@ msgid "Stub" msgstr "Stub" -#: pkg/shell/topnav.jsx:184 +#: pkg/shell/topnav.jsx:193 msgid "Style" msgstr "Style" @@ -7594,8 +7588,8 @@ msgid "Sundays" msgstr "Dimanches" -#: pkg/metrics/metrics.jsx:130 pkg/metrics/metrics.jsx:725 -#: pkg/metrics/metrics.jsx:1950 pkg/storaged/swap/swap.jsx:88 +#: pkg/storaged/swap/swap.jsx:88 pkg/metrics/metrics.jsx:130 +#: pkg/metrics/metrics.jsx:725 pkg/metrics/metrics.jsx:1950 msgid "Swap" msgstr "Swap" @@ -7609,16 +7603,16 @@ msgid "Swap out" msgstr "Échanger" -#: pkg/networkmanager/network-interface-members.jsx:67 +#: pkg/networkmanager/network-interface-members.jsx:68 msgid "Switch of $0" msgstr "Éteindre $0" -#: pkg/networkmanager/network-interface-members.jsx:87 +#: pkg/networkmanager/network-interface-members.jsx:88 #: pkg/networkmanager/network-interface.jsx:163 msgid "Switch off $0" msgstr "Éteindre $0" -#: pkg/networkmanager/network-interface-members.jsx:78 +#: pkg/networkmanager/network-interface-members.jsx:79 #: pkg/networkmanager/network-interface.jsx:144 msgid "Switch on $0" msgstr "Allumer $0" @@ -7631,7 +7625,7 @@ msgid "Switch to limited access" msgstr "Passer en accès limité" -#: pkg/networkmanager/network-interface-members.jsx:86 +#: pkg/networkmanager/network-interface-members.jsx:87 #: pkg/networkmanager/network-interface.jsx:162 msgid "" "Switching off $0 will break the connection to the server, and will make the " @@ -7640,7 +7634,7 @@ "La désactivation de $0 interrompra la connexion au serveur et rendra " "l’interface utilisateur d’administration indisponible." -#: pkg/networkmanager/network-interface-members.jsx:77 +#: pkg/networkmanager/network-interface-members.jsx:78 #: pkg/networkmanager/network-interface.jsx:143 msgid "" "Switching on $0 will break the connection to the server, and will make the " @@ -7665,16 +7659,16 @@ msgid "Synchronizing MDRAID device $target" msgstr "Synchronisation du périphérique MDRAID $target" -#: pkg/systemd/services.jsx:913 pkg/shell/nav.jsx:46 pkg/shell/indexes.jsx:343 +#: pkg/systemd/services.jsx:912 pkg/shell/indexes.jsx:343 pkg/shell/nav.jsx:46 msgid "System" msgstr "Système" -#: pkg/sosreport/sosreport.jsx:509 +#: pkg/sosreport/sosreport.jsx:518 msgid "System diagnostics" msgstr "Diagnostics du système" -#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 #: pkg/systemd/hwinfo.jsx:315 +#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 msgid "System information" msgstr "Informations sur le système" @@ -7686,7 +7680,7 @@ msgid "System modifications" msgstr "Modifications système" -#: pkg/systemd/overview-cards/configurationCard.jsx:75 +#: pkg/systemd/overview-cards/configurationCard.jsx:74 msgid "System time" msgstr "Heure système" @@ -7702,7 +7696,7 @@ msgid "Tablet" msgstr "Tablette" -#: pkg/storaged/crypto/keyslots.jsx:431 +#: pkg/storaged/crypto/keyslots.jsx:465 msgid "Tang keyserver" msgstr "Serveur de clés Tang" @@ -7769,7 +7763,7 @@ msgid "Testing connection" msgstr "Test de connexion" -#: pkg/storaged/crypto/keyslots.jsx:242 +#: pkg/storaged/crypto/keyslots.jsx:276 msgid "The $0 package is not available from any repository." msgstr "Le paquet $0 n’est disponible dans aucun référentiel." @@ -7777,7 +7771,7 @@ msgid "The $0 package must be installed to create Stratis pools." msgstr "Le paquet $0 doit être installé pour créer des pools Stratis." -#: pkg/storaged/crypto/keyslots.jsx:237 pkg/storaged/crypto/keyslots.jsx:253 +#: pkg/storaged/crypto/keyslots.jsx:271 pkg/storaged/crypto/keyslots.jsx:287 msgid "The $0 package must be installed." msgstr "Le paquet $0 doit être installé." @@ -7853,14 +7847,14 @@ "La création de ce périphérique VDO n’est pas terminée et l’appareil ne peut " "pas être utilisé." -#: pkg/storaged/crypto/keyslots.jsx:696 +#: pkg/storaged/crypto/keyslots.jsx:730 msgid "" "The currently logged in user is not permitted to see information about keys." msgstr "" "L’utilisateur actuellement connecté n’est pas autorisé à voir les " "informations sur les clés." -#: pkg/storaged/block/format-dialog.jsx:369 +#: pkg/storaged/block/format-dialog.jsx:371 msgid "" "The disk needs to be unlocked before formatting. Please provide a existing " "passphrase." @@ -7868,7 +7862,7 @@ "Le disque doit être déverrouillé avant d'être formaté. Veuillez fournir une " "phrase secrète existante." -#: pkg/sosreport/sosreport.jsx:370 +#: pkg/sosreport/sosreport.jsx:379 msgid "The file $0 will be deleted." msgstr "Le fichier $0 sera supprimé." @@ -7940,7 +7934,7 @@ msgid "The fingerprint should match:" msgstr "Afficher les empreintes" -#: pkg/packagekit/updates.jsx:515 +#: pkg/packagekit/updates.jsx:514 msgid "The following service will be restarted:" msgid_plural "The following services will be restarted:" msgstr[0] "Le service suivant sera redémarré :" @@ -7970,7 +7964,7 @@ "Le répertoire personnel $0 existe déjà. Son propriétaire sera le nouvel " "utilisateur." -#: pkg/storaged/crypto/keyslots.jsx:274 +#: pkg/storaged/crypto/keyslots.jsx:308 msgid "The initrd must be regenerated." msgstr "L'initrd doit être régénéré." @@ -7986,19 +7980,19 @@ msgid "The key you provided was not valid." msgstr "La clé que vous avez fournie n’était pas valide." -#: pkg/storaged/crypto/keyslots.jsx:736 +#: pkg/storaged/crypto/keyslots.jsx:770 msgid "The last key slot can not be removed" msgstr "Le dernier logement de clé ne peut pas être retiré" -#: pkg/storaged/dialog.jsx:1367 +#: pkg/storaged/dialog.jsx:1369 msgid "The listed processes and services will be forcefully stopped." msgstr "Les processus et services listés seront stoppés en force." -#: pkg/storaged/dialog.jsx:1369 +#: pkg/storaged/dialog.jsx:1371 msgid "The listed processes will be forcefully stopped." msgstr "Les processus énumérés seront stoppés en force." -#: pkg/storaged/dialog.jsx:1371 +#: pkg/storaged/dialog.jsx:1373 msgid "The listed services will be forcefully stopped." msgstr "Les services répertoriés seront stoppés en force." @@ -8012,11 +8006,11 @@ msgid "The machine is rebooting" msgstr "La machine est en train de redémarrer" -#: pkg/storaged/dialog.jsx:1325 +#: pkg/storaged/dialog.jsx:1327 msgid "The mount point $0 is in use by these processes:" msgstr "Le point de montage $0 est utilisé par ces processus :" -#: pkg/storaged/dialog.jsx:1345 +#: pkg/storaged/dialog.jsx:1347 msgid "The mount point $0 is in use by these services:" msgstr "Le point de montage $0 est utilisé par ces services :" @@ -8060,13 +8054,13 @@ "par mot de passe, et aucune autre méthode d’authentification prise en charge " "n’est disponible." -#: pkg/lib/cockpit.js:3846 +#: pkg/lib/cockpit.js:3842 msgid "The server refused to authenticate using any supported methods." msgstr "" "Le serveur a refusé d’authentifier en utilisant des méthodes prises en " "charge." -#: pkg/storaged/crypto/keyslots.jsx:391 +#: pkg/storaged/crypto/keyslots.jsx:425 msgid "" "The system does not currently support unlocking a filesystem with a Tang " "keyserver during boot." @@ -8074,7 +8068,7 @@ "Le système ne prend pas actuellement en charge le déverrouillage d'un " "système de fichiers avec un serveur de clés Tang pendant le démarrage." -#: pkg/storaged/crypto/keyslots.jsx:390 +#: pkg/storaged/crypto/keyslots.jsx:424 msgid "" "The system does not currently support unlocking the root filesystem with a " "Tang keyserver." @@ -8155,19 +8149,19 @@ "At least $0 are required but only $1 are available." msgstr "" -#: pkg/shell/failures.jsx:42 +#: pkg/shell/failures.jsx:41 msgid "There was an unexpected error while connecting to the machine." msgstr "Il y a eu une erreur inattendue lors de la connexion à la machine." -#: pkg/storaged/crypto/keyslots.jsx:395 +#: pkg/storaged/crypto/keyslots.jsx:429 msgid "These additional steps are necessary:" msgstr "Ces étapes supplémentaires sont nécessaires :" -#: pkg/storaged/dialog.jsx:1239 +#: pkg/storaged/dialog.jsx:1241 msgid "These changes will be made:" msgstr "Ces changements seront effectués :" -#: pkg/storaged/utils.js:286 +#: pkg/storaged/utils.js:287 msgid "Thin logical volume" msgstr "Volume logique dynamique" @@ -8194,8 +8188,8 @@ msgid "This VDO device does not use all of its backing device." msgstr "Ce périphérique VDO n’utilise pas tout son périphérique de sauvegarde." -#: pkg/storaged/block/format-dialog.jsx:244 -#: pkg/storaged/filesystem/mounting-dialog.jsx:156 +#: pkg/storaged/block/format-dialog.jsx:246 +#: pkg/storaged/filesystem/mounting-dialog.jsx:159 #, fuzzy #| msgid "This device cannot be managed here." msgid "This device can not be used for the installation target." @@ -8205,7 +8199,7 @@ msgid "This device cannot be managed here." msgstr "Ce périphérique ne peut pas être géré ici." -#: pkg/storaged/dialog.jsx:1134 +#: pkg/storaged/dialog.jsx:1136 msgid "This device is currently in use." msgstr "Ce périphérique est actuellement en cours d’utilisation." @@ -8222,7 +8216,7 @@ msgid "This host will reboot after updates are installed." msgstr "Cet hôte redémarrera après l’installation des mises à jour." -#: pkg/sosreport/sosreport.jsx:305 +#: pkg/sosreport/sosreport.jsx:314 msgid "This information is stored only on the system." msgstr "Ces informations sont stockées uniquement sur le système." @@ -8284,7 +8278,7 @@ msgid "This pool is in a degraded state." msgstr "Le RAID Array est dans un état dégradé" -#: pkg/packagekit/updates.jsx:1373 +#: pkg/packagekit/updates.jsx:1372 msgid "This system is not registered" msgstr "Ce système n’est pas enregistré" @@ -8447,7 +8441,7 @@ "Pour vous assurer que votre connexion n’est pas interceptée par un tiers " "malveillant, veuillez vérifier l’empreinte de la clé de l’hôte :" -#: pkg/packagekit/updates.jsx:1376 +#: pkg/packagekit/updates.jsx:1375 msgid "" "To get software updates, this system needs to be registered with Red Hat, " "either using the Red Hat Customer Portal or a local subscription server." @@ -8456,7 +8450,7 @@ "auprès de Red Hat, en utilisant le portail client Red Hat ou un serveur " "d’abonnement local." -#: pkg/static/login.js:768 pkg/shell/hosts_dialog.jsx:477 +#: pkg/shell/hosts_dialog.jsx:477 pkg/static/login.js:768 msgid "" "To verify a fingerprint, run the following on $0 while physically sitting at " "the machine or through a trusted network:" @@ -8473,8 +8467,8 @@ msgid "Toggle" msgstr "Basculer" -#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 #: pkg/lib/cockpit-components-shutdown.jsx:212 pkg/lib/serverTime.js:600 +#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 msgid "Toggle date picker" msgstr "Basculer le sélecteur de date" @@ -8482,7 +8476,7 @@ msgid "Toggle filters" msgstr "Basculer les filtres" -#: pkg/lib/cockpit.js:3868 +#: pkg/lib/cockpit.js:3864 msgid "Too much data" msgstr "Trop de données" @@ -8544,7 +8538,7 @@ msgid "Trust and add host" msgstr "Hôte non sécurisé" -#: pkg/storaged/stratis/utils.jsx:86 pkg/storaged/crypto/keyslots.jsx:544 +#: pkg/storaged/crypto/keyslots.jsx:578 pkg/storaged/stratis/utils.jsx:86 msgid "Trust key" msgstr "Clé de confiance" @@ -8595,12 +8589,12 @@ msgid "Turn on administrative access" msgstr "Activez l’accès administrateur" -#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:308 -#: pkg/storaged/block/unrecognized-data.jsx:52 pkg/storaged/pages.jsx:715 #: pkg/storaged/partitions/partition.jsx:183 -#: pkg/storaged/partitions/partition.jsx:229 pkg/shell/credentials.jsx:199 -#: pkg/packagekit/autoupdates.jsx:279 +#: pkg/storaged/partitions/partition.jsx:229 +#: pkg/storaged/block/format-dialog.jsx:310 +#: pkg/storaged/block/unrecognized-data.jsx:51 pkg/storaged/pages.jsx:715 +#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 +#: pkg/shell/credentials.jsx:199 pkg/packagekit/autoupdates.jsx:279 msgid "Type" msgstr "Type" @@ -8626,12 +8620,11 @@ msgid "UDP" msgstr "UDP" -#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/stratis/pool.jsx:519 -#: pkg/storaged/lvm2/volume-group.jsx:386 +#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/btrfs/volume.jsx:127 +#: pkg/storaged/btrfs/device.jsx:78 pkg/storaged/btrfs/filesystem.jsx:77 #: pkg/storaged/lvm2/physical-volume.jsx:117 -#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/mdraid/mdraid.jsx:291 -#: pkg/storaged/btrfs/volume.jsx:127 pkg/storaged/btrfs/device.jsx:78 -#: pkg/storaged/btrfs/filesystem.jsx:77 +#: pkg/storaged/lvm2/volume-group.jsx:386 pkg/storaged/stratis/pool.jsx:519 +#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/mdraid/mdraid.jsx:291 msgid "UUID" msgstr "UUID" @@ -8723,7 +8716,7 @@ msgid "Undo" msgstr "Annuler" -#: pkg/storaged/crypto/keyslots.jsx:258 +#: pkg/storaged/crypto/keyslots.jsx:292 msgid "Unexpected PackageKit error during installation of $0: $1" msgstr "Erreur PackageKit inattendue lors de l'installation de $0 : $1" @@ -8732,27 +8725,27 @@ msgid "Unexpected error" msgstr "Erreur inattendue" -#: pkg/storaged/block/unformatted-data.jsx:31 +#: pkg/storaged/block/unformatted-data.jsx:30 #, fuzzy #| msgid "Unrecognized data" msgid "Unformatted data" msgstr "Données non reconnues" -#: pkg/systemd/logs.jsx:368 pkg/systemd/services-list.jsx:39 -#: pkg/systemd/services-list.jsx:44 +#: pkg/systemd/services-list.jsx:39 pkg/systemd/services-list.jsx:44 +#: pkg/systemd/logs.jsx:368 msgid "Unit" msgstr "Unité" -#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 -#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 -#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 +#: pkg/storaged/swap/swap.jsx:116 pkg/networkmanager/interfaces.js:510 +#: pkg/networkmanager/interfaces.js:1035 #: pkg/networkmanager/network-interface.jsx:199 -#: pkg/networkmanager/network-interface.jsx:201 -#: pkg/networkmanager/interfaces.js:510 pkg/networkmanager/interfaces.js:1035 -#: pkg/storaged/swap/swap.jsx:116 pkg/lib/machine-info.js:61 +#: pkg/networkmanager/network-interface.jsx:201 pkg/lib/machine-info.js:61 #: pkg/lib/machine-info.js:226 pkg/lib/machine-info.js:234 #: pkg/lib/machine-info.js:236 pkg/lib/machine-info.js:243 #: pkg/lib/machine-info.js:245 pkg/lib/machine-info.js:249 +#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 +#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 +#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 msgid "Unknown" msgstr "Inconnu" @@ -8781,14 +8774,13 @@ msgid "Unknown service name" msgstr "Nom de service inconnu" -#: pkg/storaged/crypto/keyslots.jsx:760 +#: pkg/storaged/crypto/keyslots.jsx:794 msgid "Unknown type" msgstr "Type inconnu" -#: pkg/storaged/stratis/stopped-pool.jsx:61 -#: pkg/storaged/crypto/locked-encrypted-data.jsx:37 -#: pkg/storaged/crypto/actions.jsx:41 pkg/storaged/crypto/actions.jsx:46 -#: pkg/shell/credentials.jsx:312 +#: pkg/storaged/crypto/locked-encrypted-data.jsx:36 +#: pkg/storaged/crypto/actions.jsx:40 pkg/storaged/crypto/actions.jsx:45 +#: pkg/storaged/stratis/stopped-pool.jsx:61 pkg/shell/credentials.jsx:312 msgid "Unlock" msgstr "Déverrouiller" @@ -8812,7 +8804,7 @@ msgid "Unlocking $target" msgstr "Déverrouillage $target" -#: pkg/storaged/crypto/keyslots.jsx:188 +#: pkg/storaged/crypto/keyslots.jsx:221 msgid "Unlocking disk" msgstr "Déverrouillage du disque" @@ -8821,14 +8813,14 @@ msgid "Unmanaged interfaces" msgstr "Interfaces non gérées" -#: pkg/storaged/stratis/filesystem.jsx:172 pkg/storaged/nfs/nfs.jsx:309 -#: pkg/storaged/filesystem/mounting-dialog.jsx:339 +#: pkg/storaged/nfs/nfs.jsx:309 pkg/storaged/btrfs/subvolume.jsx:338 +#: pkg/storaged/stratis/filesystem.jsx:172 +#: pkg/storaged/filesystem/mounting-dialog.jsx:357 #: pkg/storaged/filesystem/filesystem.jsx:102 -#: pkg/storaged/btrfs/subvolume.jsx:338 msgid "Unmount" msgstr "Démonter" -#: pkg/storaged/filesystem/mounting-dialog.jsx:333 +#: pkg/storaged/filesystem/mounting-dialog.jsx:351 msgid "Unmount filesystem $0" msgstr "Démonter le système de fichiers $0" @@ -8849,7 +8841,7 @@ msgid "Unpin unit" msgstr "Débrocher l'unité" -#: pkg/storaged/block/unrecognized-data.jsx:35 +#: pkg/storaged/block/unrecognized-data.jsx:34 msgid "Unrecognized data" msgstr "Données non reconnues" @@ -8871,7 +8863,7 @@ msgid "Until" msgstr "Jusqu’à" -#: pkg/lib/cockpit.js:3848 pkg/lib/cockpit.js:3850 +#: pkg/lib/cockpit.js:3844 pkg/lib/cockpit.js:3846 msgid "Untrusted host" msgstr "Hôte non sécurisé" @@ -8879,11 +8871,11 @@ msgid "Update" msgstr "Mise à jour" -#: pkg/packagekit/updates.jsx:754 +#: pkg/packagekit/updates.jsx:753 msgid "Update Success Table" msgstr "Mise à jour du tableau des réussites" -#: pkg/packagekit/updates.jsx:957 +#: pkg/packagekit/updates.jsx:956 msgid "Update history" msgstr "Mise à jour Historique" @@ -8891,7 +8883,7 @@ msgid "Update package information" msgstr "Mise à jour des informations sur le paquet" -#: pkg/packagekit/updates.jsx:679 pkg/packagekit/updates.jsx:749 +#: pkg/packagekit/updates.jsx:678 pkg/packagekit/updates.jsx:748 msgid "Update was successful" msgstr "La mise à jour est réussie" @@ -8899,12 +8891,12 @@ msgid "Updated" msgstr "Actualisé" -#: pkg/packagekit/updates.jsx:682 +#: pkg/packagekit/updates.jsx:681 msgid "Updated packages may require a reboot to take effect." msgstr "" "Les paquets mis à jour peuvent nécessiter un redémarrage pour prendre effet." -#: pkg/packagekit/updates.jsx:1441 +#: pkg/packagekit/updates.jsx:1440 msgid "Updates available" msgstr "Mises à jour disponibles" @@ -8928,13 +8920,15 @@ msgid "Uptime" msgstr "Durée de fonctionnement" +#: pkg/storaged/btrfs/volume.jsx:129 pkg/storaged/btrfs/device.jsx:80 +#: pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/storaged/block/unrecognized-data.jsx:50 +#: pkg/storaged/lvm2/physical-volume.jsx:119 pkg/storaged/stratis/pool.jsx:521 +#: pkg/storaged/stratis/filesystem.jsx:226 +#: pkg/storaged/filesystem/filesystem.jsx:152 #: pkg/systemd/overview-cards/usageCard.jsx:127 pkg/metrics/metrics.jsx:1949 #: pkg/metrics/metrics.jsx:1950 pkg/metrics/metrics.jsx:1951 -#: pkg/metrics/metrics.jsx:1952 pkg/storaged/stratis/filesystem.jsx:226 -#: pkg/storaged/stratis/pool.jsx:521 pkg/storaged/lvm2/physical-volume.jsx:119 -#: pkg/storaged/block/unrecognized-data.jsx:51 -#: pkg/storaged/filesystem/filesystem.jsx:152 pkg/storaged/btrfs/volume.jsx:129 -#: pkg/storaged/btrfs/device.jsx:80 pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/metrics/metrics.jsx:1952 msgid "Usage" msgstr "Utilisation" @@ -8942,16 +8936,16 @@ msgid "Usage of $0" msgstr "Utilisation de $0" -#: pkg/networkmanager/dialogs-common.jsx:103 pkg/storaged/dialog.jsx:624 -#: pkg/storaged/dialog.jsx:1139 +#: pkg/storaged/dialog.jsx:624 pkg/storaged/dialog.jsx:1141 +#: pkg/networkmanager/dialogs-common.jsx:103 msgid "Use" msgstr "Utiliser" -#: pkg/storaged/lvm2/vdo-pool.jsx:85 pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 pkg/storaged/lvm2/vdo-pool.jsx:85 msgid "Use compression" msgstr "Utiliser la compression" -#: pkg/storaged/lvm2/vdo-pool.jsx:89 pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 pkg/storaged/lvm2/vdo-pool.jsx:89 msgid "Use deduplication" msgstr "Déduplication" @@ -8967,23 +8961,23 @@ msgid "Use the following keys to authenticate against other systems" msgstr "Utilisez les clés suivantes pour vous authentifier à d’autres systèmes" -#: pkg/sosreport/sosreport.jsx:324 +#: pkg/sosreport/sosreport.jsx:333 msgid "Use verbose logging" msgstr "Utiliser la journalisation verbeuse" -#: pkg/metrics/metrics.jsx:813 pkg/metrics/metrics.jsx:907 -#: pkg/storaged/swap/swap.jsx:125 +#: pkg/storaged/swap/swap.jsx:125 pkg/metrics/metrics.jsx:813 +#: pkg/metrics/metrics.jsx:907 msgid "Used" msgstr "Utilisé" -#: pkg/storaged/filesystem/mounting-dialog.jsx:110 +#: pkg/storaged/filesystem/mounting-dialog.jsx:113 msgid "" "Useful for mounts that are optional or need interaction (such as passphrases)" msgstr "" "Utile pour les montages facultatifs ou nécessitant une interaction (comme " "les phrases de passe)" -#: pkg/systemd/services.jsx:917 pkg/storaged/dialog.jsx:1331 +#: pkg/storaged/dialog.jsx:1333 pkg/systemd/services.jsx:916 msgid "User" msgstr "Utilisateur" @@ -9009,7 +9003,7 @@ msgstr "L'ID de l'utilisateur ne doit pas être inférieur à $0" #: pkg/static/login.html:94 pkg/shell/hosts_dialog.jsx:264 -#: pkg/users/account-create-dialog.js:76 pkg/users/account-details.js:262 +#: pkg/users/account-details.js:262 pkg/users/account-create-dialog.js:76 msgid "User name" msgstr "Nom d’utilisateur" @@ -9034,7 +9028,7 @@ msgid "VDO backing devices can not be made smaller" msgstr "Les sauvegardes VDO ne peuvent pas être plus petits" -#: pkg/storaged/utils.js:345 pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 pkg/storaged/utils.js:346 msgid "VDO device $0" msgstr "Périphérique VDO $0" @@ -9060,7 +9054,7 @@ msgid "Validating authentication token" msgstr "Validation du jeton d’authentification" -#: pkg/systemd/hwinfo.jsx:278 pkg/storaged/drive/drive.jsx:120 +#: pkg/storaged/drive/drive.jsx:120 pkg/systemd/hwinfo.jsx:278 msgid "Vendor" msgstr "Fournisseur" @@ -9072,7 +9066,7 @@ msgid "Verify fingerprint" msgstr "Vérifier l'empreinte digitale" -#: pkg/storaged/stratis/utils.jsx:83 pkg/storaged/crypto/keyslots.jsx:540 +#: pkg/storaged/crypto/keyslots.jsx:574 pkg/storaged/stratis/utils.jsx:83 msgid "Verify key" msgstr "Vérifier la clé" @@ -9080,7 +9074,7 @@ msgid "Verifying" msgstr "Vérification" -#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:449 +#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:448 msgid "Version" msgstr "Version" @@ -9104,8 +9098,8 @@ msgid "View all services" msgstr "Voir tous les services" -#: pkg/kdump/kdump-view.jsx:526 #: pkg/lib/cockpit-components-modifications.jsx:154 +#: pkg/kdump/kdump-view.jsx:526 msgid "View automation script" msgstr "Afficher le script d’automation" @@ -9143,7 +9137,7 @@ msgid "View report" msgstr "Voir le rapport" -#: pkg/packagekit/updates.jsx:619 +#: pkg/packagekit/updates.jsx:618 msgid "View update log" msgstr "Afficher le journal des mises à jour" @@ -9162,8 +9156,8 @@ msgid "Volume group" msgstr "Groupe de volumes" -#: pkg/storaged/lvm2/volume-group.jsx:223 #: pkg/storaged/lvm2/physical-volume.jsx:71 +#: pkg/storaged/lvm2/volume-group.jsx:223 #, fuzzy #| msgid "Removing physical volume from $target" msgid "Volume group is missing physical volumes" @@ -9192,7 +9186,7 @@ "En attente d’autres programmes pour terminer l’utilisation du gestionnaire " "de paquets..." -#: pkg/storaged/crypto/keyslots.jsx:216 +#: pkg/storaged/crypto/keyslots.jsx:250 #: pkg/lib/cockpit-components-install-dialog.jsx:150 #: pkg/lib/cockpit-components-install-dialog.jsx:185 msgid "Waiting for other software management operations to finish" @@ -9228,7 +9222,7 @@ msgid "Web Console for Linux servers" msgstr "Console web pour serveurs Linux" -#: pkg/packagekit/updates.jsx:530 pkg/packagekit/updates.jsx:935 +#: pkg/packagekit/updates.jsx:529 pkg/packagekit/updates.jsx:934 msgid "Web Console will restart" msgstr "La console Web va redémarrer" @@ -9260,7 +9254,7 @@ msgid "When empty, connect with the current user" msgstr "Lorsqu’il est vide, connectez-vous avec l’utilisateur actuel" -#: pkg/packagekit/updates.jsx:533 pkg/packagekit/updates.jsx:940 +#: pkg/packagekit/updates.jsx:532 pkg/packagekit/updates.jsx:939 msgid "" "When the Web Console is restarted, you will no longer see progress " "information. However, the update process will continue in the background. " @@ -9324,11 +9318,11 @@ msgid "Yearly" msgstr "Annuel" -#: pkg/systemd/reporting.jsx:281 pkg/networkmanager/network-interface.jsx:241 +#: pkg/networkmanager/network-interface.jsx:241 pkg/systemd/reporting.jsx:281 msgid "Yes" msgstr "Oui" -#: pkg/static/login.js:765 pkg/shell/hosts_dialog.jsx:488 +#: pkg/shell/hosts_dialog.jsx:488 pkg/static/login.js:765 msgid "You are connecting to $0 for the first time." msgstr "Vous vous connectez à $0 pour la première fois." @@ -9400,11 +9394,11 @@ "Votre serveur fermera la connexion bientôt. Vous pouvez vous reconnecter " "après le redémarrage." -#: pkg/lib/cockpit.js:3838 +#: pkg/lib/cockpit.js:3834 msgid "Your session has been terminated." msgstr "Votre session a été interrompue." -#: pkg/lib/cockpit.js:3840 +#: pkg/lib/cockpit.js:3836 msgid "Your session has expired. Please log in again." msgstr "Votre session a expiré. Veuillez vous reconnecter." @@ -9470,7 +9464,7 @@ msgid "average: $0%" msgstr "moyenne : $0%" -#: pkg/storaged/dialog.jsx:1116 +#: pkg/storaged/dialog.jsx:1118 msgid "backing device for VDO device" msgstr "périphérique de sauvegarde pour périphérique VDO" @@ -9523,7 +9517,7 @@ msgstr "" #: pkg/storaged/btrfs/volume.jsx:146 pkg/storaged/btrfs/volume.jsx:158 -#: pkg/storaged/btrfs/filesystem.jsx:87 pkg/storaged/btrfs/subvolume.jsx:424 +#: pkg/storaged/btrfs/subvolume.jsx:424 pkg/storaged/btrfs/filesystem.jsx:87 #, fuzzy #| msgid "Storage volumes" msgid "btrfs subvolumes" @@ -9535,11 +9529,11 @@ msgid "btrfs volume" msgstr "Volume de stockage" -#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:318 msgid "bug fix" msgstr "Correctif de bogue" -#: pkg/storaged/utils.js:175 +#: pkg/storaged/utils.js:176 msgctxt "format-bytes" msgid "bytes" msgstr "octets" @@ -9580,7 +9574,7 @@ msgid "cpu" msgstr "processeur" -#: pkg/systemd/manifest.json:0 pkg/kdump/manifest.json:0 +#: pkg/kdump/manifest.json:0 pkg/systemd/manifest.json:0 msgid "crash" msgstr "plantage" @@ -9604,18 +9598,19 @@ msgid "debug" msgstr "déboguer" -#: pkg/storaged/stratis/filesystem.jsx:121 pkg/storaged/stratis/pool.jsx:133 -#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 -#: pkg/storaged/lvm2/block-logical-volume.jsx:64 -#: pkg/storaged/block/format-dialog.jsx:208 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 +#: pkg/storaged/partitions/partition.jsx:43 #: pkg/storaged/partitions/format-disk-dialog.jsx:35 -#: pkg/storaged/partitions/partition.jsx:43 pkg/storaged/mdraid/mdraid.jsx:112 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 #: pkg/storaged/btrfs/subvolume.jsx:217 +#: pkg/storaged/block/format-dialog.jsx:208 +#: pkg/storaged/lvm2/block-logical-volume.jsx:64 +#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 +#: pkg/storaged/stratis/pool.jsx:133 pkg/storaged/stratis/filesystem.jsx:121 +#: pkg/storaged/mdraid/mdraid.jsx:112 msgid "delete" msgstr "supprimer" -#: pkg/storaged/dialog.jsx:1119 +#: pkg/storaged/dialog.jsx:1121 msgid "device of btrfs volume" msgstr "" @@ -9647,19 +9642,19 @@ msgid "drive" msgstr "disque" -#: pkg/systemd/overview-cards/configurationCard.jsx:55 -#: pkg/networkmanager/network-interface.jsx:349 -#: pkg/networkmanager/dialogs-common.jsx:262 -#: pkg/storaged/stratis/filesystem.jsx:220 pkg/storaged/stratis/pool.jsx:517 -#: pkg/storaged/lvm2/volume-group.jsx:384 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 +#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/storaged/crypto/encryption.jsx:233 +#: pkg/storaged/crypto/encryption.jsx:236 #: pkg/storaged/lvm2/block-logical-volume.jsx:288 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/lvm2/volume-group.jsx:384 pkg/storaged/stratis/pool.jsx:517 +#: pkg/storaged/stratis/filesystem.jsx:220 +#: pkg/storaged/filesystem/utils.jsx:221 #: pkg/storaged/filesystem/filesystem.jsx:145 -#: pkg/storaged/filesystem/utils.jsx:221 pkg/storaged/crypto/encryption.jsx:233 -#: pkg/storaged/crypto/encryption.jsx:236 -#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 -#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/users/account-details.js:291 -#: pkg/users/account-details.js:321 +#: pkg/networkmanager/dialogs-common.jsx:261 +#: pkg/networkmanager/network-interface.jsx:349 +#: pkg/systemd/overview-cards/configurationCard.jsx:55 +#: pkg/users/account-details.js:291 pkg/users/account-details.js:321 msgid "edit" msgstr "modifier" @@ -9677,7 +9672,7 @@ msgid "encryption" msgstr "chiffrement" -#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:318 msgid "enhancement" msgstr "amélioration" @@ -9721,7 +9716,7 @@ msgid "extension" msgstr "extension" -#: pkg/systemd/overview-cards/configurationCard.jsx:153 +#: pkg/systemd/overview-cards/configurationCard.jsx:151 msgid "failed to list ssh host keys: $0" msgstr "échec de listage des clés de l’hôte SSH : $0" @@ -9889,13 +9884,13 @@ msgid "max: $0%" msgstr "max : $0%" -#: pkg/storaged/dialog.jsx:1115 +#: pkg/storaged/dialog.jsx:1117 #, fuzzy #| msgid "member of RAID device" msgid "member of MDRAID device" msgstr "membre du périphérique RAID" -#: pkg/storaged/dialog.jsx:1117 +#: pkg/storaged/dialog.jsx:1119 msgid "member of Stratis pool" msgstr "membre du pool Stratis" @@ -9919,7 +9914,7 @@ msgid "more details" msgstr "Plus de détails" -#: pkg/storaged/utils.js:887 pkg/storaged/manifest.json:0 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "mount" msgstr "monter" @@ -9927,7 +9922,7 @@ msgid "nbde" msgstr "nbde" -#: pkg/systemd/manifest.json:0 pkg/networkmanager/manifest.json:0 +#: pkg/networkmanager/manifest.json:0 pkg/systemd/manifest.json:0 msgid "network" msgstr "réseau" @@ -9955,11 +9950,11 @@ msgid "nice" msgstr "nice" -#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 -#: pkg/storaged/stratis/stopped-pool.jsx:130 -#: pkg/storaged/stratis/stopped-pool.jsx:134 #: pkg/storaged/crypto/encryption.jsx:232 #: pkg/storaged/crypto/encryption.jsx:235 +#: pkg/storaged/stratis/stopped-pool.jsx:130 +#: pkg/storaged/stratis/stopped-pool.jsx:134 +#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 msgid "none" msgstr "aucun" @@ -10006,7 +10001,7 @@ msgid "password quality" msgstr "qualité mot de passe" -#: pkg/packagekit/updates.jsx:344 +#: pkg/packagekit/updates.jsx:343 msgid "patches" msgstr "correctifs" @@ -10026,7 +10021,7 @@ msgid "performance" msgstr "performance" -#: pkg/storaged/dialog.jsx:1114 +#: pkg/storaged/dialog.jsx:1116 msgid "physical volume of LVM2 volume group" msgstr "volume physique du groupe de volumes LVM2" @@ -10074,17 +10069,17 @@ msgid "recommended" msgstr "conseillé" -#: pkg/storaged/utils.js:946 +#: pkg/storaged/utils.js:947 msgid "remove from LVM2" msgstr "retirer de LVM2" -#: pkg/storaged/utils.js:935 +#: pkg/storaged/utils.js:936 #, fuzzy #| msgid "remove from RAID" msgid "remove from MDRAID" msgstr "retirer du RAID" -#: pkg/storaged/utils.js:905 +#: pkg/storaged/utils.js:906 #, fuzzy #| msgid "remove from LVM2" msgid "remove from btrfs volume" @@ -10098,11 +10093,11 @@ msgid "roles" msgstr "rôles" -#: pkg/systemd/overview.jsx:159 +#: pkg/systemd/overview.jsx:169 msgid "running $0" msgstr "$0 en cours d’exécution" -#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:311 +#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:310 #: pkg/packagekit/manifest.json:0 msgid "security" msgstr "sécurité" @@ -10178,7 +10173,7 @@ msgid "ssh server is empty" msgstr "le serveur SSH est vide" -#: pkg/storaged/utils.js:924 pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 pkg/storaged/utils.js:925 #: pkg/storaged/mdraid/mdraid.jsx:59 msgid "stop" msgstr "arrêter" @@ -10241,8 +10236,8 @@ msgid "unit" msgstr "unité" -#: pkg/systemd/services.jsx:555 pkg/systemd/services.jsx:565 -#: pkg/systemd/hw-detect.js:129 +#: pkg/systemd/hw-detect.js:129 pkg/systemd/services.jsx:555 +#: pkg/systemd/services.jsx:565 msgid "unknown" msgstr "inconnu" @@ -10254,12 +10249,12 @@ msgid "unmask" msgstr "unmask" -#: pkg/storaged/utils.js:874 pkg/storaged/utils.js:887 -#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/manifest.json:0 +#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/utils.js:875 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "unmount" msgstr "Démonter" -#: pkg/storaged/utils.js:533 +#: pkg/storaged/utils.js:534 msgid "unpartitioned space on $0" msgstr "espace non partitionné sur $0" diff -Nru cockpit-314/po/he.po cockpit-316/po/he.po --- cockpit-314/po/he.po 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/po/he.po 2024-04-25 09:45:58.000000000 +0000 @@ -24,7 +24,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-26 02:47+0000\n" +"POT-Creation-Date: 2024-04-11 02:47+0000\n" "PO-Revision-Date: 2023-11-22 21:01+0000\n" "Last-Translator: Yaron Shahrabani \n" "Language-Team: Hebrew \n" "Language-Team: Italian $0è autorizzato a modificare i regni" -#: pkg/lib/cockpit.js:3842 +#: pkg/lib/cockpit.js:3838 msgid "Not permitted to perform this action." msgstr "Non è consentito eseguire questa azione." @@ -5527,13 +5526,13 @@ msgid "Not ready" msgstr "Non pronto" -#: pkg/packagekit/updates.jsx:1366 +#: pkg/packagekit/updates.jsx:1365 msgid "Not registered" msgstr "Non Registrato" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:466 #: pkg/systemd/services.jsx:234 pkg/systemd/services.jsx:237 -#: pkg/systemd/services.jsx:697 pkg/systemd/service-details.jsx:466 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:697 msgid "Not running" msgstr "Non in esecuzione" @@ -5557,11 +5556,11 @@ msgid "Notice and above" msgstr "Notice e oltre" -#: pkg/sosreport/sosreport.jsx:322 +#: pkg/sosreport/sosreport.jsx:331 msgid "Obfuscate network addresses, hostnames, and usernames" msgstr "Offuscare indirizzi di rete, nomi host e nomi utente" -#: pkg/sosreport/sosreport.jsx:443 +#: pkg/sosreport/sosreport.jsx:452 msgid "Obfuscated" msgstr "Offuscato" @@ -5573,8 +5572,8 @@ msgid "Occurred between $0 and $1" msgstr "Si è verificato tra $0 e $1" -#: pkg/selinux/setroubleshoot-view.jsx:414 #: pkg/lib/cockpit-components-logs-panel.jsx:98 +#: pkg/selinux/setroubleshoot-view.jsx:414 msgid "Occurrences" msgstr "Occorrenze" @@ -5582,7 +5581,7 @@ msgid "Ok" msgstr "Ok" -#: pkg/storaged/stratis/pool.jsx:402 pkg/storaged/crypto/keyslots.jsx:482 +#: pkg/storaged/crypto/keyslots.jsx:516 pkg/storaged/stratis/pool.jsx:402 msgid "Old passphrase" msgstr "Vecchia frase di accesso" @@ -5590,7 +5589,7 @@ msgid "Old password" msgstr "Vecchia password" -#: pkg/users/password-dialogs.js:55 pkg/lib/credentials.js:221 +#: pkg/lib/credentials.js:221 pkg/users/password-dialogs.js:55 msgid "Old password not accepted" msgstr "Vecchia password non accettata" @@ -5628,7 +5627,7 @@ "Utilizzare solo algoritmi approvati e consentiti durante l'avvio in modalità " "FIPS." -#: pkg/shell/topnav.jsx:244 +#: pkg/shell/topnav.jsx:255 msgid "Ooops!" msgstr "Ooops!" @@ -5642,10 +5641,10 @@ # translation auto-copied from project subscription-manager, version 1.9.X, # document keys -#: pkg/sosreport/sosreport.jsx:321 pkg/networkmanager/bridge.jsx:104 -#: pkg/storaged/stratis/create-dialog.jsx:64 +#: pkg/storaged/crypto/encryption.jsx:234 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:223 -#: pkg/storaged/crypto/encryption.jsx:234 pkg/users/account-details.js:269 +#: pkg/storaged/stratis/create-dialog.jsx:64 pkg/sosreport/sosreport.jsx:330 +#: pkg/networkmanager/bridge.jsx:104 pkg/users/account-details.js:269 msgid "Options" msgstr "Opzioni" @@ -5659,7 +5658,7 @@ msgid "Other" msgstr "Altro" -#: pkg/users/account-create-dialog.js:131 pkg/users/account-details.js:279 +#: pkg/users/account-details.js:279 pkg/users/account-create-dialog.js:131 msgid "" "Other authentication methods are still available even when interactive " "password authentication is not allowed." @@ -5684,13 +5683,13 @@ # translation auto-copied from project virt-manager, version 0.10.0, document # virt-manager -#: pkg/storaged/block/format-dialog.jsx:322 #: pkg/storaged/partitions/format-disk-dialog.jsx:61 +#: pkg/storaged/block/format-dialog.jsx:324 msgid "Overwrite" msgstr "Sovrascrivere" -#: pkg/storaged/block/format-dialog.jsx:325 #: pkg/storaged/partitions/format-disk-dialog.jsx:64 +#: pkg/storaged/block/format-dialog.jsx:327 msgid "Overwrite existing data with zeros (slower)" msgstr "Sovrascrivere i dati esistenti con zeri (lento)" @@ -5698,7 +5697,7 @@ msgid "PCI" msgstr "PCI" -#: pkg/storaged/dialog.jsx:1329 +#: pkg/storaged/dialog.jsx:1331 msgid "PID" msgstr "PID" @@ -5706,7 +5705,7 @@ msgid "Package cockpit-pcp is missing for metrics history" msgstr "Pacchetto cockpit-pcp mancante per la cronologia delle metriche" -#: pkg/packagekit/updates.jsx:690 pkg/packagekit/updates.jsx:769 +#: pkg/packagekit/updates.jsx:689 pkg/packagekit/updates.jsx:768 msgid "Package information" msgstr "Informazioni sul pacchetto" @@ -5714,15 +5713,15 @@ msgid "PackageKit crashed" msgstr "PackageKit si è interrotto" -#: pkg/packagekit/updates.jsx:1104 +#: pkg/packagekit/updates.jsx:1103 msgid "PackageKit is not installed" msgstr "PackageKit non è installato" -#: pkg/packagekit/updates.jsx:1305 +#: pkg/packagekit/updates.jsx:1304 msgid "PackageKit reported error code $0" msgstr "Codice di errore segnalato da PackageKit $0" -#: pkg/packagekit/updates.jsx:364 +#: pkg/packagekit/updates.jsx:363 msgid "Packages" msgstr "Pacchetti" @@ -5750,7 +5749,7 @@ msgid "Partition" msgstr "Partizione" -#: pkg/storaged/utils.js:364 +#: pkg/storaged/utils.js:365 msgid "Partition of $0" msgstr "Partizione di $0" @@ -5775,53 +5774,53 @@ # translation auto-copied from project Anaconda, version master, document # anaconda +#: pkg/storaged/crypto/actions.jsx:42 pkg/storaged/crypto/keyslots.jsx:464 +#: pkg/storaged/crypto/keyslots.jsx:784 +#: pkg/storaged/block/format-dialog.jsx:336 +#: pkg/storaged/block/format-dialog.jsx:364 pkg/storaged/stratis/pool.jsx:201 +#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 +#: pkg/storaged/stratis/create-dialog.jsx:75 #: pkg/storaged/stratis/stopped-pool.jsx:58 #: pkg/storaged/stratis/stopped-pool.jsx:129 -#: pkg/storaged/stratis/create-dialog.jsx:75 pkg/storaged/stratis/pool.jsx:201 -#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 -#: pkg/storaged/block/format-dialog.jsx:334 -#: pkg/storaged/block/format-dialog.jsx:362 -#: pkg/storaged/filesystem/mounting-dialog.jsx:323 -#: pkg/storaged/crypto/actions.jsx:43 pkg/storaged/crypto/keyslots.jsx:430 -#: pkg/storaged/crypto/keyslots.jsx:750 +#: pkg/storaged/filesystem/mounting-dialog.jsx:341 msgid "Passphrase" msgstr "Frase di accesso" -#: pkg/storaged/crypto/keyslots.jsx:573 +#: pkg/storaged/crypto/keyslots.jsx:607 msgid "Passphrase can not be empty" msgstr "La frase di accesso non può essere vuota" -#: pkg/storaged/stratis/create-dialog.jsx:79 pkg/storaged/stratis/pool.jsx:204 +#: pkg/storaged/crypto/keyslots.jsx:178 pkg/storaged/crypto/keyslots.jsx:472 +#: pkg/storaged/crypto/keyslots.jsx:517 pkg/storaged/crypto/keyslots.jsx:521 +#: pkg/storaged/block/format-dialog.jsx:340 +#: pkg/storaged/block/format-dialog.jsx:368 pkg/storaged/stratis/pool.jsx:204 #: pkg/storaged/stratis/pool.jsx:379 pkg/storaged/stratis/pool.jsx:405 #: pkg/storaged/stratis/pool.jsx:408 pkg/storaged/stratis/pool.jsx:463 -#: pkg/storaged/block/format-dialog.jsx:338 -#: pkg/storaged/block/format-dialog.jsx:366 -#: pkg/storaged/filesystem/mounting-dialog.jsx:326 -#: pkg/storaged/crypto/keyslots.jsx:145 pkg/storaged/crypto/keyslots.jsx:438 -#: pkg/storaged/crypto/keyslots.jsx:483 pkg/storaged/crypto/keyslots.jsx:487 +#: pkg/storaged/stratis/create-dialog.jsx:79 +#: pkg/storaged/filesystem/mounting-dialog.jsx:344 msgid "Passphrase cannot be empty" msgstr "La frase di accesso non può essere vuota" -#: pkg/storaged/crypto/keyslots.jsx:595 +#: pkg/storaged/crypto/keyslots.jsx:629 msgid "Passphrase from any other key slot" msgstr "Passphrase da qualsiasi altro slot per chiavi" -#: pkg/storaged/stratis/pool.jsx:439 pkg/storaged/crypto/keyslots.jsx:586 +#: pkg/storaged/crypto/keyslots.jsx:620 pkg/storaged/stratis/pool.jsx:439 msgid "Passphrase removal may prevent unlocking $0." msgstr "La rimozione della frase di accesso può impedire lo sblocco $0." -#: pkg/storaged/stratis/create-dialog.jsx:88 pkg/storaged/stratis/pool.jsx:381 -#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/block/format-dialog.jsx:347 -#: pkg/storaged/crypto/keyslots.jsx:447 pkg/storaged/crypto/keyslots.jsx:492 +#: pkg/storaged/crypto/keyslots.jsx:481 pkg/storaged/crypto/keyslots.jsx:526 +#: pkg/storaged/block/format-dialog.jsx:349 pkg/storaged/stratis/pool.jsx:381 +#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/stratis/create-dialog.jsx:88 msgid "Passphrases do not match" msgstr "Le frasi di accesso non corrispondono" #: pkg/static/login.html:99 pkg/storaged/iscsi/create-dialog.jsx:34 #: pkg/storaged/iscsi/create-dialog.jsx:140 pkg/shell/hosts_dialog.jsx:845 -#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/credentials.jsx:119 -#: pkg/shell/credentials.jsx:262 pkg/shell/credentials.jsx:318 -#: pkg/shell/superuser.jsx:144 pkg/users/account-create-dialog.js:139 -#: pkg/users/account-details.js:296 +#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/superuser.jsx:144 +#: pkg/shell/credentials.jsx:119 pkg/shell/credentials.jsx:262 +#: pkg/shell/credentials.jsx:318 pkg/users/account-details.js:296 +#: pkg/users/account-create-dialog.js:139 msgid "Password" msgstr "Password" @@ -5903,8 +5902,8 @@ msgid "Path to directory" msgstr "Percorso della directory" -#: pkg/shell/credentials.jsx:172 #: pkg/lib/cockpit-components-file-autocomplete.jsx:169 +#: pkg/shell/credentials.jsx:172 msgid "Path to file" msgstr "Percorso del file" @@ -5944,7 +5943,7 @@ "Performance Co-Pilot raccoglie e analizza le metriche delle prestazioni dal " "tuo sistema." -#: pkg/systemd/overview-cards/configurationCard.jsx:85 +#: pkg/systemd/overview-cards/configurationCard.jsx:84 msgid "Performance profile" msgstr "Profilo delle prestazioni" @@ -5960,9 +5959,10 @@ msgid "Permanently delete $0 group?" msgstr "Eliminare definitivamente $0 il gruppo?" -#: pkg/storaged/stratis/pool.jsx:145 pkg/storaged/lvm2/volume-group.jsx:93 +#: pkg/storaged/partitions/partition.jsx:54 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:119 -#: pkg/storaged/partitions/partition.jsx:54 pkg/storaged/mdraid/mdraid.jsx:123 +#: pkg/storaged/lvm2/volume-group.jsx:93 pkg/storaged/stratis/pool.jsx:145 +#: pkg/storaged/mdraid/mdraid.jsx:123 msgid "Permanently delete $0?" msgstr "Eliminare definitivamente $0?" @@ -5992,16 +5992,16 @@ msgid "Physical" msgstr "Fisico" +#: pkg/storaged/block/resize.jsx:436 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:180 #: pkg/storaged/lvm2/block-logical-volume.jsx:130 -#: pkg/storaged/block/resize.jsx:436 #, fuzzy #| msgid "Physical volumes" msgid "Physical Volumes" msgstr "Volumi fisici" -#: pkg/storaged/lvm2/volume-group.jsx:390 #: pkg/storaged/lvm2/block-logical-volume.jsx:356 +#: pkg/storaged/lvm2/volume-group.jsx:390 msgid "Physical volumes" msgstr "Volumi fisici" @@ -6011,8 +6011,8 @@ msgid "Physical volumes can not be resized here" msgstr "I volumi fisici non possono essere ridimensionati qui." -#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 #: pkg/lib/cockpit-components-shutdown.jsx:211 pkg/lib/serverTime.js:599 +#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 msgid "Pick date" msgstr "Scegli una data" @@ -6064,7 +6064,7 @@ msgid "Please unmount them first." msgstr "" -#: pkg/storaged/utils.js:284 +#: pkg/storaged/utils.js:285 msgid "Pool for thin logical volumes" msgstr "Pool per volumi logici thin" @@ -6092,8 +6092,8 @@ msgid "Portable" msgstr "Portatile" -#: pkg/networkmanager/network-interface-members.jsx:203 #: pkg/networkmanager/team.jsx:159 pkg/networkmanager/bridge.jsx:101 +#: pkg/networkmanager/network-interface-members.jsx:208 msgid "Ports" msgstr "Porte" @@ -6116,7 +6116,7 @@ msgid "Preparing" msgstr "Preparazione" -#: pkg/systemd/hw-detect.js:114 pkg/lib/machine-info.js:247 +#: pkg/lib/machine-info.js:247 pkg/systemd/hw-detect.js:114 msgid "Present" msgstr "Presente" @@ -6124,7 +6124,7 @@ msgid "Preserve" msgstr "Preserva" -#: pkg/systemd/overview-cards/configurationCard.jsx:288 +#: pkg/systemd/overview-cards/configurationCard.jsx:284 msgid "Pretty host name" msgstr "Nome dell'host grazioso" @@ -6136,8 +6136,8 @@ msgid "Primary" msgstr "Primario" -#: pkg/systemd/logs.jsx:208 pkg/networkmanager/bridgeport.jsx:80 -#: pkg/networkmanager/teamport.jsx:84 +#: pkg/networkmanager/bridgeport.jsx:80 pkg/networkmanager/teamport.jsx:84 +#: pkg/systemd/logs.jsx:208 msgid "Priority" msgstr "Priorità" @@ -6166,11 +6166,11 @@ msgid "Problem info" msgstr "Informazioni sul problema" -#: pkg/storaged/dialog.jsx:1171 +#: pkg/storaged/dialog.jsx:1173 msgid "Processes using the location" msgstr "Elabora utilizzando la posizione" -#: pkg/sosreport/sosreport.jsx:292 +#: pkg/sosreport/sosreport.jsx:301 msgid "Progress: $0" msgstr "Progresso: $0" @@ -6275,7 +6275,7 @@ msgid "RAID chassis" msgstr "Chassis RAID" -#: pkg/storaged/mdraid/create-dialog.jsx:51 pkg/storaged/mdraid/mdraid.jsx:286 +#: pkg/storaged/mdraid/mdraid.jsx:286 pkg/storaged/mdraid/create-dialog.jsx:51 msgid "RAID level" msgstr "Livello RAID" @@ -6341,11 +6341,11 @@ msgid "Ready" msgstr "Pronto" -#: pkg/systemd/overview-cards/configurationCard.jsx:291 +#: pkg/systemd/overview-cards/configurationCard.jsx:287 msgid "Real host name" msgstr "Nome dell'host reale" -#: pkg/systemd/overview-cards/configurationCard.jsx:258 +#: pkg/systemd/overview-cards/configurationCard.jsx:254 msgid "" "Real host name can only contain lower-case characters, digits, dashes, and " "periods (with populated subdomains)" @@ -6353,7 +6353,7 @@ "Il nome host reale può contenere solo caratteri minuscoli, cifre, trattini e " "punti (con sottodomini popolati)" -#: pkg/systemd/overview-cards/configurationCard.jsx:256 +#: pkg/systemd/overview-cards/configurationCard.jsx:252 msgid "Real host name must be 64 characters or less" msgstr "Il nome host reale deve essere di 64 caratteri o meno" @@ -6361,14 +6361,14 @@ msgid "Reapply and reboot" msgstr "riapplica e riavvia" -#: pkg/systemd/overview.jsx:109 pkg/systemd/overview.jsx:128 -#: pkg/lib/cockpit-components-logs-panel.jsx:114 #: pkg/lib/cockpit-components-shutdown.jsx:190 #: pkg/lib/cockpit-components-shutdown.jsx:192 +#: pkg/lib/cockpit-components-logs-panel.jsx:114 pkg/systemd/overview.jsx:110 +#: pkg/systemd/overview.jsx:135 msgid "Reboot" msgstr "Riavvia" -#: pkg/packagekit/updates.jsx:614 +#: pkg/packagekit/updates.jsx:613 msgid "Reboot after completion" msgstr "Riavvio dopo il completamento" @@ -6376,15 +6376,14 @@ msgid "Reboot recommended" msgstr "Riavvio consigliato" -#: pkg/packagekit/updates.jsx:685 pkg/packagekit/updates.jsx:760 -#: pkg/packagekit/updates.jsx:824 +#: pkg/packagekit/updates.jsx:684 pkg/packagekit/updates.jsx:759 +#: pkg/packagekit/updates.jsx:823 msgid "Reboot system..." msgstr "Riavvio del sistema..." #: pkg/networkmanager/network-main.jsx:188 -#: pkg/networkmanager/network-main.jsx:203 -#: pkg/networkmanager/network-interface-members.jsx:205 -#: pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-main.jsx:203 pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-interface-members.jsx:210 msgid "Receiving" msgstr "Ricevo" @@ -6396,7 +6395,7 @@ msgid "Recommended, secure settings for current threat models." msgstr "Impostazioni consigliate e sicure per gli attuali modelli di minaccia." -#: pkg/shell/failures.jsx:74 +#: pkg/shell/failures.jsx:72 msgid "Reconnect" msgstr "Ricollego" @@ -6432,23 +6431,23 @@ msgid "Regenerate" msgstr "Generato" -#: pkg/storaged/crypto/keyslots.jsx:277 +#: pkg/storaged/crypto/keyslots.jsx:311 msgid "Regenerating initrd" msgstr "rigenerazione del initrd" -#: pkg/packagekit/updates.jsx:1378 +#: pkg/packagekit/updates.jsx:1377 msgid "Register…" msgstr "Registrati…" -#: pkg/storaged/dialog.jsx:1259 +#: pkg/storaged/dialog.jsx:1261 msgid "Related processes and services will be forcefully stopped." msgstr "I processi e i servizi correlati verranno interrotti forzatamente." -#: pkg/storaged/dialog.jsx:1261 +#: pkg/storaged/dialog.jsx:1263 msgid "Related processes will be forcefully stopped." msgstr "I processi correlati verranno interrotti forzatamente." -#: pkg/storaged/dialog.jsx:1263 +#: pkg/storaged/dialog.jsx:1265 msgid "Related services will be forcefully stopped." msgstr "I servizi correlati verranno interrotti forzatamente." @@ -6464,7 +6463,7 @@ msgid "Reloading" msgstr "Ricarica" -#: pkg/packagekit/updates.jsx:510 +#: pkg/packagekit/updates.jsx:509 msgid "Reloading the state of remaining services" msgstr "Ricaricare lo stato dei servizi rimanenti" @@ -6504,19 +6503,19 @@ msgid "Removals:" msgstr "Rimozioni:" -#: pkg/systemd/timer-dialog.jsx:361 pkg/storaged/stratis/pool.jsx:443 +#: pkg/storaged/nfs/nfs.jsx:315 pkg/storaged/crypto/keyslots.jsx:649 +#: pkg/storaged/crypto/keyslots.jsx:684 pkg/storaged/crypto/keyslots.jsx:769 +#: pkg/storaged/lvm2/physical-volume.jsx:88 +#: pkg/storaged/lvm2/volume-group.jsx:347 pkg/storaged/stratis/pool.jsx:443 #: pkg/storaged/stratis/pool.jsx:500 pkg/storaged/stratis/pool.jsx:535 -#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/lvm2/volume-group.jsx:347 -#: pkg/storaged/lvm2/physical-volume.jsx:88 pkg/storaged/nfs/nfs.jsx:315 -#: pkg/storaged/crypto/keyslots.jsx:615 pkg/storaged/crypto/keyslots.jsx:650 -#: pkg/storaged/crypto/keyslots.jsx:735 pkg/storaged/mdraid/mdraid-disk.jsx:98 -#: pkg/shell/hosts.jsx:170 pkg/apps/application.jsx:50 -#: pkg/users/authorized-keys-panel.js:142 +#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/mdraid/mdraid-disk.jsx:98 +#: pkg/apps/application.jsx:50 pkg/systemd/timer-dialog.jsx:361 +#: pkg/shell/hosts.jsx:170 pkg/users/authorized-keys-panel.js:142 #: pkg/users/authorized-keys-panel.js:150 msgid "Remove" msgstr "Elimina" -#: pkg/networkmanager/network-interface-members.jsx:110 +#: pkg/networkmanager/network-interface-members.jsx:111 msgid "Remove $0" msgstr "Rimuovere $0" @@ -6524,11 +6523,11 @@ msgid "Remove $0 service from $1 zone" msgstr "Rimuovere il servizio $0 dalla zona $1" -#: pkg/storaged/stratis/pool.jsx:495 pkg/storaged/crypto/keyslots.jsx:634 +#: pkg/storaged/crypto/keyslots.jsx:668 pkg/storaged/stratis/pool.jsx:495 msgid "Remove $0?" msgstr "Rimuovere $0?" -#: pkg/storaged/stratis/pool.jsx:493 pkg/storaged/crypto/keyslots.jsx:644 +#: pkg/storaged/crypto/keyslots.jsx:678 pkg/storaged/stratis/pool.jsx:493 msgid "Remove Tang keyserver?" msgstr "Rimuovere keyserver Tang?" @@ -6553,7 +6552,7 @@ msgid "Remove missing physical volumes?" msgstr "Rimozione del volume fisico da $target" -#: pkg/storaged/crypto/keyslots.jsx:608 +#: pkg/storaged/crypto/keyslots.jsx:642 msgid "Remove passphrase in key slot $0?" msgstr "Rimuovere la frase di accesso in slot $0?" @@ -6575,12 +6574,12 @@ msgid "Removing" msgstr "Rimozione" -#: pkg/storaged/crypto/keyslots.jsx:222 +#: pkg/storaged/crypto/keyslots.jsx:256 #: pkg/lib/cockpit-components-install-dialog.jsx:191 msgid "Removing $0" msgstr "Rimozione $0" -#: pkg/networkmanager/network-interface-members.jsx:109 +#: pkg/networkmanager/network-interface-members.jsx:110 msgid "" "Removing $0 will break the connection to the server, and will make the " "administration UI unavailable." @@ -6594,7 +6593,7 @@ msgid "Removing $target from MDRAID device" msgstr "Rimozione $target dal dispositivo RAID" -#: pkg/storaged/crypto/keyslots.jsx:593 +#: pkg/storaged/crypto/keyslots.jsx:627 msgid "" "Removing a passphrase without confirmation of another passphrase may prevent " "unlocking or key management, if other passphrases are forgotten or lost." @@ -6621,11 +6620,10 @@ msgid "Removing the zone will remove all services within it." msgstr "La rimozione della zona rimuoverà tutti i servizi al suo interno." -#: pkg/storaged/stratis/filesystem.jsx:200 pkg/storaged/stratis/pool.jsx:173 -#: pkg/storaged/lvm2/volume-group.jsx:71 #: pkg/storaged/lvm2/block-logical-volume.jsx:53 #: pkg/storaged/lvm2/block-logical-volume.jsx:242 -#: pkg/users/rename-group-dialog.jsx:69 +#: pkg/storaged/lvm2/volume-group.jsx:71 pkg/storaged/stratis/pool.jsx:173 +#: pkg/storaged/stratis/filesystem.jsx:200 pkg/users/rename-group-dialog.jsx:69 msgid "Rename" msgstr "Rinomina" @@ -6685,8 +6683,8 @@ msgid "Repeat monthly" msgstr "Ripeti mensilmente" -#: pkg/storaged/crypto/keyslots.jsx:428 pkg/storaged/crypto/keyslots.jsx:441 -#: pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:462 pkg/storaged/crypto/keyslots.jsx:475 +#: pkg/storaged/crypto/keyslots.jsx:524 msgid "Repeat passphrase" msgstr "Ripeti la frase di accesso" @@ -6694,11 +6692,11 @@ msgid "Repeat weekly" msgstr "Ripeti ogni settimana" -#: pkg/sosreport/sosreport.jsx:490 pkg/systemd/reporting.jsx:392 +#: pkg/sosreport/sosreport.jsx:499 pkg/systemd/reporting.jsx:392 msgid "Report" msgstr "Notifica" -#: pkg/sosreport/sosreport.jsx:308 +#: pkg/sosreport/sosreport.jsx:317 msgid "Report label" msgstr "Etichetta del report" @@ -6718,7 +6716,7 @@ msgid "Reporting was canceled" msgstr "La segnalazione è stata annullata" -#: pkg/sosreport/sosreport.jsx:485 +#: pkg/sosreport/sosreport.jsx:494 msgid "Reports" msgstr "Rapporti" @@ -6775,7 +6773,7 @@ msgid "Reserved memory" msgstr "Memoria riservata" -#: pkg/systemd/terminal.jsx:183 pkg/systemd/logs.jsx:406 +#: pkg/systemd/logs.jsx:406 pkg/systemd/terminal.jsx:183 msgid "Reset" msgstr "Azzera" @@ -6801,11 +6799,11 @@ msgid "Restart" msgstr "Riavvia" -#: pkg/packagekit/updates.jsx:525 pkg/packagekit/updates.jsx:539 +#: pkg/packagekit/updates.jsx:524 pkg/packagekit/updates.jsx:538 msgid "Restart services" msgstr "Riavvia i servizi" -#: pkg/packagekit/updates.jsx:761 pkg/packagekit/updates.jsx:836 +#: pkg/packagekit/updates.jsx:760 pkg/packagekit/updates.jsx:835 msgid "Restart services..." msgstr "Riavvia i servizi..." @@ -6861,7 +6859,7 @@ msgid "Run at" msgstr "Esegui a" -#: pkg/sosreport/sosreport.jsx:295 +#: pkg/sosreport/sosreport.jsx:304 msgid "Run new report" msgstr "Esegui nuovo report" @@ -6869,7 +6867,7 @@ msgid "Run on" msgstr "Eseguire in" -#: pkg/sosreport/sosreport.jsx:273 pkg/sosreport/sosreport.jsx:482 +#: pkg/sosreport/sosreport.jsx:282 pkg/sosreport/sosreport.jsx:491 msgid "Run report" msgstr "Esegui report" @@ -6882,13 +6880,13 @@ msgid "Runner" msgstr "Esecutore" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:458 #: pkg/systemd/services.jsx:232 pkg/systemd/services.jsx:236 -#: pkg/systemd/services.jsx:696 pkg/systemd/service-details.jsx:458 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:696 msgid "Running" msgstr "In esecuzione" -#: pkg/storaged/dialog.jsx:1332 pkg/storaged/dialog.jsx:1352 +#: pkg/storaged/dialog.jsx:1334 pkg/storaged/dialog.jsx:1354 msgid "Runtime" msgstr "Runtime" @@ -6933,7 +6931,7 @@ msgid "SMART self-test of $target" msgstr "Autotest SMART di $target" -#: pkg/sosreport/sosreport.jsx:304 +#: pkg/sosreport/sosreport.jsx:313 msgid "" "SOS reporting collects system information to help with diagnosing problems." msgstr "" @@ -6948,8 +6946,8 @@ msgid "SSH key isn't a path" msgstr "la chiave SSH non è un percorso" -#: pkg/shell/credentials.jsx:79 pkg/shell/credentials.jsx:95 -#: pkg/shell/topnav.jsx:218 +#: pkg/shell/topnav.jsx:229 pkg/shell/credentials.jsx:79 +#: pkg/shell/credentials.jsx:95 msgid "SSH keys" msgstr "Chiavi SSH" @@ -6969,7 +6967,7 @@ msgid "STP priority" msgstr "Priorità STP" -#: pkg/shell/failures.jsx:46 +#: pkg/shell/failures.jsx:45 msgid "" "Safari users need to import and trust the certificate of the self-signing CA:" msgstr "" @@ -6980,16 +6978,15 @@ msgid "Saturdays" msgstr "Sabati" -#: pkg/systemd/timer-dialog.jsx:148 pkg/metrics/metrics.jsx:1478 -#: pkg/networkmanager/dialogs-common.jsx:160 pkg/storaged/stratis/pool.jsx:384 +#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/partitions/partition.jsx:197 +#: pkg/storaged/btrfs/volume.jsx:96 pkg/storaged/crypto/encryption.jsx:168 +#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:531 +#: pkg/storaged/crypto/keyslots.jsx:550 pkg/storaged/stratis/pool.jsx:384 #: pkg/storaged/stratis/pool.jsx:413 pkg/storaged/stratis/pool.jsx:468 -#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/filesystem/mounting-dialog.jsx:340 +#: pkg/storaged/filesystem/mounting-dialog.jsx:358 #: pkg/storaged/filesystem/filesystem.jsx:126 -#: pkg/storaged/crypto/encryption.jsx:168 -#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:497 -#: pkg/storaged/crypto/keyslots.jsx:516 -#: pkg/storaged/partitions/partition.jsx:197 pkg/storaged/btrfs/volume.jsx:96 -#: pkg/packagekit/kpatch.jsx:310 +#: pkg/networkmanager/dialogs-common.jsx:160 pkg/systemd/timer-dialog.jsx:148 +#: pkg/metrics/metrics.jsx:1478 pkg/packagekit/kpatch.jsx:310 msgid "Save" msgstr "Salva" @@ -6997,7 +6994,7 @@ msgid "Save and reboot" msgstr "Salva e riavvia" -#: pkg/systemd/overview-cards/motdCard.jsx:61 pkg/kdump/kdump-view.jsx:229 +#: pkg/kdump/kdump-view.jsx:229 pkg/systemd/overview-cards/motdCard.jsx:61 #: pkg/packagekit/autoupdates.jsx:269 msgid "Save changes" msgstr "Salva modifiche" @@ -7010,8 +7007,8 @@ msgid "Save space by storing identical data blocks just once" msgstr "Risparmia spazio memorizzando blocchi di dati identici una sola volta" -#: pkg/storaged/crypto/keyslots.jsx:401 pkg/storaged/crypto/keyslots.jsx:456 -#: pkg/storaged/crypto/keyslots.jsx:514 pkg/storaged/crypto/keyslots.jsx:542 +#: pkg/storaged/crypto/keyslots.jsx:435 pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:548 pkg/storaged/crypto/keyslots.jsx:576 msgid "" "Saving a new passphrase requires unlocking the disk. Please provide a " "current disk passphrase." @@ -7055,7 +7052,7 @@ msgid "Seconds" msgstr "Secondi" -#: pkg/systemd/overview-cards/configurationCard.jsx:92 +#: pkg/systemd/overview-cards/configurationCard.jsx:91 msgid "Secure shell keys" msgstr "Chiavi secure shell" @@ -7067,7 +7064,7 @@ msgid "Security Enhanced Linux configuration and troubleshooting" msgstr "Configurazione e risoluzione dei problemi di Security Enhanced Linux" -#: pkg/packagekit/updates.jsx:1435 +#: pkg/packagekit/updates.jsx:1434 msgid "Security updates available" msgstr "Aggiornamenti di sicurezza disponibili" @@ -7103,7 +7100,7 @@ #: pkg/networkmanager/network-main.jsx:187 #: pkg/networkmanager/network-main.jsx:202 -#: pkg/networkmanager/network-interface-members.jsx:204 +#: pkg/networkmanager/network-interface-members.jsx:209 msgid "Sending" msgstr "Invio" @@ -7116,9 +7113,9 @@ # translation auto-copied from project subscription-manager, version 1.9.X, # document keys, author fvalen -#: pkg/static/login.html:159 pkg/networkmanager/ip-settings.jsx:262 -#: pkg/kdump/kdump-view.jsx:267 pkg/kdump/kdump-view.jsx:289 -#: pkg/storaged/nfs/nfs.jsx:328 +#: pkg/static/login.html:159 pkg/storaged/nfs/nfs.jsx:328 +#: pkg/networkmanager/ip-settings.jsx:262 pkg/kdump/kdump-view.jsx:267 +#: pkg/kdump/kdump-view.jsx:289 msgid "Server" msgstr "Server" @@ -7134,7 +7131,7 @@ msgid "Server cannot be empty." msgstr "Il server non può essere vuoto." -#: pkg/lib/cockpit.js:3862 +#: pkg/lib/cockpit.js:3858 msgid "Server has closed the connection." msgstr "Il server ha chiuso la connessione." @@ -7142,10 +7139,10 @@ msgid "Server software" msgstr "Software Server" +#: pkg/storaged/dialog.jsx:1351 pkg/networkmanager/firewall.jsx:207 #: pkg/metrics/metrics.jsx:812 pkg/metrics/metrics.jsx:813 #: pkg/metrics/metrics.jsx:868 pkg/metrics/metrics.jsx:906 #: pkg/metrics/metrics.jsx:966 pkg/metrics/metrics.jsx:972 -#: pkg/networkmanager/firewall.jsx:207 pkg/storaged/dialog.jsx:1349 msgid "Service" msgstr "Servizio" @@ -7157,17 +7154,17 @@ msgid "Service logs" msgstr "Log servizi" -#: pkg/systemd/services.html:4 pkg/systemd/service-tabs.jsx:40 -#: pkg/systemd/service.jsx:151 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/services.html:4 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/service.jsx:151 pkg/systemd/service-tabs.jsx:40 #: pkg/systemd/manifest.json:0 msgid "Services" msgstr "Servizi" -#: pkg/storaged/dialog.jsx:1157 +#: pkg/storaged/dialog.jsx:1159 msgid "Services using the location" msgstr "Servizi che utilizzano la posizione" -#: pkg/shell/topnav.jsx:273 +#: pkg/shell/topnav.jsx:303 msgid "Session" msgstr "Sessione" @@ -7190,8 +7187,8 @@ msgid "Set partition type of $0" msgstr "Crea partizione su $0" -#: pkg/users/password-dialogs.js:226 pkg/users/password-dialogs.js:233 -#: pkg/users/account-details.js:301 +#: pkg/users/account-details.js:301 pkg/users/password-dialogs.js:226 +#: pkg/users/password-dialogs.js:233 msgid "Set password" msgstr "Imposta password" @@ -7226,13 +7223,13 @@ msgid "Setting up loop device $target" msgstr "Impostazione del dispositivo di loop $target" -#: pkg/packagekit/updates.jsx:919 +#: pkg/packagekit/updates.jsx:918 msgid "Settings" msgstr "Impostazioni" # translation auto-copied from project Customer Portal Translations, version # PCM_template, document template, author fvalen -#: pkg/packagekit/updates.jsx:375 pkg/packagekit/updates.jsx:450 +#: pkg/packagekit/updates.jsx:374 pkg/packagekit/updates.jsx:449 msgid "Severity" msgstr "Severità" @@ -7240,7 +7237,7 @@ msgid "Shared" msgstr "Condivisa" -#: pkg/users/account-create-dialog.js:93 pkg/users/account-details.js:329 +#: pkg/users/account-details.js:329 pkg/users/account-create-dialog.js:93 msgid "Shell" msgstr "Shell" @@ -7268,7 +7265,7 @@ msgid "Show confirmation password" msgstr "Conferma la password" -#: pkg/systemd/overview-cards/configurationCard.jsx:96 +#: pkg/systemd/overview-cards/configurationCard.jsx:95 msgid "Show fingerprints" msgstr "Mostra le impronte digitali" @@ -7298,8 +7295,8 @@ msgid "Show relationships" msgstr "Mostra relazioni" +#: pkg/storaged/partitions/partition.jsx:101 pkg/storaged/block/resize.jsx:635 #: pkg/storaged/lvm2/block-logical-volume.jsx:205 -#: pkg/storaged/block/resize.jsx:635 pkg/storaged/partitions/partition.jsx:101 msgid "Shrink" msgstr "Riduci" @@ -7307,7 +7304,7 @@ msgid "Shrink logical volume" msgstr "Restringi il volume logico" -#: pkg/storaged/block/resize.jsx:557 pkg/storaged/partitions/partition.jsx:218 +#: pkg/storaged/partitions/partition.jsx:218 pkg/storaged/block/resize.jsx:557 #, fuzzy #| msgid "partition" msgid "Shrink partition" @@ -7324,7 +7321,7 @@ msgid "Shut down" msgstr "Arresto" -#: pkg/systemd/overview.jsx:114 +#: pkg/systemd/overview.jsx:115 msgid "Shutdown" msgstr "Spegni" @@ -7332,40 +7329,40 @@ msgid "Since" msgstr "Da" -#: pkg/systemd/hw-detect.js:90 pkg/lib/machine-info.js:238 +#: pkg/lib/machine-info.js:238 pkg/systemd/hw-detect.js:90 msgid "Single rank" msgstr "Single rank" -#: pkg/systemd/hwinfo.jsx:291 pkg/storaged/stratis/pool.jsx:96 -#: pkg/storaged/lvm2/vdo-pool.jsx:79 +#: pkg/storaged/nfs/nfs.jsx:330 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/block/format-dialog.jsx:315 pkg/storaged/block/resize.jsx:448 +#: pkg/storaged/block/resize.jsx:581 pkg/storaged/pages.jsx:717 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:199 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:206 +#: pkg/storaged/lvm2/block-logical-volume.jsx:291 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:49 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:143 -#: pkg/storaged/lvm2/block-logical-volume.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:313 pkg/storaged/block/resize.jsx:448 -#: pkg/storaged/block/resize.jsx:581 pkg/storaged/nfs/nfs.jsx:330 -#: pkg/storaged/pages.jsx:717 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/lvm2/vdo-pool.jsx:79 pkg/storaged/stratis/pool.jsx:96 +#: pkg/systemd/hwinfo.jsx:291 msgid "Size" msgstr "Dimensione" -#: pkg/storaged/dialog.jsx:1074 +#: pkg/storaged/dialog.jsx:1076 msgid "Size cannot be negative" msgstr "La dimensione non può essere negativa" -#: pkg/storaged/dialog.jsx:1072 +#: pkg/storaged/dialog.jsx:1074 msgid "Size cannot be zero" msgstr "La dimensione non può essere zero" -#: pkg/storaged/dialog.jsx:1076 +#: pkg/storaged/dialog.jsx:1078 msgid "Size is too large" msgstr "La dimensione è troppo grande" -#: pkg/storaged/dialog.jsx:1070 +#: pkg/storaged/dialog.jsx:1072 msgid "Size must be a number" msgstr "La dimensione deve essere un numero" -#: pkg/storaged/dialog.jsx:1078 +#: pkg/storaged/dialog.jsx:1080 msgid "Size must be at least $0" msgstr "La dimensione deve essere almeno $0" @@ -7381,7 +7378,7 @@ msgid "Slot" msgstr "Slot" -#: pkg/storaged/crypto/keyslots.jsx:723 pkg/storaged/mdraid/mdraid-disk.jsx:80 +#: pkg/storaged/crypto/keyslots.jsx:757 pkg/storaged/mdraid/mdraid-disk.jsx:80 msgid "Slot $0" msgstr "Slot $0" @@ -7440,7 +7437,7 @@ "Qualche altro programma sta attualmente utilizzando il gestore di pacchetti, " "si prega di attendere..." -#: pkg/packagekit/updates.jsx:737 pkg/packagekit/updates.jsx:844 +#: pkg/packagekit/updates.jsx:736 pkg/packagekit/updates.jsx:843 #: pkg/packagekit/updates.jsx:1536 msgid "Some software needs to be restarted manually" msgstr "Alcuni software devono essere riavviati manualmente" @@ -7481,10 +7478,9 @@ msgid "Stable" msgstr "Stabile" +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 pkg/storaged/swap/swap.jsx:98 +#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/mdraid/mdraid.jsx:210 #: pkg/systemd/service-details.jsx:144 -#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/swap/swap.jsx:98 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 -#: pkg/storaged/mdraid/mdraid.jsx:210 msgid "Start" msgstr "Avvia" @@ -7496,7 +7492,7 @@ msgid "Start multipath" msgstr "Avvia Multipath" -#: pkg/systemd/service-details.jsx:447 pkg/networkmanager/networkmanager.jsx:78 +#: pkg/networkmanager/networkmanager.jsx:78 pkg/systemd/service-details.jsx:447 msgid "Start service" msgstr "Avvia il servizio" @@ -7524,18 +7520,18 @@ msgid "Starting swapspace $target" msgstr "Avvio dello spazio di swap $target" -#: pkg/systemd/hwinfo.jsx:291 pkg/systemd/services-list.jsx:40 -#: pkg/systemd/services-list.jsx:46 pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/services-list.jsx:40 +#: pkg/systemd/services-list.jsx:46 pkg/systemd/hwinfo.jsx:291 msgid "State" msgstr "Stato" -#: pkg/systemd/services.jsx:252 pkg/systemd/services.jsx:688 -#: pkg/systemd/service-details.jsx:476 +#: pkg/systemd/service-details.jsx:476 pkg/systemd/services.jsx:252 +#: pkg/systemd/services.jsx:688 msgid "Static" msgstr "Statico" -#: pkg/systemd/service-details.jsx:648 -#: pkg/networkmanager/network-interface.jsx:265 pkg/packagekit/updates.jsx:908 +#: pkg/networkmanager/network-interface.jsx:265 +#: pkg/systemd/service-details.jsx:648 pkg/packagekit/updates.jsx:907 msgid "Status" msgstr "Stato" @@ -7547,10 +7543,9 @@ msgid "Sticky" msgstr "Sticky" -#: pkg/systemd/service-details.jsx:140 pkg/storaged/swap/swap.jsx:95 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:62 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 -#: pkg/storaged/mdraid/mdraid.jsx:289 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 pkg/storaged/swap/swap.jsx:95 +#: pkg/storaged/mdraid/mdraid.jsx:289 pkg/systemd/service-details.jsx:140 msgid "Stop" msgstr "Ferma" @@ -7574,7 +7569,7 @@ msgid "Stop editing hosts" msgstr "Interrompi la modifica degli host" -#: pkg/sosreport/sosreport.jsx:277 +#: pkg/sosreport/sosreport.jsx:286 msgid "Stop report" msgstr "Ferma report" @@ -7605,7 +7600,7 @@ msgid "Storage logs" msgstr "Log archiviazione" -#: pkg/storaged/block/format-dialog.jsx:359 +#: pkg/storaged/block/format-dialog.jsx:361 msgid "Store passphrase" msgstr "Conserva la frase di accesso" @@ -7621,7 +7616,7 @@ msgid "Stratis block device" msgstr "$0 Dispositivo a blocchi" -#: pkg/storaged/stratis/stopped-pool.jsx:141 pkg/storaged/stratis/pool.jsx:566 +#: pkg/storaged/stratis/pool.jsx:566 pkg/storaged/stratis/stopped-pool.jsx:141 #, fuzzy #| msgid "Add block devices" msgid "Stratis block devices" @@ -7651,8 +7646,8 @@ msgid "Stratis filesystems pool" msgstr "Crea filesystem" -#: pkg/storaged/stratis/stopped-pool.jsx:98 pkg/storaged/stratis/pool.jsx:271 -#: pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/pool.jsx:271 pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/stopped-pool.jsx:98 msgid "Stratis pool" msgstr "Pool Stratis" @@ -7666,7 +7661,7 @@ msgid "Striped and mirrored (RAID 10)" msgstr "" -#: pkg/storaged/lvm2/block-logical-volume.jsx:399 +#: pkg/storaged/lvm2/block-logical-volume.jsx:398 msgid "Stripes" msgstr "" @@ -7680,7 +7675,7 @@ msgid "Stub" msgstr "urtare" -#: pkg/shell/topnav.jsx:184 +#: pkg/shell/topnav.jsx:193 msgid "Style" msgstr "Stile" @@ -7718,8 +7713,8 @@ msgid "Sundays" msgstr "Domeniche" -#: pkg/metrics/metrics.jsx:130 pkg/metrics/metrics.jsx:725 -#: pkg/metrics/metrics.jsx:1950 pkg/storaged/swap/swap.jsx:88 +#: pkg/storaged/swap/swap.jsx:88 pkg/metrics/metrics.jsx:130 +#: pkg/metrics/metrics.jsx:725 pkg/metrics/metrics.jsx:1950 msgid "Swap" msgstr "Swap" @@ -7733,18 +7728,18 @@ msgid "Swap out" msgstr "Swap out" -#: pkg/networkmanager/network-interface-members.jsx:67 +#: pkg/networkmanager/network-interface-members.jsx:68 #, fuzzy #| msgid "Switch off $0" msgid "Switch of $0" msgstr "Spegni $0" -#: pkg/networkmanager/network-interface-members.jsx:87 +#: pkg/networkmanager/network-interface-members.jsx:88 #: pkg/networkmanager/network-interface.jsx:163 msgid "Switch off $0" msgstr "Spegni $0" -#: pkg/networkmanager/network-interface-members.jsx:78 +#: pkg/networkmanager/network-interface-members.jsx:79 #: pkg/networkmanager/network-interface.jsx:144 msgid "Switch on $0" msgstr "Accendi $0" @@ -7759,7 +7754,7 @@ msgid "Switch to limited access" msgstr "Passa ad accesso limitato" -#: pkg/networkmanager/network-interface-members.jsx:86 +#: pkg/networkmanager/network-interface-members.jsx:87 #: pkg/networkmanager/network-interface.jsx:162 #, fuzzy #| msgid "" @@ -7772,7 +7767,7 @@ "La disattivazione di $0 interromperà la connessione al server e " "renderà l'interfaccia utente di amministrazione non disponibile." -#: pkg/networkmanager/network-interface-members.jsx:77 +#: pkg/networkmanager/network-interface-members.jsx:78 #: pkg/networkmanager/network-interface.jsx:143 #, fuzzy #| msgid "" @@ -7805,18 +7800,18 @@ # translation auto-copied from project virt-manager, version 0.10.0, document # virt-manager -#: pkg/systemd/services.jsx:913 pkg/shell/nav.jsx:46 pkg/shell/indexes.jsx:343 +#: pkg/systemd/services.jsx:912 pkg/shell/indexes.jsx:343 pkg/shell/nav.jsx:46 msgid "System" msgstr "Sistema" -#: pkg/sosreport/sosreport.jsx:509 +#: pkg/sosreport/sosreport.jsx:518 #, fuzzy #| msgid "System modifications" msgid "System diagnostics" msgstr "Modifiche di Sistema" -#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 #: pkg/systemd/hwinfo.jsx:315 +#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 msgid "System information" msgstr "Informazioni di sistema" @@ -7829,7 +7824,7 @@ msgid "System modifications" msgstr "Modifiche di Sistema" -#: pkg/systemd/overview-cards/configurationCard.jsx:75 +#: pkg/systemd/overview-cards/configurationCard.jsx:74 msgid "System time" msgstr "Ora di sistema" @@ -7845,7 +7840,7 @@ msgid "Tablet" msgstr "Tablet" -#: pkg/storaged/crypto/keyslots.jsx:431 +#: pkg/storaged/crypto/keyslots.jsx:465 msgid "Tang keyserver" msgstr "Keyserver Tang" @@ -7910,7 +7905,7 @@ msgid "Testing connection" msgstr "Test connessione" -#: pkg/storaged/crypto/keyslots.jsx:242 +#: pkg/storaged/crypto/keyslots.jsx:276 #, fuzzy #| msgid "$0 is not available from any repository." msgid "The $0 package is not available from any repository." @@ -7922,7 +7917,7 @@ msgid "The $0 package must be installed to create Stratis pools." msgstr "Il pacchetto $0 deve essere installato per creare dispositivi VDO." -#: pkg/storaged/crypto/keyslots.jsx:237 pkg/storaged/crypto/keyslots.jsx:253 +#: pkg/storaged/crypto/keyslots.jsx:271 pkg/storaged/crypto/keyslots.jsx:287 #, fuzzy #| msgid "The $0 package must be installed to create VDO devices." msgid "The $0 package must be installed." @@ -8024,14 +8019,14 @@ "La creazione di questo dispositivo VDO non è terminata e il dispositivo non " "può essere utilizzato." -#: pkg/storaged/crypto/keyslots.jsx:696 +#: pkg/storaged/crypto/keyslots.jsx:730 msgid "" "The currently logged in user is not permitted to see information about keys." msgstr "" "L'utente attualmente connesso non è autorizzato a vedere le informazioni " "sulle chiavi." -#: pkg/storaged/block/format-dialog.jsx:369 +#: pkg/storaged/block/format-dialog.jsx:371 msgid "" "The disk needs to be unlocked before formatting. Please provide a existing " "passphrase." @@ -8039,7 +8034,7 @@ "Il disco deve essere sbloccato prima della formattazione. Fornisci una " "passphrase esistente." -#: pkg/sosreport/sosreport.jsx:370 +#: pkg/sosreport/sosreport.jsx:379 #, fuzzy #| msgid "The $0 could not be deleted" msgid "The file $0 will be deleted." @@ -8110,7 +8105,7 @@ msgid "The fingerprint should match:" msgstr "Mostra le impronte digitali" -#: pkg/packagekit/updates.jsx:515 +#: pkg/packagekit/updates.jsx:514 msgid "The following service will be restarted:" msgid_plural "The following services will be restarted:" msgstr[0] "Verrà riavviato il seguente servizio:" @@ -8146,7 +8141,7 @@ "La directory home $0 esiste già. La sua proprietà verrà cambiata con quella " "del nuovo utente." -#: pkg/storaged/crypto/keyslots.jsx:274 +#: pkg/storaged/crypto/keyslots.jsx:308 msgid "The initrd must be regenerated." msgstr "L'initrd deve essere rigenerato." @@ -8162,19 +8157,19 @@ msgid "The key you provided was not valid." msgstr "La chiave fornita non era valida." -#: pkg/storaged/crypto/keyslots.jsx:736 +#: pkg/storaged/crypto/keyslots.jsx:770 msgid "The last key slot can not be removed" msgstr "L'ultimo slot per chiavi non può essere rimosso" -#: pkg/storaged/dialog.jsx:1367 +#: pkg/storaged/dialog.jsx:1369 msgid "The listed processes and services will be forcefully stopped." msgstr "I processi e i servizi elencati verranno interrotti forzatamente." -#: pkg/storaged/dialog.jsx:1369 +#: pkg/storaged/dialog.jsx:1371 msgid "The listed processes will be forcefully stopped." msgstr "I processi elencati verranno interrotti forzatamente." -#: pkg/storaged/dialog.jsx:1371 +#: pkg/storaged/dialog.jsx:1373 msgid "The listed services will be forcefully stopped." msgstr "I servizi elencati verranno interrotti forzatamente." @@ -8190,11 +8185,11 @@ msgid "The machine is rebooting" msgstr "La macchina si sta riavviando" -#: pkg/storaged/dialog.jsx:1325 +#: pkg/storaged/dialog.jsx:1327 msgid "The mount point $0 is in use by these processes:" msgstr "Il punto di montaggio $0 è utilizzato da questi processi:" -#: pkg/storaged/dialog.jsx:1345 +#: pkg/storaged/dialog.jsx:1347 msgid "The mount point $0 is in use by these services:" msgstr "Il punto di montaggio $0 è utilizzato da questi servizi:" @@ -8239,13 +8234,13 @@ "Il server ha rifiutato di autenticare '$0' utilizzando l'autenticazione con " "password, e non sono disponibili altri metodi di autenticazione supportati." -#: pkg/lib/cockpit.js:3846 +#: pkg/lib/cockpit.js:3842 msgid "The server refused to authenticate using any supported methods." msgstr "" "Il server ha rifiutato di autenticarsi utilizzando qualsiasi metodo " "supportato." -#: pkg/storaged/crypto/keyslots.jsx:391 +#: pkg/storaged/crypto/keyslots.jsx:425 msgid "" "The system does not currently support unlocking a filesystem with a Tang " "keyserver during boot." @@ -8253,7 +8248,7 @@ "Attualmente il sistema non supporta lo sblocco di un filesystem con un " "keyserver Tang durante l'avvio." -#: pkg/storaged/crypto/keyslots.jsx:390 +#: pkg/storaged/crypto/keyslots.jsx:424 msgid "" "The system does not currently support unlocking the root filesystem with a " "Tang keyserver." @@ -8337,22 +8332,22 @@ "At least $0 are required but only $1 are available." msgstr "" -#: pkg/shell/failures.jsx:42 +#: pkg/shell/failures.jsx:41 msgid "There was an unexpected error while connecting to the machine." msgstr "" "Si è verificato un errore imprevisto durante la connessione alla macchina." -#: pkg/storaged/crypto/keyslots.jsx:395 +#: pkg/storaged/crypto/keyslots.jsx:429 msgid "These additional steps are necessary:" msgstr "Questi passaggi aggiuntivi sono necessari:" -#: pkg/storaged/dialog.jsx:1239 +#: pkg/storaged/dialog.jsx:1241 #, fuzzy #| msgid "This web console will be updated." msgid "These changes will be made:" msgstr "Questa console web sarà aggiornata." -#: pkg/storaged/utils.js:286 +#: pkg/storaged/utils.js:287 msgid "Thin logical volume" msgstr "Volume logico thin" @@ -8379,8 +8374,8 @@ msgstr "" "Questo dispositivo VDO non utilizza tutti i suoi dispositivi di supporto." -#: pkg/storaged/block/format-dialog.jsx:244 -#: pkg/storaged/filesystem/mounting-dialog.jsx:156 +#: pkg/storaged/block/format-dialog.jsx:246 +#: pkg/storaged/filesystem/mounting-dialog.jsx:159 #, fuzzy #| msgid "This device cannot be managed here." msgid "This device can not be used for the installation target." @@ -8390,7 +8385,7 @@ msgid "This device cannot be managed here." msgstr "Questo dispositivo non può essere gestito qui." -#: pkg/storaged/dialog.jsx:1134 +#: pkg/storaged/dialog.jsx:1136 #, fuzzy #| msgid "This device is currently used for VDO devices." msgid "This device is currently in use." @@ -8412,7 +8407,7 @@ msgstr "" "Questo host verrà riavviato quando gli aggiornamenti saranno installati." -#: pkg/sosreport/sosreport.jsx:305 +#: pkg/sosreport/sosreport.jsx:314 #, fuzzy #| msgid "The collected information will be stored locally on the system." msgid "This information is stored only on the system." @@ -8477,7 +8472,7 @@ msgid "This pool is in a degraded state." msgstr "L'array RAID è in uno stato degradato" -#: pkg/packagekit/updates.jsx:1373 +#: pkg/packagekit/updates.jsx:1372 msgid "This system is not registered" msgstr "Questo sistema non è registrato" @@ -8643,7 +8638,7 @@ "Per assicurare che la connessione non sia intercettata da un soggetto terzo " "malelvolo, verifica l'impronta digitale dell'host:" -#: pkg/packagekit/updates.jsx:1376 +#: pkg/packagekit/updates.jsx:1375 msgid "" "To get software updates, this system needs to be registered with Red Hat, " "either using the Red Hat Customer Portal or a local subscription server." @@ -8652,7 +8647,7 @@ "registrato con Red Hat, utilizzando il portale clienti Red Hat o un server " "locale in abbonamento." -#: pkg/static/login.js:768 pkg/shell/hosts_dialog.jsx:477 +#: pkg/shell/hosts_dialog.jsx:477 pkg/static/login.js:768 msgid "" "To verify a fingerprint, run the following on $0 while physically sitting at " "the machine or through a trusted network:" @@ -8668,8 +8663,8 @@ msgid "Toggle" msgstr "Attiva/disattiva" -#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 #: pkg/lib/cockpit-components-shutdown.jsx:212 pkg/lib/serverTime.js:600 +#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 msgid "Toggle date picker" msgstr "Attiva/disattiva la selezione della data" @@ -8677,7 +8672,7 @@ msgid "Toggle filters" msgstr "Attiva/disattiva i filtri" -#: pkg/lib/cockpit.js:3868 +#: pkg/lib/cockpit.js:3864 msgid "Too much data" msgstr "Troppi dati" @@ -8749,7 +8744,7 @@ msgid "Trust and add host" msgstr "Host non fidato" -#: pkg/storaged/stratis/utils.jsx:86 pkg/storaged/crypto/keyslots.jsx:544 +#: pkg/storaged/crypto/keyslots.jsx:578 pkg/storaged/stratis/utils.jsx:86 msgid "Trust key" msgstr "Chiave fidata" @@ -8799,12 +8794,12 @@ msgid "Turn on administrative access" msgstr "Attiva l'accesso amministrativo" -#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:308 -#: pkg/storaged/block/unrecognized-data.jsx:52 pkg/storaged/pages.jsx:715 #: pkg/storaged/partitions/partition.jsx:183 -#: pkg/storaged/partitions/partition.jsx:229 pkg/shell/credentials.jsx:199 -#: pkg/packagekit/autoupdates.jsx:279 +#: pkg/storaged/partitions/partition.jsx:229 +#: pkg/storaged/block/format-dialog.jsx:310 +#: pkg/storaged/block/unrecognized-data.jsx:51 pkg/storaged/pages.jsx:715 +#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 +#: pkg/shell/credentials.jsx:199 pkg/packagekit/autoupdates.jsx:279 msgid "Type" msgstr "Tipo" @@ -8832,12 +8827,11 @@ # translation auto-copied from project subscription-manager, version 1.9.X, # document keys, author fvalen -#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/stratis/pool.jsx:519 -#: pkg/storaged/lvm2/volume-group.jsx:386 +#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/btrfs/volume.jsx:127 +#: pkg/storaged/btrfs/device.jsx:78 pkg/storaged/btrfs/filesystem.jsx:77 #: pkg/storaged/lvm2/physical-volume.jsx:117 -#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/mdraid/mdraid.jsx:291 -#: pkg/storaged/btrfs/volume.jsx:127 pkg/storaged/btrfs/device.jsx:78 -#: pkg/storaged/btrfs/filesystem.jsx:77 +#: pkg/storaged/lvm2/volume-group.jsx:386 pkg/storaged/stratis/pool.jsx:519 +#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/mdraid/mdraid.jsx:291 msgid "UUID" msgstr "UUID" @@ -8948,7 +8942,7 @@ msgid "Undo" msgstr "Annulla" -#: pkg/storaged/crypto/keyslots.jsx:258 +#: pkg/storaged/crypto/keyslots.jsx:292 msgid "Unexpected PackageKit error during installation of $0: $1" msgstr "Errore inatteso di PackageKit durante l'installazione di $0: $1" @@ -8957,27 +8951,27 @@ msgid "Unexpected error" msgstr "Errore imprevisto" -#: pkg/storaged/block/unformatted-data.jsx:31 +#: pkg/storaged/block/unformatted-data.jsx:30 #, fuzzy #| msgid "Unrecognized data" msgid "Unformatted data" msgstr "Dati non riconosciuti" -#: pkg/systemd/logs.jsx:368 pkg/systemd/services-list.jsx:39 -#: pkg/systemd/services-list.jsx:44 +#: pkg/systemd/services-list.jsx:39 pkg/systemd/services-list.jsx:44 +#: pkg/systemd/logs.jsx:368 msgid "Unit" msgstr "Unità" -#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 -#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 -#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 +#: pkg/storaged/swap/swap.jsx:116 pkg/networkmanager/interfaces.js:510 +#: pkg/networkmanager/interfaces.js:1035 #: pkg/networkmanager/network-interface.jsx:199 -#: pkg/networkmanager/network-interface.jsx:201 -#: pkg/networkmanager/interfaces.js:510 pkg/networkmanager/interfaces.js:1035 -#: pkg/storaged/swap/swap.jsx:116 pkg/lib/machine-info.js:61 +#: pkg/networkmanager/network-interface.jsx:201 pkg/lib/machine-info.js:61 #: pkg/lib/machine-info.js:226 pkg/lib/machine-info.js:234 #: pkg/lib/machine-info.js:236 pkg/lib/machine-info.js:243 #: pkg/lib/machine-info.js:245 pkg/lib/machine-info.js:249 +#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 +#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 +#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 msgid "Unknown" msgstr "Sconosciuto" @@ -9006,14 +9000,13 @@ msgid "Unknown service name" msgstr "Nome del servizio sconosciuto" -#: pkg/storaged/crypto/keyslots.jsx:760 +#: pkg/storaged/crypto/keyslots.jsx:794 msgid "Unknown type" msgstr "Tipo sconosciuto" -#: pkg/storaged/stratis/stopped-pool.jsx:61 -#: pkg/storaged/crypto/locked-encrypted-data.jsx:37 -#: pkg/storaged/crypto/actions.jsx:41 pkg/storaged/crypto/actions.jsx:46 -#: pkg/shell/credentials.jsx:312 +#: pkg/storaged/crypto/locked-encrypted-data.jsx:36 +#: pkg/storaged/crypto/actions.jsx:40 pkg/storaged/crypto/actions.jsx:45 +#: pkg/storaged/stratis/stopped-pool.jsx:61 pkg/shell/credentials.jsx:312 msgid "Unlock" msgstr "Sblocca" @@ -9044,7 +9037,7 @@ msgid "Unlocking $target" msgstr "Sbloccaggio $target" -#: pkg/storaged/crypto/keyslots.jsx:188 +#: pkg/storaged/crypto/keyslots.jsx:221 #, fuzzy #| msgid "Unlocking disk..." msgid "Unlocking disk" @@ -9055,14 +9048,14 @@ msgid "Unmanaged interfaces" msgstr "Interfacce non gestite" -#: pkg/storaged/stratis/filesystem.jsx:172 pkg/storaged/nfs/nfs.jsx:309 -#: pkg/storaged/filesystem/mounting-dialog.jsx:339 +#: pkg/storaged/nfs/nfs.jsx:309 pkg/storaged/btrfs/subvolume.jsx:338 +#: pkg/storaged/stratis/filesystem.jsx:172 +#: pkg/storaged/filesystem/mounting-dialog.jsx:357 #: pkg/storaged/filesystem/filesystem.jsx:102 -#: pkg/storaged/btrfs/subvolume.jsx:338 msgid "Unmount" msgstr "Smonta" -#: pkg/storaged/filesystem/mounting-dialog.jsx:333 +#: pkg/storaged/filesystem/mounting-dialog.jsx:351 #, fuzzy #| msgid "Unmount filesystem" msgid "Unmount filesystem $0" @@ -9087,7 +9080,7 @@ msgid "Unpin unit" msgstr "Unità systemd" -#: pkg/storaged/block/unrecognized-data.jsx:35 +#: pkg/storaged/block/unrecognized-data.jsx:34 msgid "Unrecognized data" msgstr "Dati non riconosciuti" @@ -9111,7 +9104,7 @@ msgid "Until" msgstr "Fino a" -#: pkg/lib/cockpit.js:3848 pkg/lib/cockpit.js:3850 +#: pkg/lib/cockpit.js:3844 pkg/lib/cockpit.js:3846 msgid "Untrusted host" msgstr "Host non fidato" @@ -9121,13 +9114,13 @@ msgid "Update" msgstr "Aggiorna" -#: pkg/packagekit/updates.jsx:754 +#: pkg/packagekit/updates.jsx:753 #, fuzzy #| msgid "Updates available" msgid "Update Success Table" msgstr "Aggiornamenti disponibili" -#: pkg/packagekit/updates.jsx:957 +#: pkg/packagekit/updates.jsx:956 msgid "Update history" msgstr "Cronologia degli aggiornamenti" @@ -9135,7 +9128,7 @@ msgid "Update package information" msgstr "Aggiorna informazioni sul pacchetto" -#: pkg/packagekit/updates.jsx:679 pkg/packagekit/updates.jsx:749 +#: pkg/packagekit/updates.jsx:678 pkg/packagekit/updates.jsx:748 #, fuzzy #| msgid "Logout successful" msgid "Update was successful" @@ -9145,14 +9138,14 @@ msgid "Updated" msgstr "Aggiornato" -#: pkg/packagekit/updates.jsx:682 +#: pkg/packagekit/updates.jsx:681 #, fuzzy #| msgid "Updated packages may require a restart to take effect." msgid "Updated packages may require a reboot to take effect." msgstr "" "I pacchetti aggiornati possono richiedere un riavvio per avere effetto." -#: pkg/packagekit/updates.jsx:1441 +#: pkg/packagekit/updates.jsx:1440 msgid "Updates available" msgstr "Aggiornamenti disponibili" @@ -9181,13 +9174,15 @@ # translation auto-copied from project subscription-manager, version 1.9.X, # document keys +#: pkg/storaged/btrfs/volume.jsx:129 pkg/storaged/btrfs/device.jsx:80 +#: pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/storaged/block/unrecognized-data.jsx:50 +#: pkg/storaged/lvm2/physical-volume.jsx:119 pkg/storaged/stratis/pool.jsx:521 +#: pkg/storaged/stratis/filesystem.jsx:226 +#: pkg/storaged/filesystem/filesystem.jsx:152 #: pkg/systemd/overview-cards/usageCard.jsx:127 pkg/metrics/metrics.jsx:1949 #: pkg/metrics/metrics.jsx:1950 pkg/metrics/metrics.jsx:1951 -#: pkg/metrics/metrics.jsx:1952 pkg/storaged/stratis/filesystem.jsx:226 -#: pkg/storaged/stratis/pool.jsx:521 pkg/storaged/lvm2/physical-volume.jsx:119 -#: pkg/storaged/block/unrecognized-data.jsx:51 -#: pkg/storaged/filesystem/filesystem.jsx:152 pkg/storaged/btrfs/volume.jsx:129 -#: pkg/storaged/btrfs/device.jsx:80 pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/metrics/metrics.jsx:1952 msgid "Usage" msgstr "Utilizzo" @@ -9199,20 +9194,20 @@ msgstr "Utilizzo del core della $0CPU" # spazio su disco, quindi maschile -#: pkg/networkmanager/dialogs-common.jsx:103 pkg/storaged/dialog.jsx:624 -#: pkg/storaged/dialog.jsx:1139 +#: pkg/storaged/dialog.jsx:624 pkg/storaged/dialog.jsx:1141 +#: pkg/networkmanager/dialogs-common.jsx:103 #, fuzzy #| msgid "Used" msgid "Use" msgstr "Usato" -#: pkg/storaged/lvm2/vdo-pool.jsx:85 pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 pkg/storaged/lvm2/vdo-pool.jsx:85 #, fuzzy #| msgid "Compression" msgid "Use compression" msgstr "Compressione" -#: pkg/storaged/lvm2/vdo-pool.jsx:89 pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 pkg/storaged/lvm2/vdo-pool.jsx:89 #, fuzzy #| msgid "Deduplication" msgid "Use deduplication" @@ -9234,26 +9229,26 @@ msgid "Use the following keys to authenticate against other systems" msgstr "Utilizza le seguenti chiavi per autenticarti in altri sistemi" -#: pkg/sosreport/sosreport.jsx:324 +#: pkg/sosreport/sosreport.jsx:333 #, fuzzy #| msgid "Last login" msgid "Use verbose logging" msgstr "Ultimo accesso" # spazio su disco, quindi maschile -#: pkg/metrics/metrics.jsx:813 pkg/metrics/metrics.jsx:907 -#: pkg/storaged/swap/swap.jsx:125 +#: pkg/storaged/swap/swap.jsx:125 pkg/metrics/metrics.jsx:813 +#: pkg/metrics/metrics.jsx:907 msgid "Used" msgstr "Usato" -#: pkg/storaged/filesystem/mounting-dialog.jsx:110 +#: pkg/storaged/filesystem/mounting-dialog.jsx:113 msgid "" "Useful for mounts that are optional or need interaction (such as passphrases)" msgstr "" "Utile per i mount che sono opzionali o che necessitano di interazione (come " "le passphrase)" -#: pkg/systemd/services.jsx:917 pkg/storaged/dialog.jsx:1331 +#: pkg/storaged/dialog.jsx:1333 pkg/systemd/services.jsx:916 msgid "User" msgstr "Utente" @@ -9286,7 +9281,7 @@ msgstr "Il nome non può essere più lungo di $0 byte" #: pkg/static/login.html:94 pkg/shell/hosts_dialog.jsx:264 -#: pkg/users/account-create-dialog.js:76 pkg/users/account-details.js:262 +#: pkg/users/account-details.js:262 pkg/users/account-create-dialog.js:76 msgid "User name" msgstr "Nome utente" @@ -9315,7 +9310,7 @@ msgid "VDO backing devices can not be made smaller" msgstr "I dispositivi di supporto VDO non possono essere resi più piccoli" -#: pkg/storaged/utils.js:345 pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 pkg/storaged/utils.js:346 msgid "VDO device $0" msgstr "Dispositivo VDO $0" @@ -9345,7 +9340,7 @@ # translation auto-copied from project subscription-manager, version 1.9.X, # document keys -#: pkg/systemd/hwinfo.jsx:278 pkg/storaged/drive/drive.jsx:120 +#: pkg/storaged/drive/drive.jsx:120 pkg/systemd/hwinfo.jsx:278 msgid "Vendor" msgstr "Rivenditore" @@ -9359,7 +9354,7 @@ msgid "Verify fingerprint" msgstr "Impronta digitale" -#: pkg/storaged/stratis/utils.jsx:83 pkg/storaged/crypto/keyslots.jsx:540 +#: pkg/storaged/crypto/keyslots.jsx:574 pkg/storaged/stratis/utils.jsx:83 msgid "Verify key" msgstr "Verifica la chiave" @@ -9369,7 +9364,7 @@ # translation auto-copied from project subscription-manager, version 1.9.X, # document keys -#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:449 +#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:448 msgid "Version" msgstr "Versione" @@ -9401,8 +9396,8 @@ msgid "View all services" msgstr "Filtra Servizi" -#: pkg/kdump/kdump-view.jsx:526 #: pkg/lib/cockpit-components-modifications.jsx:154 +#: pkg/kdump/kdump-view.jsx:526 msgid "View automation script" msgstr "Visualizza script di automazione" @@ -9446,7 +9441,7 @@ msgid "View report" msgstr "Visualizza rapporto" -#: pkg/packagekit/updates.jsx:619 +#: pkg/packagekit/updates.jsx:618 #, fuzzy #| msgid "All logs" msgid "View update log" @@ -9469,8 +9464,8 @@ msgid "Volume group" msgstr "Gruppo di volumi" -#: pkg/storaged/lvm2/volume-group.jsx:223 #: pkg/storaged/lvm2/physical-volume.jsx:71 +#: pkg/storaged/lvm2/volume-group.jsx:223 #, fuzzy #| msgid "Removing physical volume from $target" msgid "Volume group is missing physical volumes" @@ -9500,7 +9495,7 @@ msgstr "" "In attesa che altri programmi finiscano di usare il gestore di pacchetti..." -#: pkg/storaged/crypto/keyslots.jsx:216 +#: pkg/storaged/crypto/keyslots.jsx:250 #: pkg/lib/cockpit-components-install-dialog.jsx:150 #: pkg/lib/cockpit-components-install-dialog.jsx:185 msgid "Waiting for other software management operations to finish" @@ -9536,7 +9531,7 @@ msgid "Web Console for Linux servers" msgstr "Web Console per server Linux" -#: pkg/packagekit/updates.jsx:530 pkg/packagekit/updates.jsx:935 +#: pkg/packagekit/updates.jsx:529 pkg/packagekit/updates.jsx:934 #, fuzzy #| msgid "Web Console for Linux servers" msgid "Web Console will restart" @@ -9574,7 +9569,7 @@ msgid "When empty, connect with the current user" msgstr "Se vuoti, connetti con l'utente corrente" -#: pkg/packagekit/updates.jsx:533 pkg/packagekit/updates.jsx:940 +#: pkg/packagekit/updates.jsx:532 pkg/packagekit/updates.jsx:939 msgid "" "When the Web Console is restarted, you will no longer see progress " "information. However, the update process will continue in the background. " @@ -9641,11 +9636,11 @@ msgid "Yearly" msgstr "Annuale" -#: pkg/systemd/reporting.jsx:281 pkg/networkmanager/network-interface.jsx:241 +#: pkg/networkmanager/network-interface.jsx:241 pkg/systemd/reporting.jsx:281 msgid "Yes" msgstr "Sì" -#: pkg/static/login.js:765 pkg/shell/hosts_dialog.jsx:488 +#: pkg/shell/hosts_dialog.jsx:488 pkg/static/login.js:765 msgid "You are connecting to $0 for the first time." msgstr "Collegamento a $0 per la prima volta" @@ -9717,11 +9712,11 @@ "Il server chiuderà presto la connessione. È possibile riconnettersi dopo che " "è stato riavviato." -#: pkg/lib/cockpit.js:3838 +#: pkg/lib/cockpit.js:3834 msgid "Your session has been terminated." msgstr "La tua sessione e' terminata." -#: pkg/lib/cockpit.js:3840 +#: pkg/lib/cockpit.js:3836 msgid "Your session has expired. Please log in again." msgstr "La sessione è scaduta. Effettua di nuovo il login." @@ -9794,7 +9789,7 @@ msgid "average: $0%" msgstr "media: $0%" -#: pkg/storaged/dialog.jsx:1116 +#: pkg/storaged/dialog.jsx:1118 #, fuzzy #| msgid "Create VDO device" msgid "backing device for VDO device" @@ -9849,7 +9844,7 @@ msgstr "" #: pkg/storaged/btrfs/volume.jsx:146 pkg/storaged/btrfs/volume.jsx:158 -#: pkg/storaged/btrfs/filesystem.jsx:87 pkg/storaged/btrfs/subvolume.jsx:424 +#: pkg/storaged/btrfs/subvolume.jsx:424 pkg/storaged/btrfs/filesystem.jsx:87 #, fuzzy #| msgid "Storage volumes" msgid "btrfs subvolumes" @@ -9861,11 +9856,11 @@ msgid "btrfs volume" msgstr "Volume di Archiviazione" -#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:318 msgid "bug fix" msgstr "bug fix" -#: pkg/storaged/utils.js:175 +#: pkg/storaged/utils.js:176 msgctxt "format-bytes" msgid "bytes" msgstr "byte" @@ -9908,7 +9903,7 @@ msgid "cpu" msgstr "cpu" -#: pkg/systemd/manifest.json:0 pkg/kdump/manifest.json:0 +#: pkg/kdump/manifest.json:0 pkg/systemd/manifest.json:0 msgid "crash" msgstr "crash" @@ -9932,20 +9927,21 @@ msgid "debug" msgstr "debug" -#: pkg/storaged/stratis/filesystem.jsx:121 pkg/storaged/stratis/pool.jsx:133 -#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 -#: pkg/storaged/lvm2/block-logical-volume.jsx:64 -#: pkg/storaged/block/format-dialog.jsx:208 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 +#: pkg/storaged/partitions/partition.jsx:43 #: pkg/storaged/partitions/format-disk-dialog.jsx:35 -#: pkg/storaged/partitions/partition.jsx:43 pkg/storaged/mdraid/mdraid.jsx:112 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 #: pkg/storaged/btrfs/subvolume.jsx:217 +#: pkg/storaged/block/format-dialog.jsx:208 +#: pkg/storaged/lvm2/block-logical-volume.jsx:64 +#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 +#: pkg/storaged/stratis/pool.jsx:133 pkg/storaged/stratis/filesystem.jsx:121 +#: pkg/storaged/mdraid/mdraid.jsx:112 #, fuzzy #| msgid "Delete" msgid "delete" msgstr "Cancella" -#: pkg/storaged/dialog.jsx:1119 +#: pkg/storaged/dialog.jsx:1121 msgid "device of btrfs volume" msgstr "" @@ -9977,19 +9973,19 @@ msgid "drive" msgstr "disco" -#: pkg/systemd/overview-cards/configurationCard.jsx:55 -#: pkg/networkmanager/network-interface.jsx:349 -#: pkg/networkmanager/dialogs-common.jsx:262 -#: pkg/storaged/stratis/filesystem.jsx:220 pkg/storaged/stratis/pool.jsx:517 -#: pkg/storaged/lvm2/volume-group.jsx:384 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 +#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/storaged/crypto/encryption.jsx:233 +#: pkg/storaged/crypto/encryption.jsx:236 #: pkg/storaged/lvm2/block-logical-volume.jsx:288 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/lvm2/volume-group.jsx:384 pkg/storaged/stratis/pool.jsx:517 +#: pkg/storaged/stratis/filesystem.jsx:220 +#: pkg/storaged/filesystem/utils.jsx:221 #: pkg/storaged/filesystem/filesystem.jsx:145 -#: pkg/storaged/filesystem/utils.jsx:221 pkg/storaged/crypto/encryption.jsx:233 -#: pkg/storaged/crypto/encryption.jsx:236 -#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 -#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/users/account-details.js:291 -#: pkg/users/account-details.js:321 +#: pkg/networkmanager/dialogs-common.jsx:261 +#: pkg/networkmanager/network-interface.jsx:349 +#: pkg/systemd/overview-cards/configurationCard.jsx:55 +#: pkg/users/account-details.js:291 pkg/users/account-details.js:321 msgid "edit" msgstr "modifica" @@ -10007,7 +10003,7 @@ msgid "encryption" msgstr "crittografia" -#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:318 msgid "enhancement" msgstr "miglioramento" @@ -10065,7 +10061,7 @@ msgid "extension" msgstr "estensione" -#: pkg/systemd/overview-cards/configurationCard.jsx:153 +#: pkg/systemd/overview-cards/configurationCard.jsx:151 msgid "failed to list ssh host keys: $0" msgstr "impossibile elencare le chiavi host ssh: $0" @@ -10250,13 +10246,13 @@ msgid "max: $0%" msgstr "max: $0%" -#: pkg/storaged/dialog.jsx:1115 +#: pkg/storaged/dialog.jsx:1117 #, fuzzy #| msgid "Member of RAID device" msgid "member of MDRAID device" msgstr "Membro del dispositivo RAID" -#: pkg/storaged/dialog.jsx:1117 +#: pkg/storaged/dialog.jsx:1119 #, fuzzy #| msgid "Reset Storage Pool" msgid "member of Stratis pool" @@ -10284,7 +10280,7 @@ msgid "more details" msgstr "Maggiori dettagli" -#: pkg/storaged/utils.js:887 pkg/storaged/manifest.json:0 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "mount" msgstr "mount" @@ -10292,7 +10288,7 @@ msgid "nbde" msgstr "nbde" -#: pkg/systemd/manifest.json:0 pkg/networkmanager/manifest.json:0 +#: pkg/networkmanager/manifest.json:0 pkg/systemd/manifest.json:0 msgid "network" msgstr "rete" @@ -10326,11 +10322,11 @@ msgid "nice" msgstr "nice" -#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 -#: pkg/storaged/stratis/stopped-pool.jsx:130 -#: pkg/storaged/stratis/stopped-pool.jsx:134 #: pkg/storaged/crypto/encryption.jsx:232 #: pkg/storaged/crypto/encryption.jsx:235 +#: pkg/storaged/stratis/stopped-pool.jsx:130 +#: pkg/storaged/stratis/stopped-pool.jsx:134 +#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 msgid "none" msgstr "nessuno" @@ -10382,7 +10378,7 @@ msgid "password quality" msgstr "password" -#: pkg/packagekit/updates.jsx:344 +#: pkg/packagekit/updates.jsx:343 msgid "patches" msgstr "patch" @@ -10404,7 +10400,7 @@ msgid "performance" msgstr "Metriche di performance" -#: pkg/storaged/dialog.jsx:1114 +#: pkg/storaged/dialog.jsx:1116 #, fuzzy #| msgid "Create volume group" msgid "physical volume of LVM2 volume group" @@ -10457,17 +10453,17 @@ msgid "recommended" msgstr "raccomandato" -#: pkg/storaged/utils.js:946 +#: pkg/storaged/utils.js:947 msgid "remove from LVM2" msgstr "rimuovere da LVM2" -#: pkg/storaged/utils.js:935 +#: pkg/storaged/utils.js:936 #, fuzzy #| msgid "remove from RAID" msgid "remove from MDRAID" msgstr "rimuovere dal RAID" -#: pkg/storaged/utils.js:905 +#: pkg/storaged/utils.js:906 #, fuzzy #| msgid "remove from LVM2" msgid "remove from btrfs volume" @@ -10481,11 +10477,11 @@ msgid "roles" msgstr "ruoli" -#: pkg/systemd/overview.jsx:159 +#: pkg/systemd/overview.jsx:169 msgid "running $0" msgstr "$0 in esecuzione" -#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:311 +#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:310 #: pkg/packagekit/manifest.json:0 msgid "security" msgstr "sicurezza" @@ -10561,7 +10557,7 @@ msgid "ssh server is empty" msgstr "il server ssh è vuoto" -#: pkg/storaged/utils.js:924 pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 pkg/storaged/utils.js:925 #: pkg/storaged/mdraid/mdraid.jsx:59 msgid "stop" msgstr "ferma" @@ -10626,8 +10622,8 @@ msgid "unit" msgstr "unità" -#: pkg/systemd/services.jsx:555 pkg/systemd/services.jsx:565 -#: pkg/systemd/hw-detect.js:129 +#: pkg/systemd/hw-detect.js:129 pkg/systemd/services.jsx:555 +#: pkg/systemd/services.jsx:565 msgid "unknown" msgstr "sconosciuto" @@ -10640,12 +10636,12 @@ msgid "unmask" msgstr "smaschera" -#: pkg/storaged/utils.js:874 pkg/storaged/utils.js:887 -#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/manifest.json:0 +#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/utils.js:875 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "unmount" msgstr "smonta" -#: pkg/storaged/utils.js:533 +#: pkg/storaged/utils.js:534 msgid "unpartitioned space on $0" msgstr "spazio non partizionato su $0" diff -Nru cockpit-314/po/ja.po cockpit-316/po/ja.po --- cockpit-314/po/ja.po 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/po/ja.po 2024-04-25 09:45:58.000000000 +0000 @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-26 02:47+0000\n" +"POT-Creation-Date: 2024-04-11 02:47+0000\n" "PO-Revision-Date: 2024-02-12 16:45+0000\n" "Last-Translator: 김인수 \n" "Language-Team: Japanese \n" "Language-Team: Georgian \n" "Language-Team: Korean \n" @@ -79,8 +79,8 @@ msgid_plural "$0 days" msgstr[0] "$0 일" -#: pkg/playground/translate.js:26 pkg/playground/translate.js:29 -#: pkg/storaged/mdraid/mdraid.jsx:257 +#: pkg/storaged/mdraid/mdraid.jsx:257 pkg/playground/translate.js:26 +#: pkg/playground/translate.js:29 msgid "$0 disk is missing" msgid_plural "$0 disks are missing" msgstr[0] "$0 디스크가 없습니다" @@ -95,7 +95,7 @@ msgid "$0 disks" msgstr "$0 디스크" -#: pkg/shell/topnav.jsx:152 +#: pkg/shell/topnav.jsx:154 msgid "$0 documentation" msgstr "$0 문서" @@ -103,11 +103,11 @@ msgid "$0 error" msgstr "$0 오류" -#: pkg/lib/cockpit.js:2698 +#: pkg/lib/cockpit.js:2694 msgid "$0 exited with code $1" msgstr "$0가 코드 $1로 종료됨" -#: pkg/lib/cockpit.js:2700 +#: pkg/lib/cockpit.js:2696 msgid "$0 failed" msgstr "$0가 실패" @@ -138,16 +138,17 @@ msgid "$0 is an existing file" msgstr "$0는 존재하는 파일입니다" -#: pkg/storaged/stratis/filesystem.jsx:125 pkg/storaged/stratis/pool.jsx:137 -#: pkg/storaged/lvm2/volume-group.jsx:85 pkg/storaged/lvm2/volume-group.jsx:336 +#: pkg/storaged/partitions/partition.jsx:47 +#: pkg/storaged/partitions/format-disk-dialog.jsx:39 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:50 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:84 +#: pkg/storaged/block/format-dialog.jsx:212 pkg/storaged/block/resize.jsx:425 +#: pkg/storaged/block/resize.jsx:571 #: pkg/storaged/lvm2/block-logical-volume.jsx:68 #: pkg/storaged/lvm2/block-logical-volume.jsx:151 -#: pkg/storaged/block/format-dialog.jsx:212 pkg/storaged/block/resize.jsx:425 -#: pkg/storaged/block/resize.jsx:571 pkg/storaged/legacy-vdo/legacy-vdo.jsx:50 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:84 -#: pkg/storaged/partitions/format-disk-dialog.jsx:39 -#: pkg/storaged/partitions/partition.jsx:47 pkg/storaged/mdraid/mdraid.jsx:63 -#: pkg/storaged/mdraid/mdraid.jsx:116 +#: pkg/storaged/lvm2/volume-group.jsx:85 pkg/storaged/lvm2/volume-group.jsx:336 +#: pkg/storaged/stratis/pool.jsx:137 pkg/storaged/stratis/filesystem.jsx:125 +#: pkg/storaged/mdraid/mdraid.jsx:63 pkg/storaged/mdraid/mdraid.jsx:116 msgid "$0 is in use" msgstr "$0 사용 중" @@ -156,11 +157,11 @@ msgid "$0 is not available from any repository." msgstr "$0는 저장소에서 사용 할 수 없습니다." -#: pkg/static/login.js:759 pkg/shell/hosts_dialog.jsx:464 +#: pkg/shell/hosts_dialog.jsx:464 pkg/static/login.js:759 msgid "$0 key changed" msgstr "$0 키 변경됩니다" -#: pkg/lib/cockpit.js:2696 +#: pkg/lib/cockpit.js:2692 msgid "$0 killed with signal $1" msgstr "$1 시그널에 의해 $0가 종료되었습니다" @@ -193,7 +194,7 @@ msgid_plural "$0 packages" msgstr[0] "$0 꾸러미" -#: pkg/packagekit/updates.jsx:703 pkg/packagekit/updates.jsx:818 +#: pkg/packagekit/updates.jsx:702 pkg/packagekit/updates.jsx:817 msgid "$0 package needs a system reboot" msgid_plural "$0 packages need a system reboot" msgstr[0] "$0 꾸러미의 경우 시스템을 재시작해야 합니다" @@ -207,7 +208,7 @@ msgid "$0 partitions" msgstr "$0 파티션" -#: pkg/packagekit/updates.jsx:790 +#: pkg/packagekit/updates.jsx:789 msgid "$0 security fix available" msgid_plural "$0 security fixes available" msgstr[0] "사용 가능한 $0 보안 수정" @@ -217,12 +218,12 @@ msgid_plural "$0 services have failed" msgstr[0] "$0 서비스 실패" -#: pkg/packagekit/updates.jsx:720 pkg/packagekit/updates.jsx:830 +#: pkg/packagekit/updates.jsx:719 pkg/packagekit/updates.jsx:829 msgid "$0 service needs to be restarted" msgid_plural "$0 services need to be restarted" msgstr[0] "$0 서비스를 재시작해야 합니다" -#: pkg/storaged/crypto/keyslots.jsx:778 +#: pkg/storaged/crypto/keyslots.jsx:812 msgid "$0 slot remains" msgid_plural "$0 slots remain" msgstr[0] "$0 슬롯이 남아 있습니다" @@ -232,7 +233,7 @@ msgid_plural "$0 spikes" msgstr[0] "$0 순간 사용량" -#: pkg/storaged/lvm2/block-logical-volume.jsx:403 +#: pkg/storaged/lvm2/block-logical-volume.jsx:402 msgid "$0 synchronized" msgstr "$0가 동기화 되었습니다" @@ -241,7 +242,7 @@ msgid "$0 total" msgstr "총 $0" -#: pkg/packagekit/updates.jsx:798 +#: pkg/packagekit/updates.jsx:797 msgid "$0 update available" msgid_plural "$0 updates available" msgstr[0] "$0 사용 가능한 최신화" @@ -272,11 +273,11 @@ msgid "$0: crash at $1" msgstr "$0: $1에서 충돌" -#: pkg/storaged/utils.js:274 +#: pkg/storaged/utils.js:275 msgid "$name (from $host)" msgstr "$name ($host에서)" -#: pkg/storaged/dialog.jsx:1222 +#: pkg/storaged/dialog.jsx:1224 msgid "(Not part of target)" msgstr "(대상에 포함되지 않음)" @@ -293,7 +294,7 @@ msgid "(recommended)" msgstr "(권장 사항)" -#: pkg/packagekit/updates.jsx:800 +#: pkg/packagekit/updates.jsx:799 msgid ", including $1 security fix" msgid_plural ", including $1 security fixes" msgstr[0] "$1 보안 수정 포함" @@ -462,8 +463,8 @@ msgid "5 min" msgstr "5분" -#: pkg/lib/cockpit-components-plot.jsx:267 #: pkg/lib/cockpit-components-shutdown.jsx:178 +#: pkg/lib/cockpit-components-plot.jsx:267 msgid "5 minutes" msgstr "5분" @@ -580,11 +581,11 @@ msgid "ARP ping" msgstr "ARP 핑" -#: pkg/shell/topnav.jsx:174 +#: pkg/shell/topnav.jsx:176 msgid "About Web Console" msgstr "웹 콘솔 정보" -#: pkg/systemd/hw-detect.js:114 pkg/lib/machine-info.js:247 +#: pkg/lib/machine-info.js:247 pkg/systemd/hw-detect.js:114 msgid "Absent" msgstr "부재" @@ -604,12 +605,12 @@ msgid "Account not available or cannot be edited." msgstr "계정을 사용할 수 없거나 편집 할 수 없습니다." -#: pkg/users/accounts-list.js:232 pkg/users/accounts-list.js:446 -#: pkg/users/account-details.js:236 pkg/users/manifest.json:0 +#: pkg/users/account-details.js:236 pkg/users/accounts-list.js:232 +#: pkg/users/accounts-list.js:446 pkg/users/manifest.json:0 msgid "Accounts" msgstr "계정" -#: pkg/storaged/dialog.jsx:1244 +#: pkg/storaged/dialog.jsx:1246 msgid "Action" msgstr "동작" @@ -637,7 +638,7 @@ msgid "Active backup" msgstr "활성 백업" -#: pkg/shell/topnav.jsx:212 pkg/shell/active-pages-modal.jsx:97 +#: pkg/shell/topnav.jsx:223 pkg/shell/active-pages-modal.jsx:97 #: pkg/shell/active-pages-modal.jsx:105 msgid "Active pages" msgstr "활성 페이지" @@ -659,17 +660,18 @@ msgid "Adaptive transmit load balancing" msgstr "적응형 전송 로드 밸런싱" -#: pkg/systemd/timer-dialog.jsx:367 pkg/networkmanager/dialogs-common.jsx:160 -#: pkg/storaged/stratis/pool.jsx:217 pkg/storaged/lvm2/volume-group.jsx:209 -#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/iscsi/create-dialog.jsx:120 +#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/crypto/keyslots.jsx:492 +#: pkg/storaged/crypto/keyslots.jsx:815 +#: pkg/storaged/iscsi/create-dialog.jsx:120 #: pkg/storaged/iscsi/create-dialog.jsx:144 -#: pkg/storaged/crypto/keyslots.jsx:458 pkg/storaged/crypto/keyslots.jsx:781 -#: pkg/storaged/mdraid/mdraid.jsx:167 pkg/shell/hosts_dialog.jsx:252 +#: pkg/storaged/lvm2/volume-group.jsx:209 pkg/storaged/stratis/pool.jsx:217 +#: pkg/storaged/mdraid/mdraid.jsx:167 pkg/networkmanager/dialogs-common.jsx:160 +#: pkg/systemd/timer-dialog.jsx:367 pkg/shell/hosts_dialog.jsx:252 #: pkg/shell/credentials.jsx:184 pkg/users/authorized-keys-panel.js:68 msgid "Add" msgstr "추가" -#: pkg/networkmanager/network-interface-members.jsx:166 +#: pkg/networkmanager/network-interface-members.jsx:167 #: pkg/lib/cockpit-components-firewalld-request.jsx:146 msgid "Add $0" msgstr "$0 추가" @@ -679,7 +681,7 @@ msgid "Add DNS server" msgstr "DNS 서버 추가" -#: pkg/storaged/crypto/keyslots.jsx:385 +#: pkg/storaged/crypto/keyslots.jsx:419 msgid "Add Network Bound Disk Encryption" msgstr "네트워크 연결 디스크 암호화 추가" @@ -734,12 +736,12 @@ msgid "Add disks" msgstr "디스크 추가" -#: pkg/storaged/iscsi/create-dialog.jsx:29 #: pkg/storaged/overview/overview.jsx:153 +#: pkg/storaged/iscsi/create-dialog.jsx:29 msgid "Add iSCSI portal" msgstr "iSCSI 포털 추가" -#: pkg/storaged/crypto/keyslots.jsx:422 pkg/shell/credentials.jsx:90 +#: pkg/storaged/crypto/keyslots.jsx:456 pkg/shell/credentials.jsx:90 #: pkg/users/authorized-keys-panel.js:112 msgid "Add key" msgstr "키 추가" @@ -748,7 +750,7 @@ msgid "Add keyserver" msgstr "키 서버 추가" -#: pkg/networkmanager/network-interface-members.jsx:186 +#: pkg/networkmanager/network-interface-members.jsx:187 msgid "Add member" msgstr "멤버 추가" @@ -806,7 +808,7 @@ msgid "Add services to zone $0" msgstr "$0 영역에 서비스 추가" -#: pkg/networkmanager/network-main.jsx:143 pkg/networkmanager/team.jsx:154 +#: pkg/networkmanager/team.jsx:154 pkg/networkmanager/network-main.jsx:143 msgid "Add team" msgstr "팀 추가" @@ -814,15 +816,15 @@ msgid "Add zone" msgstr "영역 추가" -#: pkg/storaged/crypto/keyslots.jsx:327 +#: pkg/storaged/crypto/keyslots.jsx:361 msgid "Adding \"$0\" to encryption options" msgstr "암호화 옵션에 \"$0\"를 추가하기" -#: pkg/storaged/crypto/keyslots.jsx:316 +#: pkg/storaged/crypto/keyslots.jsx:350 msgid "Adding \"$0\" to filesystem options" msgstr "파일 시스템 옵션에 \"$0\" 추가하기" -#: pkg/networkmanager/network-interface-members.jsx:165 +#: pkg/networkmanager/network-interface-members.jsx:166 msgid "" "Adding $0 will break the connection to the server, and will make the " "administration UI unavailable." @@ -844,7 +846,7 @@ "사용자 지정 포트를 추가하면 방화벽이 다시 적재됩니다. 방화벽을 다시 적재하면 " "런타임 전용 설정이 손실됩니다!" -#: pkg/storaged/crypto/keyslots.jsx:408 +#: pkg/storaged/crypto/keyslots.jsx:442 msgid "Adding key" msgstr "키 추가 중" @@ -852,7 +854,7 @@ msgid "Adding physical volume to $target" msgstr "$target에 물리 볼륨 추가 중" -#: pkg/storaged/crypto/keyslots.jsx:288 +#: pkg/storaged/crypto/keyslots.jsx:322 msgid "Adding rd.neednet=1 to kernel command line" msgstr "커널 명령행에 rd.neednet=1 추가하기" @@ -880,9 +882,9 @@ msgid "Additional ports" msgstr "추가 포트" +#: pkg/storaged/iscsi/create-dialog.jsx:111 pkg/storaged/iscsi/session.jsx:92 #: pkg/networkmanager/ip-settings.jsx:198 -#: pkg/networkmanager/ip-settings.jsx:358 pkg/storaged/iscsi/session.jsx:92 -#: pkg/storaged/iscsi/create-dialog.jsx:111 +#: pkg/networkmanager/ip-settings.jsx:358 msgid "Address" msgstr "주소" @@ -914,11 +916,11 @@ msgid "Administrative access" msgstr "관리 접근" -#: pkg/sosreport/sosreport.jsx:415 +#: pkg/sosreport/sosreport.jsx:424 msgid "Administrative access is required to create and access reports." msgstr "관리 접근은 보고서 생성하거고 접근해야 합니다." -#: pkg/sosreport/sosreport.jsx:414 +#: pkg/sosreport/sosreport.jsx:423 msgid "Administrative access required" msgstr "필요한 관리 접근" @@ -1017,8 +1019,8 @@ msgid "Application information is missing" msgstr "응용프로그램 정보가 누락되었습니다" -#: pkg/apps/index.html:23 pkg/apps/application-list.jsx:184 -#: pkg/apps/application.jsx:146 pkg/apps/manifest.json:0 +#: pkg/apps/index.html:23 pkg/apps/application.jsx:146 +#: pkg/apps/application-list.jsx:184 pkg/apps/manifest.json:0 msgid "Applications" msgstr "응용프로그램" @@ -1054,7 +1056,7 @@ msgid "Applying updates failed" msgstr "최신화 적용 실패" -#: pkg/storaged/filesystem/mounting-dialog.jsx:74 +#: pkg/storaged/filesystem/mounting-dialog.jsx:77 msgid "Appropriate for critical mounts, such as /var" msgstr "/var와 같은 중요한 적재에 적절한" @@ -1070,7 +1072,7 @@ msgid "Asset tag" msgstr "자산 태그" -#: pkg/storaged/filesystem/mounting-dialog.jsx:118 +#: pkg/storaged/filesystem/mounting-dialog.jsx:121 msgid "At boot" msgstr "부팅" @@ -1083,8 +1085,9 @@ msgid "At least one block device is needed." msgstr "최소 1개의 블록 장치가 필요합니다." -#: pkg/storaged/stratis/pool.jsx:211 pkg/storaged/lvm2/create-dialog.jsx:57 -#: pkg/storaged/lvm2/volume-group.jsx:203 pkg/storaged/mdraid/mdraid.jsx:161 +#: pkg/storaged/lvm2/create-dialog.jsx:57 +#: pkg/storaged/lvm2/volume-group.jsx:203 pkg/storaged/stratis/pool.jsx:211 +#: pkg/storaged/mdraid/mdraid.jsx:161 msgid "At least one disk is needed." msgstr "최소 1개의 디스크가 필요합니다." @@ -1104,7 +1107,7 @@ msgid "At specific time" msgstr "특정 시간" -#: pkg/sosreport/sosreport.jsx:492 +#: pkg/sosreport/sosreport.jsx:501 msgid "Attributes" msgstr "속성" @@ -1151,10 +1154,10 @@ msgid "Authorized public SSH keys" msgstr "승인된 공개 SSH 키" -#: pkg/networkmanager/network-interface.jsx:378 #: pkg/networkmanager/ip-settings.jsx:40 pkg/networkmanager/ip-settings.jsx:244 #: pkg/networkmanager/ip-settings.jsx:292 #: pkg/networkmanager/ip-settings.jsx:340 pkg/networkmanager/mtu.jsx:79 +#: pkg/networkmanager/network-interface.jsx:378 msgid "Automatic" msgstr "자동" @@ -1194,7 +1197,7 @@ msgid "Available targets on $0" msgstr "$0에서 사용 가능한 대상" -#: pkg/packagekit/updates.jsx:445 pkg/packagekit/updates.jsx:927 +#: pkg/packagekit/updates.jsx:444 pkg/packagekit/updates.jsx:926 msgid "Available updates" msgstr "사용 가능한 최신화" @@ -1259,9 +1262,9 @@ msgid "Block device for filesystems" msgstr "파일 시스템의 블록 장치" +#: pkg/storaged/stratis/pool.jsx:206 pkg/storaged/stratis/pool.jsx:563 +#: pkg/storaged/stratis/create-dialog.jsx:55 #: pkg/storaged/stratis/stopped-pool.jsx:138 -#: pkg/storaged/stratis/create-dialog.jsx:55 pkg/storaged/stratis/pool.jsx:206 -#: pkg/storaged/stratis/pool.jsx:563 msgid "Block devices" msgstr "블록 장치" @@ -1279,12 +1282,12 @@ msgid "Boot" msgstr "부팅" -#: pkg/storaged/filesystem/mounting-dialog.jsx:77 +#: pkg/storaged/filesystem/mounting-dialog.jsx:80 msgid "Boot fails if filesystem does not mount, preventing remote access" msgstr "만약 파일 시스템이 적재되지 않으면 부팅이 실패하여 원격 접근이 차단됨" -#: pkg/storaged/filesystem/mounting-dialog.jsx:88 -#: pkg/storaged/filesystem/mounting-dialog.jsx:99 +#: pkg/storaged/filesystem/mounting-dialog.jsx:91 +#: pkg/storaged/filesystem/mounting-dialog.jsx:102 msgid "Boot still succeeds when filesystem does not mount" msgstr "파일 시스템이 적재되어 않았을 때에도 부팅이 계속 진행됩니다" @@ -1319,12 +1322,12 @@ msgid "Btrfs volume is mounted" msgstr "Btrfs 볼륨이 적재되었습니다" -#: pkg/packagekit/updates.jsx:1437 +#: pkg/packagekit/updates.jsx:1436 msgid "Bug fix updates available" msgstr "사용 가능한 결점 수정 최신화" # ctx::sourcefile::/rhn/errata/manage/Create.do -#: pkg/packagekit/updates.jsx:387 +#: pkg/packagekit/updates.jsx:386 msgid "Bugs" msgstr "결점" @@ -1345,7 +1348,7 @@ msgid "Bypass browser check" msgstr "웹 탐색기 점검을 우회합니다" -#: pkg/systemd/overview-cards/usageCard.jsx:132 pkg/systemd/hwinfo.jsx:114 +#: pkg/systemd/hwinfo.jsx:114 pkg/systemd/overview-cards/usageCard.jsx:132 #: pkg/metrics/metrics.jsx:109 pkg/metrics/metrics.jsx:820 #: pkg/metrics/metrics.jsx:1572 pkg/metrics/metrics.jsx:1949 msgid "CPU" @@ -1367,7 +1370,7 @@ msgid "CPU usage/load" msgstr "중앙처리장치 사용량/부하" -#: pkg/packagekit/updates.jsx:369 +#: pkg/packagekit/updates.jsx:368 msgid "CVE" msgstr "CVE" @@ -1383,28 +1386,29 @@ msgid "Can not find any logs using the current combination of filters." msgstr "현재 필터 조합을 사용하여 기록을 찾을 수 없습니다." -#: pkg/static/login.html:141 pkg/playground/translate.html:39 -#: pkg/sosreport/sosreport.jsx:281 pkg/sosreport/sosreport.jsx:366 -#: pkg/systemd/timer-dialog.jsx:151 pkg/systemd/reporting.jsx:383 +#: pkg/playground/translate.html:39 pkg/static/login.html:141 +#: pkg/storaged/jobs-panel.jsx:140 pkg/apps/utils.jsx:69 +#: pkg/sosreport/sosreport.jsx:290 pkg/sosreport/sosreport.jsx:375 +#: pkg/networkmanager/dialogs-common.jsx:163 +#: pkg/networkmanager/firewall.jsx:613 pkg/networkmanager/firewall.jsx:814 +#: pkg/networkmanager/firewall.jsx:913 +#: pkg/lib/cockpit-components-dialog.jsx:131 +#: pkg/lib/cockpit-components-shutdown.jsx:193 pkg/kdump/kdump-view.jsx:235 +#: pkg/systemd/timer-dialog.jsx:151 pkg/systemd/hwinfo.jsx:231 #: pkg/systemd/overview-cards/motdCard.jsx:65 #: pkg/systemd/overview-cards/tuned-dialog.jsx:314 +#: pkg/systemd/overview-cards/realmd.jsx:434 +#: pkg/systemd/overview-cards/configurationCard.jsx:280 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:194 -#: pkg/systemd/overview-cards/configurationCard.jsx:284 -#: pkg/systemd/overview-cards/realmd.jsx:434 pkg/systemd/hwinfo.jsx:231 #: pkg/systemd/service-details.jsx:86 pkg/systemd/service-details.jsx:715 -#: pkg/metrics/metrics.jsx:1481 pkg/networkmanager/dialogs-common.jsx:163 -#: pkg/networkmanager/firewall.jsx:613 pkg/networkmanager/firewall.jsx:814 -#: pkg/networkmanager/firewall.jsx:913 pkg/kdump/kdump-view.jsx:235 -#: pkg/storaged/jobs-panel.jsx:140 pkg/shell/hosts_dialog.jsx:285 +#: pkg/systemd/reporting.jsx:383 pkg/shell/hosts_dialog.jsx:285 #: pkg/shell/hosts_dialog.jsx:382 pkg/shell/hosts_dialog.jsx:514 #: pkg/shell/hosts_dialog.jsx:891 pkg/shell/shell-modals.jsx:118 -#: pkg/shell/credentials.jsx:313 pkg/shell/superuser.jsx:182 -#: pkg/shell/superuser.jsx:219 pkg/shell/superuser.jsx:264 -#: pkg/shell/active-pages-modal.jsx:100 pkg/packagekit/kpatch.jsx:315 -#: pkg/packagekit/updates.jsx:542 pkg/packagekit/updates.jsx:580 -#: pkg/packagekit/autoupdates.jsx:274 pkg/apps/utils.jsx:69 -#: pkg/lib/cockpit-components-shutdown.jsx:193 -#: pkg/lib/cockpit-components-dialog.jsx:131 +#: pkg/shell/superuser.jsx:182 pkg/shell/superuser.jsx:219 +#: pkg/shell/superuser.jsx:264 pkg/shell/credentials.jsx:313 +#: pkg/shell/active-pages-modal.jsx:100 pkg/metrics/metrics.jsx:1481 +#: pkg/packagekit/updates.jsx:541 pkg/packagekit/updates.jsx:579 +#: pkg/packagekit/kpatch.jsx:315 pkg/packagekit/autoupdates.jsx:274 msgid "Cancel" msgstr "취소" @@ -1424,7 +1428,7 @@ msgid "Cannot connect to an unknown host" msgstr "알 수 없는 호스트에 연결 할 수 없습니다" -#: pkg/lib/cockpit.js:3860 +#: pkg/lib/cockpit.js:3856 msgid "Cannot forward login credentials" msgstr "로그인 정보를 전송할 수 없습니다" @@ -1437,8 +1441,8 @@ msgid "Cannot schedule event in the past" msgstr "이전 이벤트를 예약할 수 없습니다" -#: pkg/storaged/lvm2/volume-group.jsx:387 pkg/storaged/drive/drive.jsx:125 -#: pkg/storaged/mdraid/mdraid.jsx:293 pkg/storaged/btrfs/volume.jsx:128 +#: pkg/storaged/btrfs/volume.jsx:128 pkg/storaged/drive/drive.jsx:125 +#: pkg/storaged/lvm2/volume-group.jsx:387 pkg/storaged/mdraid/mdraid.jsx:293 msgid "Capacity" msgstr "용량" @@ -1446,10 +1450,11 @@ msgid "Carrier" msgstr "캐리어" -#: pkg/systemd/overview-cards/configurationCard.jsx:283 -#: pkg/storaged/stratis/pool.jsx:531 pkg/storaged/iscsi/create-dialog.jsx:171 +#: pkg/storaged/iscsi/create-dialog.jsx:171 pkg/storaged/stratis/pool.jsx:531 +#: pkg/lib/serverTime.js:729 +#: pkg/systemd/overview-cards/configurationCard.jsx:279 #: pkg/users/expiration-dialogs.js:115 pkg/users/expiration-dialogs.js:217 -#: pkg/users/shell-dialog.js:78 pkg/lib/serverTime.js:729 +#: pkg/users/shell-dialog.js:78 msgid "Change" msgstr "변경" @@ -1457,7 +1462,7 @@ msgid "Change cryptographic policy" msgstr "암호화 정책을 변경합니다" -#: pkg/systemd/overview-cards/configurationCard.jsx:281 +#: pkg/systemd/overview-cards/configurationCard.jsx:277 msgid "Change host name" msgstr "호스트 이름 변경" @@ -1473,7 +1478,7 @@ msgid "Change label" msgstr "분류 변경" -#: pkg/storaged/stratis/pool.jsx:400 pkg/storaged/crypto/keyslots.jsx:480 +#: pkg/storaged/crypto/keyslots.jsx:514 pkg/storaged/stratis/pool.jsx:400 msgid "Change passphrase" msgstr "암호문 변경" @@ -1525,7 +1530,7 @@ msgstr "" "설정을 변경하면 서버와의 연결이 끊어지고, 관리 UI를 사용 할 수 없게 됩니다." -#: pkg/packagekit/updates.jsx:909 +#: pkg/packagekit/updates.jsx:908 msgid "Check for updates" msgstr "최신화를 확인" @@ -1556,11 +1561,11 @@ msgid "Checking and repairing MDRAID device $target" msgstr "MD레이드 장치 $target 확인과 복구 중" -#: pkg/storaged/crypto/keyslots.jsx:231 +#: pkg/storaged/crypto/keyslots.jsx:265 msgid "Checking for $0 package" msgstr "$0 꾸러미를 점검 중" -#: pkg/storaged/crypto/keyslots.jsx:267 +#: pkg/storaged/crypto/keyslots.jsx:301 msgid "Checking for NBDE support in the initrd" msgstr "initrd에서 NBDE 지원을 위한 점검하기" @@ -1568,7 +1573,7 @@ msgid "Checking for new applications" msgstr "신규 응용프로그램 확인 중" -#: pkg/packagekit/updates.jsx:1389 +#: pkg/packagekit/updates.jsx:1388 msgid "Checking for package updates..." msgstr "꾸러미 최신화 점검 중 ..." @@ -1577,11 +1582,11 @@ msgid "Checking installed software" msgstr "설치된 소프트웨어 확인 중" -#: pkg/storaged/dialog.jsx:1271 +#: pkg/storaged/dialog.jsx:1273 msgid "Checking related processes" msgstr "연관된 프로세서 확인 중" -#: pkg/packagekit/updates.jsx:1399 +#: pkg/packagekit/updates.jsx:1398 msgid "Checking software status" msgstr "소프트웨어 상태 확인 중" @@ -1605,7 +1610,7 @@ msgid "Clear 'Failed to start'" msgstr "‘시작 실패’ 지우기" -#: pkg/systemd/services-list.jsx:58 pkg/systemd/logsJournal.jsx:277 +#: pkg/systemd/logsJournal.jsx:277 pkg/systemd/services-list.jsx:58 msgid "Clear all filters" msgstr "모든 필터 지우기" @@ -1621,14 +1626,15 @@ msgid "Client software" msgstr "클라이언트 소프트웨어" -#: pkg/systemd/overview-cards/configurationCard.jsx:198 +#: pkg/storaged/dialog.jsx:456 pkg/apps/utils.jsx:87 +#: pkg/networkmanager/interfaces.js:43 +#: pkg/lib/cockpit-components-terminal.jsx:230 +#: pkg/lib/cockpit-components-modifications.jsx:76 #: pkg/systemd/overview-cards/realmd.jsx:278 -#: pkg/networkmanager/interfaces.js:43 pkg/storaged/dialog.jsx:456 +#: pkg/systemd/overview-cards/configurationCard.jsx:195 #: pkg/shell/hosts_dialog.jsx:92 pkg/shell/shell-modals.jsx:192 -#: pkg/shell/credentials.jsx:81 pkg/shell/superuser.jsx:190 -#: pkg/shell/superuser.jsx:198 pkg/apps/utils.jsx:87 -#: pkg/users/dialog-utils.js:58 pkg/lib/cockpit-components-terminal.jsx:230 -#: pkg/lib/cockpit-components-modifications.jsx:76 +#: pkg/shell/superuser.jsx:190 pkg/shell/superuser.jsx:198 +#: pkg/shell/credentials.jsx:81 pkg/users/dialog-utils.js:58 msgid "Close" msgstr "닫기" @@ -1648,7 +1654,7 @@ msgid "Cockpit configuration of NetworkManager and Firewalld" msgstr "NetworkManager 및 Firewalld의 Cockpit 구성" -#: pkg/lib/cockpit.js:3866 +#: pkg/lib/cockpit.js:3862 msgid "Cockpit could not contact the given host." msgstr "Cockpit을 지정된 호스트에 연결 할 수 없습니다." @@ -1673,7 +1679,7 @@ msgid "Cockpit is an interactive Linux server admin interface." msgstr "Cockpit은 대화형 리눅스 서버 관리 연결장치입니다." -#: pkg/lib/cockpit.js:3864 +#: pkg/lib/cockpit.js:3860 msgid "Cockpit is not compatible with the software on the system." msgstr "Cockpit은 시스템의 소프트웨어와 호환성이 없습니다." @@ -1681,7 +1687,7 @@ msgid "Cockpit is not installed" msgstr "Cockpit이 설치되어 있지 않습니다" -#: pkg/lib/cockpit.js:3858 +#: pkg/lib/cockpit.js:3854 msgid "Cockpit is not installed on the system." msgstr "시스템에 Cockpit이 설치되어 있지 않습니다." @@ -1722,8 +1728,8 @@ msgid "Comma-separated ports, ranges, and services are accepted" msgstr "쉼표로-구분된 포트, 범위, 서비스가 허용됩니다" -#: pkg/systemd/timer-dialog.jsx:174 pkg/storaged/dialog.jsx:1330 -#: pkg/storaged/dialog.jsx:1350 +#: pkg/storaged/dialog.jsx:1332 pkg/storaged/dialog.jsx:1352 +#: pkg/systemd/timer-dialog.jsx:174 msgid "Command" msgstr "명령" @@ -1755,9 +1761,9 @@ msgid "Compress crash dumps to save space" msgstr "충돌 덤프를 압축하여 공간 절약하기" -#: pkg/kdump/kdump-view.jsx:314 pkg/storaged/lvm2/vdo-pool.jsx:84 -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:229 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:325 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:229 +#: pkg/storaged/lvm2/vdo-pool.jsx:84 pkg/kdump/kdump-view.jsx:314 msgid "Compression" msgstr "압축" @@ -1769,7 +1775,7 @@ msgid "Condition failed" msgstr "조건이 충족되지 않았습니다" -#: pkg/systemd/overview-cards/configurationCard.jsx:62 +#: pkg/systemd/overview-cards/configurationCard.jsx:61 msgid "Configuration" msgstr "설정" @@ -1789,12 +1795,12 @@ msgid "Configuring system settings" msgstr "시스템 설정 구성" -#: pkg/storaged/stratis/create-dialog.jsx:84 pkg/storaged/stratis/pool.jsx:380 -#: pkg/storaged/stratis/pool.jsx:409 pkg/storaged/block/format-dialog.jsx:343 +#: pkg/storaged/block/format-dialog.jsx:345 pkg/storaged/stratis/pool.jsx:380 +#: pkg/storaged/stratis/pool.jsx:409 pkg/storaged/stratis/create-dialog.jsx:84 msgid "Confirm" msgstr "확인" -#: pkg/systemd/service-details.jsx:707 pkg/storaged/stratis/filesystem.jsx:133 +#: pkg/storaged/stratis/filesystem.jsx:133 pkg/systemd/service-details.jsx:707 msgid "Confirm deletion of $0" msgstr "$0 삭제를 확인합니다" @@ -1818,7 +1824,7 @@ msgid "Confirm removal of $0" msgstr "$0 제거 확인" -#: pkg/storaged/crypto/keyslots.jsx:589 +#: pkg/storaged/crypto/keyslots.jsx:623 msgid "Confirm removal with an alternate passphrase" msgstr "대체 암호문 삭제 확인" @@ -1866,7 +1872,7 @@ msgid "Connection failed" msgstr "연결 실패" -#: pkg/lib/cockpit.js:3856 +#: pkg/lib/cockpit.js:3852 msgid "Connection has timed out." msgstr "연결 시간 초과." @@ -1886,7 +1892,7 @@ msgid "Contains:" msgstr "포함:" -#: pkg/packagekit/updates.jsx:764 +#: pkg/packagekit/updates.jsx:763 msgid "Continue" msgstr "진행" @@ -1913,19 +1919,19 @@ #: pkg/shell/hosts_dialog.jsx:475 pkg/shell/hosts_dialog.jsx:478 #: pkg/shell/hosts_dialog.jsx:493 pkg/shell/hosts_dialog.jsx:495 -#: pkg/shell/credentials.jsx:212 pkg/shell/failures.jsx:44 +#: pkg/shell/failures.jsx:43 pkg/shell/credentials.jsx:212 msgid "Copied" msgstr "복사됨" -#: pkg/shell/hosts_dialog.jsx:475 pkg/shell/hosts_dialog.jsx:478 -#: pkg/shell/hosts_dialog.jsx:493 pkg/shell/hosts_dialog.jsx:495 -#: pkg/shell/credentials.jsx:212 pkg/shell/failures.jsx:44 -#: pkg/lib/cockpit-components-terminal.jsx:211 +#: pkg/lib/cockpit-components-terminal.jsx:211 pkg/shell/hosts_dialog.jsx:475 +#: pkg/shell/hosts_dialog.jsx:478 pkg/shell/hosts_dialog.jsx:493 +#: pkg/shell/hosts_dialog.jsx:495 pkg/shell/failures.jsx:43 +#: pkg/shell/credentials.jsx:212 msgid "Copy" msgstr "복사" -#: pkg/systemd/logs.jsx:417 pkg/storaged/crypto/tang.jsx:117 -#: pkg/lib/cockpit-components-modifications.jsx:73 +#: pkg/storaged/crypto/tang.jsx:117 +#: pkg/lib/cockpit-components-modifications.jsx:73 pkg/systemd/logs.jsx:417 msgid "Copy to clipboard" msgstr "클립보드로 복사" @@ -1949,17 +1955,17 @@ msgid "Crash system" msgstr "충돌 시스템" -#: pkg/storaged/stratis/create-dialog.jsx:122 pkg/storaged/stratis/pool.jsx:85 -#: pkg/storaged/lvm2/create-dialog.jsx:63 +#: pkg/storaged/btrfs/subvolume.jsx:141 +#: pkg/storaged/block/format-dialog.jsx:275 +#: pkg/storaged/block/format-dialog.jsx:285 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:269 -#: pkg/storaged/lvm2/volume-group.jsx:120 +#: pkg/storaged/lvm2/create-dialog.jsx:63 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:58 -#: pkg/storaged/block/format-dialog.jsx:273 -#: pkg/storaged/block/format-dialog.jsx:283 +#: pkg/storaged/lvm2/volume-group.jsx:120 pkg/storaged/stratis/pool.jsx:85 +#: pkg/storaged/stratis/create-dialog.jsx:122 #: pkg/storaged/mdraid/create-dialog.jsx:112 -#: pkg/storaged/btrfs/subvolume.jsx:141 pkg/users/group-create-dialog.js:141 -#: pkg/users/account-create-dialog.js:481 #: pkg/lib/cockpit-components-file-autocomplete.jsx:193 +#: pkg/users/group-create-dialog.js:141 pkg/users/account-create-dialog.js:481 msgid "Create" msgstr "생성" @@ -1975,8 +1981,8 @@ msgid "Create RAID device" msgstr "레이드 장치 만들기" -#: pkg/storaged/stratis/create-dialog.jsx:48 #: pkg/storaged/overview/overview.jsx:147 +#: pkg/storaged/stratis/create-dialog.jsx:48 msgid "Create Stratis pool" msgstr "스트라티스 풀 생성" @@ -2000,12 +2006,12 @@ msgid "Create and change ownership of home directory" msgstr "홈 디렉토리의 소유권 생성 및 변경" -#: pkg/storaged/stratis/pool.jsx:80 pkg/storaged/block/format-dialog.jsx:268 #: pkg/storaged/btrfs/subvolume.jsx:135 +#: pkg/storaged/block/format-dialog.jsx:270 pkg/storaged/stratis/pool.jsx:80 msgid "Create and mount" msgstr "생성과 적재" -#: pkg/storaged/block/format-dialog.jsx:277 +#: pkg/storaged/block/format-dialog.jsx:279 msgid "Create and start" msgstr "생성과 시작" @@ -2013,7 +2019,7 @@ msgid "Create filesystem" msgstr "파일 시스템 생성" -#: pkg/networkmanager/dialogs-common.jsx:323 +#: pkg/networkmanager/dialogs-common.jsx:321 msgid "Create it" msgstr "만들기" @@ -2029,7 +2035,7 @@ msgid "Create new filesystem" msgstr "신규 파일 시스템 생성" -#: pkg/users/group-create-dialog.js:134 pkg/users/accounts-list.js:297 +#: pkg/users/accounts-list.js:297 pkg/users/group-create-dialog.js:134 msgid "Create new group" msgstr "신규 그룹 만들기" @@ -2045,9 +2051,9 @@ msgid "Create new thinly provisioned logical volume" msgstr "신규 씬 프로비젼닝 논리 볼륨 만들기" -#: pkg/storaged/stratis/pool.jsx:81 pkg/storaged/block/format-dialog.jsx:269 -#: pkg/storaged/block/format-dialog.jsx:278 #: pkg/storaged/btrfs/subvolume.jsx:136 +#: pkg/storaged/block/format-dialog.jsx:271 +#: pkg/storaged/block/format-dialog.jsx:280 pkg/storaged/stratis/pool.jsx:81 msgid "Create only" msgstr "읽기 전용" @@ -2098,7 +2104,7 @@ # translation auto-copied from project subscription-manager, version 1.11.X, # document keys -#: pkg/sosreport/sosreport.jsx:491 +#: pkg/sosreport/sosreport.jsx:500 msgid "Created" msgstr "생성일" @@ -2130,7 +2136,7 @@ msgid "Creating snapshot of $target" msgstr "$target 순간찍기 생성 중" -#: pkg/networkmanager/dialogs-common.jsx:322 +#: pkg/networkmanager/dialogs-common.jsx:320 msgid "" "Creating this $0 will break the connection to the server, and will make the " "administration UI unavailable." @@ -2175,7 +2181,7 @@ msgid "Current top CPU usage" msgstr "현재 최대 CPU 사용량" -#: pkg/storaged/dialog.jsx:1182 +#: pkg/storaged/dialog.jsx:1184 msgid "Currently in use" msgstr "현재 사용 중" @@ -2191,7 +2197,7 @@ msgid "Custom cryptographic policy" msgstr "사용자 정의 암호화 정책" -#: pkg/storaged/nfs/nfs.jsx:173 pkg/storaged/filesystem/mounting-dialog.jsx:61 +#: pkg/storaged/nfs/nfs.jsx:173 pkg/storaged/filesystem/mounting-dialog.jsx:64 msgid "Custom mount options" msgstr "사용자 정의 적재 옵션" @@ -2231,11 +2237,11 @@ msgid "Daily" msgstr "매일" -#: pkg/packagekit/updates.jsx:934 +#: pkg/packagekit/updates.jsx:933 msgid "Danger alert:" msgstr "위험 경고:" -#: pkg/systemd/terminal.jsx:174 pkg/shell/topnav.jsx:193 +#: pkg/systemd/terminal.jsx:174 pkg/shell/topnav.jsx:203 msgid "Dark" msgstr "진하게" @@ -2243,8 +2249,8 @@ msgid "Data" msgstr "데이터" -#: pkg/storaged/lvm2/vdo-pool.jsx:80 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:144 +#: pkg/storaged/lvm2/vdo-pool.jsx:80 msgid "Data used" msgstr "사용된 데이터" @@ -2322,9 +2328,9 @@ "나타냅니다. 마지막으로, '-' 또는 '+'를 접두사로 사용하여, 상대 시간으로 지정 " "할 수 있습니다" -#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:43 #: pkg/storaged/lvm2/block-logical-volume.jsx:161 #: pkg/storaged/lvm2/block-logical-volume.jsx:216 +#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:43 msgid "Deactivate" msgstr "비활성화" @@ -2352,18 +2358,18 @@ msgid "Dedicated parity (RAID 4)" msgstr "전용 페리티 (레이드 4)" -#: pkg/storaged/lvm2/vdo-pool.jsx:88 -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:234 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:334 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:234 +#: pkg/storaged/lvm2/vdo-pool.jsx:88 msgid "Deduplication" msgstr "중복" -#: pkg/systemd/overview-cards/cryptoPolicies.jsx:37 pkg/shell/topnav.jsx:187 +#: pkg/systemd/overview-cards/cryptoPolicies.jsx:37 pkg/shell/topnav.jsx:197 msgid "Default" msgstr "기본" -#: pkg/systemd/timer-dialog.jsx:200 pkg/systemd/timer-dialog.jsx:209 -#: pkg/lib/cockpit-components-shutdown.jsx:201 +#: pkg/lib/cockpit-components-shutdown.jsx:201 pkg/systemd/timer-dialog.jsx:200 +#: pkg/systemd/timer-dialog.jsx:209 msgid "Delay" msgstr "지연" @@ -2371,27 +2377,27 @@ msgid "Delay must be a number" msgstr "지연은 숫자여야 합니다" -#: pkg/sosreport/sosreport.jsx:360 pkg/sosreport/sosreport.jsx:459 -#: pkg/systemd/abrtLog.jsx:290 pkg/systemd/service-details.jsx:151 -#: pkg/systemd/service-details.jsx:713 -#: pkg/networkmanager/network-interface.jsx:725 -#: pkg/networkmanager/firewall.jsx:117 pkg/networkmanager/firewall.jsx:178 -#: pkg/networkmanager/firewall.jsx:910 pkg/storaged/stratis/filesystem.jsx:137 -#: pkg/storaged/stratis/filesystem.jsx:175 pkg/storaged/stratis/pool.jsx:149 -#: pkg/storaged/lvm2/volume-group.jsx:97 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:109 -#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:44 +#: pkg/storaged/partitions/partition.jsx:58 +#: pkg/storaged/partitions/partition.jsx:112 +#: pkg/storaged/partitions/partition-table.jsx:61 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:122 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:152 +#: pkg/storaged/btrfs/subvolume.jsx:231 pkg/storaged/btrfs/subvolume.jsx:373 #: pkg/storaged/lvm2/block-logical-volume.jsx:79 #: pkg/storaged/lvm2/block-logical-volume.jsx:222 +#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:44 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:109 #: pkg/storaged/lvm2/inactive-logical-volume.jsx:42 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:122 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:152 -#: pkg/storaged/partitions/partition-table.jsx:61 -#: pkg/storaged/partitions/partition.jsx:58 -#: pkg/storaged/partitions/partition.jsx:112 pkg/storaged/mdraid/mdraid.jsx:126 -#: pkg/storaged/mdraid/mdraid.jsx:223 pkg/storaged/btrfs/subvolume.jsx:231 -#: pkg/storaged/btrfs/subvolume.jsx:373 pkg/users/delete-group-dialog.js:51 -#: pkg/users/delete-account-dialog.js:60 pkg/users/account-details.js:227 +#: pkg/storaged/lvm2/volume-group.jsx:97 pkg/storaged/stratis/pool.jsx:149 +#: pkg/storaged/stratis/filesystem.jsx:137 +#: pkg/storaged/stratis/filesystem.jsx:175 pkg/storaged/mdraid/mdraid.jsx:126 +#: pkg/storaged/mdraid/mdraid.jsx:223 pkg/sosreport/sosreport.jsx:369 +#: pkg/sosreport/sosreport.jsx:468 pkg/networkmanager/firewall.jsx:117 +#: pkg/networkmanager/firewall.jsx:178 pkg/networkmanager/firewall.jsx:910 +#: pkg/networkmanager/network-interface.jsx:725 pkg/systemd/abrtLog.jsx:290 +#: pkg/systemd/service-details.jsx:151 pkg/systemd/service-details.jsx:713 +#: pkg/users/account-details.js:227 pkg/users/delete-group-dialog.js:51 +#: pkg/users/delete-account-dialog.js:60 msgid "Delete" msgstr "삭제" @@ -2416,7 +2422,7 @@ msgid "Delete pool" msgstr "풀 삭제" -#: pkg/sosreport/sosreport.jsx:352 +#: pkg/sosreport/sosreport.jsx:361 msgid "Delete report permanently?" msgstr "영구적으로 보고를 삭제?" @@ -2472,8 +2478,8 @@ msgid "Deletion will remove the following files:" msgstr "삭제시 다음 파일을 제거합니다:" -#: pkg/systemd/timer-dialog.jsx:166 pkg/networkmanager/firewall.jsx:702 -#: pkg/networkmanager/firewall.jsx:846 pkg/storaged/dialog.jsx:1351 +#: pkg/storaged/dialog.jsx:1353 pkg/networkmanager/firewall.jsx:702 +#: pkg/networkmanager/firewall.jsx:846 pkg/systemd/timer-dialog.jsx:166 msgid "Description" msgstr "설명" @@ -2488,7 +2494,7 @@ # translation auto-copied from project libreport, version master, document # libreport #: pkg/systemd/overview-cards/realmd.jsx:416 pkg/shell/credentials.jsx:109 -#: pkg/packagekit/updates.jsx:451 +#: pkg/packagekit/updates.jsx:450 msgid "Details" msgstr "상세정보" @@ -2496,17 +2502,17 @@ msgid "Development" msgstr "개발" -#: pkg/metrics/metrics.jsx:785 pkg/storaged/dialog.jsx:1137 -#: pkg/storaged/dialog.jsx:1242 pkg/storaged/mdraid/mdraid.jsx:292 +#: pkg/storaged/dialog.jsx:1139 pkg/storaged/dialog.jsx:1244 +#: pkg/storaged/mdraid/mdraid.jsx:292 pkg/metrics/metrics.jsx:785 msgid "Device" msgstr "장치" -#: pkg/storaged/block/other.jsx:62 pkg/storaged/drive/drive.jsx:132 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:287 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:287 pkg/storaged/block/other.jsx:62 +#: pkg/storaged/drive/drive.jsx:132 msgid "Device file" msgstr "장치 파일" -#: pkg/storaged/partitions/actions.jsx:27 +#: pkg/storaged/partitions/actions.jsx:27 pkg/storaged/block/actions.jsx:28 msgid "Device is read-only" msgstr "장치는 읽기 전용입니다" @@ -2540,10 +2546,11 @@ msgid "Disable tuned" msgstr "tuned 비활성화" -#: pkg/systemd/services.jsx:246 pkg/systemd/services.jsx:687 -#: pkg/systemd/service-details.jsx:436 pkg/networkmanager/ip-settings.jsx:46 -#: pkg/networkmanager/firewall-switch.jsx:80 pkg/kdump/kdump-view.jsx:541 -#: pkg/packagekit/kpatch.jsx:253 pkg/packagekit/autoupdates.jsx:344 +#: pkg/networkmanager/firewall-switch.jsx:80 +#: pkg/networkmanager/ip-settings.jsx:46 pkg/kdump/kdump-view.jsx:541 +#: pkg/systemd/service-details.jsx:436 pkg/systemd/services.jsx:246 +#: pkg/systemd/services.jsx:687 pkg/packagekit/kpatch.jsx:253 +#: pkg/packagekit/autoupdates.jsx:344 msgid "Disabled" msgstr "사용 안함" @@ -2583,14 +2590,14 @@ msgid "Disk is failing" msgstr "디스크에 오류가 났습니다" -#: pkg/storaged/crypto/keyslots.jsx:142 +#: pkg/storaged/crypto/keyslots.jsx:175 msgid "Disk passphrase" msgstr "디스크 비밀번호" -#: pkg/metrics/metrics.jsx:918 pkg/storaged/lvm2/create-dialog.jsx:52 -#: pkg/storaged/lvm2/volume-group.jsx:198 -#: pkg/storaged/mdraid/create-dialog.jsx:99 pkg/storaged/mdraid/mdraid.jsx:156 -#: pkg/storaged/mdraid/mdraid.jsx:296 +#: pkg/storaged/lvm2/create-dialog.jsx:52 +#: pkg/storaged/lvm2/volume-group.jsx:198 pkg/storaged/mdraid/mdraid.jsx:156 +#: pkg/storaged/mdraid/mdraid.jsx:296 pkg/storaged/mdraid/create-dialog.jsx:99 +#: pkg/metrics/metrics.jsx:918 msgid "Disks" msgstr "디스크" @@ -2611,7 +2618,7 @@ msgid "Dismiss selected alerts" msgstr "선택한 경고 해제" -#: pkg/shell/shell-modals.jsx:115 pkg/shell/topnav.jsx:205 +#: pkg/shell/topnav.jsx:216 pkg/shell/shell-modals.jsx:115 msgid "Display language" msgstr "표시 언어" @@ -2620,7 +2627,7 @@ msgid "Distributed parity (RAID 5)" msgstr "분산 패리티 (레이드 5)" -#: pkg/storaged/filesystem/mounting-dialog.jsx:138 +#: pkg/storaged/filesystem/mounting-dialog.jsx:141 msgid "Do not mount" msgstr "적재하지 않습니다" @@ -2637,12 +2644,12 @@ msgid "Does not automatically start" msgstr "자동으로 시작되지 않습니다" -#: pkg/storaged/filesystem/mounting-dialog.jsx:107 +#: pkg/storaged/filesystem/mounting-dialog.jsx:110 msgid "Does not mount during boot" msgstr "부팅시 적재하지 않습니다" -#: pkg/systemd/overview-cards/configurationCard.jsx:80 #: pkg/systemd/overview-cards/realmd.jsx:284 +#: pkg/systemd/overview-cards/configurationCard.jsx:79 msgid "Domain" msgstr "도메인" @@ -2682,7 +2689,7 @@ # translation auto-copied from project CFSE, version sam-1.2, document app, # author eukim -#: pkg/sosreport/sosreport.jsx:449 pkg/sosreport/sosreport.jsx:455 +#: pkg/sosreport/sosreport.jsx:458 pkg/sosreport/sosreport.jsx:464 msgid "Download" msgstr "내려받기" @@ -2698,7 +2705,7 @@ msgid "Downloading" msgstr "내려받기 중" -#: pkg/storaged/crypto/keyslots.jsx:220 +#: pkg/storaged/crypto/keyslots.jsx:254 #: pkg/lib/cockpit-components-install-dialog.jsx:189 msgid "Downloading $0" msgstr "$0 내려받기 중" @@ -2707,7 +2714,7 @@ msgid "Drive" msgstr "드라이브" -#: pkg/systemd/hw-detect.js:92 pkg/lib/machine-info.js:240 +#: pkg/lib/machine-info.js:240 pkg/systemd/hw-detect.js:92 msgid "Dual rank" msgstr "듀얼 랭크" @@ -2717,9 +2724,9 @@ msgid "EFI system partition" msgstr "EFI 시스템 파티션" +#: pkg/storaged/nfs/nfs.jsx:312 pkg/storaged/crypto/keyslots.jsx:761 #: pkg/networkmanager/firewall.jsx:115 pkg/kdump/kdump-view.jsx:476 -#: pkg/storaged/nfs/nfs.jsx:312 pkg/storaged/crypto/keyslots.jsx:727 -#: pkg/shell/hosts.jsx:167 pkg/shell/indexes.jsx:352 +#: pkg/shell/indexes.jsx:352 pkg/shell/hosts.jsx:167 #: pkg/packagekit/kpatch.jsx:234 pkg/packagekit/autoupdates.jsx:407 msgid "Edit" msgstr "편집" @@ -2728,7 +2735,7 @@ msgid "Edit /etc/motd" msgstr "/etc/motd 편집" -#: pkg/storaged/crypto/keyslots.jsx:507 +#: pkg/storaged/crypto/keyslots.jsx:541 msgid "Edit Tang keyserver" msgstr "Tang 키 서버 편집" @@ -2764,9 +2771,8 @@ msgid "Edit motd" msgstr "motd 편집" -#: pkg/storaged/stratis/filesystem.jsx:170 +#: pkg/storaged/btrfs/subvolume.jsx:331 pkg/storaged/stratis/filesystem.jsx:170 #: pkg/storaged/filesystem/filesystem.jsx:100 -#: pkg/storaged/btrfs/subvolume.jsx:331 msgid "Edit mount point" msgstr "적재 지점 편집" @@ -2790,7 +2796,7 @@ msgid "Edit user" msgstr "사용자 편집" -#: pkg/storaged/crypto/keyslots.jsx:729 +#: pkg/storaged/crypto/keyslots.jsx:763 msgid "Editing a key requires a free slot" msgstr "키 편집에 빈 슬롯이 필요합니다" @@ -2836,13 +2842,13 @@ msgid "Enable the firewall" msgstr "방화벽 활성화" +#: pkg/networkmanager/firewall-switch.jsx:80 pkg/kdump/kdump-view.jsx:541 #: pkg/systemd/services.jsx:244 pkg/systemd/services.jsx:245 -#: pkg/systemd/services.jsx:686 pkg/networkmanager/firewall-switch.jsx:80 -#: pkg/kdump/kdump-view.jsx:541 pkg/packagekit/kpatch.jsx:256 +#: pkg/systemd/services.jsx:686 pkg/packagekit/kpatch.jsx:256 msgid "Enabled" msgstr "사용" -#: pkg/storaged/crypto/keyslots.jsx:335 +#: pkg/storaged/crypto/keyslots.jsx:369 msgid "Enabling $0" msgstr "$0 활성화" @@ -2858,11 +2864,11 @@ msgid "Encrypt data with a passphrase" msgstr "암호로 데이터 암호화" -#: pkg/sosreport/sosreport.jsx:439 +#: pkg/sosreport/sosreport.jsx:448 msgid "Encrypted" msgstr "암호화됨" -#: pkg/storaged/utils.js:366 +#: pkg/storaged/utils.js:367 msgid "Encrypted $0" msgstr "$0 암호화됩니다" @@ -2870,25 +2876,25 @@ msgid "Encrypted Stratis pool" msgstr "암호화된 스트라티스 풀" -#: pkg/storaged/utils.js:358 +#: pkg/storaged/utils.js:359 msgid "Encrypted logical volume of $0" msgstr "암호화된 $0의 논리 볼륨" -#: pkg/storaged/utils.js:360 +#: pkg/storaged/utils.js:361 msgid "Encrypted partition of $0" msgstr "암호화된 $0의 파티션" -#: pkg/storaged/block/format-dialog.jsx:328 #: pkg/storaged/crypto/encryption.jsx:42 +#: pkg/storaged/block/format-dialog.jsx:330 msgid "Encryption" msgstr "암호화" -#: pkg/storaged/block/format-dialog.jsx:371 #: pkg/storaged/crypto/encryption.jsx:189 +#: pkg/storaged/block/format-dialog.jsx:373 msgid "Encryption options" msgstr "암호화 옵션" -#: pkg/sosreport/sosreport.jsx:311 +#: pkg/sosreport/sosreport.jsx:320 msgid "Encryption passphrase" msgstr "암호화된 암호" @@ -2916,7 +2922,7 @@ msgid "Enforcing" msgstr "강제" -#: pkg/packagekit/updates.jsx:1439 +#: pkg/packagekit/updates.jsx:1438 msgid "Enhancement updates available" msgstr "향상된 최신화 사용 가능" @@ -2936,14 +2942,14 @@ msgid "Erasing $target" msgstr "$target 제거 중" -#: pkg/packagekit/updates.jsx:381 +#: pkg/packagekit/updates.jsx:380 msgid "Errata" msgstr "에라타" -#: pkg/sosreport/sosreport.jsx:383 pkg/systemd/services.jsx:224 -#: pkg/systemd/service-details.jsx:274 pkg/storaged/storage-controls.jsx:105 -#: pkg/storaged/storage-controls.jsx:160 pkg/storaged/overview/overview.jsx:94 -#: pkg/storaged/multipath.jsx:60 pkg/apps/utils.jsx:81 +#: pkg/storaged/storage-controls.jsx:105 pkg/storaged/storage-controls.jsx:160 +#: pkg/storaged/overview/overview.jsx:94 pkg/storaged/multipath.jsx:60 +#: pkg/apps/utils.jsx:81 pkg/sosreport/sosreport.jsx:392 +#: pkg/systemd/service-details.jsx:274 pkg/systemd/services.jsx:224 msgid "Error" msgstr "오류" @@ -2955,12 +2961,12 @@ msgid "Error has occurred" msgstr "오류가 발생했습니다" -#: pkg/storaged/crypto/keyslots.jsx:256 +#: pkg/storaged/crypto/keyslots.jsx:290 msgid "Error installing $0: PackageKit is not installed" msgstr "$0 설치 중에 오류 발생: PackageKit이 설치되어 있지 않습니다" -#: pkg/systemd/overview-cards/configurationCard.jsx:176 #: pkg/selinux/setroubleshoot-view.jsx:414 +#: pkg/systemd/overview-cards/configurationCard.jsx:174 msgid "Error message" msgstr "오류 메시지" @@ -3035,8 +3041,8 @@ msgid "Extended information" msgstr "확장 정보" -#: pkg/storaged/block/format-dialog.jsx:161 #: pkg/storaged/partitions/partition-table.jsx:58 +#: pkg/storaged/block/format-dialog.jsx:161 msgid "Extended partition" msgstr "확장 파티션" @@ -3048,7 +3054,7 @@ msgid "FIPS with further Common Criteria restrictions." msgstr "추가 공통 기준 제한 사항이 있는 FIPS." -#: pkg/networkmanager/interfaces.js:811 pkg/storaged/mdraid/mdraid-disk.jsx:68 +#: pkg/storaged/mdraid/mdraid-disk.jsx:68 pkg/networkmanager/interfaces.js:811 msgid "Failed" msgstr "실패함" @@ -3068,8 +3074,8 @@ msgid "Failed to add zone" msgstr "영역 추가 실패" -#: pkg/users/password-dialogs.js:103 pkg/users/password-dialogs.js:125 -#: pkg/lib/credentials.js:232 +#: pkg/lib/credentials.js:232 pkg/users/password-dialogs.js:103 +#: pkg/users/password-dialogs.js:125 msgid "Failed to change password" msgstr "비밀번호 변경 실패" @@ -3127,7 +3133,7 @@ "분석하는데 실패했습니다. 자동 최신화를 구성하려면 사용자 지정 재정의를 제거하" "세요." -#: pkg/packagekit/updates.jsx:498 +#: pkg/packagekit/updates.jsx:497 msgid "Failed to restart service" msgstr "서비스를 재시작하지 못했습니다" @@ -3139,7 +3145,7 @@ msgid "Failed to save settings" msgstr "설정을 저장하는데 실패함" -#: pkg/systemd/services.jsx:235 pkg/systemd/service-details.jsx:445 +#: pkg/systemd/service-details.jsx:445 pkg/systemd/services.jsx:235 msgid "Failed to start" msgstr "시작하지 못했습니다" @@ -3164,7 +3170,7 @@ msgid "Filesystem name" msgstr "파일시스템 이름" -#: pkg/storaged/dialog.jsx:1118 +#: pkg/storaged/dialog.jsx:1120 msgid "Filesystem outside the target" msgstr "대상 외부의 파일시스템" @@ -3205,13 +3211,13 @@ msgid "Firmware version" msgstr "펌웨어 버전" -#: pkg/storaged/crypto/keyslots.jsx:403 +#: pkg/storaged/crypto/keyslots.jsx:437 msgid "Fix NBDE support" msgstr "NBDE 지원 수정" #: pkg/systemd/terminal.jsx:148 pkg/systemd/terminal.jsx:158 msgid "Font size" -msgstr "폰트 크기" +msgstr "글꼴 크기" #: pkg/systemd/services-list.jsx:86 pkg/systemd/service-details.jsx:427 msgid "Forbidden from running" @@ -3229,15 +3235,8 @@ msgid "Force password change" msgstr "강제 비밀번호 변경" -#: pkg/storaged/stratis/blockdev.jsx:48 -#: pkg/storaged/lvm2/physical-volume.jsx:50 -#: pkg/storaged/block/format-dialog.jsx:273 -#: pkg/storaged/block/format-dialog.jsx:283 -#: pkg/storaged/block/unformatted-data.jsx:36 -#: pkg/storaged/block/unrecognized-data.jsx:41 pkg/storaged/swap/swap.jsx:100 -#: pkg/storaged/filesystem/filesystem.jsx:104 -#: pkg/storaged/crypto/locked-encrypted-data.jsx:38 -#: pkg/storaged/mdraid/mdraid-disk.jsx:47 pkg/storaged/btrfs/device.jsx:93 +#: pkg/storaged/block/format-dialog.jsx:275 +#: pkg/storaged/block/format-dialog.jsx:285 pkg/storaged/block/actions.jsx:31 msgid "Format" msgstr "포멧" @@ -3245,20 +3244,20 @@ msgid "Format $0" msgstr "$0 포맷" -#: pkg/storaged/block/format-dialog.jsx:268 +#: pkg/storaged/block/format-dialog.jsx:270 msgid "Format and mount" msgstr "초기화 및 적재" -#: pkg/storaged/block/format-dialog.jsx:277 +#: pkg/storaged/block/format-dialog.jsx:279 msgid "Format and start" msgstr "초기화 및 시작" -#: pkg/storaged/block/format-dialog.jsx:269 -#: pkg/storaged/block/format-dialog.jsx:278 +#: pkg/storaged/block/format-dialog.jsx:271 +#: pkg/storaged/block/format-dialog.jsx:280 msgid "Format only" msgstr "초기화 전용" -#: pkg/storaged/block/format-dialog.jsx:397 +#: pkg/storaged/block/format-dialog.jsx:399 msgid "Formatting erases all data on a storage device." msgstr "초기화하면 저장장치에서 모든 자료가 제거됩니다." @@ -3286,8 +3285,8 @@ msgid "From" msgstr "에서" -#: pkg/users/accounts-list.js:380 pkg/users/account-create-dialog.js:68 -#: pkg/users/account-details.js:248 +#: pkg/users/account-details.js:248 pkg/users/accounts-list.js:380 +#: pkg/users/account-create-dialog.js:68 msgid "Full name" msgstr "성명" @@ -3298,11 +3297,11 @@ msgid "Gateway" msgstr "게이트웨이" -#: pkg/systemd/abrtLog.jsx:296 pkg/networkmanager/network-interface.jsx:316 +#: pkg/networkmanager/network-interface.jsx:316 pkg/systemd/abrtLog.jsx:296 msgid "General" msgstr "일반" -#: pkg/systemd/services.jsx:255 pkg/networkmanager/wireguard.jsx:214 +#: pkg/networkmanager/wireguard.jsx:214 pkg/systemd/services.jsx:255 msgid "Generated" msgstr "생성됨" @@ -3334,22 +3333,22 @@ msgid "Group name" msgstr "그룹 이름" -#: pkg/users/accounts-list.js:313 pkg/users/accounts-list.js:317 -#: pkg/users/account-details.js:446 +#: pkg/users/account-details.js:446 pkg/users/accounts-list.js:313 +#: pkg/users/accounts-list.js:317 msgid "Groups" msgstr "그룹" -#: pkg/storaged/lvm2/vdo-pool.jsx:48 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:104 -#: pkg/storaged/lvm2/block-logical-volume.jsx:211 -#: pkg/storaged/block/resize.jsx:521 pkg/storaged/legacy-vdo/legacy-vdo.jsx:259 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:315 #: pkg/storaged/partitions/partition.jsx:107 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:259 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:315 pkg/storaged/block/resize.jsx:521 +#: pkg/storaged/lvm2/block-logical-volume.jsx:211 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:104 +#: pkg/storaged/lvm2/vdo-pool.jsx:48 msgid "Grow" msgstr "확장" -#: pkg/storaged/lvm2/block-logical-volume.jsx:281 #: pkg/storaged/partitions/partition.jsx:221 +#: pkg/storaged/lvm2/block-logical-volume.jsx:281 msgid "Grow content" msgstr "컨텐츠 확장" @@ -3402,7 +3401,7 @@ msgstr "Hello 타임 $hello_time" #: pkg/systemd/overview-cards/tuned-dialog.jsx:295 -#: pkg/systemd/overview-cards/cryptoPolicies.jsx:168 pkg/shell/topnav.jsx:255 +#: pkg/systemd/overview-cards/cryptoPolicies.jsx:168 pkg/shell/topnav.jsx:274 msgid "Help" msgstr "도움말" @@ -3426,7 +3425,7 @@ msgid "History package count" msgstr "기록 꾸러미 수" -#: pkg/users/account-create-dialog.js:84 pkg/users/account-details.js:326 +#: pkg/users/account-details.js:326 pkg/users/account-create-dialog.js:84 msgid "Home directory" msgstr "홈 디렉토리" @@ -3434,11 +3433,11 @@ msgid "Host" msgstr "호스트" -#: pkg/lib/cockpit.js:3852 +#: pkg/lib/cockpit.js:3848 msgid "Host key is incorrect" msgstr "호스트 키가 잘못되었습니다" -#: pkg/systemd/overview-cards/configurationCard.jsx:67 +#: pkg/systemd/overview-cards/configurationCard.jsx:66 msgid "Hostname" msgstr "호스트 이름" @@ -3458,10 +3457,10 @@ msgid "How to check" msgstr "점검하는 방법" -#: pkg/systemd/hwinfo.jsx:291 pkg/networkmanager/firewall.jsx:696 -#: pkg/storaged/pages.jsx:714 pkg/storaged/btrfs/subvolume.jsx:414 -#: pkg/users/group-create-dialog.js:47 pkg/users/accounts-list.js:230 -#: pkg/users/accounts-list.js:381 +#: pkg/storaged/btrfs/subvolume.jsx:414 pkg/storaged/pages.jsx:714 +#: pkg/networkmanager/firewall.jsx:696 pkg/systemd/hwinfo.jsx:291 +#: pkg/users/accounts-list.js:230 pkg/users/accounts-list.js:381 +#: pkg/users/group-create-dialog.js:47 msgid "ID" msgstr "ID" @@ -3537,8 +3536,8 @@ "만약 지문이 일치하면, '키 ' 호스트 신뢰 및 추가'를 눌러주세요. 그렇지 않다" "면, 연결하지 않고 관리자에게 문의하세요." -#: pkg/networkmanager/ip-settings.jsx:44 pkg/packagekit/updates.jsx:686 -#: pkg/packagekit/updates.jsx:763 +#: pkg/networkmanager/ip-settings.jsx:44 pkg/packagekit/updates.jsx:685 +#: pkg/packagekit/updates.jsx:762 msgid "Ignore" msgstr "무시" @@ -3563,9 +3562,9 @@ msgid "In sync" msgstr "동기화" -#: pkg/networkmanager/network-interface.jsx:256 #: pkg/networkmanager/interfaces.js:793 pkg/networkmanager/interfaces.js:1354 #: pkg/networkmanager/interfaces.js:1361 +#: pkg/networkmanager/network-interface.jsx:256 msgid "Inactive" msgstr "비활성" @@ -3600,7 +3599,7 @@ msgid "Indirect" msgstr "간접" -#: pkg/packagekit/updates.jsx:755 +#: pkg/packagekit/updates.jsx:754 msgid "Info" msgstr "정보" @@ -3620,7 +3619,7 @@ msgid "Initializing erases all data on a disk." msgstr "초기화는 디스크에서 모든 자료를 제거합니다." -#: pkg/packagekit/updates.jsx:584 +#: pkg/packagekit/updates.jsx:583 msgid "Initializing..." msgstr "초기화 중..." @@ -3628,9 +3627,9 @@ msgid "Insights: " msgstr "Insights: " -#: pkg/packagekit/kpatch.jsx:250 pkg/apps/application-list.jsx:206 -#: pkg/apps/application.jsx:52 +#: pkg/apps/application.jsx:52 pkg/apps/application-list.jsx:206 #: pkg/lib/cockpit-components-install-dialog.jsx:126 +#: pkg/packagekit/kpatch.jsx:250 msgid "Install" msgstr "설치" @@ -3642,7 +3641,7 @@ msgid "Install Stratis support" msgstr "스트라티스 지원 설치" -#: pkg/packagekit/updates.jsx:1416 +#: pkg/packagekit/updates.jsx:1415 msgid "Install all updates" msgstr "모든 최신화 설치" @@ -3654,7 +3653,7 @@ msgid "Install cockpit-pcp" msgstr "cockpit-pcp 설치" -#: pkg/packagekit/updates.jsx:1429 +#: pkg/packagekit/updates.jsx:1428 msgid "Install kpatch updates" msgstr "k패치 최신화를 설치합니다" @@ -3662,7 +3661,7 @@ msgid "Install realmd support" msgstr "realmd 지원 설치" -#: pkg/packagekit/updates.jsx:1415 pkg/packagekit/updates.jsx:1422 +#: pkg/packagekit/updates.jsx:1414 pkg/packagekit/updates.jsx:1421 msgid "Install security updates" msgstr "보안 최신화 설치" @@ -3688,17 +3687,17 @@ msgid "Installed" msgstr "설치되었습니다" -#: pkg/packagekit/updates.jsx:105 pkg/apps/application.jsx:40 +#: pkg/apps/application.jsx:40 pkg/packagekit/updates.jsx:105 msgid "Installing" msgstr "설치 중" -#: pkg/storaged/crypto/keyslots.jsx:224 +#: pkg/storaged/crypto/keyslots.jsx:258 #: pkg/lib/cockpit-components-install-dialog.jsx:193 msgid "Installing $0" msgstr "$0 설치 중" +#: pkg/storaged/crypto/keyslots.jsx:274 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:39 -#: pkg/storaged/crypto/keyslots.jsx:240 msgid "Installing $0 would remove $1." msgstr "$0을 설치하면 $1이 제거됩니다." @@ -3706,23 +3705,23 @@ msgid "Installing packages" msgstr "꾸러미 설치" -#: pkg/metrics/metrics.jsx:814 pkg/networkmanager/firewall.jsx:196 +#: pkg/networkmanager/firewall.jsx:196 pkg/metrics/metrics.jsx:814 msgid "Interface" msgid_plural "Interfaces" msgstr[0] "연결장치" -#: pkg/networkmanager/network-interface-members.jsx:197 -#: pkg/networkmanager/network-interface-members.jsx:199 +#: pkg/networkmanager/network-interface-members.jsx:202 +#: pkg/networkmanager/network-interface-members.jsx:204 msgid "Interface members" msgstr "연결장치 구성원" -#: pkg/networkmanager/network-main.jsx:180 -#: pkg/networkmanager/network-interface-members.jsx:203 -#: pkg/networkmanager/bond.jsx:165 pkg/networkmanager/firewall.jsx:859 +#: pkg/networkmanager/network-main.jsx:180 pkg/networkmanager/firewall.jsx:859 +#: pkg/networkmanager/bond.jsx:165 +#: pkg/networkmanager/network-interface-members.jsx:208 msgid "Interfaces" msgstr "연결장치" -#: pkg/lib/cockpit.js:3854 +#: pkg/lib/cockpit.js:3850 msgid "Internal error" msgstr "내부 오류" @@ -3782,8 +3781,8 @@ msgid "Invalid range" msgstr "잘못된 범위" -#: pkg/packagekit/autoupdates.jsx:323 #: pkg/lib/cockpit-components-shutdown.jsx:115 pkg/lib/serverTime.js:690 +#: pkg/packagekit/autoupdates.jsx:323 msgid "Invalid time format" msgstr "잘못된 시간 형식" @@ -3900,29 +3899,29 @@ msgid "Key password" msgstr "키 비밀번호" -#: pkg/storaged/crypto/keyslots.jsx:761 +#: pkg/storaged/crypto/keyslots.jsx:795 msgid "Key slots with unknown types can not be edited here" msgstr "알 수 없는 유형의 키 슬롯은 여기에서 수정할 수 없습니다" -#: pkg/storaged/crypto/keyslots.jsx:424 +#: pkg/storaged/crypto/keyslots.jsx:458 msgid "Key source" msgstr "키 소스" -#: pkg/storaged/crypto/keyslots.jsx:766 pkg/storaged/crypto/keyslots.jsx:789 +#: pkg/storaged/crypto/keyslots.jsx:800 pkg/storaged/crypto/keyslots.jsx:823 msgid "Keys" msgstr "키" -#: pkg/storaged/stratis/stopped-pool.jsx:134 pkg/storaged/stratis/pool.jsx:544 -#: pkg/storaged/crypto/keyslots.jsx:755 +#: pkg/storaged/crypto/keyslots.jsx:789 pkg/storaged/stratis/pool.jsx:544 +#: pkg/storaged/stratis/stopped-pool.jsx:134 msgid "Keyserver" msgstr "키 서버" -#: pkg/storaged/stratis/create-dialog.jsx:102 pkg/storaged/stratis/pool.jsx:456 -#: pkg/storaged/crypto/keyslots.jsx:451 pkg/storaged/crypto/keyslots.jsx:509 +#: pkg/storaged/crypto/keyslots.jsx:485 pkg/storaged/crypto/keyslots.jsx:543 +#: pkg/storaged/stratis/pool.jsx:456 pkg/storaged/stratis/create-dialog.jsx:102 msgid "Keyserver address" msgstr "키 서버 주소" -#: pkg/storaged/stratis/pool.jsx:496 pkg/storaged/crypto/keyslots.jsx:635 +#: pkg/storaged/crypto/keyslots.jsx:669 pkg/storaged/stratis/pool.jsx:496 msgid "Keyserver removal may prevent unlocking $0." msgstr "키 서버를 제거하면 $0 잠금 해제가 되지 않을 수 있습니다." @@ -3959,7 +3958,7 @@ msgid "LVM2 volume group" msgstr "LVM2 볼륨 그룹" -#: pkg/storaged/utils.js:340 +#: pkg/storaged/utils.js:341 msgid "LVM2 volume group $0" msgstr "LVM2 볼륨 그룹 $0" @@ -3987,7 +3986,7 @@ msgid "Last cannot be removed" msgstr "마지막은 제거 될 수 없습니다" -#: pkg/packagekit/updates.jsx:785 +#: pkg/packagekit/updates.jsx:784 msgid "Last checked: $0" msgstr "마지막 접속 날짜: $0" @@ -4012,11 +4011,11 @@ msgid "Layout" msgstr "배열" +#: pkg/networkmanager/bond.jsx:152 pkg/lib/cockpit-components-dialog.jsx:234 +#: pkg/lib/cockpit-components-dialog.jsx:241 #: pkg/systemd/overview-cards/tuned-dialog.jsx:291 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:119 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:164 -#: pkg/networkmanager/bond.jsx:152 pkg/lib/cockpit-components-dialog.jsx:234 -#: pkg/lib/cockpit-components-dialog.jsx:241 msgid "Learn more" msgstr "더 알아보기" @@ -4030,7 +4029,7 @@ msgid "Leave domain" msgstr "도메인 나가기" -#: pkg/sosreport/sosreport.jsx:319 +#: pkg/sosreport/sosreport.jsx:328 msgid "Leave empty to skip encryption" msgstr "암호화를 건너뛰려면 공백으로 둡니다" @@ -4038,7 +4037,7 @@ msgid "Licensed under GNU LGPL version 2.1" msgstr "GNU LGPL 버전 2.1 하에서 인가됨" -#: pkg/systemd/terminal.jsx:175 pkg/shell/topnav.jsx:190 +#: pkg/systemd/terminal.jsx:175 pkg/shell/topnav.jsx:200 msgid "Light" msgstr "경량" @@ -4151,11 +4150,11 @@ # translation auto-copied from project oVirt, version ovirt-3.5, document # frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/org.ovirt.engine.ui.webadmin.ApplicationConstants -#: pkg/systemd/overview-cards/configurationCard.jsx:179 +#: pkg/systemd/overview-cards/configurationCard.jsx:177 msgid "Loading keys..." msgstr "키 적재 중..." -#: pkg/systemd/overview-cards/configurationCard.jsx:175 +#: pkg/systemd/overview-cards/configurationCard.jsx:173 msgid "Loading of SSH keys failed" msgstr "SSH 키 로드에 실패했습니다" @@ -4179,12 +4178,12 @@ # translation auto-copied from project oVirt, version ovirt-3.5, document # frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/org.ovirt.engine.ui.webadmin.ApplicationConstants +#: pkg/storaged/storaged.jsx:66 pkg/kdump/kdump-view.jsx:438 #: pkg/systemd/service.jsx:132 pkg/systemd/logDetails.jsx:173 -#: pkg/systemd/services.jsx:683 pkg/systemd/logsJournal.jsx:268 -#: pkg/metrics/metrics.jsx:1978 pkg/kdump/kdump-view.jsx:438 -#: pkg/storaged/storaged.jsx:66 pkg/users/accounts-list.js:318 -#: pkg/users/accounts-list.js:339 pkg/users/accounts-list.js:452 -#: pkg/users/account-details.js:176 +#: pkg/systemd/logsJournal.jsx:268 pkg/systemd/services.jsx:683 +#: pkg/metrics/metrics.jsx:1978 pkg/users/account-details.js:176 +#: pkg/users/accounts-list.js:318 pkg/users/accounts-list.js:339 +#: pkg/users/accounts-list.js:452 msgid "Loading..." msgstr "적재 중..." @@ -4208,13 +4207,13 @@ msgid "Local, $0" msgstr "로컬, $0" -#: pkg/kdump/kdump-view.jsx:243 pkg/storaged/pages.jsx:716 -#: pkg/storaged/dialog.jsx:1138 pkg/storaged/dialog.jsx:1243 +#: pkg/storaged/dialog.jsx:1140 pkg/storaged/dialog.jsx:1245 +#: pkg/storaged/pages.jsx:716 pkg/kdump/kdump-view.jsx:243 msgid "Location" msgstr "위치" # 키보드에 써 있는 단어이므로 번역하지 않는다 -#: pkg/storaged/crypto/actions.jsx:75 pkg/users/lock-account-dialog.js:36 +#: pkg/storaged/crypto/actions.jsx:73 pkg/users/lock-account-dialog.js:36 msgid "Lock" msgstr "잠그기" @@ -4227,7 +4226,7 @@ msgid "Lock account" msgstr "계정 잠금" -#: pkg/storaged/crypto/locked-encrypted-data.jsx:31 +#: pkg/storaged/crypto/locked-encrypted-data.jsx:30 msgid "Locked data" msgstr "잠김 자료" @@ -4235,8 +4234,8 @@ msgid "Locking $target" msgstr "$target 잠금 중" -#: pkg/static/login.html:139 pkg/static/login.js:668 -#: pkg/shell/hosts_dialog.jsx:764 pkg/shell/failures.jsx:75 +#: pkg/static/login.html:139 pkg/shell/hosts_dialog.jsx:764 +#: pkg/shell/failures.jsx:73 pkg/static/login.js:668 msgid "Log in" msgstr "로그인" @@ -4252,7 +4251,7 @@ msgid "Log messages" msgstr "로그 메세지" -#: pkg/metrics/metrics.jsx:1806 pkg/shell/topnav.jsx:222 +#: pkg/shell/topnav.jsx:233 pkg/metrics/metrics.jsx:1806 #: pkg/users/logout-account-dialog.js:36 msgid "Log out" msgstr "로그아웃" @@ -4261,7 +4260,7 @@ msgid "Log user out" msgstr "사용자 로그아웃" -#: pkg/users/accounts-list.js:161 pkg/users/account-details.js:212 +#: pkg/users/account-details.js:212 pkg/users/accounts-list.js:161 msgid "Logged in" msgstr "로그인 상태" @@ -4274,20 +4273,20 @@ msgid "Logical Volume Manager partition" msgstr "논리 볼륨 관리 파티션" -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:213 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:249 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:213 msgid "Logical size" msgstr "논리 크기" -#: pkg/storaged/utils.js:290 +#: pkg/storaged/utils.js:291 msgid "Logical volume" msgstr "논리 볼륨" -#: pkg/storaged/utils.js:288 +#: pkg/storaged/utils.js:289 msgid "Logical volume (snapshot)" msgstr "논리 볼륨(순간찍기)" -#: pkg/storaged/utils.js:362 +#: pkg/storaged/utils.js:363 msgid "Logical volume of $0" msgstr "$0 논리 볼륨" @@ -4299,7 +4298,7 @@ msgid "Login again" msgstr "다시 로그인" -#: pkg/lib/cockpit.js:3844 +#: pkg/lib/cockpit.js:3840 msgid "Login failed" msgstr "로그인 실패" @@ -4347,7 +4346,7 @@ msgid "MDRAID device" msgstr "MD레이드 장치" -#: pkg/storaged/utils.js:334 +#: pkg/storaged/utils.js:335 msgid "MDRAID device $0" msgstr "MD레이드 장치 $0" @@ -4384,7 +4383,7 @@ msgid "Machine ID" msgstr "장치 ID" -#: pkg/systemd/overview-cards/configurationCard.jsx:196 +#: pkg/systemd/overview-cards/configurationCard.jsx:194 msgid "Machine SSH key fingerprints" msgstr "장비 SSH 키 지문" @@ -4484,8 +4483,8 @@ msgid "Mask service" msgstr "마스크 서비스" -#: pkg/systemd/services.jsx:250 pkg/systemd/services.jsx:251 -#: pkg/systemd/service-details.jsx:426 +#: pkg/systemd/service-details.jsx:426 pkg/systemd/services.jsx:250 +#: pkg/systemd/services.jsx:251 msgid "Masked" msgstr "마스크 설정되었습니다" @@ -4506,10 +4505,11 @@ msgid "Media drive" msgstr "미디어 드라이브" -#: pkg/systemd/overview-cards/usageCard.jsx:144 pkg/systemd/hwinfo.jsx:290 -#: pkg/systemd/hwinfo.jsx:334 pkg/systemd/service-details.jsx:659 -#: pkg/metrics/metrics.jsx:123 pkg/metrics/metrics.jsx:880 -#: pkg/metrics/metrics.jsx:1572 pkg/metrics/metrics.jsx:1950 +#: pkg/systemd/hwinfo.jsx:290 pkg/systemd/hwinfo.jsx:334 +#: pkg/systemd/overview-cards/usageCard.jsx:144 +#: pkg/systemd/service-details.jsx:659 pkg/metrics/metrics.jsx:123 +#: pkg/metrics/metrics.jsx:880 pkg/metrics/metrics.jsx:1572 +#: pkg/metrics/metrics.jsx:1950 msgid "Memory" msgstr "메모리" @@ -4533,12 +4533,12 @@ msgid "Message to logged in users" msgstr "로그인한 사용자에게 보내는 메세지" -#: pkg/shell/failures.jsx:43 +#: pkg/shell/failures.jsx:42 msgid "Messages related to the failure might be found in the journal:" msgstr "실행 실패와 관련된 메시지는 저널에서 찾을 수 있습니다:" -#: pkg/storaged/lvm2/vdo-pool.jsx:83 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:145 +#: pkg/storaged/lvm2/vdo-pool.jsx:83 msgid "Metadata used" msgstr "사용된 메타데이터" @@ -4595,8 +4595,8 @@ msgid "Mode" msgstr "방식" +#: pkg/storaged/drive/drive.jsx:121 pkg/systemd/hwinfo.jsx:277 #: pkg/systemd/overview-cards/systemInformationCard.jsx:111 -#: pkg/systemd/hwinfo.jsx:277 pkg/storaged/drive/drive.jsx:121 msgid "Model" msgstr "모델" @@ -4621,14 +4621,14 @@ msgid "Monthly" msgstr "월간" -#: pkg/packagekit/updates.jsx:941 +#: pkg/packagekit/updates.jsx:940 msgid "More info..." msgstr "자세한 정보..." -#: pkg/storaged/stratis/filesystem.jsx:173 pkg/storaged/nfs/nfs.jsx:310 -#: pkg/storaged/filesystem/mounting-dialog.jsx:338 +#: pkg/storaged/nfs/nfs.jsx:310 pkg/storaged/btrfs/subvolume.jsx:343 +#: pkg/storaged/stratis/filesystem.jsx:173 +#: pkg/storaged/filesystem/mounting-dialog.jsx:356 #: pkg/storaged/filesystem/filesystem.jsx:103 -#: pkg/storaged/btrfs/subvolume.jsx:343 msgid "Mount" msgstr "적재" @@ -4636,7 +4636,7 @@ msgid "Mount Point" msgstr "적재 지점" -#: pkg/storaged/filesystem/mounting-dialog.jsx:134 +#: pkg/storaged/filesystem/mounting-dialog.jsx:137 msgid "Mount after network becomes available, ignore failure" msgstr "네트워크를 사용 할 수 있게 된 후 적재, 실패를 무시합니다" @@ -4653,15 +4653,15 @@ msgid "Mount automatically on $0 on boot" msgstr "부팅시 $0에서 자동으로 적재" -#: pkg/storaged/filesystem/mounting-dialog.jsx:126 +#: pkg/storaged/filesystem/mounting-dialog.jsx:129 msgid "Mount before services start" msgstr "서비스를 시작하기 전에 적재" -#: pkg/storaged/filesystem/mounting-dialog.jsx:334 +#: pkg/storaged/filesystem/mounting-dialog.jsx:352 msgid "Mount configuration" msgstr "적재 구성" -#: pkg/storaged/filesystem/mounting-dialog.jsx:332 +#: pkg/storaged/filesystem/mounting-dialog.jsx:350 msgid "Mount filesystem" msgstr "파일 시스템 적재" @@ -4677,12 +4677,12 @@ msgid "Mount options" msgstr "적재 옵션" +#: pkg/storaged/nfs/nfs.jsx:329 pkg/storaged/btrfs/subvolume.jsx:415 +#: pkg/storaged/block/format-dialog.jsx:299 pkg/storaged/stratis/pool.jsx:103 #: pkg/storaged/stratis/filesystem.jsx:90 -#: pkg/storaged/stratis/filesystem.jsx:222 pkg/storaged/stratis/pool.jsx:103 -#: pkg/storaged/block/format-dialog.jsx:297 pkg/storaged/nfs/nfs.jsx:329 -#: pkg/storaged/filesystem/mounting-dialog.jsx:307 +#: pkg/storaged/stratis/filesystem.jsx:222 +#: pkg/storaged/filesystem/mounting-dialog.jsx:326 #: pkg/storaged/filesystem/filesystem.jsx:147 -#: pkg/storaged/btrfs/subvolume.jsx:415 msgid "Mount point" msgstr "적재 지점" @@ -4702,11 +4702,11 @@ msgid "Mount point must start with \"/\"." msgstr "적재 지점은 \"/\"로 시작해야 합니다." -#: pkg/storaged/nfs/nfs.jsx:172 pkg/storaged/filesystem/mounting-dialog.jsx:60 +#: pkg/storaged/nfs/nfs.jsx:172 pkg/storaged/filesystem/mounting-dialog.jsx:61 msgid "Mount read only" msgstr "읽기 전용으로 적재" -#: pkg/storaged/filesystem/mounting-dialog.jsx:130 +#: pkg/storaged/filesystem/mounting-dialog.jsx:133 msgid "Mount without waiting, ignore failure" msgstr "기다림 없이 적재, 실패를 무시합니다" @@ -4714,15 +4714,15 @@ msgid "Mounting $target" msgstr "$target 적재 중" -#: pkg/storaged/filesystem/mounting-dialog.jsx:71 +#: pkg/storaged/filesystem/mounting-dialog.jsx:74 msgid "Mounts before services start" msgstr "서비스를 시작하기 전에 적재" -#: pkg/storaged/filesystem/mounting-dialog.jsx:85 +#: pkg/storaged/filesystem/mounting-dialog.jsx:88 msgid "Mounts in parallel with services" msgstr "서비스와 병행하여 적재" -#: pkg/storaged/filesystem/mounting-dialog.jsx:96 +#: pkg/storaged/filesystem/mounting-dialog.jsx:99 msgid "Mounts in parallel with services, but after network is available" msgstr "서비스와 병행하여 적재, 하지만 네트워크가 가용해야 합니다" @@ -4751,35 +4751,34 @@ msgid "NTP server" msgstr "NTP 서버" -#: pkg/systemd/timer-dialog.jsx:157 pkg/systemd/hwinfo.jsx:86 -#: pkg/networkmanager/network-main.jsx:185 -#: pkg/networkmanager/network-main.jsx:200 -#: pkg/networkmanager/dialogs-common.jsx:142 -#: pkg/storaged/stratis/create-dialog.jsx:50 -#: pkg/storaged/stratis/filesystem.jsx:85 -#: pkg/storaged/stratis/filesystem.jsx:193 -#: pkg/storaged/stratis/filesystem.jsx:217 pkg/storaged/stratis/pool.jsx:92 -#: pkg/storaged/stratis/pool.jsx:166 pkg/storaged/stratis/pool.jsx:514 -#: pkg/storaged/lvm2/vdo-pool.jsx:78 pkg/storaged/lvm2/create-dialog.jsx:47 +#: pkg/storaged/partitions/partition.jsx:227 pkg/storaged/btrfs/volume.jsx:89 +#: pkg/storaged/btrfs/subvolume.jsx:148 pkg/storaged/btrfs/subvolume.jsx:413 +#: pkg/storaged/block/format-dialog.jsx:293 +#: pkg/storaged/iscsi/create-dialog.jsx:111 +#: pkg/storaged/iscsi/create-dialog.jsx:168 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:166 -#: pkg/storaged/lvm2/volume-group.jsx:64 pkg/storaged/lvm2/volume-group.jsx:116 -#: pkg/storaged/lvm2/volume-group.jsx:380 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:44 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:138 #: pkg/storaged/lvm2/block-logical-volume.jsx:49 #: pkg/storaged/lvm2/block-logical-volume.jsx:238 #: pkg/storaged/lvm2/block-logical-volume.jsx:286 -#: pkg/storaged/block/format-dialog.jsx:291 -#: pkg/storaged/iscsi/create-dialog.jsx:111 -#: pkg/storaged/iscsi/create-dialog.jsx:168 +#: pkg/storaged/lvm2/create-dialog.jsx:47 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:44 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:138 +#: pkg/storaged/lvm2/volume-group.jsx:64 pkg/storaged/lvm2/volume-group.jsx:116 +#: pkg/storaged/lvm2/volume-group.jsx:380 pkg/storaged/lvm2/vdo-pool.jsx:78 +#: pkg/storaged/stratis/pool.jsx:92 pkg/storaged/stratis/pool.jsx:166 +#: pkg/storaged/stratis/pool.jsx:514 pkg/storaged/stratis/create-dialog.jsx:50 +#: pkg/storaged/stratis/filesystem.jsx:85 +#: pkg/storaged/stratis/filesystem.jsx:193 +#: pkg/storaged/stratis/filesystem.jsx:217 #: pkg/storaged/filesystem/filesystem.jsx:119 #: pkg/storaged/filesystem/filesystem.jsx:141 -#: pkg/storaged/partitions/partition.jsx:227 -#: pkg/storaged/mdraid/create-dialog.jsx:47 pkg/storaged/mdraid/mdraid.jsx:285 -#: pkg/storaged/btrfs/volume.jsx:89 pkg/storaged/btrfs/subvolume.jsx:148 -#: pkg/storaged/btrfs/subvolume.jsx:413 pkg/shell/credentials.jsx:101 -#: pkg/packagekit/updates.jsx:448 pkg/users/authorized-keys-panel.js:127 -#: pkg/users/group-create-dialog.js:39 +#: pkg/storaged/mdraid/mdraid.jsx:285 pkg/storaged/mdraid/create-dialog.jsx:47 +#: pkg/networkmanager/network-main.jsx:185 +#: pkg/networkmanager/network-main.jsx:200 +#: pkg/networkmanager/dialogs-common.jsx:142 pkg/systemd/timer-dialog.jsx:157 +#: pkg/systemd/hwinfo.jsx:86 pkg/shell/credentials.jsx:101 +#: pkg/packagekit/updates.jsx:447 pkg/users/group-create-dialog.js:39 +#: pkg/users/authorized-keys-panel.js:127 msgid "Name" msgstr "이름" @@ -4787,19 +4786,19 @@ msgid "Name can not be empty." msgstr "이름을 입력하셔야 합니다." -#: pkg/storaged/utils.js:212 pkg/storaged/btrfs/utils.jsx:85 +#: pkg/storaged/btrfs/utils.jsx:85 pkg/storaged/utils.js:213 msgid "Name cannot be empty." msgstr "이름을 입력하셔야 합니다." -#: pkg/storaged/utils.js:241 +#: pkg/storaged/utils.js:242 msgid "Name cannot be longer than $0 bytes" msgstr "이름은 $0 바이트보다 길 수 없습니다" -#: pkg/storaged/utils.js:239 +#: pkg/storaged/utils.js:240 msgid "Name cannot be longer than $0 characters" msgstr "이름은 $0자를 초과할 수 없습니다" -#: pkg/storaged/utils.js:214 +#: pkg/storaged/utils.js:215 msgid "Name cannot be longer than 127 characters." msgstr "이름은 127자보다 길 수 없습니다." @@ -4807,7 +4806,7 @@ msgid "Name cannot be longer than 255 characters." msgstr "이름은 255자 보다 길 수 없습니다." -#: pkg/storaged/utils.js:218 +#: pkg/storaged/utils.js:219 msgid "Name cannot contain the character '$0'." msgstr "이름에는 문자 '$0'를 포함할 수 없습니다." @@ -4815,7 +4814,7 @@ msgid "Name cannot contain the character '/'." msgstr "이름에는 문자 '/'를 포함 할 수 없습니다." -#: pkg/storaged/utils.js:220 +#: pkg/storaged/utils.js:221 msgid "Name cannot contain whitespace." msgstr "이름에는 공백이 없어야 합니다." @@ -4864,9 +4863,9 @@ msgid "Networked storage" msgstr "네트워크 저장소" -#: pkg/networkmanager/index.html:23 +#: pkg/networkmanager/index.html:23 pkg/networkmanager/firewall.jsx:1053 #: pkg/networkmanager/network-interface.jsx:705 -#: pkg/networkmanager/firewall.jsx:1053 pkg/networkmanager/manifest.json:0 +#: pkg/networkmanager/manifest.json:0 #: src/appstream/org.cockpit-project.cockpit-networkmanager.metainfo.xml.in:5 msgid "Networking" msgstr "네트워킹" @@ -4875,11 +4874,11 @@ msgid "Never" msgstr "하지 않기" -#: pkg/users/expiration-dialogs.js:42 pkg/users/account-details.js:75 +#: pkg/users/account-details.js:75 pkg/users/expiration-dialogs.js:42 msgid "Never expire account" msgstr "계정 잠금을 하지 않습니다" -#: pkg/users/expiration-dialogs.js:154 pkg/users/account-details.js:67 +#: pkg/users/account-details.js:67 pkg/users/expiration-dialogs.js:154 msgid "Never expire password" msgstr "비밀번호가 만료되어서는 안됩니다" @@ -4907,8 +4906,8 @@ msgid "New name" msgstr "신규 이름" -#: pkg/storaged/stratis/pool.jsx:407 pkg/storaged/crypto/keyslots.jsx:435 -#: pkg/storaged/crypto/keyslots.jsx:485 +#: pkg/storaged/crypto/keyslots.jsx:469 pkg/storaged/crypto/keyslots.jsx:519 +#: pkg/storaged/stratis/pool.jsx:407 msgid "New passphrase" msgstr "신규 암호문" @@ -4916,7 +4915,7 @@ msgid "New password" msgstr "신규 비밀번호" -#: pkg/users/password-dialogs.js:86 pkg/lib/credentials.js:241 +#: pkg/lib/credentials.js:241 pkg/users/password-dialogs.js:86 msgid "New password was not accepted" msgstr "신규 비밀번호가 허용되지 않습니다" @@ -4924,7 +4923,7 @@ msgid "Next" msgstr "다음" -#: pkg/systemd/reporting.jsx:290 pkg/networkmanager/network-interface.jsx:241 +#: pkg/networkmanager/network-interface.jsx:241 pkg/systemd/reporting.jsx:290 msgid "No" msgstr "아니오" @@ -4940,7 +4939,7 @@ msgid "No applications installed or available." msgstr "설치되거나 사용 가능한 응용프로그램이 없습니다." -#: pkg/storaged/crypto/keyslots.jsx:778 +#: pkg/storaged/crypto/keyslots.jsx:812 msgid "No available slots" msgstr "사용 가능한 홈이 없습니다" @@ -4948,7 +4947,7 @@ msgid "No block devices are available." msgstr "사용 가능한 블록 장치가 없습니다." -#: pkg/storaged/stratis/stopped-pool.jsx:140 pkg/storaged/stratis/pool.jsx:565 +#: pkg/storaged/stratis/pool.jsx:565 pkg/storaged/stratis/stopped-pool.jsx:140 msgid "No block devices found" msgstr "블럭 장치를 찾을 수 없습니다" @@ -4984,9 +4983,9 @@ msgid "No devices found" msgstr "장치를 찾을 수 없습니다" -#: pkg/storaged/stratis/pool.jsx:208 pkg/storaged/lvm2/create-dialog.jsx:54 -#: pkg/storaged/lvm2/volume-group.jsx:200 -#: pkg/storaged/mdraid/create-dialog.jsx:101 pkg/storaged/mdraid/mdraid.jsx:158 +#: pkg/storaged/lvm2/create-dialog.jsx:54 +#: pkg/storaged/lvm2/volume-group.jsx:200 pkg/storaged/stratis/pool.jsx:208 +#: pkg/storaged/mdraid/mdraid.jsx:158 pkg/storaged/mdraid/create-dialog.jsx:101 msgid "No disks are available." msgstr "사용 가능한 디스크가 없습니다." @@ -5014,7 +5013,7 @@ msgid "No filesystems" msgstr "파일 시스템 없음" -#: pkg/storaged/crypto/keyslots.jsx:783 +#: pkg/storaged/crypto/keyslots.jsx:817 msgid "No free key slots" msgstr "여유 키 슬롯이 없습니다" @@ -5030,7 +5029,7 @@ msgid "No group name specified" msgstr "지정된 그룹 이름이 없습니다" -#: pkg/systemd/overview-cards/configurationCard.jsx:181 +#: pkg/systemd/overview-cards/configurationCard.jsx:179 msgid "No host keys found." msgstr "호스트 키를 찾을 수 없습니다." @@ -5038,7 +5037,7 @@ msgid "No installation package found for this application." msgstr "이 꾸러미에 대한 설치 꾸러미를 찾을 수 없습니다." -#: pkg/storaged/crypto/keyslots.jsx:700 +#: pkg/storaged/crypto/keyslots.jsx:734 msgid "No keys added" msgstr "추가된 키가 없습니다" @@ -5050,8 +5049,8 @@ msgid "No log entries" msgstr "로그 항목이 없습니다" -#: pkg/storaged/lvm2/volume-group.jsx:297 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:126 +#: pkg/storaged/lvm2/volume-group.jsx:297 msgid "No logical volumes" msgstr "논리 볼륨 없음" @@ -5107,8 +5106,8 @@ msgid "No storage found" msgstr "저장소를 찾을 수 없음" -#: pkg/storaged/btrfs/volume.jsx:157 pkg/storaged/btrfs/filesystem.jsx:86 -#: pkg/storaged/btrfs/subvolume.jsx:423 +#: pkg/storaged/btrfs/volume.jsx:157 pkg/storaged/btrfs/subvolume.jsx:423 +#: pkg/storaged/btrfs/filesystem.jsx:86 msgid "No subvolumes" msgstr "하위볼륨 없음" @@ -5121,7 +5120,7 @@ msgid "No system modifications" msgstr "시스템 수정 없음" -#: pkg/sosreport/sosreport.jsx:488 +#: pkg/sosreport/sosreport.jsx:497 msgid "No system reports." msgstr "시스템 보고 없음." @@ -5133,8 +5132,8 @@ msgid "No user name specified" msgstr "지정된 사용자 이름이 없습니다" -#: pkg/systemd/overview-cards/tuned-dialog.jsx:232 #: pkg/networkmanager/firewall.jsx:854 pkg/kdump/kdump-view.jsx:488 +#: pkg/systemd/overview-cards/tuned-dialog.jsx:232 msgid "None" msgstr "없음" @@ -5170,8 +5169,8 @@ msgid "Not enough free space" msgstr "여유 공간이 부족합니다" -#: pkg/storaged/stratis/filesystem.jsx:75 pkg/storaged/stratis/pool.jsx:306 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:95 +#: pkg/storaged/stratis/pool.jsx:306 pkg/storaged/stratis/filesystem.jsx:75 msgid "Not enough space" msgstr "공간이 부족합니다" @@ -5179,8 +5178,8 @@ msgid "Not enough space to grow" msgstr "확장 공간이 부족합니다" -#: pkg/systemd/services.jsx:222 pkg/storaged/pages.jsx:278 -#: pkg/storaged/pages.jsx:283 +#: pkg/storaged/pages.jsx:278 pkg/storaged/pages.jsx:283 +#: pkg/systemd/services.jsx:222 msgid "Not found" msgstr "찾을 수 없습니다" @@ -5198,7 +5197,7 @@ msgid "Not permitted to configure realms" msgstr "영역 구성을 허용하지 않습니다" -#: pkg/lib/cockpit.js:3842 +#: pkg/lib/cockpit.js:3838 msgid "Not permitted to perform this action." msgstr "이 작업을 실행할 수 있는 권한이 없습니다." @@ -5206,13 +5205,13 @@ msgid "Not ready" msgstr "준비되지 않음" -#: pkg/packagekit/updates.jsx:1366 +#: pkg/packagekit/updates.jsx:1365 msgid "Not registered" msgstr "등록되지 않음" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:466 #: pkg/systemd/services.jsx:234 pkg/systemd/services.jsx:237 -#: pkg/systemd/services.jsx:697 pkg/systemd/service-details.jsx:466 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:697 msgid "Not running" msgstr "미동작" @@ -5236,11 +5235,11 @@ msgid "Notice and above" msgstr "알림 이상의 수준" -#: pkg/sosreport/sosreport.jsx:322 +#: pkg/sosreport/sosreport.jsx:331 msgid "Obfuscate network addresses, hostnames, and usernames" msgstr "네트워크 주소, 호스트이름과 사용자이름 난독화" -#: pkg/sosreport/sosreport.jsx:443 +#: pkg/sosreport/sosreport.jsx:452 msgid "Obfuscated" msgstr "난독화됨" @@ -5252,8 +5251,8 @@ msgid "Occurred between $0 and $1" msgstr "$0에서 $1 사이의 발생 건수" -#: pkg/selinux/setroubleshoot-view.jsx:414 #: pkg/lib/cockpit-components-logs-panel.jsx:98 +#: pkg/selinux/setroubleshoot-view.jsx:414 msgid "Occurrences" msgstr "발생" @@ -5261,7 +5260,7 @@ msgid "Ok" msgstr "확인" -#: pkg/storaged/stratis/pool.jsx:402 pkg/storaged/crypto/keyslots.jsx:482 +#: pkg/storaged/crypto/keyslots.jsx:516 pkg/storaged/stratis/pool.jsx:402 msgid "Old passphrase" msgstr "이전 비밀번호" @@ -5269,7 +5268,7 @@ msgid "Old password" msgstr "이전 비밀번호" -#: pkg/users/password-dialogs.js:55 pkg/lib/credentials.js:221 +#: pkg/lib/credentials.js:221 pkg/users/password-dialogs.js:55 msgid "Old password not accepted" msgstr "이전 비밀번호가 허용되지 않습니다" @@ -5305,7 +5304,7 @@ msgid "Only use approved and allowed algorithms when booting in FIPS mode." msgstr "FIPS 방식으로 부팅 할 때에 승인되고 허용된 알고리즘만 사용하세요." -#: pkg/shell/topnav.jsx:244 +#: pkg/shell/topnav.jsx:255 msgid "Ooops!" msgstr "어머나!" @@ -5317,10 +5316,10 @@ msgid "Operation '$operation' on $target" msgstr "$target에서 '$operation' 작업" -#: pkg/sosreport/sosreport.jsx:321 pkg/networkmanager/bridge.jsx:104 -#: pkg/storaged/stratis/create-dialog.jsx:64 +#: pkg/storaged/crypto/encryption.jsx:234 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:223 -#: pkg/storaged/crypto/encryption.jsx:234 pkg/users/account-details.js:269 +#: pkg/storaged/stratis/create-dialog.jsx:64 pkg/sosreport/sosreport.jsx:330 +#: pkg/networkmanager/bridge.jsx:104 pkg/users/account-details.js:269 msgid "Options" msgstr "옵션" @@ -5332,7 +5331,7 @@ msgid "Other" msgstr "기타" -#: pkg/users/account-create-dialog.js:131 pkg/users/account-details.js:279 +#: pkg/users/account-details.js:279 pkg/users/account-create-dialog.js:131 msgid "" "Other authentication methods are still available even when interactive " "password authentication is not allowed." @@ -5357,13 +5356,13 @@ # translation auto-copied from project virt-manager, version 0.10.0, document # virt-manager -#: pkg/storaged/block/format-dialog.jsx:322 #: pkg/storaged/partitions/format-disk-dialog.jsx:61 +#: pkg/storaged/block/format-dialog.jsx:324 msgid "Overwrite" msgstr "덮어쓰기" -#: pkg/storaged/block/format-dialog.jsx:325 #: pkg/storaged/partitions/format-disk-dialog.jsx:64 +#: pkg/storaged/block/format-dialog.jsx:327 msgid "Overwrite existing data with zeros (slower)" msgstr "기존의 자료를 제로로 덮어쓰기 (더 느리게)" @@ -5371,7 +5370,7 @@ msgid "PCI" msgstr "PCI" -#: pkg/storaged/dialog.jsx:1329 +#: pkg/storaged/dialog.jsx:1331 msgid "PID" msgstr "PID" @@ -5379,7 +5378,7 @@ msgid "Package cockpit-pcp is missing for metrics history" msgstr "메트릭 내역에 꾸러미 cockpit-pcp가 누락되어 있습니다" -#: pkg/packagekit/updates.jsx:690 pkg/packagekit/updates.jsx:769 +#: pkg/packagekit/updates.jsx:689 pkg/packagekit/updates.jsx:768 msgid "Package information" msgstr "꾸러미 정보" @@ -5387,15 +5386,15 @@ msgid "PackageKit crashed" msgstr "PackageKit가 충돌했습니다" -#: pkg/packagekit/updates.jsx:1104 +#: pkg/packagekit/updates.jsx:1103 msgid "PackageKit is not installed" msgstr "PackageKit이 설치되어 있지 않습니다" -#: pkg/packagekit/updates.jsx:1305 +#: pkg/packagekit/updates.jsx:1304 msgid "PackageKit reported error code $0" msgstr "PackageKit가 오류 코드 $0를 보고했습니다" -#: pkg/packagekit/updates.jsx:364 +#: pkg/packagekit/updates.jsx:363 msgid "Packages" msgstr "꾸러미" @@ -5423,7 +5422,7 @@ msgid "Partition" msgstr "파티션" -#: pkg/storaged/utils.js:364 +#: pkg/storaged/utils.js:365 msgid "Partition of $0" msgstr "$0의 파티션" @@ -5446,53 +5445,53 @@ # translation auto-copied from project Anaconda, version master, document # anaconda +#: pkg/storaged/crypto/actions.jsx:42 pkg/storaged/crypto/keyslots.jsx:464 +#: pkg/storaged/crypto/keyslots.jsx:784 +#: pkg/storaged/block/format-dialog.jsx:336 +#: pkg/storaged/block/format-dialog.jsx:364 pkg/storaged/stratis/pool.jsx:201 +#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 +#: pkg/storaged/stratis/create-dialog.jsx:75 #: pkg/storaged/stratis/stopped-pool.jsx:58 #: pkg/storaged/stratis/stopped-pool.jsx:129 -#: pkg/storaged/stratis/create-dialog.jsx:75 pkg/storaged/stratis/pool.jsx:201 -#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 -#: pkg/storaged/block/format-dialog.jsx:334 -#: pkg/storaged/block/format-dialog.jsx:362 -#: pkg/storaged/filesystem/mounting-dialog.jsx:323 -#: pkg/storaged/crypto/actions.jsx:43 pkg/storaged/crypto/keyslots.jsx:430 -#: pkg/storaged/crypto/keyslots.jsx:750 +#: pkg/storaged/filesystem/mounting-dialog.jsx:341 msgid "Passphrase" msgstr "암호문" -#: pkg/storaged/crypto/keyslots.jsx:573 +#: pkg/storaged/crypto/keyslots.jsx:607 msgid "Passphrase can not be empty" msgstr "암호문은 비워 둘 수 없습니다" -#: pkg/storaged/stratis/create-dialog.jsx:79 pkg/storaged/stratis/pool.jsx:204 +#: pkg/storaged/crypto/keyslots.jsx:178 pkg/storaged/crypto/keyslots.jsx:472 +#: pkg/storaged/crypto/keyslots.jsx:517 pkg/storaged/crypto/keyslots.jsx:521 +#: pkg/storaged/block/format-dialog.jsx:340 +#: pkg/storaged/block/format-dialog.jsx:368 pkg/storaged/stratis/pool.jsx:204 #: pkg/storaged/stratis/pool.jsx:379 pkg/storaged/stratis/pool.jsx:405 #: pkg/storaged/stratis/pool.jsx:408 pkg/storaged/stratis/pool.jsx:463 -#: pkg/storaged/block/format-dialog.jsx:338 -#: pkg/storaged/block/format-dialog.jsx:366 -#: pkg/storaged/filesystem/mounting-dialog.jsx:326 -#: pkg/storaged/crypto/keyslots.jsx:145 pkg/storaged/crypto/keyslots.jsx:438 -#: pkg/storaged/crypto/keyslots.jsx:483 pkg/storaged/crypto/keyslots.jsx:487 +#: pkg/storaged/stratis/create-dialog.jsx:79 +#: pkg/storaged/filesystem/mounting-dialog.jsx:344 msgid "Passphrase cannot be empty" msgstr "암호문는 비워 둘 수 없습니다" -#: pkg/storaged/crypto/keyslots.jsx:595 +#: pkg/storaged/crypto/keyslots.jsx:629 msgid "Passphrase from any other key slot" msgstr "다른 키 슬롯에서 암호문" -#: pkg/storaged/stratis/pool.jsx:439 pkg/storaged/crypto/keyslots.jsx:586 +#: pkg/storaged/crypto/keyslots.jsx:620 pkg/storaged/stratis/pool.jsx:439 msgid "Passphrase removal may prevent unlocking $0." msgstr "암호문 제거에서 $0 잠금 해제가 되지 않을 수 있습니다." -#: pkg/storaged/stratis/create-dialog.jsx:88 pkg/storaged/stratis/pool.jsx:381 -#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/block/format-dialog.jsx:347 -#: pkg/storaged/crypto/keyslots.jsx:447 pkg/storaged/crypto/keyslots.jsx:492 +#: pkg/storaged/crypto/keyslots.jsx:481 pkg/storaged/crypto/keyslots.jsx:526 +#: pkg/storaged/block/format-dialog.jsx:349 pkg/storaged/stratis/pool.jsx:381 +#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/stratis/create-dialog.jsx:88 msgid "Passphrases do not match" msgstr "암호문이 일치하지 않습니다" #: pkg/static/login.html:99 pkg/storaged/iscsi/create-dialog.jsx:34 #: pkg/storaged/iscsi/create-dialog.jsx:140 pkg/shell/hosts_dialog.jsx:845 -#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/credentials.jsx:119 -#: pkg/shell/credentials.jsx:262 pkg/shell/credentials.jsx:318 -#: pkg/shell/superuser.jsx:144 pkg/users/account-create-dialog.js:139 -#: pkg/users/account-details.js:296 +#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/superuser.jsx:144 +#: pkg/shell/credentials.jsx:119 pkg/shell/credentials.jsx:262 +#: pkg/shell/credentials.jsx:318 pkg/users/account-details.js:296 +#: pkg/users/account-create-dialog.js:139 msgid "Password" msgstr "비밀번호" @@ -5572,8 +5571,8 @@ msgid "Path to directory" msgstr "디렉토리 경로" -#: pkg/shell/credentials.jsx:172 #: pkg/lib/cockpit-components-file-autocomplete.jsx:169 +#: pkg/shell/credentials.jsx:172 msgid "Path to file" msgstr "파일의 경로" @@ -5617,7 +5616,7 @@ msgstr "" "Performance Co-Pilot는 당신의 시스템에서 성능 메트릭을 수집하고 분석합니다." -#: pkg/systemd/overview-cards/configurationCard.jsx:85 +#: pkg/systemd/overview-cards/configurationCard.jsx:84 msgid "Performance profile" msgstr "성능 프로파일" @@ -5633,9 +5632,10 @@ msgid "Permanently delete $0 group?" msgstr "영구적으로 $0 그룹을 삭제 할까요?" -#: pkg/storaged/stratis/pool.jsx:145 pkg/storaged/lvm2/volume-group.jsx:93 +#: pkg/storaged/partitions/partition.jsx:54 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:119 -#: pkg/storaged/partitions/partition.jsx:54 pkg/storaged/mdraid/mdraid.jsx:123 +#: pkg/storaged/lvm2/volume-group.jsx:93 pkg/storaged/stratis/pool.jsx:145 +#: pkg/storaged/mdraid/mdraid.jsx:123 msgid "Permanently delete $0?" msgstr "영구적으로 $0를 삭제 할까요?" @@ -5661,14 +5661,14 @@ msgid "Physical" msgstr "물리" +#: pkg/storaged/block/resize.jsx:436 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:180 #: pkg/storaged/lvm2/block-logical-volume.jsx:130 -#: pkg/storaged/block/resize.jsx:436 msgid "Physical Volumes" msgstr "물리 볼륨" -#: pkg/storaged/lvm2/volume-group.jsx:390 #: pkg/storaged/lvm2/block-logical-volume.jsx:356 +#: pkg/storaged/lvm2/volume-group.jsx:390 msgid "Physical volumes" msgstr "물리 볼륨" @@ -5676,8 +5676,8 @@ msgid "Physical volumes can not be resized here" msgstr "물리적 볼륨은 여기에서 크기를 변경 할 수 없습니다" -#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 #: pkg/lib/cockpit-components-shutdown.jsx:211 pkg/lib/serverTime.js:599 +#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 msgid "Pick date" msgstr "날짜 선택" @@ -5729,7 +5729,7 @@ msgid "Please unmount them first." msgstr "우선 적재된 부분을 해제해 주세요." -#: pkg/storaged/utils.js:284 +#: pkg/storaged/utils.js:285 msgid "Pool for thin logical volumes" msgstr "씬 논리 볼륨을 위한 풀" @@ -5753,8 +5753,8 @@ msgid "Portable" msgstr "이동식" -#: pkg/networkmanager/network-interface-members.jsx:203 #: pkg/networkmanager/team.jsx:159 pkg/networkmanager/bridge.jsx:101 +#: pkg/networkmanager/network-interface-members.jsx:208 msgid "Ports" msgstr "포트" @@ -5775,7 +5775,7 @@ msgid "Preparing" msgstr "준비 중입니다" -#: pkg/systemd/hw-detect.js:114 pkg/lib/machine-info.js:247 +#: pkg/lib/machine-info.js:247 pkg/systemd/hw-detect.js:114 msgid "Present" msgstr "존재" @@ -5783,7 +5783,7 @@ msgid "Preserve" msgstr "유지" -#: pkg/systemd/overview-cards/configurationCard.jsx:288 +#: pkg/systemd/overview-cards/configurationCard.jsx:284 msgid "Pretty host name" msgstr "지정 호스트 이름" @@ -5795,8 +5795,8 @@ msgid "Primary" msgstr "주" -#: pkg/systemd/logs.jsx:208 pkg/networkmanager/bridgeport.jsx:80 -#: pkg/networkmanager/teamport.jsx:84 +#: pkg/networkmanager/bridgeport.jsx:80 pkg/networkmanager/teamport.jsx:84 +#: pkg/systemd/logs.jsx:208 msgid "Priority" msgstr "우선순위" @@ -5821,11 +5821,11 @@ msgid "Problem info" msgstr "문제 정보" -#: pkg/storaged/dialog.jsx:1171 +#: pkg/storaged/dialog.jsx:1173 msgid "Processes using the location" msgstr "위치를 사용하는 프로세스" -#: pkg/sosreport/sosreport.jsx:292 +#: pkg/sosreport/sosreport.jsx:301 msgid "Progress: $0" msgstr "진행: $0" @@ -5929,7 +5929,7 @@ msgid "RAID chassis" msgstr "레이드 섀시" -#: pkg/storaged/mdraid/create-dialog.jsx:51 pkg/storaged/mdraid/mdraid.jsx:286 +#: pkg/storaged/mdraid/mdraid.jsx:286 pkg/storaged/mdraid/create-dialog.jsx:51 msgid "RAID level" msgstr "레이드 수준" @@ -5995,11 +5995,11 @@ msgid "Ready" msgstr "준비" -#: pkg/systemd/overview-cards/configurationCard.jsx:291 +#: pkg/systemd/overview-cards/configurationCard.jsx:287 msgid "Real host name" msgstr "실제 호스트 이름" -#: pkg/systemd/overview-cards/configurationCard.jsx:258 +#: pkg/systemd/overview-cards/configurationCard.jsx:254 msgid "" "Real host name can only contain lower-case characters, digits, dashes, and " "periods (with populated subdomains)" @@ -6007,7 +6007,7 @@ "실제 호스트 이름에는 소문자, 숫자, 대시, 마침표만 사용할 수 있습니다. (입력" "된 하위 도메인 포함)" -#: pkg/systemd/overview-cards/configurationCard.jsx:256 +#: pkg/systemd/overview-cards/configurationCard.jsx:252 msgid "Real host name must be 64 characters or less" msgstr "실제 호스트 이름은 64자 보다 적은 문자로 구성되어야 합니다" @@ -6015,14 +6015,14 @@ msgid "Reapply and reboot" msgstr "다시 적용하고 재시작" -#: pkg/systemd/overview.jsx:109 pkg/systemd/overview.jsx:128 -#: pkg/lib/cockpit-components-logs-panel.jsx:114 #: pkg/lib/cockpit-components-shutdown.jsx:190 #: pkg/lib/cockpit-components-shutdown.jsx:192 +#: pkg/lib/cockpit-components-logs-panel.jsx:114 pkg/systemd/overview.jsx:110 +#: pkg/systemd/overview.jsx:135 msgid "Reboot" msgstr "재시작" -#: pkg/packagekit/updates.jsx:614 +#: pkg/packagekit/updates.jsx:613 msgid "Reboot after completion" msgstr "완료 후 재시작" @@ -6030,15 +6030,14 @@ msgid "Reboot recommended" msgstr "재시작 권장" -#: pkg/packagekit/updates.jsx:685 pkg/packagekit/updates.jsx:760 -#: pkg/packagekit/updates.jsx:824 +#: pkg/packagekit/updates.jsx:684 pkg/packagekit/updates.jsx:759 +#: pkg/packagekit/updates.jsx:823 msgid "Reboot system..." msgstr "시스템 재시작..." #: pkg/networkmanager/network-main.jsx:188 -#: pkg/networkmanager/network-main.jsx:203 -#: pkg/networkmanager/network-interface-members.jsx:205 -#: pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-main.jsx:203 pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-interface-members.jsx:210 msgid "Receiving" msgstr "수신중" @@ -6050,7 +6049,7 @@ msgid "Recommended, secure settings for current threat models." msgstr "현재 위협 모델을 위해 권장된 보안 설정." -#: pkg/shell/failures.jsx:74 +#: pkg/shell/failures.jsx:72 msgid "Reconnect" msgstr "재연결" @@ -6082,23 +6081,23 @@ msgid "Regenerate" msgstr "다시-생성합니다" -#: pkg/storaged/crypto/keyslots.jsx:277 +#: pkg/storaged/crypto/keyslots.jsx:311 msgid "Regenerating initrd" msgstr "initrd 재생하기" -#: pkg/packagekit/updates.jsx:1378 +#: pkg/packagekit/updates.jsx:1377 msgid "Register…" msgstr "등록 중…" -#: pkg/storaged/dialog.jsx:1259 +#: pkg/storaged/dialog.jsx:1261 msgid "Related processes and services will be forcefully stopped." msgstr "연관된 프로세서와 서비스는 강제 종료됩니다." -#: pkg/storaged/dialog.jsx:1261 +#: pkg/storaged/dialog.jsx:1263 msgid "Related processes will be forcefully stopped." msgstr "연관된 프로세서는 강제 종료됩니다." -#: pkg/storaged/dialog.jsx:1263 +#: pkg/storaged/dialog.jsx:1265 msgid "Related services will be forcefully stopped." msgstr "연관된 서비스는 강제 종료됩니다." @@ -6114,7 +6113,7 @@ msgid "Reloading" msgstr "다시 적재 중" -#: pkg/packagekit/updates.jsx:510 +#: pkg/packagekit/updates.jsx:509 msgid "Reloading the state of remaining services" msgstr "나머지 서비스의 상태 재적재 중" @@ -6150,19 +6149,19 @@ msgid "Removals:" msgstr "삭제:" -#: pkg/systemd/timer-dialog.jsx:361 pkg/storaged/stratis/pool.jsx:443 +#: pkg/storaged/nfs/nfs.jsx:315 pkg/storaged/crypto/keyslots.jsx:649 +#: pkg/storaged/crypto/keyslots.jsx:684 pkg/storaged/crypto/keyslots.jsx:769 +#: pkg/storaged/lvm2/physical-volume.jsx:88 +#: pkg/storaged/lvm2/volume-group.jsx:347 pkg/storaged/stratis/pool.jsx:443 #: pkg/storaged/stratis/pool.jsx:500 pkg/storaged/stratis/pool.jsx:535 -#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/lvm2/volume-group.jsx:347 -#: pkg/storaged/lvm2/physical-volume.jsx:88 pkg/storaged/nfs/nfs.jsx:315 -#: pkg/storaged/crypto/keyslots.jsx:615 pkg/storaged/crypto/keyslots.jsx:650 -#: pkg/storaged/crypto/keyslots.jsx:735 pkg/storaged/mdraid/mdraid-disk.jsx:98 -#: pkg/shell/hosts.jsx:170 pkg/apps/application.jsx:50 -#: pkg/users/authorized-keys-panel.js:142 +#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/mdraid/mdraid-disk.jsx:98 +#: pkg/apps/application.jsx:50 pkg/systemd/timer-dialog.jsx:361 +#: pkg/shell/hosts.jsx:170 pkg/users/authorized-keys-panel.js:142 #: pkg/users/authorized-keys-panel.js:150 msgid "Remove" msgstr "제거" -#: pkg/networkmanager/network-interface-members.jsx:110 +#: pkg/networkmanager/network-interface-members.jsx:111 msgid "Remove $0" msgstr "$0 삭제" @@ -6170,11 +6169,11 @@ msgid "Remove $0 service from $1 zone" msgstr "$1영역에서 $0 서비스 제거" -#: pkg/storaged/stratis/pool.jsx:495 pkg/storaged/crypto/keyslots.jsx:634 +#: pkg/storaged/crypto/keyslots.jsx:668 pkg/storaged/stratis/pool.jsx:495 msgid "Remove $0?" msgstr "$0를 삭제하시겠습니까?" -#: pkg/storaged/stratis/pool.jsx:493 pkg/storaged/crypto/keyslots.jsx:644 +#: pkg/storaged/crypto/keyslots.jsx:678 pkg/storaged/stratis/pool.jsx:493 msgid "Remove Tang keyserver?" msgstr "Tang 키 서버 삭제?" @@ -6197,7 +6196,7 @@ msgid "Remove missing physical volumes?" msgstr "누락된 물리 볼륨 제거?" -#: pkg/storaged/crypto/keyslots.jsx:608 +#: pkg/storaged/crypto/keyslots.jsx:642 msgid "Remove passphrase in key slot $0?" msgstr "키 슬롯 $0에서 암호문를 제거합니까?" @@ -6219,12 +6218,12 @@ msgid "Removing" msgstr "삭제 중" -#: pkg/storaged/crypto/keyslots.jsx:222 +#: pkg/storaged/crypto/keyslots.jsx:256 #: pkg/lib/cockpit-components-install-dialog.jsx:191 msgid "Removing $0" msgstr "$0 삭제 중" -#: pkg/networkmanager/network-interface-members.jsx:109 +#: pkg/networkmanager/network-interface-members.jsx:110 msgid "" "Removing $0 will break the connection to the server, and will make the " "administration UI unavailable." @@ -6235,7 +6234,7 @@ msgid "Removing $target from MDRAID device" msgstr "MD레이드 장치에서 $target 제거 중" -#: pkg/storaged/crypto/keyslots.jsx:593 +#: pkg/storaged/crypto/keyslots.jsx:627 msgid "" "Removing a passphrase without confirmation of another passphrase may prevent " "unlocking or key management, if other passphrases are forgotten or lost." @@ -6260,11 +6259,10 @@ msgid "Removing the zone will remove all services within it." msgstr "영역을 제거하면 영역 내의 모든 서비스가 제거됩니다." -#: pkg/storaged/stratis/filesystem.jsx:200 pkg/storaged/stratis/pool.jsx:173 -#: pkg/storaged/lvm2/volume-group.jsx:71 #: pkg/storaged/lvm2/block-logical-volume.jsx:53 #: pkg/storaged/lvm2/block-logical-volume.jsx:242 -#: pkg/users/rename-group-dialog.jsx:69 +#: pkg/storaged/lvm2/volume-group.jsx:71 pkg/storaged/stratis/pool.jsx:173 +#: pkg/storaged/stratis/filesystem.jsx:200 pkg/users/rename-group-dialog.jsx:69 msgid "Rename" msgstr "이름변경" @@ -6322,8 +6320,8 @@ msgid "Repeat monthly" msgstr "매달 반복" -#: pkg/storaged/crypto/keyslots.jsx:428 pkg/storaged/crypto/keyslots.jsx:441 -#: pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:462 pkg/storaged/crypto/keyslots.jsx:475 +#: pkg/storaged/crypto/keyslots.jsx:524 msgid "Repeat passphrase" msgstr "암호문 반복" @@ -6331,11 +6329,11 @@ msgid "Repeat weekly" msgstr "매주 반복" -#: pkg/sosreport/sosreport.jsx:490 pkg/systemd/reporting.jsx:392 +#: pkg/sosreport/sosreport.jsx:499 pkg/systemd/reporting.jsx:392 msgid "Report" msgstr "보고" -#: pkg/sosreport/sosreport.jsx:308 +#: pkg/sosreport/sosreport.jsx:317 msgid "Report label" msgstr "보고 이름표" @@ -6355,7 +6353,7 @@ msgid "Reporting was canceled" msgstr "보고가 취소되었습니다" -#: pkg/sosreport/sosreport.jsx:485 +#: pkg/sosreport/sosreport.jsx:494 msgid "Reports" msgstr "보고서" @@ -6414,7 +6412,7 @@ msgid "Reserved memory" msgstr "예약된 메모리" -#: pkg/systemd/terminal.jsx:183 pkg/systemd/logs.jsx:406 +#: pkg/systemd/logs.jsx:406 pkg/systemd/terminal.jsx:183 msgid "Reset" msgstr "초기화" @@ -6440,11 +6438,11 @@ msgid "Restart" msgstr "재시작" -#: pkg/packagekit/updates.jsx:525 pkg/packagekit/updates.jsx:539 +#: pkg/packagekit/updates.jsx:524 pkg/packagekit/updates.jsx:538 msgid "Restart services" msgstr "서비스 재시작" -#: pkg/packagekit/updates.jsx:761 pkg/packagekit/updates.jsx:836 +#: pkg/packagekit/updates.jsx:760 pkg/packagekit/updates.jsx:835 msgid "Restart services..." msgstr "서비스 재시작..." @@ -6501,7 +6499,7 @@ msgid "Run at" msgstr "다음에서 실행" -#: pkg/sosreport/sosreport.jsx:295 +#: pkg/sosreport/sosreport.jsx:304 msgid "Run new report" msgstr "신규 보고서 실행" @@ -6509,7 +6507,7 @@ msgid "Run on" msgstr "다음 실행" -#: pkg/sosreport/sosreport.jsx:273 pkg/sosreport/sosreport.jsx:482 +#: pkg/sosreport/sosreport.jsx:282 pkg/sosreport/sosreport.jsx:491 msgid "Run report" msgstr "보고서 실행" @@ -6523,13 +6521,13 @@ msgid "Runner" msgstr "실행자" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:458 #: pkg/systemd/services.jsx:232 pkg/systemd/services.jsx:236 -#: pkg/systemd/services.jsx:696 pkg/systemd/service-details.jsx:458 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:696 msgid "Running" msgstr "작동중" -#: pkg/storaged/dialog.jsx:1332 pkg/storaged/dialog.jsx:1352 +#: pkg/storaged/dialog.jsx:1334 pkg/storaged/dialog.jsx:1354 msgid "Runtime" msgstr "동작시간" @@ -6574,7 +6572,7 @@ msgid "SMART self-test of $target" msgstr "$target의 SMART 셀프 테스트" -#: pkg/sosreport/sosreport.jsx:304 +#: pkg/sosreport/sosreport.jsx:313 msgid "" "SOS reporting collects system information to help with diagnosing problems." msgstr "SOS 보고는 문제 진단과 함께 도움이 되는 시스템 정보를 수집합니다." @@ -6587,8 +6585,8 @@ msgid "SSH key isn't a path" msgstr "ssh 키는 경로가 없습니다" -#: pkg/shell/credentials.jsx:79 pkg/shell/credentials.jsx:95 -#: pkg/shell/topnav.jsx:218 +#: pkg/shell/topnav.jsx:229 pkg/shell/credentials.jsx:79 +#: pkg/shell/credentials.jsx:95 msgid "SSH keys" msgstr "SSH 키" @@ -6608,7 +6606,7 @@ msgid "STP priority" msgstr "STP 우선순위" -#: pkg/shell/failures.jsx:46 +#: pkg/shell/failures.jsx:45 msgid "" "Safari users need to import and trust the certificate of the self-signing CA:" msgstr "" @@ -6618,16 +6616,15 @@ msgid "Saturdays" msgstr "토요일" -#: pkg/systemd/timer-dialog.jsx:148 pkg/metrics/metrics.jsx:1478 -#: pkg/networkmanager/dialogs-common.jsx:160 pkg/storaged/stratis/pool.jsx:384 +#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/partitions/partition.jsx:197 +#: pkg/storaged/btrfs/volume.jsx:96 pkg/storaged/crypto/encryption.jsx:168 +#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:531 +#: pkg/storaged/crypto/keyslots.jsx:550 pkg/storaged/stratis/pool.jsx:384 #: pkg/storaged/stratis/pool.jsx:413 pkg/storaged/stratis/pool.jsx:468 -#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/filesystem/mounting-dialog.jsx:340 +#: pkg/storaged/filesystem/mounting-dialog.jsx:358 #: pkg/storaged/filesystem/filesystem.jsx:126 -#: pkg/storaged/crypto/encryption.jsx:168 -#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:497 -#: pkg/storaged/crypto/keyslots.jsx:516 -#: pkg/storaged/partitions/partition.jsx:197 pkg/storaged/btrfs/volume.jsx:96 -#: pkg/packagekit/kpatch.jsx:310 +#: pkg/networkmanager/dialogs-common.jsx:160 pkg/systemd/timer-dialog.jsx:148 +#: pkg/metrics/metrics.jsx:1478 pkg/packagekit/kpatch.jsx:310 msgid "Save" msgstr "저장" @@ -6635,7 +6632,7 @@ msgid "Save and reboot" msgstr "저장 및 재시작" -#: pkg/systemd/overview-cards/motdCard.jsx:61 pkg/kdump/kdump-view.jsx:229 +#: pkg/kdump/kdump-view.jsx:229 pkg/systemd/overview-cards/motdCard.jsx:61 #: pkg/packagekit/autoupdates.jsx:269 msgid "Save changes" msgstr "변경 사항 저장" @@ -6648,8 +6645,8 @@ msgid "Save space by storing identical data blocks just once" msgstr "동일한 데이터 블록을 한 번만 저장하여 공간을 절약합니다" -#: pkg/storaged/crypto/keyslots.jsx:401 pkg/storaged/crypto/keyslots.jsx:456 -#: pkg/storaged/crypto/keyslots.jsx:514 pkg/storaged/crypto/keyslots.jsx:542 +#: pkg/storaged/crypto/keyslots.jsx:435 pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:548 pkg/storaged/crypto/keyslots.jsx:576 msgid "" "Saving a new passphrase requires unlocking the disk. Please provide a " "current disk passphrase." @@ -6693,7 +6690,7 @@ msgid "Seconds" msgstr "초" -#: pkg/systemd/overview-cards/configurationCard.jsx:92 +#: pkg/systemd/overview-cards/configurationCard.jsx:91 msgid "Secure shell keys" msgstr "보안 쉘 키" @@ -6705,7 +6702,7 @@ msgid "Security Enhanced Linux configuration and troubleshooting" msgstr "보안이 향상된 리눅스 구성과 문제해결" -#: pkg/packagekit/updates.jsx:1435 +#: pkg/packagekit/updates.jsx:1434 msgid "Security updates available" msgstr "사용 가능한 보안 최신화" @@ -6743,7 +6740,7 @@ #: pkg/networkmanager/network-main.jsx:187 #: pkg/networkmanager/network-main.jsx:202 -#: pkg/networkmanager/network-interface-members.jsx:204 +#: pkg/networkmanager/network-interface-members.jsx:209 msgid "Sending" msgstr "전송중" @@ -6753,9 +6750,9 @@ # translation auto-copied from project subscription-manager, version 1.11.X, # document keys -#: pkg/static/login.html:159 pkg/networkmanager/ip-settings.jsx:262 -#: pkg/kdump/kdump-view.jsx:267 pkg/kdump/kdump-view.jsx:289 -#: pkg/storaged/nfs/nfs.jsx:328 +#: pkg/static/login.html:159 pkg/storaged/nfs/nfs.jsx:328 +#: pkg/networkmanager/ip-settings.jsx:262 pkg/kdump/kdump-view.jsx:267 +#: pkg/kdump/kdump-view.jsx:289 msgid "Server" msgstr "서버" @@ -6771,7 +6768,7 @@ msgid "Server cannot be empty." msgstr "서버는 비워둘 수 없습니다." -#: pkg/lib/cockpit.js:3862 +#: pkg/lib/cockpit.js:3858 msgid "Server has closed the connection." msgstr "서버 연결이 종료되었습니다." @@ -6779,10 +6776,10 @@ msgid "Server software" msgstr "서버 소프트웨어" +#: pkg/storaged/dialog.jsx:1351 pkg/networkmanager/firewall.jsx:207 #: pkg/metrics/metrics.jsx:812 pkg/metrics/metrics.jsx:813 #: pkg/metrics/metrics.jsx:868 pkg/metrics/metrics.jsx:906 #: pkg/metrics/metrics.jsx:966 pkg/metrics/metrics.jsx:972 -#: pkg/networkmanager/firewall.jsx:207 pkg/storaged/dialog.jsx:1349 msgid "Service" msgstr "서비스" @@ -6794,17 +6791,17 @@ msgid "Service logs" msgstr "서비스 로그" -#: pkg/systemd/services.html:4 pkg/systemd/service-tabs.jsx:40 -#: pkg/systemd/service.jsx:151 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/services.html:4 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/service.jsx:151 pkg/systemd/service-tabs.jsx:40 #: pkg/systemd/manifest.json:0 msgid "Services" msgstr "서비스" -#: pkg/storaged/dialog.jsx:1157 +#: pkg/storaged/dialog.jsx:1159 msgid "Services using the location" msgstr "위치를 사용 중인 서비스" -#: pkg/shell/topnav.jsx:273 +#: pkg/shell/topnav.jsx:303 msgid "Session" msgstr "세션" @@ -6825,8 +6822,8 @@ msgid "Set partition type of $0" msgstr "$0의 파티션 유형을 설정" -#: pkg/users/password-dialogs.js:226 pkg/users/password-dialogs.js:233 -#: pkg/users/account-details.js:301 +#: pkg/users/account-details.js:301 pkg/users/password-dialogs.js:226 +#: pkg/users/password-dialogs.js:233 msgid "Set password" msgstr "비밀번호 설정" @@ -6859,13 +6856,13 @@ msgid "Setting up loop device $target" msgstr "루프 장치 $target 설정 중" -#: pkg/packagekit/updates.jsx:919 +#: pkg/packagekit/updates.jsx:918 msgid "Settings" msgstr "설정" # translation auto-copied from project Customer Portal Translations, version # PCM_template, document template, author eukim -#: pkg/packagekit/updates.jsx:375 pkg/packagekit/updates.jsx:450 +#: pkg/packagekit/updates.jsx:374 pkg/packagekit/updates.jsx:449 msgid "Severity" msgstr "심각도" @@ -6873,7 +6870,7 @@ msgid "Shared" msgstr "공유되었습니다" -#: pkg/users/account-create-dialog.js:93 pkg/users/account-details.js:329 +#: pkg/users/account-details.js:329 pkg/users/account-create-dialog.js:93 msgid "Shell" msgstr "쉘" @@ -6897,7 +6894,7 @@ msgid "Show confirmation password" msgstr "비밀번호 확인을 표시합니다" -#: pkg/systemd/overview-cards/configurationCard.jsx:96 +#: pkg/systemd/overview-cards/configurationCard.jsx:95 msgid "Show fingerprints" msgstr "지문 표시" @@ -6925,8 +6922,8 @@ msgid "Show relationships" msgstr "연관관계를 보여줍니다" +#: pkg/storaged/partitions/partition.jsx:101 pkg/storaged/block/resize.jsx:635 #: pkg/storaged/lvm2/block-logical-volume.jsx:205 -#: pkg/storaged/block/resize.jsx:635 pkg/storaged/partitions/partition.jsx:101 msgid "Shrink" msgstr "축소" @@ -6934,7 +6931,7 @@ msgid "Shrink logical volume" msgstr "논리 볼륨 축소" -#: pkg/storaged/block/resize.jsx:557 pkg/storaged/partitions/partition.jsx:218 +#: pkg/storaged/partitions/partition.jsx:218 pkg/storaged/block/resize.jsx:557 msgid "Shrink partition" msgstr "파티션 축소" @@ -6949,7 +6946,7 @@ msgid "Shut down" msgstr "종료" -#: pkg/systemd/overview.jsx:114 +#: pkg/systemd/overview.jsx:115 msgid "Shutdown" msgstr "종료" @@ -6957,40 +6954,40 @@ msgid "Since" msgstr "이후" -#: pkg/systemd/hw-detect.js:90 pkg/lib/machine-info.js:238 +#: pkg/lib/machine-info.js:238 pkg/systemd/hw-detect.js:90 msgid "Single rank" msgstr "단일 등급" -#: pkg/systemd/hwinfo.jsx:291 pkg/storaged/stratis/pool.jsx:96 -#: pkg/storaged/lvm2/vdo-pool.jsx:79 +#: pkg/storaged/nfs/nfs.jsx:330 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/block/format-dialog.jsx:315 pkg/storaged/block/resize.jsx:448 +#: pkg/storaged/block/resize.jsx:581 pkg/storaged/pages.jsx:717 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:199 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:206 +#: pkg/storaged/lvm2/block-logical-volume.jsx:291 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:49 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:143 -#: pkg/storaged/lvm2/block-logical-volume.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:313 pkg/storaged/block/resize.jsx:448 -#: pkg/storaged/block/resize.jsx:581 pkg/storaged/nfs/nfs.jsx:330 -#: pkg/storaged/pages.jsx:717 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/lvm2/vdo-pool.jsx:79 pkg/storaged/stratis/pool.jsx:96 +#: pkg/systemd/hwinfo.jsx:291 msgid "Size" msgstr "크기" -#: pkg/storaged/dialog.jsx:1074 +#: pkg/storaged/dialog.jsx:1076 msgid "Size cannot be negative" msgstr "크기는 음수일 수 없습니다" -#: pkg/storaged/dialog.jsx:1072 +#: pkg/storaged/dialog.jsx:1074 msgid "Size cannot be zero" msgstr "크기가 0 이 될 수 없습니다" -#: pkg/storaged/dialog.jsx:1076 +#: pkg/storaged/dialog.jsx:1078 msgid "Size is too large" msgstr "크기가 너무 큽니다" -#: pkg/storaged/dialog.jsx:1070 +#: pkg/storaged/dialog.jsx:1072 msgid "Size must be a number" msgstr "크기는 숫자여야 합니다" -#: pkg/storaged/dialog.jsx:1078 +#: pkg/storaged/dialog.jsx:1080 msgid "Size must be at least $0" msgstr "크기는 최소 $0이어야 합니다" @@ -7006,7 +7003,7 @@ msgid "Slot" msgstr "슬롯" -#: pkg/storaged/crypto/keyslots.jsx:723 pkg/storaged/mdraid/mdraid-disk.jsx:80 +#: pkg/storaged/crypto/keyslots.jsx:757 pkg/storaged/mdraid/mdraid-disk.jsx:80 msgid "Slot $0" msgstr "슬롯 $0" @@ -7063,7 +7060,7 @@ "Some other program is currently using the package manager, please wait..." msgstr "다른 프로그램이 꾸러미 관리자를 사용 중입니다. 잠시 기다려주세요..." -#: pkg/packagekit/updates.jsx:737 pkg/packagekit/updates.jsx:844 +#: pkg/packagekit/updates.jsx:736 pkg/packagekit/updates.jsx:843 #: pkg/packagekit/updates.jsx:1536 msgid "Some software needs to be restarted manually" msgstr "일부 소프트웨어는 수동으로 다시 시작해야 합니다" @@ -7104,10 +7101,9 @@ msgid "Stable" msgstr "안정적" +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 pkg/storaged/swap/swap.jsx:98 +#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/mdraid/mdraid.jsx:210 #: pkg/systemd/service-details.jsx:144 -#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/swap/swap.jsx:98 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 -#: pkg/storaged/mdraid/mdraid.jsx:210 msgid "Start" msgstr "시작" @@ -7119,7 +7115,7 @@ msgid "Start multipath" msgstr "멀티패스 시작" -#: pkg/systemd/service-details.jsx:447 pkg/networkmanager/networkmanager.jsx:78 +#: pkg/networkmanager/networkmanager.jsx:78 pkg/systemd/service-details.jsx:447 msgid "Start service" msgstr "서비스 시작" @@ -7143,18 +7139,18 @@ msgid "Starting swapspace $target" msgstr "스왑공간 $target 시작 중" -#: pkg/systemd/hwinfo.jsx:291 pkg/systemd/services-list.jsx:40 -#: pkg/systemd/services-list.jsx:46 pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/services-list.jsx:40 +#: pkg/systemd/services-list.jsx:46 pkg/systemd/hwinfo.jsx:291 msgid "State" msgstr "상태" -#: pkg/systemd/services.jsx:252 pkg/systemd/services.jsx:688 -#: pkg/systemd/service-details.jsx:476 +#: pkg/systemd/service-details.jsx:476 pkg/systemd/services.jsx:252 +#: pkg/systemd/services.jsx:688 msgid "Static" msgstr "정적" -#: pkg/systemd/service-details.jsx:648 -#: pkg/networkmanager/network-interface.jsx:265 pkg/packagekit/updates.jsx:908 +#: pkg/networkmanager/network-interface.jsx:265 +#: pkg/systemd/service-details.jsx:648 pkg/packagekit/updates.jsx:907 msgid "Status" msgstr "상태" @@ -7166,10 +7162,9 @@ msgid "Sticky" msgstr "끈적" -#: pkg/systemd/service-details.jsx:140 pkg/storaged/swap/swap.jsx:95 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:62 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 -#: pkg/storaged/mdraid/mdraid.jsx:289 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 pkg/storaged/swap/swap.jsx:95 +#: pkg/storaged/mdraid/mdraid.jsx:289 pkg/systemd/service-details.jsx:140 msgid "Stop" msgstr "중지" @@ -7193,7 +7188,7 @@ msgid "Stop editing hosts" msgstr "호스트 편집 중지" -#: pkg/sosreport/sosreport.jsx:277 +#: pkg/sosreport/sosreport.jsx:286 msgid "Stop report" msgstr "보고서 멈춤" @@ -7220,7 +7215,7 @@ msgid "Storage logs" msgstr "저장소 기록" -#: pkg/storaged/block/format-dialog.jsx:359 +#: pkg/storaged/block/format-dialog.jsx:361 msgid "Store passphrase" msgstr "암호문 저장" @@ -7234,7 +7229,7 @@ msgid "Stratis block device" msgstr "스트라티스 블럭 장치" -#: pkg/storaged/stratis/stopped-pool.jsx:141 pkg/storaged/stratis/pool.jsx:566 +#: pkg/storaged/stratis/pool.jsx:566 pkg/storaged/stratis/stopped-pool.jsx:141 msgid "Stratis block devices" msgstr "스트라티스 블럭 장치" @@ -7254,8 +7249,8 @@ msgid "Stratis filesystems pool" msgstr "스트라티스 파일 시스템 풀" -#: pkg/storaged/stratis/stopped-pool.jsx:98 pkg/storaged/stratis/pool.jsx:271 -#: pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/pool.jsx:271 pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/stopped-pool.jsx:98 msgid "Stratis pool" msgstr "스트라티스 풀" @@ -7269,7 +7264,7 @@ msgid "Striped and mirrored (RAID 10)" msgstr "미러된 스트라이프 (레이드 10)" -#: pkg/storaged/lvm2/block-logical-volume.jsx:399 +#: pkg/storaged/lvm2/block-logical-volume.jsx:398 msgid "Stripes" msgstr "스트라이프" @@ -7281,7 +7276,7 @@ msgid "Stub" msgstr "스텁" -#: pkg/shell/topnav.jsx:184 +#: pkg/shell/topnav.jsx:193 msgid "Style" msgstr "유형" @@ -7317,8 +7312,8 @@ msgid "Sundays" msgstr "일요일" -#: pkg/metrics/metrics.jsx:130 pkg/metrics/metrics.jsx:725 -#: pkg/metrics/metrics.jsx:1950 pkg/storaged/swap/swap.jsx:88 +#: pkg/storaged/swap/swap.jsx:88 pkg/metrics/metrics.jsx:130 +#: pkg/metrics/metrics.jsx:725 pkg/metrics/metrics.jsx:1950 msgid "Swap" msgstr "스왑" @@ -7330,16 +7325,16 @@ msgid "Swap out" msgstr "스왑 아웃" -#: pkg/networkmanager/network-interface-members.jsx:67 +#: pkg/networkmanager/network-interface-members.jsx:68 msgid "Switch of $0" msgstr "$0 스위치" -#: pkg/networkmanager/network-interface-members.jsx:87 +#: pkg/networkmanager/network-interface-members.jsx:88 #: pkg/networkmanager/network-interface.jsx:163 msgid "Switch off $0" msgstr "$0 끄기" -#: pkg/networkmanager/network-interface-members.jsx:78 +#: pkg/networkmanager/network-interface-members.jsx:79 #: pkg/networkmanager/network-interface.jsx:144 msgid "Switch on $0" msgstr "$0 켜기" @@ -7352,14 +7347,14 @@ msgid "Switch to limited access" msgstr "제한된 접근으로 전환" -#: pkg/networkmanager/network-interface-members.jsx:86 +#: pkg/networkmanager/network-interface-members.jsx:87 #: pkg/networkmanager/network-interface.jsx:162 msgid "" "Switching off $0 will break the connection to the server, and will make the " "administration UI unavailable." msgstr "$0를 끄면 서버와의 연결이 끊어지며 관리 UI를 사용 할 수 없게 됩니다." -#: pkg/networkmanager/network-interface-members.jsx:77 +#: pkg/networkmanager/network-interface-members.jsx:78 #: pkg/networkmanager/network-interface.jsx:143 msgid "" "Switching on $0 will break the connection to the server, and will make the " @@ -7384,16 +7379,16 @@ # translation auto-copied from project virt-manager, version 0.10.0, document # virt-manager -#: pkg/systemd/services.jsx:913 pkg/shell/nav.jsx:46 pkg/shell/indexes.jsx:343 +#: pkg/systemd/services.jsx:912 pkg/shell/indexes.jsx:343 pkg/shell/nav.jsx:46 msgid "System" msgstr "시스템" -#: pkg/sosreport/sosreport.jsx:509 +#: pkg/sosreport/sosreport.jsx:518 msgid "System diagnostics" msgstr "시스템 진단" -#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 #: pkg/systemd/hwinfo.jsx:315 +#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 msgid "System information" msgstr "시스템 정보" @@ -7406,7 +7401,7 @@ msgid "System modifications" msgstr "시스템 수정" -#: pkg/systemd/overview-cards/configurationCard.jsx:75 +#: pkg/systemd/overview-cards/configurationCard.jsx:74 msgid "System time" msgstr "시스템 시간" @@ -7422,7 +7417,7 @@ msgid "Tablet" msgstr "테블릿" -#: pkg/storaged/crypto/keyslots.jsx:431 +#: pkg/storaged/crypto/keyslots.jsx:465 msgid "Tang keyserver" msgstr "Tang 키 서버" @@ -7482,7 +7477,7 @@ msgid "Testing connection" msgstr "연결 시험 중" -#: pkg/storaged/crypto/keyslots.jsx:242 +#: pkg/storaged/crypto/keyslots.jsx:276 msgid "The $0 package is not available from any repository." msgstr "$0 꾸러미는 저장소에서 사용 할 수 없습니다." @@ -7490,7 +7485,7 @@ msgid "The $0 package must be installed to create Stratis pools." msgstr "$0 꾸러미는 스트라티스 풀을 생성하려면 설치해야 합니다." -#: pkg/storaged/crypto/keyslots.jsx:237 pkg/storaged/crypto/keyslots.jsx:253 +#: pkg/storaged/crypto/keyslots.jsx:271 pkg/storaged/crypto/keyslots.jsx:287 msgid "The $0 package must be installed." msgstr "$0 꾸러미는 설치되어야 합니다." @@ -7556,12 +7551,12 @@ "The creation of this VDO device did not finish and the device can't be used." msgstr "VDO 장치 생성이 완료되지 않았기 때문에 장치를 사용 할 수 없습니다." -#: pkg/storaged/crypto/keyslots.jsx:696 +#: pkg/storaged/crypto/keyslots.jsx:730 msgid "" "The currently logged in user is not permitted to see information about keys." msgstr "현재 로그인한 사용자는 키에 대한 정보를 볼 수 없습니다." -#: pkg/storaged/block/format-dialog.jsx:369 +#: pkg/storaged/block/format-dialog.jsx:371 msgid "" "The disk needs to be unlocked before formatting. Please provide a existing " "passphrase." @@ -7569,7 +7564,7 @@ "디스크는 초기화 하기 전에 잠금이 해제된 상태이어야 합니다. 기존 암호문를 입" "력하세요." -#: pkg/sosreport/sosreport.jsx:370 +#: pkg/sosreport/sosreport.jsx:379 msgid "The file $0 will be deleted." msgstr "파일 $0가 삭제됩니다." @@ -7630,7 +7625,7 @@ msgid "The fingerprint should match:" msgstr "지문 표시가 일치해야 합니다:" -#: pkg/packagekit/updates.jsx:515 +#: pkg/packagekit/updates.jsx:514 msgid "The following service will be restarted:" msgid_plural "The following services will be restarted:" msgstr[0] "다음 서비스가 다시 시작됩니다:" @@ -7656,7 +7651,7 @@ msgstr "" "홈 디렉토리 $0가 이미 존재합니다. 이 소유권은 신규 사용자로 변경됩니다." -#: pkg/storaged/crypto/keyslots.jsx:274 +#: pkg/storaged/crypto/keyslots.jsx:308 msgid "The initrd must be regenerated." msgstr "initrd는 재생되어야 합니다." @@ -7672,19 +7667,19 @@ msgid "The key you provided was not valid." msgstr "입력하신 키가 유효하지 않습니다." -#: pkg/storaged/crypto/keyslots.jsx:736 +#: pkg/storaged/crypto/keyslots.jsx:770 msgid "The last key slot can not be removed" msgstr "마지막 키 홈은 제거 할 수 없습니다" -#: pkg/storaged/dialog.jsx:1367 +#: pkg/storaged/dialog.jsx:1369 msgid "The listed processes and services will be forcefully stopped." msgstr "나열된 프로세서와 서비스는 강제 종료됩니다." -#: pkg/storaged/dialog.jsx:1369 +#: pkg/storaged/dialog.jsx:1371 msgid "The listed processes will be forcefully stopped." msgstr "나열된 프로세서는 강제 종료됩니다." -#: pkg/storaged/dialog.jsx:1371 +#: pkg/storaged/dialog.jsx:1373 msgid "The listed services will be forcefully stopped." msgstr "나열된 서비스가 강제로 중지됩니다." @@ -7696,11 +7691,11 @@ msgid "The machine is rebooting" msgstr "장치가 재시작되고 있습니다" -#: pkg/storaged/dialog.jsx:1325 +#: pkg/storaged/dialog.jsx:1327 msgid "The mount point $0 is in use by these processes:" msgstr "적재 지점 $0는 이들 프로세서에 의해서 사용 중입니다:" -#: pkg/storaged/dialog.jsx:1345 +#: pkg/storaged/dialog.jsx:1347 msgid "The mount point $0 is in use by these services:" msgstr "적재지점 $0는 이들 서비스에 의해 사용 중입니다:" @@ -7745,11 +7740,11 @@ "서버가 비밀번호 인증을 사용하여 '$0' 인증을 거부했습니다. 지원되는 다른 인증 " "방법을 사용 할 수 없습니다." -#: pkg/lib/cockpit.js:3846 +#: pkg/lib/cockpit.js:3842 msgid "The server refused to authenticate using any supported methods." msgstr "서버가 지원되는 방법을 사용하여 인증을 거부했습니다." -#: pkg/storaged/crypto/keyslots.jsx:391 +#: pkg/storaged/crypto/keyslots.jsx:425 msgid "" "The system does not currently support unlocking a filesystem with a Tang " "keyserver during boot." @@ -7757,7 +7752,7 @@ "시스템은 현재 부팅시에 탕 키서버와 함께 파일 시스템 잠김 해제를 지원하지 않습" "니다." -#: pkg/storaged/crypto/keyslots.jsx:390 +#: pkg/storaged/crypto/keyslots.jsx:424 msgid "" "The system does not currently support unlocking the root filesystem with a " "Tang keyserver." @@ -7832,19 +7827,19 @@ "이 파일 시스템의 순간찍기를 만들기에는 풀 공간이 부족합니다. 최소 $0가 필요하" "지만 $1만 사용 가능합니다." -#: pkg/shell/failures.jsx:42 +#: pkg/shell/failures.jsx:41 msgid "There was an unexpected error while connecting to the machine." msgstr "기기에 연결하는 동안 예기치 않은 오류가 발생했습니다." -#: pkg/storaged/crypto/keyslots.jsx:395 +#: pkg/storaged/crypto/keyslots.jsx:429 msgid "These additional steps are necessary:" msgstr "다음과 같은 추가 단계가 필요합니다:" -#: pkg/storaged/dialog.jsx:1239 +#: pkg/storaged/dialog.jsx:1241 msgid "These changes will be made:" msgstr "이들 변경 사항은 다음과 같이 변경됩니다:" -#: pkg/storaged/utils.js:286 +#: pkg/storaged/utils.js:287 msgid "Thin logical volume" msgstr "씬 논리 볼륨" @@ -7869,8 +7864,8 @@ msgid "This VDO device does not use all of its backing device." msgstr "이 VDO 장치는 백업 장치를 사용하지 않습니다." -#: pkg/storaged/block/format-dialog.jsx:244 -#: pkg/storaged/filesystem/mounting-dialog.jsx:156 +#: pkg/storaged/block/format-dialog.jsx:246 +#: pkg/storaged/filesystem/mounting-dialog.jsx:159 msgid "This device can not be used for the installation target." msgstr "이 장치는 설치 대상을 위해 사용 될 수 없습니다." @@ -7878,7 +7873,7 @@ msgid "This device cannot be managed here." msgstr "이 장치는 여기서 관리 할 수 없습니다." -#: pkg/storaged/dialog.jsx:1134 +#: pkg/storaged/dialog.jsx:1136 msgid "This device is currently in use." msgstr "이 장치는 현재 사용 중입니다." @@ -7895,7 +7890,7 @@ msgid "This host will reboot after updates are installed." msgstr "최신화가 설치되면 이 호스트가 재시작됩니다." -#: pkg/sosreport/sosreport.jsx:305 +#: pkg/sosreport/sosreport.jsx:314 msgid "This information is stored only on the system." msgstr "이와 같은 정보는 시스템에서만 저장됩니다." @@ -7958,7 +7953,7 @@ msgid "This pool is in a degraded state." msgstr "이 풀은 성능이 저하된 상태입니다." -#: pkg/packagekit/updates.jsx:1373 +#: pkg/packagekit/updates.jsx:1372 msgid "This system is not registered" msgstr "이 시스템은 등록되어 있지 않습니다" @@ -8114,7 +8109,7 @@ "악성의 제3자가 귀하의 연결을 가로채지 않도록 하려면 호스트 키 지문을 확인하십" "시오:" -#: pkg/packagekit/updates.jsx:1376 +#: pkg/packagekit/updates.jsx:1375 msgid "" "To get software updates, this system needs to be registered with Red Hat, " "either using the Red Hat Customer Portal or a local subscription server." @@ -8122,7 +8117,7 @@ "소프트웨어 최신화 하려면, 이 시스템은 Red Hat 고객 포털이나 로컬 서브스크립" "션 서버를 사용하여 Red Hat에 등록되어 있어야 합니다." -#: pkg/static/login.js:768 pkg/shell/hosts_dialog.jsx:477 +#: pkg/shell/hosts_dialog.jsx:477 pkg/static/login.js:768 msgid "" "To verify a fingerprint, run the following on $0 while physically sitting at " "the machine or through a trusted network:" @@ -8138,8 +8133,8 @@ msgid "Toggle" msgstr "전환" -#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 #: pkg/lib/cockpit-components-shutdown.jsx:212 pkg/lib/serverTime.js:600 +#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 msgid "Toggle date picker" msgstr "날짜 선택기 전환" @@ -8147,7 +8142,7 @@ msgid "Toggle filters" msgstr "필터 전환" -#: pkg/lib/cockpit.js:3868 +#: pkg/lib/cockpit.js:3864 msgid "Too much data" msgstr "데이터가 너무 많습니다" @@ -8181,7 +8176,7 @@ #: pkg/networkmanager/plots.js:39 msgid "Transmitting" -msgstr "전송 중" +msgstr "전송중" #: pkg/systemd/timer-dialog.jsx:183 pkg/systemd/services-list.jsx:45 msgid "Trigger" @@ -8207,7 +8202,7 @@ msgid "Trust and add host" msgstr "호스트 신뢰 및 추가" -#: pkg/storaged/stratis/utils.jsx:86 pkg/storaged/crypto/keyslots.jsx:544 +#: pkg/storaged/crypto/keyslots.jsx:578 pkg/storaged/stratis/utils.jsx:86 msgid "Trust key" msgstr "신뢰 키" @@ -8256,12 +8251,12 @@ msgid "Turn on administrative access" msgstr "관리자 접근 설정" -#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:308 -#: pkg/storaged/block/unrecognized-data.jsx:52 pkg/storaged/pages.jsx:715 #: pkg/storaged/partitions/partition.jsx:183 -#: pkg/storaged/partitions/partition.jsx:229 pkg/shell/credentials.jsx:199 -#: pkg/packagekit/autoupdates.jsx:279 +#: pkg/storaged/partitions/partition.jsx:229 +#: pkg/storaged/block/format-dialog.jsx:310 +#: pkg/storaged/block/unrecognized-data.jsx:51 pkg/storaged/pages.jsx:715 +#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 +#: pkg/shell/credentials.jsx:199 pkg/packagekit/autoupdates.jsx:279 msgid "Type" msgstr "유형" @@ -8288,12 +8283,11 @@ # translation auto-copied from project subscription-manager, version 1.11.X, # document keys -#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/stratis/pool.jsx:519 -#: pkg/storaged/lvm2/volume-group.jsx:386 +#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/btrfs/volume.jsx:127 +#: pkg/storaged/btrfs/device.jsx:78 pkg/storaged/btrfs/filesystem.jsx:77 #: pkg/storaged/lvm2/physical-volume.jsx:117 -#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/mdraid/mdraid.jsx:291 -#: pkg/storaged/btrfs/volume.jsx:127 pkg/storaged/btrfs/device.jsx:78 -#: pkg/storaged/btrfs/filesystem.jsx:77 +#: pkg/storaged/lvm2/volume-group.jsx:386 pkg/storaged/stratis/pool.jsx:519 +#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/mdraid/mdraid.jsx:291 msgid "UUID" msgstr "UUID" @@ -8382,7 +8376,7 @@ msgid "Undo" msgstr "실행 취소" -#: pkg/storaged/crypto/keyslots.jsx:258 +#: pkg/storaged/crypto/keyslots.jsx:292 msgid "Unexpected PackageKit error during installation of $0: $1" msgstr "$0 설치 중에 예상치 못한 PackageKit 오류: $1" @@ -8391,25 +8385,25 @@ msgid "Unexpected error" msgstr "예상치 못한 오류" -#: pkg/storaged/block/unformatted-data.jsx:31 +#: pkg/storaged/block/unformatted-data.jsx:30 msgid "Unformatted data" msgstr "초기화 되지 않은 자료" -#: pkg/systemd/logs.jsx:368 pkg/systemd/services-list.jsx:39 -#: pkg/systemd/services-list.jsx:44 +#: pkg/systemd/services-list.jsx:39 pkg/systemd/services-list.jsx:44 +#: pkg/systemd/logs.jsx:368 msgid "Unit" msgstr "단위" -#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 -#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 -#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 +#: pkg/storaged/swap/swap.jsx:116 pkg/networkmanager/interfaces.js:510 +#: pkg/networkmanager/interfaces.js:1035 #: pkg/networkmanager/network-interface.jsx:199 -#: pkg/networkmanager/network-interface.jsx:201 -#: pkg/networkmanager/interfaces.js:510 pkg/networkmanager/interfaces.js:1035 -#: pkg/storaged/swap/swap.jsx:116 pkg/lib/machine-info.js:61 +#: pkg/networkmanager/network-interface.jsx:201 pkg/lib/machine-info.js:61 #: pkg/lib/machine-info.js:226 pkg/lib/machine-info.js:234 #: pkg/lib/machine-info.js:236 pkg/lib/machine-info.js:243 #: pkg/lib/machine-info.js:245 pkg/lib/machine-info.js:249 +#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 +#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 +#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 msgid "Unknown" msgstr "알 수 없음" @@ -8438,14 +8432,13 @@ msgid "Unknown service name" msgstr "알 수 없는 서비스 이름" -#: pkg/storaged/crypto/keyslots.jsx:760 +#: pkg/storaged/crypto/keyslots.jsx:794 msgid "Unknown type" msgstr "알 수 없는 유형" -#: pkg/storaged/stratis/stopped-pool.jsx:61 -#: pkg/storaged/crypto/locked-encrypted-data.jsx:37 -#: pkg/storaged/crypto/actions.jsx:41 pkg/storaged/crypto/actions.jsx:46 -#: pkg/shell/credentials.jsx:312 +#: pkg/storaged/crypto/locked-encrypted-data.jsx:36 +#: pkg/storaged/crypto/actions.jsx:40 pkg/storaged/crypto/actions.jsx:45 +#: pkg/storaged/stratis/stopped-pool.jsx:61 pkg/shell/credentials.jsx:312 msgid "Unlock" msgstr "잠금 해제" @@ -8469,7 +8462,7 @@ msgid "Unlocking $target" msgstr "$target 잠금 해제 중" -#: pkg/storaged/crypto/keyslots.jsx:188 +#: pkg/storaged/crypto/keyslots.jsx:221 msgid "Unlocking disk" msgstr "디스크 잠금 해제 중" @@ -8478,14 +8471,14 @@ msgid "Unmanaged interfaces" msgstr "관리하지 않는 연결장치" -#: pkg/storaged/stratis/filesystem.jsx:172 pkg/storaged/nfs/nfs.jsx:309 -#: pkg/storaged/filesystem/mounting-dialog.jsx:339 +#: pkg/storaged/nfs/nfs.jsx:309 pkg/storaged/btrfs/subvolume.jsx:338 +#: pkg/storaged/stratis/filesystem.jsx:172 +#: pkg/storaged/filesystem/mounting-dialog.jsx:357 #: pkg/storaged/filesystem/filesystem.jsx:102 -#: pkg/storaged/btrfs/subvolume.jsx:338 msgid "Unmount" msgstr "적재 해제" -#: pkg/storaged/filesystem/mounting-dialog.jsx:333 +#: pkg/storaged/filesystem/mounting-dialog.jsx:351 msgid "Unmount filesystem $0" msgstr "$0 파일 시스템 적재 해제" @@ -8506,7 +8499,7 @@ msgid "Unpin unit" msgstr "고정해제 단위" -#: pkg/storaged/block/unrecognized-data.jsx:35 +#: pkg/storaged/block/unrecognized-data.jsx:34 msgid "Unrecognized data" msgstr "인식되지 않는 데이터" @@ -8526,7 +8519,7 @@ msgid "Until" msgstr "까지" -#: pkg/lib/cockpit.js:3848 pkg/lib/cockpit.js:3850 +#: pkg/lib/cockpit.js:3844 pkg/lib/cockpit.js:3846 msgid "Untrusted host" msgstr "지원되지 않는 호스트" @@ -8536,11 +8529,11 @@ msgid "Update" msgstr "최신화" -#: pkg/packagekit/updates.jsx:754 +#: pkg/packagekit/updates.jsx:753 msgid "Update Success Table" msgstr "최신화 성공 테이블" -#: pkg/packagekit/updates.jsx:957 +#: pkg/packagekit/updates.jsx:956 msgid "Update history" msgstr "최신화 내역" @@ -8548,7 +8541,7 @@ msgid "Update package information" msgstr "꾸러미 정보 최신화" -#: pkg/packagekit/updates.jsx:679 pkg/packagekit/updates.jsx:749 +#: pkg/packagekit/updates.jsx:678 pkg/packagekit/updates.jsx:748 msgid "Update was successful" msgstr "최신화에 성공했습니다" @@ -8556,11 +8549,11 @@ msgid "Updated" msgstr "최신화됨" -#: pkg/packagekit/updates.jsx:682 +#: pkg/packagekit/updates.jsx:681 msgid "Updated packages may require a reboot to take effect." msgstr "최신화된 꾸러미를 적용하려면 시스템을 재시작해야 합니다." -#: pkg/packagekit/updates.jsx:1441 +#: pkg/packagekit/updates.jsx:1440 msgid "Updates available" msgstr "사용 가능한 최신화" @@ -8586,13 +8579,15 @@ # translation auto-copied from project subscription-manager, version 1.11.X, # document keys +#: pkg/storaged/btrfs/volume.jsx:129 pkg/storaged/btrfs/device.jsx:80 +#: pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/storaged/block/unrecognized-data.jsx:50 +#: pkg/storaged/lvm2/physical-volume.jsx:119 pkg/storaged/stratis/pool.jsx:521 +#: pkg/storaged/stratis/filesystem.jsx:226 +#: pkg/storaged/filesystem/filesystem.jsx:152 #: pkg/systemd/overview-cards/usageCard.jsx:127 pkg/metrics/metrics.jsx:1949 #: pkg/metrics/metrics.jsx:1950 pkg/metrics/metrics.jsx:1951 -#: pkg/metrics/metrics.jsx:1952 pkg/storaged/stratis/filesystem.jsx:226 -#: pkg/storaged/stratis/pool.jsx:521 pkg/storaged/lvm2/physical-volume.jsx:119 -#: pkg/storaged/block/unrecognized-data.jsx:51 -#: pkg/storaged/filesystem/filesystem.jsx:152 pkg/storaged/btrfs/volume.jsx:129 -#: pkg/storaged/btrfs/device.jsx:80 pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/metrics/metrics.jsx:1952 msgid "Usage" msgstr "사용량" @@ -8600,16 +8595,16 @@ msgid "Usage of $0" msgstr "$0 사용량" -#: pkg/networkmanager/dialogs-common.jsx:103 pkg/storaged/dialog.jsx:624 -#: pkg/storaged/dialog.jsx:1139 +#: pkg/storaged/dialog.jsx:624 pkg/storaged/dialog.jsx:1141 +#: pkg/networkmanager/dialogs-common.jsx:103 msgid "Use" msgstr "사용" -#: pkg/storaged/lvm2/vdo-pool.jsx:85 pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 pkg/storaged/lvm2/vdo-pool.jsx:85 msgid "Use compression" msgstr "압축 사용" -#: pkg/storaged/lvm2/vdo-pool.jsx:89 pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 pkg/storaged/lvm2/vdo-pool.jsx:89 msgid "Use deduplication" msgstr "중복 제거 사용" @@ -8625,21 +8620,21 @@ msgid "Use the following keys to authenticate against other systems" msgstr "다른 시스템에 대해 인증하려면 다음 키를 사용합니다" -#: pkg/sosreport/sosreport.jsx:324 +#: pkg/sosreport/sosreport.jsx:333 msgid "Use verbose logging" msgstr "상세한 로그인 사용" -#: pkg/metrics/metrics.jsx:813 pkg/metrics/metrics.jsx:907 -#: pkg/storaged/swap/swap.jsx:125 +#: pkg/storaged/swap/swap.jsx:125 pkg/metrics/metrics.jsx:813 +#: pkg/metrics/metrics.jsx:907 msgid "Used" msgstr "사용됨" -#: pkg/storaged/filesystem/mounting-dialog.jsx:110 +#: pkg/storaged/filesystem/mounting-dialog.jsx:113 msgid "" "Useful for mounts that are optional or need interaction (such as passphrases)" msgstr "선택적이거나 상호 작용이 필요한 적재에 유용함 (암호문과 같은 경우)" -#: pkg/systemd/services.jsx:917 pkg/storaged/dialog.jsx:1331 +#: pkg/storaged/dialog.jsx:1333 pkg/systemd/services.jsx:916 msgid "User" msgstr "사용자" @@ -8664,7 +8659,7 @@ msgstr "사용자 ID는 $0보다 작지 안아야만 합니다" #: pkg/static/login.html:94 pkg/shell/hosts_dialog.jsx:264 -#: pkg/users/account-create-dialog.js:76 pkg/users/account-details.js:262 +#: pkg/users/account-details.js:262 pkg/users/account-create-dialog.js:76 msgid "User name" msgstr "사용자 이름" @@ -8689,7 +8684,7 @@ msgid "VDO backing devices can not be made smaller" msgstr "VDO 백업 장치를 작게 할 수 없습니다" -#: pkg/storaged/utils.js:345 pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 pkg/storaged/utils.js:346 msgid "VDO device $0" msgstr "VDO 장치 $0" @@ -8717,7 +8712,7 @@ # translation auto-copied from project subscription-manager, version 1.11.X, # document keys -#: pkg/systemd/hwinfo.jsx:278 pkg/storaged/drive/drive.jsx:120 +#: pkg/storaged/drive/drive.jsx:120 pkg/systemd/hwinfo.jsx:278 msgid "Vendor" msgstr "제조사" @@ -8729,7 +8724,7 @@ msgid "Verify fingerprint" msgstr "지문 검증" -#: pkg/storaged/stratis/utils.jsx:83 pkg/storaged/crypto/keyslots.jsx:540 +#: pkg/storaged/crypto/keyslots.jsx:574 pkg/storaged/stratis/utils.jsx:83 msgid "Verify key" msgstr "키 확인" @@ -8737,7 +8732,7 @@ msgid "Verifying" msgstr "확인 중" -#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:449 +#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:448 msgid "Version" msgstr "버전" @@ -8761,8 +8756,8 @@ msgid "View all services" msgstr "모든 서비스 보기" -#: pkg/kdump/kdump-view.jsx:526 #: pkg/lib/cockpit-components-modifications.jsx:154 +#: pkg/kdump/kdump-view.jsx:526 msgid "View automation script" msgstr "자동 스크립트 보기" @@ -8798,7 +8793,7 @@ msgid "View report" msgstr "보고서 보기" -#: pkg/packagekit/updates.jsx:619 +#: pkg/packagekit/updates.jsx:618 msgid "View update log" msgstr "최신화 기록 보기" @@ -8815,8 +8810,8 @@ msgid "Volume group" msgstr "볼륨 그룹" -#: pkg/storaged/lvm2/volume-group.jsx:223 #: pkg/storaged/lvm2/physical-volume.jsx:71 +#: pkg/storaged/lvm2/volume-group.jsx:223 msgid "Volume group is missing physical volumes" msgstr "볼륨 그룹은 물리 볼륨에서 누락되었습니다" @@ -8842,7 +8837,7 @@ msgstr "" "꾸러미 관리자를 사용 중이어서 다른 프로그램이 종료 할 때까지 대기 중..." -#: pkg/storaged/crypto/keyslots.jsx:216 +#: pkg/storaged/crypto/keyslots.jsx:250 #: pkg/lib/cockpit-components-install-dialog.jsx:150 #: pkg/lib/cockpit-components-install-dialog.jsx:185 msgid "Waiting for other software management operations to finish" @@ -8876,7 +8871,7 @@ msgid "Web Console for Linux servers" msgstr "리눅스 서버를 위한 웹콘솔" -#: pkg/packagekit/updates.jsx:530 pkg/packagekit/updates.jsx:935 +#: pkg/packagekit/updates.jsx:529 pkg/packagekit/updates.jsx:934 msgid "Web Console will restart" msgstr "웹 콘솔이 재시작됩니다" @@ -8908,7 +8903,7 @@ msgid "When empty, connect with the current user" msgstr "비어 있는 경우 현재 사용자와 연결합니다" -#: pkg/packagekit/updates.jsx:533 pkg/packagekit/updates.jsx:940 +#: pkg/packagekit/updates.jsx:532 pkg/packagekit/updates.jsx:939 msgid "" "When the Web Console is restarted, you will no longer see progress " "information. However, the update process will continue in the background. " @@ -8977,11 +8972,11 @@ msgid "Yearly" msgstr "매년" -#: pkg/systemd/reporting.jsx:281 pkg/networkmanager/network-interface.jsx:241 +#: pkg/networkmanager/network-interface.jsx:241 pkg/systemd/reporting.jsx:281 msgid "Yes" msgstr "네" -#: pkg/static/login.js:765 pkg/shell/hosts_dialog.jsx:488 +#: pkg/shell/hosts_dialog.jsx:488 pkg/static/login.js:765 msgid "You are connecting to $0 for the first time." msgstr "처음으로 $0에 연결됩니다." @@ -9045,11 +9040,11 @@ "restarted." msgstr "서버 연결이 종료됩니다. 다시 시작하여 연결을 재개할 수 있습니다." -#: pkg/lib/cockpit.js:3838 +#: pkg/lib/cockpit.js:3834 msgid "Your session has been terminated." msgstr "세션이 종료되었습니다." -#: pkg/lib/cockpit.js:3840 +#: pkg/lib/cockpit.js:3836 msgid "Your session has expired. Please log in again." msgstr "세션이 만료되었습니다. 다시 로그인하십시오." @@ -9118,7 +9113,7 @@ msgid "average: $0%" msgstr "평균: $0%" -#: pkg/storaged/dialog.jsx:1116 +#: pkg/storaged/dialog.jsx:1118 msgid "backing device for VDO device" msgstr "VDO 장치용 백업 장치" @@ -9163,7 +9158,7 @@ msgstr "btrfs 하위 볼륨 $0/$1" #: pkg/storaged/btrfs/volume.jsx:146 pkg/storaged/btrfs/volume.jsx:158 -#: pkg/storaged/btrfs/filesystem.jsx:87 pkg/storaged/btrfs/subvolume.jsx:424 +#: pkg/storaged/btrfs/subvolume.jsx:424 pkg/storaged/btrfs/filesystem.jsx:87 msgid "btrfs subvolumes" msgstr "btrfs 하위볼륨" @@ -9171,11 +9166,11 @@ msgid "btrfs volume" msgstr "btrfs 볼륨" -#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:318 msgid "bug fix" msgstr "버그 수정" -#: pkg/storaged/utils.js:175 +#: pkg/storaged/utils.js:176 msgctxt "format-bytes" msgid "bytes" msgstr "바이트" @@ -9212,7 +9207,7 @@ msgid "cpu" msgstr "중앙처리장치" -#: pkg/systemd/manifest.json:0 pkg/kdump/manifest.json:0 +#: pkg/kdump/manifest.json:0 pkg/systemd/manifest.json:0 msgid "crash" msgstr "충돌" @@ -9232,18 +9227,19 @@ msgid "debug" msgstr "디버그" -#: pkg/storaged/stratis/filesystem.jsx:121 pkg/storaged/stratis/pool.jsx:133 -#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 -#: pkg/storaged/lvm2/block-logical-volume.jsx:64 -#: pkg/storaged/block/format-dialog.jsx:208 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 +#: pkg/storaged/partitions/partition.jsx:43 #: pkg/storaged/partitions/format-disk-dialog.jsx:35 -#: pkg/storaged/partitions/partition.jsx:43 pkg/storaged/mdraid/mdraid.jsx:112 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 #: pkg/storaged/btrfs/subvolume.jsx:217 +#: pkg/storaged/block/format-dialog.jsx:208 +#: pkg/storaged/lvm2/block-logical-volume.jsx:64 +#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 +#: pkg/storaged/stratis/pool.jsx:133 pkg/storaged/stratis/filesystem.jsx:121 +#: pkg/storaged/mdraid/mdraid.jsx:112 msgid "delete" msgstr "삭제" -#: pkg/storaged/dialog.jsx:1119 +#: pkg/storaged/dialog.jsx:1121 msgid "device of btrfs volume" msgstr "btrfs 볼륨 장치" @@ -9275,19 +9271,19 @@ msgid "drive" msgstr "드라이브" -#: pkg/systemd/overview-cards/configurationCard.jsx:55 -#: pkg/networkmanager/network-interface.jsx:349 -#: pkg/networkmanager/dialogs-common.jsx:262 -#: pkg/storaged/stratis/filesystem.jsx:220 pkg/storaged/stratis/pool.jsx:517 -#: pkg/storaged/lvm2/volume-group.jsx:384 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 +#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/storaged/crypto/encryption.jsx:233 +#: pkg/storaged/crypto/encryption.jsx:236 #: pkg/storaged/lvm2/block-logical-volume.jsx:288 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/lvm2/volume-group.jsx:384 pkg/storaged/stratis/pool.jsx:517 +#: pkg/storaged/stratis/filesystem.jsx:220 +#: pkg/storaged/filesystem/utils.jsx:221 #: pkg/storaged/filesystem/filesystem.jsx:145 -#: pkg/storaged/filesystem/utils.jsx:221 pkg/storaged/crypto/encryption.jsx:233 -#: pkg/storaged/crypto/encryption.jsx:236 -#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 -#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/users/account-details.js:291 -#: pkg/users/account-details.js:321 +#: pkg/networkmanager/dialogs-common.jsx:261 +#: pkg/networkmanager/network-interface.jsx:349 +#: pkg/systemd/overview-cards/configurationCard.jsx:55 +#: pkg/users/account-details.js:291 pkg/users/account-details.js:321 msgid "edit" msgstr "편집" @@ -9303,7 +9299,7 @@ msgid "encryption" msgstr "암호화" -#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:318 msgid "enhancement" msgstr "기능 개선" @@ -9347,7 +9343,7 @@ msgid "extension" msgstr "확장" -#: pkg/systemd/overview-cards/configurationCard.jsx:153 +#: pkg/systemd/overview-cards/configurationCard.jsx:151 msgid "failed to list ssh host keys: $0" msgstr "ssh 호스트 키를 나열하지 못했습니다: $0" @@ -9511,11 +9507,11 @@ msgid "max: $0%" msgstr "최대: $0%" -#: pkg/storaged/dialog.jsx:1115 +#: pkg/storaged/dialog.jsx:1117 msgid "member of MDRAID device" msgstr "MD레이드 장치의 구성원" -#: pkg/storaged/dialog.jsx:1117 +#: pkg/storaged/dialog.jsx:1119 msgid "member of Stratis pool" msgstr "스트라티스 풀의 구성원" @@ -9539,7 +9535,7 @@ msgid "more details" msgstr "더 자세히" -#: pkg/storaged/utils.js:887 pkg/storaged/manifest.json:0 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "mount" msgstr "적재" @@ -9547,7 +9543,7 @@ msgid "nbde" msgstr "nbde" -#: pkg/systemd/manifest.json:0 pkg/networkmanager/manifest.json:0 +#: pkg/networkmanager/manifest.json:0 pkg/systemd/manifest.json:0 msgid "network" msgstr "네트워크" @@ -9575,11 +9571,11 @@ msgid "nice" msgstr "우선순위" -#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 -#: pkg/storaged/stratis/stopped-pool.jsx:130 -#: pkg/storaged/stratis/stopped-pool.jsx:134 #: pkg/storaged/crypto/encryption.jsx:232 #: pkg/storaged/crypto/encryption.jsx:235 +#: pkg/storaged/stratis/stopped-pool.jsx:130 +#: pkg/storaged/stratis/stopped-pool.jsx:134 +#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 msgid "none" msgstr "없음" @@ -9625,7 +9621,7 @@ msgid "password quality" msgstr "비밀번호 수준" -#: pkg/packagekit/updates.jsx:344 +#: pkg/packagekit/updates.jsx:343 msgid "patches" msgstr "패치" @@ -9645,7 +9641,7 @@ msgid "performance" msgstr "성능" -#: pkg/storaged/dialog.jsx:1114 +#: pkg/storaged/dialog.jsx:1116 msgid "physical volume of LVM2 volume group" msgstr "LVM2 볼륨 그룹의 물리적인 볼륨" @@ -9693,15 +9689,15 @@ msgid "recommended" msgstr "권장 사항" -#: pkg/storaged/utils.js:946 +#: pkg/storaged/utils.js:947 msgid "remove from LVM2" msgstr "LVM2에서 제거" -#: pkg/storaged/utils.js:935 +#: pkg/storaged/utils.js:936 msgid "remove from MDRAID" msgstr "MD레이드에서 제거" -#: pkg/storaged/utils.js:905 +#: pkg/storaged/utils.js:906 msgid "remove from btrfs volume" msgstr "btrfs 볼륨에서 제거" @@ -9713,11 +9709,11 @@ msgid "roles" msgstr "역할" -#: pkg/systemd/overview.jsx:159 +#: pkg/systemd/overview.jsx:169 msgid "running $0" msgstr "$0 실행 중" -#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:311 +#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:310 #: pkg/packagekit/manifest.json:0 msgid "security" msgstr "보안" @@ -9791,7 +9787,7 @@ msgid "ssh server is empty" msgstr "ssh 서버가 비어 있습니다" -#: pkg/storaged/utils.js:924 pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 pkg/storaged/utils.js:925 #: pkg/storaged/mdraid/mdraid.jsx:59 msgid "stop" msgstr "중지" @@ -9852,8 +9848,8 @@ msgid "unit" msgstr "단위" -#: pkg/systemd/services.jsx:555 pkg/systemd/services.jsx:565 -#: pkg/systemd/hw-detect.js:129 +#: pkg/systemd/hw-detect.js:129 pkg/systemd/services.jsx:555 +#: pkg/systemd/services.jsx:565 msgid "unknown" msgstr "알 수 없음" @@ -9865,12 +9861,12 @@ msgid "unmask" msgstr "마스크 해제" -#: pkg/storaged/utils.js:874 pkg/storaged/utils.js:887 -#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/manifest.json:0 +#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/utils.js:875 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "unmount" msgstr "적재 해제" -#: pkg/storaged/utils.js:533 +#: pkg/storaged/utils.js:534 msgid "unpartitioned space on $0" msgstr "$0에서 비파티션 공간" diff -Nru cockpit-314/po/nb_NO.po cockpit-316/po/nb_NO.po --- cockpit-314/po/nb_NO.po 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/po/nb_NO.po 2024-04-25 09:45:58.000000000 +0000 @@ -26,7 +26,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-26 02:47+0000\n" +"POT-Creation-Date: 2024-04-11 02:47+0000\n" "PO-Revision-Date: 2023-07-31 12:26+0000\n" "Last-Translator: yangyangdaji <1504305527@qq.com>\n" "Language-Team: Norwegian Bokmål $0 will break the connection to the server, and will make " @@ -988,7 +990,7 @@ "Hvis du legger til egendefinerte porter, lastes firewalld på nytt. En " "omlasting vil resultere i tap av en hvilken som helst kjøretidskonfigurasjon!" -#: pkg/storaged/crypto/keyslots.jsx:408 +#: pkg/storaged/crypto/keyslots.jsx:442 msgid "Adding key" msgstr "Legger til nøkkel" @@ -996,7 +998,7 @@ msgid "Adding physical volume to $target" msgstr "Legger til fysisk volum til $target" -#: pkg/storaged/crypto/keyslots.jsx:288 +#: pkg/storaged/crypto/keyslots.jsx:322 msgid "Adding rd.neednet=1 to kernel command line" msgstr "" @@ -1024,9 +1026,9 @@ msgid "Additional ports" msgstr "Ekstra porter" +#: pkg/storaged/iscsi/create-dialog.jsx:111 pkg/storaged/iscsi/session.jsx:92 #: pkg/networkmanager/ip-settings.jsx:198 -#: pkg/networkmanager/ip-settings.jsx:358 pkg/storaged/iscsi/session.jsx:92 -#: pkg/storaged/iscsi/create-dialog.jsx:111 +#: pkg/networkmanager/ip-settings.jsx:358 msgid "Address" msgstr "Adresse" @@ -1060,7 +1062,7 @@ msgid "Administrative access" msgstr "Administrativ tilgang" -#: pkg/sosreport/sosreport.jsx:415 +#: pkg/sosreport/sosreport.jsx:424 #, fuzzy #| msgid "" #| "You need to switch to \"Administrative access\" in order to create " @@ -1068,7 +1070,7 @@ msgid "Administrative access is required to create and access reports." msgstr "Du må bytte til \"Administrativ tilgang\" for å opprette rapporter." -#: pkg/sosreport/sosreport.jsx:414 +#: pkg/sosreport/sosreport.jsx:423 #, fuzzy #| msgid "Administrative access" msgid "Administrative access required" @@ -1167,8 +1169,8 @@ msgid "Application information is missing" msgstr "" -#: pkg/apps/index.html:23 pkg/apps/application-list.jsx:184 -#: pkg/apps/application.jsx:146 pkg/apps/manifest.json:0 +#: pkg/apps/index.html:23 pkg/apps/application.jsx:146 +#: pkg/apps/application-list.jsx:184 pkg/apps/manifest.json:0 msgid "Applications" msgstr "Applikasjoner" @@ -1208,7 +1210,7 @@ msgid "Applying updates failed" msgstr "Å ta i bruk oppdateringer feilet" -#: pkg/storaged/filesystem/mounting-dialog.jsx:74 +#: pkg/storaged/filesystem/mounting-dialog.jsx:77 msgid "Appropriate for critical mounts, such as /var" msgstr "" @@ -1227,7 +1229,7 @@ msgid "Asset tag" msgstr "Eiendomsmerke" -#: pkg/storaged/filesystem/mounting-dialog.jsx:118 +#: pkg/storaged/filesystem/mounting-dialog.jsx:121 #, fuzzy #| msgid "boot" msgid "At boot" @@ -1245,8 +1247,9 @@ msgid "At least one block device is needed." msgstr "Minst én disk er nødvendig." -#: pkg/storaged/stratis/pool.jsx:211 pkg/storaged/lvm2/create-dialog.jsx:57 -#: pkg/storaged/lvm2/volume-group.jsx:203 pkg/storaged/mdraid/mdraid.jsx:161 +#: pkg/storaged/lvm2/create-dialog.jsx:57 +#: pkg/storaged/lvm2/volume-group.jsx:203 pkg/storaged/stratis/pool.jsx:211 +#: pkg/storaged/mdraid/mdraid.jsx:161 msgid "At least one disk is needed." msgstr "Minst én disk er nødvendig." @@ -1270,7 +1273,7 @@ msgid "At specific time" msgstr "På et bestemt tidspunkt" -#: pkg/sosreport/sosreport.jsx:492 +#: pkg/sosreport/sosreport.jsx:501 #, fuzzy #| msgid "Edit $0 attributes" msgid "Attributes" @@ -1323,10 +1326,10 @@ msgid "Authorized public SSH keys" msgstr "Autoriserte offentlige SSH-nøkler" -#: pkg/networkmanager/network-interface.jsx:378 #: pkg/networkmanager/ip-settings.jsx:40 pkg/networkmanager/ip-settings.jsx:244 #: pkg/networkmanager/ip-settings.jsx:292 #: pkg/networkmanager/ip-settings.jsx:340 pkg/networkmanager/mtu.jsx:79 +#: pkg/networkmanager/network-interface.jsx:378 msgid "Automatic" msgstr "Automatisk" @@ -1368,7 +1371,7 @@ msgid "Available targets on $0" msgstr "Tilgjengelige mål på $0" -#: pkg/packagekit/updates.jsx:445 pkg/packagekit/updates.jsx:927 +#: pkg/packagekit/updates.jsx:444 pkg/packagekit/updates.jsx:926 msgid "Available updates" msgstr "Tilgjengelige oppdateringer" @@ -1441,9 +1444,9 @@ msgid "Block device for filesystems" msgstr "Blokk enhet for filsystemer" +#: pkg/storaged/stratis/pool.jsx:206 pkg/storaged/stratis/pool.jsx:563 +#: pkg/storaged/stratis/create-dialog.jsx:55 #: pkg/storaged/stratis/stopped-pool.jsx:138 -#: pkg/storaged/stratis/create-dialog.jsx:55 pkg/storaged/stratis/pool.jsx:206 -#: pkg/storaged/stratis/pool.jsx:563 #, fuzzy #| msgid "Locked devices" msgid "Block devices" @@ -1463,12 +1466,12 @@ msgid "Boot" msgstr "" -#: pkg/storaged/filesystem/mounting-dialog.jsx:77 +#: pkg/storaged/filesystem/mounting-dialog.jsx:80 msgid "Boot fails if filesystem does not mount, preventing remote access" msgstr "" -#: pkg/storaged/filesystem/mounting-dialog.jsx:88 -#: pkg/storaged/filesystem/mounting-dialog.jsx:99 +#: pkg/storaged/filesystem/mounting-dialog.jsx:91 +#: pkg/storaged/filesystem/mounting-dialog.jsx:102 #, fuzzy #| msgid "The filesystem is not mounted." msgid "Boot still succeeds when filesystem does not mount" @@ -1505,11 +1508,11 @@ msgid "Btrfs volume is mounted" msgstr "" -#: pkg/packagekit/updates.jsx:1437 +#: pkg/packagekit/updates.jsx:1436 msgid "Bug fix updates available" msgstr "Feilrettingsoppdateringer tilgjengelig" -#: pkg/packagekit/updates.jsx:387 +#: pkg/packagekit/updates.jsx:386 msgid "Bugs" msgstr "Feil" @@ -1536,7 +1539,7 @@ msgid "Bypass browser check" msgstr "" -#: pkg/systemd/overview-cards/usageCard.jsx:132 pkg/systemd/hwinfo.jsx:114 +#: pkg/systemd/hwinfo.jsx:114 pkg/systemd/overview-cards/usageCard.jsx:132 #: pkg/metrics/metrics.jsx:109 pkg/metrics/metrics.jsx:820 #: pkg/metrics/metrics.jsx:1572 pkg/metrics/metrics.jsx:1949 msgid "CPU" @@ -1560,7 +1563,7 @@ msgid "CPU usage/load" msgstr "CPU-bruk" -#: pkg/packagekit/updates.jsx:369 +#: pkg/packagekit/updates.jsx:368 msgid "CVE" msgstr "CVE" @@ -1576,28 +1579,29 @@ msgid "Can not find any logs using the current combination of filters." msgstr "Finner ingen logger med den nåværende kombinasjonen av filtre." -#: pkg/static/login.html:141 pkg/playground/translate.html:39 -#: pkg/sosreport/sosreport.jsx:281 pkg/sosreport/sosreport.jsx:366 -#: pkg/systemd/timer-dialog.jsx:151 pkg/systemd/reporting.jsx:383 +#: pkg/playground/translate.html:39 pkg/static/login.html:141 +#: pkg/storaged/jobs-panel.jsx:140 pkg/apps/utils.jsx:69 +#: pkg/sosreport/sosreport.jsx:290 pkg/sosreport/sosreport.jsx:375 +#: pkg/networkmanager/dialogs-common.jsx:163 +#: pkg/networkmanager/firewall.jsx:613 pkg/networkmanager/firewall.jsx:814 +#: pkg/networkmanager/firewall.jsx:913 +#: pkg/lib/cockpit-components-dialog.jsx:131 +#: pkg/lib/cockpit-components-shutdown.jsx:193 pkg/kdump/kdump-view.jsx:235 +#: pkg/systemd/timer-dialog.jsx:151 pkg/systemd/hwinfo.jsx:231 #: pkg/systemd/overview-cards/motdCard.jsx:65 #: pkg/systemd/overview-cards/tuned-dialog.jsx:314 +#: pkg/systemd/overview-cards/realmd.jsx:434 +#: pkg/systemd/overview-cards/configurationCard.jsx:280 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:194 -#: pkg/systemd/overview-cards/configurationCard.jsx:284 -#: pkg/systemd/overview-cards/realmd.jsx:434 pkg/systemd/hwinfo.jsx:231 #: pkg/systemd/service-details.jsx:86 pkg/systemd/service-details.jsx:715 -#: pkg/metrics/metrics.jsx:1481 pkg/networkmanager/dialogs-common.jsx:163 -#: pkg/networkmanager/firewall.jsx:613 pkg/networkmanager/firewall.jsx:814 -#: pkg/networkmanager/firewall.jsx:913 pkg/kdump/kdump-view.jsx:235 -#: pkg/storaged/jobs-panel.jsx:140 pkg/shell/hosts_dialog.jsx:285 +#: pkg/systemd/reporting.jsx:383 pkg/shell/hosts_dialog.jsx:285 #: pkg/shell/hosts_dialog.jsx:382 pkg/shell/hosts_dialog.jsx:514 #: pkg/shell/hosts_dialog.jsx:891 pkg/shell/shell-modals.jsx:118 -#: pkg/shell/credentials.jsx:313 pkg/shell/superuser.jsx:182 -#: pkg/shell/superuser.jsx:219 pkg/shell/superuser.jsx:264 -#: pkg/shell/active-pages-modal.jsx:100 pkg/packagekit/kpatch.jsx:315 -#: pkg/packagekit/updates.jsx:542 pkg/packagekit/updates.jsx:580 -#: pkg/packagekit/autoupdates.jsx:274 pkg/apps/utils.jsx:69 -#: pkg/lib/cockpit-components-shutdown.jsx:193 -#: pkg/lib/cockpit-components-dialog.jsx:131 +#: pkg/shell/superuser.jsx:182 pkg/shell/superuser.jsx:219 +#: pkg/shell/superuser.jsx:264 pkg/shell/credentials.jsx:313 +#: pkg/shell/active-pages-modal.jsx:100 pkg/metrics/metrics.jsx:1481 +#: pkg/packagekit/updates.jsx:541 pkg/packagekit/updates.jsx:579 +#: pkg/packagekit/kpatch.jsx:315 pkg/packagekit/autoupdates.jsx:274 msgid "Cancel" msgstr "Avbryt" @@ -1619,7 +1623,7 @@ msgid "Cannot connect to an unknown host" msgstr "Kan ikke koble til en ukjent vert" -#: pkg/lib/cockpit.js:3860 +#: pkg/lib/cockpit.js:3856 msgid "Cannot forward login credentials" msgstr "Kan ikke videresende påloggingsinformasjonen" @@ -1634,8 +1638,8 @@ msgid "Cannot schedule event in the past" msgstr "Kan ikke tidsplanlegge hendelse i fortiden" -#: pkg/storaged/lvm2/volume-group.jsx:387 pkg/storaged/drive/drive.jsx:125 -#: pkg/storaged/mdraid/mdraid.jsx:293 pkg/storaged/btrfs/volume.jsx:128 +#: pkg/storaged/btrfs/volume.jsx:128 pkg/storaged/drive/drive.jsx:125 +#: pkg/storaged/lvm2/volume-group.jsx:387 pkg/storaged/mdraid/mdraid.jsx:293 msgid "Capacity" msgstr "Kapasitet" @@ -1643,10 +1647,11 @@ msgid "Carrier" msgstr "Transportør" -#: pkg/systemd/overview-cards/configurationCard.jsx:283 -#: pkg/storaged/stratis/pool.jsx:531 pkg/storaged/iscsi/create-dialog.jsx:171 +#: pkg/storaged/iscsi/create-dialog.jsx:171 pkg/storaged/stratis/pool.jsx:531 +#: pkg/lib/serverTime.js:729 +#: pkg/systemd/overview-cards/configurationCard.jsx:279 #: pkg/users/expiration-dialogs.js:115 pkg/users/expiration-dialogs.js:217 -#: pkg/users/shell-dialog.js:78 pkg/lib/serverTime.js:729 +#: pkg/users/shell-dialog.js:78 msgid "Change" msgstr "Endre" @@ -1656,7 +1661,7 @@ msgid "Change cryptographic policy" msgstr "Tilpassede krypteringsalternativer" -#: pkg/systemd/overview-cards/configurationCard.jsx:281 +#: pkg/systemd/overview-cards/configurationCard.jsx:277 msgid "Change host name" msgstr "Endre vertsnavn" @@ -1676,7 +1681,7 @@ msgid "Change label" msgstr "Endre passfrase" -#: pkg/storaged/stratis/pool.jsx:400 pkg/storaged/crypto/keyslots.jsx:480 +#: pkg/storaged/crypto/keyslots.jsx:514 pkg/storaged/stratis/pool.jsx:400 msgid "Change passphrase" msgstr "Endre passfrase" @@ -1734,7 +1739,7 @@ "Endring av innstillingene vil bryte forbindelsen til serveren, og gjøre " "administrasjonsgrensesnittet utilgjengelig." -#: pkg/packagekit/updates.jsx:909 +#: pkg/packagekit/updates.jsx:908 msgid "Check for updates" msgstr "Se etter oppdateringer" @@ -1767,13 +1772,13 @@ msgid "Checking and repairing MDRAID device $target" msgstr "Kontrollerer og reparerer RAID-enhet $target" -#: pkg/storaged/crypto/keyslots.jsx:231 +#: pkg/storaged/crypto/keyslots.jsx:265 #, fuzzy #| msgid "Checking for package updates..." msgid "Checking for $0 package" msgstr "Ser etter pakkeoppdateringer ..." -#: pkg/storaged/crypto/keyslots.jsx:267 +#: pkg/storaged/crypto/keyslots.jsx:301 msgid "Checking for NBDE support in the initrd" msgstr "" @@ -1781,7 +1786,7 @@ msgid "Checking for new applications" msgstr "Ser etter nye applikasjoner" -#: pkg/packagekit/updates.jsx:1389 +#: pkg/packagekit/updates.jsx:1388 msgid "Checking for package updates..." msgstr "Ser etter pakkeoppdateringer ..." @@ -1790,11 +1795,11 @@ msgid "Checking installed software" msgstr "Kontrollerer installert programvare" -#: pkg/storaged/dialog.jsx:1271 +#: pkg/storaged/dialog.jsx:1273 msgid "Checking related processes" msgstr "" -#: pkg/packagekit/updates.jsx:1399 +#: pkg/packagekit/updates.jsx:1398 msgid "Checking software status" msgstr "Kontrollerer programvarestatus" @@ -1818,7 +1823,7 @@ msgid "Clear 'Failed to start'" msgstr "Fjern 'Kunne ikke starte'" -#: pkg/systemd/services-list.jsx:58 pkg/systemd/logsJournal.jsx:277 +#: pkg/systemd/logsJournal.jsx:277 pkg/systemd/services-list.jsx:58 msgid "Clear all filters" msgstr "Fjern alle filtre" @@ -1836,14 +1841,15 @@ msgid "Client software" msgstr "Klient programvare" -#: pkg/systemd/overview-cards/configurationCard.jsx:198 +#: pkg/storaged/dialog.jsx:456 pkg/apps/utils.jsx:87 +#: pkg/networkmanager/interfaces.js:43 +#: pkg/lib/cockpit-components-terminal.jsx:230 +#: pkg/lib/cockpit-components-modifications.jsx:76 #: pkg/systemd/overview-cards/realmd.jsx:278 -#: pkg/networkmanager/interfaces.js:43 pkg/storaged/dialog.jsx:456 +#: pkg/systemd/overview-cards/configurationCard.jsx:195 #: pkg/shell/hosts_dialog.jsx:92 pkg/shell/shell-modals.jsx:192 -#: pkg/shell/credentials.jsx:81 pkg/shell/superuser.jsx:190 -#: pkg/shell/superuser.jsx:198 pkg/apps/utils.jsx:87 -#: pkg/users/dialog-utils.js:58 pkg/lib/cockpit-components-terminal.jsx:230 -#: pkg/lib/cockpit-components-modifications.jsx:76 +#: pkg/shell/superuser.jsx:190 pkg/shell/superuser.jsx:198 +#: pkg/shell/credentials.jsx:81 pkg/users/dialog-utils.js:58 msgid "Close" msgstr "Lukk" @@ -1863,7 +1869,7 @@ msgid "Cockpit configuration of NetworkManager and Firewalld" msgstr "" -#: pkg/lib/cockpit.js:3866 +#: pkg/lib/cockpit.js:3862 msgid "Cockpit could not contact the given host." msgstr "Cockpit kunne ikke kontakte den angitte verten." @@ -1889,7 +1895,7 @@ msgid "Cockpit is an interactive Linux server admin interface." msgstr "Cockpit er et interaktivt administrasjonsgrensesnitt for Linux-server." -#: pkg/lib/cockpit.js:3864 +#: pkg/lib/cockpit.js:3860 msgid "Cockpit is not compatible with the software on the system." msgstr "Cockpit er ikke kompatibel med programvaren på systemet." @@ -1897,7 +1903,7 @@ msgid "Cockpit is not installed" msgstr "Cockpit er ikke installert" -#: pkg/lib/cockpit.js:3858 +#: pkg/lib/cockpit.js:3854 msgid "Cockpit is not installed on the system." msgstr "Cockpit er ikke installert på systemet." @@ -1944,8 +1950,8 @@ msgid "Comma-separated ports, ranges, and services are accepted" msgstr "Kommaseparerte porter, områder og alias aksepteres" -#: pkg/systemd/timer-dialog.jsx:174 pkg/storaged/dialog.jsx:1330 -#: pkg/storaged/dialog.jsx:1350 +#: pkg/storaged/dialog.jsx:1332 pkg/storaged/dialog.jsx:1352 +#: pkg/systemd/timer-dialog.jsx:174 msgid "Command" msgstr "Kommando" @@ -1979,9 +1985,9 @@ msgid "Compress crash dumps to save space" msgstr "Komprimer krasjdumper for å spare plass" -#: pkg/kdump/kdump-view.jsx:314 pkg/storaged/lvm2/vdo-pool.jsx:84 -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:229 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:325 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:229 +#: pkg/storaged/lvm2/vdo-pool.jsx:84 pkg/kdump/kdump-view.jsx:314 msgid "Compression" msgstr "Komprimering" @@ -1993,7 +1999,7 @@ msgid "Condition failed" msgstr "Betingelse feilet" -#: pkg/systemd/overview-cards/configurationCard.jsx:62 +#: pkg/systemd/overview-cards/configurationCard.jsx:61 msgid "Configuration" msgstr "Konfigurasjon" @@ -2013,12 +2019,12 @@ msgid "Configuring system settings" msgstr "Konfigurere systeminnstillinger" -#: pkg/storaged/stratis/create-dialog.jsx:84 pkg/storaged/stratis/pool.jsx:380 -#: pkg/storaged/stratis/pool.jsx:409 pkg/storaged/block/format-dialog.jsx:343 +#: pkg/storaged/block/format-dialog.jsx:345 pkg/storaged/stratis/pool.jsx:380 +#: pkg/storaged/stratis/pool.jsx:409 pkg/storaged/stratis/create-dialog.jsx:84 msgid "Confirm" msgstr "Bekreft" -#: pkg/systemd/service-details.jsx:707 pkg/storaged/stratis/filesystem.jsx:133 +#: pkg/storaged/stratis/filesystem.jsx:133 pkg/systemd/service-details.jsx:707 #, fuzzy #| msgid "Please confirm deletion of $0" msgid "Confirm deletion of $0" @@ -2046,7 +2052,7 @@ msgid "Confirm removal of $0" msgstr "Bekreft fjerning av $0" -#: pkg/storaged/crypto/keyslots.jsx:589 +#: pkg/storaged/crypto/keyslots.jsx:623 #, fuzzy #| msgid "Confirm removal with passphrase" msgid "Confirm removal with an alternate passphrase" @@ -2102,7 +2108,7 @@ msgid "Connection failed" msgstr "Tilkoblingen feilet" -#: pkg/lib/cockpit.js:3856 +#: pkg/lib/cockpit.js:3852 msgid "Connection has timed out." msgstr "Tidsavbrudd for tilkoblingen." @@ -2122,7 +2128,7 @@ msgid "Contains:" msgstr "Inneholder:" -#: pkg/packagekit/updates.jsx:764 +#: pkg/packagekit/updates.jsx:763 msgid "Continue" msgstr "Fortsett" @@ -2151,19 +2157,19 @@ #: pkg/shell/hosts_dialog.jsx:475 pkg/shell/hosts_dialog.jsx:478 #: pkg/shell/hosts_dialog.jsx:493 pkg/shell/hosts_dialog.jsx:495 -#: pkg/shell/credentials.jsx:212 pkg/shell/failures.jsx:44 +#: pkg/shell/failures.jsx:43 pkg/shell/credentials.jsx:212 msgid "Copied" msgstr "" -#: pkg/shell/hosts_dialog.jsx:475 pkg/shell/hosts_dialog.jsx:478 -#: pkg/shell/hosts_dialog.jsx:493 pkg/shell/hosts_dialog.jsx:495 -#: pkg/shell/credentials.jsx:212 pkg/shell/failures.jsx:44 -#: pkg/lib/cockpit-components-terminal.jsx:211 +#: pkg/lib/cockpit-components-terminal.jsx:211 pkg/shell/hosts_dialog.jsx:475 +#: pkg/shell/hosts_dialog.jsx:478 pkg/shell/hosts_dialog.jsx:493 +#: pkg/shell/hosts_dialog.jsx:495 pkg/shell/failures.jsx:43 +#: pkg/shell/credentials.jsx:212 msgid "Copy" msgstr "Kopier" -#: pkg/systemd/logs.jsx:417 pkg/storaged/crypto/tang.jsx:117 -#: pkg/lib/cockpit-components-modifications.jsx:73 +#: pkg/storaged/crypto/tang.jsx:117 +#: pkg/lib/cockpit-components-modifications.jsx:73 pkg/systemd/logs.jsx:417 msgid "Copy to clipboard" msgstr "Kopier til utklippstavle" @@ -2189,17 +2195,17 @@ msgid "Crash system" msgstr "Krasj system" -#: pkg/storaged/stratis/create-dialog.jsx:122 pkg/storaged/stratis/pool.jsx:85 -#: pkg/storaged/lvm2/create-dialog.jsx:63 +#: pkg/storaged/btrfs/subvolume.jsx:141 +#: pkg/storaged/block/format-dialog.jsx:275 +#: pkg/storaged/block/format-dialog.jsx:285 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:269 -#: pkg/storaged/lvm2/volume-group.jsx:120 +#: pkg/storaged/lvm2/create-dialog.jsx:63 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:58 -#: pkg/storaged/block/format-dialog.jsx:273 -#: pkg/storaged/block/format-dialog.jsx:283 +#: pkg/storaged/lvm2/volume-group.jsx:120 pkg/storaged/stratis/pool.jsx:85 +#: pkg/storaged/stratis/create-dialog.jsx:122 #: pkg/storaged/mdraid/create-dialog.jsx:112 -#: pkg/storaged/btrfs/subvolume.jsx:141 pkg/users/group-create-dialog.js:141 -#: pkg/users/account-create-dialog.js:481 #: pkg/lib/cockpit-components-file-autocomplete.jsx:193 +#: pkg/users/group-create-dialog.js:141 pkg/users/account-create-dialog.js:481 msgid "Create" msgstr "Opprett" @@ -2219,8 +2225,8 @@ msgid "Create RAID device" msgstr "Opprett RAID-enhet" -#: pkg/storaged/stratis/create-dialog.jsx:48 #: pkg/storaged/overview/overview.jsx:147 +#: pkg/storaged/stratis/create-dialog.jsx:48 #, fuzzy #| msgid "Create storage pool" msgid "Create Stratis pool" @@ -2250,14 +2256,14 @@ msgid "Create and change ownership of home directory" msgstr "" -#: pkg/storaged/stratis/pool.jsx:80 pkg/storaged/block/format-dialog.jsx:268 #: pkg/storaged/btrfs/subvolume.jsx:135 +#: pkg/storaged/block/format-dialog.jsx:270 pkg/storaged/stratis/pool.jsx:80 #, fuzzy #| msgid "Create new account" msgid "Create and mount" msgstr "Opprett ny konto" -#: pkg/storaged/block/format-dialog.jsx:277 +#: pkg/storaged/block/format-dialog.jsx:279 #, fuzzy #| msgid "Create new account" msgid "Create and start" @@ -2269,7 +2275,7 @@ msgid "Create filesystem" msgstr "Filsystem" -#: pkg/networkmanager/dialogs-common.jsx:323 +#: pkg/networkmanager/dialogs-common.jsx:321 msgid "Create it" msgstr "Opprett den" @@ -2287,7 +2293,7 @@ msgid "Create new filesystem" msgstr "Opprett nytt volum" -#: pkg/users/group-create-dialog.js:134 pkg/users/accounts-list.js:297 +#: pkg/users/accounts-list.js:297 pkg/users/group-create-dialog.js:134 #, fuzzy #| msgid "Create volume group" msgid "Create new group" @@ -2307,9 +2313,9 @@ msgid "Create new thinly provisioned logical volume" msgstr "Opprett nytt logisk volum" -#: pkg/storaged/stratis/pool.jsx:81 pkg/storaged/block/format-dialog.jsx:269 -#: pkg/storaged/block/format-dialog.jsx:278 #: pkg/storaged/btrfs/subvolume.jsx:136 +#: pkg/storaged/block/format-dialog.jsx:271 +#: pkg/storaged/block/format-dialog.jsx:280 pkg/storaged/stratis/pool.jsx:81 #, fuzzy #| msgid "read only" msgid "Create only" @@ -2368,7 +2374,7 @@ msgid "Create volume group" msgstr "Opprett volumgruppe" -#: pkg/sosreport/sosreport.jsx:491 +#: pkg/sosreport/sosreport.jsx:500 #, fuzzy #| msgid "Create" msgid "Created" @@ -2408,7 +2414,7 @@ msgid "Creating snapshot of $target" msgstr "Oppretter øyeblikksbilde av $target" -#: pkg/networkmanager/dialogs-common.jsx:322 +#: pkg/networkmanager/dialogs-common.jsx:320 #, fuzzy #| msgid "" #| "Creating this VLAN will break the connection to the server, and will make " @@ -2461,7 +2467,7 @@ msgid "Current top CPU usage" msgstr "Gjeldende" -#: pkg/storaged/dialog.jsx:1182 +#: pkg/storaged/dialog.jsx:1184 #, fuzzy #| msgid "Current" msgid "Currently in use" @@ -2485,7 +2491,7 @@ msgid "Custom cryptographic policy" msgstr "Tilpassede krypteringsalternativer" -#: pkg/storaged/nfs/nfs.jsx:173 pkg/storaged/filesystem/mounting-dialog.jsx:61 +#: pkg/storaged/nfs/nfs.jsx:173 pkg/storaged/filesystem/mounting-dialog.jsx:64 msgid "Custom mount options" msgstr "Tilpassede monteringsalternativer" @@ -2527,11 +2533,11 @@ msgid "Daily" msgstr "Daglig" -#: pkg/packagekit/updates.jsx:934 +#: pkg/packagekit/updates.jsx:933 msgid "Danger alert:" msgstr "Farevarsel:" -#: pkg/systemd/terminal.jsx:174 pkg/shell/topnav.jsx:193 +#: pkg/systemd/terminal.jsx:174 pkg/shell/topnav.jsx:203 msgid "Dark" msgstr "Mørk" @@ -2541,8 +2547,8 @@ msgid "Data" msgstr "Data brukt" -#: pkg/storaged/lvm2/vdo-pool.jsx:80 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:144 +#: pkg/storaged/lvm2/vdo-pool.jsx:80 msgid "Data used" msgstr "Data brukt" @@ -2601,9 +2607,9 @@ "prefixed with '-' or '+'" msgstr "" -#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:43 #: pkg/storaged/lvm2/block-logical-volume.jsx:161 #: pkg/storaged/lvm2/block-logical-volume.jsx:216 +#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:43 msgid "Deactivate" msgstr "Deaktiver" @@ -2635,18 +2641,18 @@ msgid "Dedicated parity (RAID 4)" msgstr "RAID 4 (dedikert paritet)" -#: pkg/storaged/lvm2/vdo-pool.jsx:88 -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:234 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:334 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:234 +#: pkg/storaged/lvm2/vdo-pool.jsx:88 msgid "Deduplication" msgstr "Deduplisering" -#: pkg/systemd/overview-cards/cryptoPolicies.jsx:37 pkg/shell/topnav.jsx:187 +#: pkg/systemd/overview-cards/cryptoPolicies.jsx:37 pkg/shell/topnav.jsx:197 msgid "Default" msgstr "" -#: pkg/systemd/timer-dialog.jsx:200 pkg/systemd/timer-dialog.jsx:209 -#: pkg/lib/cockpit-components-shutdown.jsx:201 +#: pkg/lib/cockpit-components-shutdown.jsx:201 pkg/systemd/timer-dialog.jsx:200 +#: pkg/systemd/timer-dialog.jsx:209 msgid "Delay" msgstr "Forsinkelse" @@ -2656,27 +2662,27 @@ msgid "Delay must be a number" msgstr "Størrelsen må være et tall" -#: pkg/sosreport/sosreport.jsx:360 pkg/sosreport/sosreport.jsx:459 -#: pkg/systemd/abrtLog.jsx:290 pkg/systemd/service-details.jsx:151 -#: pkg/systemd/service-details.jsx:713 -#: pkg/networkmanager/network-interface.jsx:725 -#: pkg/networkmanager/firewall.jsx:117 pkg/networkmanager/firewall.jsx:178 -#: pkg/networkmanager/firewall.jsx:910 pkg/storaged/stratis/filesystem.jsx:137 -#: pkg/storaged/stratis/filesystem.jsx:175 pkg/storaged/stratis/pool.jsx:149 -#: pkg/storaged/lvm2/volume-group.jsx:97 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:109 -#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:44 +#: pkg/storaged/partitions/partition.jsx:58 +#: pkg/storaged/partitions/partition.jsx:112 +#: pkg/storaged/partitions/partition-table.jsx:61 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:122 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:152 +#: pkg/storaged/btrfs/subvolume.jsx:231 pkg/storaged/btrfs/subvolume.jsx:373 #: pkg/storaged/lvm2/block-logical-volume.jsx:79 #: pkg/storaged/lvm2/block-logical-volume.jsx:222 +#: pkg/storaged/lvm2/unsupported-logical-volume.jsx:44 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:109 #: pkg/storaged/lvm2/inactive-logical-volume.jsx:42 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:122 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:152 -#: pkg/storaged/partitions/partition-table.jsx:61 -#: pkg/storaged/partitions/partition.jsx:58 -#: pkg/storaged/partitions/partition.jsx:112 pkg/storaged/mdraid/mdraid.jsx:126 -#: pkg/storaged/mdraid/mdraid.jsx:223 pkg/storaged/btrfs/subvolume.jsx:231 -#: pkg/storaged/btrfs/subvolume.jsx:373 pkg/users/delete-group-dialog.js:51 -#: pkg/users/delete-account-dialog.js:60 pkg/users/account-details.js:227 +#: pkg/storaged/lvm2/volume-group.jsx:97 pkg/storaged/stratis/pool.jsx:149 +#: pkg/storaged/stratis/filesystem.jsx:137 +#: pkg/storaged/stratis/filesystem.jsx:175 pkg/storaged/mdraid/mdraid.jsx:126 +#: pkg/storaged/mdraid/mdraid.jsx:223 pkg/sosreport/sosreport.jsx:369 +#: pkg/sosreport/sosreport.jsx:468 pkg/networkmanager/firewall.jsx:117 +#: pkg/networkmanager/firewall.jsx:178 pkg/networkmanager/firewall.jsx:910 +#: pkg/networkmanager/network-interface.jsx:725 pkg/systemd/abrtLog.jsx:290 +#: pkg/systemd/service-details.jsx:151 pkg/systemd/service-details.jsx:713 +#: pkg/users/account-details.js:227 pkg/users/delete-group-dialog.js:51 +#: pkg/users/delete-account-dialog.js:60 msgid "Delete" msgstr "Slett" @@ -2707,7 +2713,7 @@ msgid "Delete pool" msgstr "Slett" -#: pkg/sosreport/sosreport.jsx:352 +#: pkg/sosreport/sosreport.jsx:361 #, fuzzy #| msgid "Delete content" msgid "Delete report permanently?" @@ -2783,8 +2789,8 @@ msgid "Deletion will remove the following files:" msgstr "" -#: pkg/systemd/timer-dialog.jsx:166 pkg/networkmanager/firewall.jsx:702 -#: pkg/networkmanager/firewall.jsx:846 pkg/storaged/dialog.jsx:1351 +#: pkg/storaged/dialog.jsx:1353 pkg/networkmanager/firewall.jsx:702 +#: pkg/networkmanager/firewall.jsx:846 pkg/systemd/timer-dialog.jsx:166 msgid "Description" msgstr "Beskrivelse" @@ -2797,7 +2803,7 @@ msgstr "" #: pkg/systemd/overview-cards/realmd.jsx:416 pkg/shell/credentials.jsx:109 -#: pkg/packagekit/updates.jsx:451 +#: pkg/packagekit/updates.jsx:450 msgid "Details" msgstr "Detaljer" @@ -2805,17 +2811,17 @@ msgid "Development" msgstr "Utvikling" -#: pkg/metrics/metrics.jsx:785 pkg/storaged/dialog.jsx:1137 -#: pkg/storaged/dialog.jsx:1242 pkg/storaged/mdraid/mdraid.jsx:292 +#: pkg/storaged/dialog.jsx:1139 pkg/storaged/dialog.jsx:1244 +#: pkg/storaged/mdraid/mdraid.jsx:292 pkg/metrics/metrics.jsx:785 msgid "Device" msgstr "Enhet" -#: pkg/storaged/block/other.jsx:62 pkg/storaged/drive/drive.jsx:132 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:287 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:287 pkg/storaged/block/other.jsx:62 +#: pkg/storaged/drive/drive.jsx:132 msgid "Device file" msgstr "Enhetsfil" -#: pkg/storaged/partitions/actions.jsx:27 +#: pkg/storaged/partitions/actions.jsx:27 pkg/storaged/block/actions.jsx:28 msgid "Device is read-only" msgstr "Enheten er skrivebeskyttet" @@ -2851,10 +2857,11 @@ msgid "Disable tuned" msgstr "Deaktiver tuned" -#: pkg/systemd/services.jsx:246 pkg/systemd/services.jsx:687 -#: pkg/systemd/service-details.jsx:436 pkg/networkmanager/ip-settings.jsx:46 -#: pkg/networkmanager/firewall-switch.jsx:80 pkg/kdump/kdump-view.jsx:541 -#: pkg/packagekit/kpatch.jsx:253 pkg/packagekit/autoupdates.jsx:344 +#: pkg/networkmanager/firewall-switch.jsx:80 +#: pkg/networkmanager/ip-settings.jsx:46 pkg/kdump/kdump-view.jsx:541 +#: pkg/systemd/service-details.jsx:436 pkg/systemd/services.jsx:246 +#: pkg/systemd/services.jsx:687 pkg/packagekit/kpatch.jsx:253 +#: pkg/packagekit/autoupdates.jsx:344 msgid "Disabled" msgstr "Deaktivert" @@ -2897,14 +2904,14 @@ msgid "Disk is failing" msgstr "$0 disk mangler" -#: pkg/storaged/crypto/keyslots.jsx:142 +#: pkg/storaged/crypto/keyslots.jsx:175 msgid "Disk passphrase" msgstr "Disk passfrase" -#: pkg/metrics/metrics.jsx:918 pkg/storaged/lvm2/create-dialog.jsx:52 -#: pkg/storaged/lvm2/volume-group.jsx:198 -#: pkg/storaged/mdraid/create-dialog.jsx:99 pkg/storaged/mdraid/mdraid.jsx:156 -#: pkg/storaged/mdraid/mdraid.jsx:296 +#: pkg/storaged/lvm2/create-dialog.jsx:52 +#: pkg/storaged/lvm2/volume-group.jsx:198 pkg/storaged/mdraid/mdraid.jsx:156 +#: pkg/storaged/mdraid/mdraid.jsx:296 pkg/storaged/mdraid/create-dialog.jsx:99 +#: pkg/metrics/metrics.jsx:918 msgid "Disks" msgstr "Disker" @@ -2934,7 +2941,7 @@ msgid "Dismiss selected alerts" msgstr "Lukk valgte sider" -#: pkg/shell/shell-modals.jsx:115 pkg/shell/topnav.jsx:205 +#: pkg/shell/topnav.jsx:216 pkg/shell/shell-modals.jsx:115 msgid "Display language" msgstr "Visnings språk" @@ -2945,7 +2952,7 @@ msgid "Distributed parity (RAID 5)" msgstr "RAID 5 (distribuert paritet)" -#: pkg/storaged/filesystem/mounting-dialog.jsx:138 +#: pkg/storaged/filesystem/mounting-dialog.jsx:141 #, fuzzy #| msgid "Not mounted" msgid "Do not mount" @@ -2964,14 +2971,14 @@ msgid "Does not automatically start" msgstr "Starter ikke automatisk" -#: pkg/storaged/filesystem/mounting-dialog.jsx:107 +#: pkg/storaged/filesystem/mounting-dialog.jsx:110 #, fuzzy #| msgid "Do not mount automatically on boot" msgid "Does not mount during boot" msgstr "Ikke monter automatisk ved oppstart" -#: pkg/systemd/overview-cards/configurationCard.jsx:80 #: pkg/systemd/overview-cards/realmd.jsx:284 +#: pkg/systemd/overview-cards/configurationCard.jsx:79 msgid "Domain" msgstr "Domene" @@ -3017,7 +3024,7 @@ msgid "Double distributed parity (RAID 6)" msgstr "RAID 6 (dobbel fordelt paritet)" -#: pkg/sosreport/sosreport.jsx:449 pkg/sosreport/sosreport.jsx:455 +#: pkg/sosreport/sosreport.jsx:458 pkg/sosreport/sosreport.jsx:464 #, fuzzy #| msgid "Downloaded" msgid "Download" @@ -3035,7 +3042,7 @@ msgid "Downloading" msgstr "Laster ned" -#: pkg/storaged/crypto/keyslots.jsx:220 +#: pkg/storaged/crypto/keyslots.jsx:254 #: pkg/lib/cockpit-components-install-dialog.jsx:189 msgid "Downloading $0" msgstr "Laster ned $0" @@ -3044,7 +3051,7 @@ msgid "Drive" msgstr "DIsk" -#: pkg/systemd/hw-detect.js:92 pkg/lib/machine-info.js:240 +#: pkg/lib/machine-info.js:240 pkg/systemd/hw-detect.js:92 msgid "Dual rank" msgstr "Dobbel rangering" @@ -3056,9 +3063,9 @@ msgid "EFI system partition" msgstr "Utvidet partisjon" +#: pkg/storaged/nfs/nfs.jsx:312 pkg/storaged/crypto/keyslots.jsx:761 #: pkg/networkmanager/firewall.jsx:115 pkg/kdump/kdump-view.jsx:476 -#: pkg/storaged/nfs/nfs.jsx:312 pkg/storaged/crypto/keyslots.jsx:727 -#: pkg/shell/hosts.jsx:167 pkg/shell/indexes.jsx:352 +#: pkg/shell/indexes.jsx:352 pkg/shell/hosts.jsx:167 #: pkg/packagekit/kpatch.jsx:234 pkg/packagekit/autoupdates.jsx:407 msgid "Edit" msgstr "Rediger" @@ -3067,7 +3074,7 @@ msgid "Edit /etc/motd" msgstr "Rediger /etc/motd" -#: pkg/storaged/crypto/keyslots.jsx:507 +#: pkg/storaged/crypto/keyslots.jsx:541 msgid "Edit Tang keyserver" msgstr "Rediger Tang nøkkelserver" @@ -3111,9 +3118,8 @@ msgid "Edit motd" msgstr "Rediger motd" -#: pkg/storaged/stratis/filesystem.jsx:170 +#: pkg/storaged/btrfs/subvolume.jsx:331 pkg/storaged/stratis/filesystem.jsx:170 #: pkg/storaged/filesystem/filesystem.jsx:100 -#: pkg/storaged/btrfs/subvolume.jsx:331 #, fuzzy #| msgid "Mount point" msgid "Edit mount point" @@ -3147,7 +3153,7 @@ msgid "Edit user" msgstr "Legg til tjenester" -#: pkg/storaged/crypto/keyslots.jsx:729 +#: pkg/storaged/crypto/keyslots.jsx:763 msgid "Editing a key requires a free slot" msgstr "Redigering av en nøkkel krever en ledig slot" @@ -3197,13 +3203,13 @@ msgid "Enable the firewall" msgstr "Aktiver brannmuren" +#: pkg/networkmanager/firewall-switch.jsx:80 pkg/kdump/kdump-view.jsx:541 #: pkg/systemd/services.jsx:244 pkg/systemd/services.jsx:245 -#: pkg/systemd/services.jsx:686 pkg/networkmanager/firewall-switch.jsx:80 -#: pkg/kdump/kdump-view.jsx:541 pkg/packagekit/kpatch.jsx:256 +#: pkg/systemd/services.jsx:686 pkg/packagekit/kpatch.jsx:256 msgid "Enabled" msgstr "Aktivert" -#: pkg/storaged/crypto/keyslots.jsx:335 +#: pkg/storaged/crypto/keyslots.jsx:369 #, fuzzy #| msgid "Installing $0" msgid "Enabling $0" @@ -3225,13 +3231,13 @@ msgid "Encrypt data with a passphrase" msgstr "Kryptering" -#: pkg/sosreport/sosreport.jsx:439 +#: pkg/sosreport/sosreport.jsx:448 #, fuzzy #| msgid "Encrypted $0" msgid "Encrypted" msgstr "Kryptert $0" -#: pkg/storaged/utils.js:366 +#: pkg/storaged/utils.js:367 msgid "Encrypted $0" msgstr "Kryptert $0" @@ -3241,25 +3247,25 @@ msgid "Encrypted Stratis pool" msgstr "Kryptert partisjon på $0" -#: pkg/storaged/utils.js:358 +#: pkg/storaged/utils.js:359 msgid "Encrypted logical volume of $0" msgstr "Kryptert logisk volum på $0" -#: pkg/storaged/utils.js:360 +#: pkg/storaged/utils.js:361 msgid "Encrypted partition of $0" msgstr "Kryptert partisjon på $0" -#: pkg/storaged/block/format-dialog.jsx:328 #: pkg/storaged/crypto/encryption.jsx:42 +#: pkg/storaged/block/format-dialog.jsx:330 msgid "Encryption" msgstr "Kryptering" -#: pkg/storaged/block/format-dialog.jsx:371 #: pkg/storaged/crypto/encryption.jsx:189 +#: pkg/storaged/block/format-dialog.jsx:373 msgid "Encryption options" msgstr "Krypteringsalternativer" -#: pkg/sosreport/sosreport.jsx:311 +#: pkg/sosreport/sosreport.jsx:320 #, fuzzy #| msgid "Encryption" msgid "Encryption passphrase" @@ -3291,7 +3297,7 @@ msgid "Enforcing" msgstr "" -#: pkg/packagekit/updates.jsx:1439 +#: pkg/packagekit/updates.jsx:1438 msgid "Enhancement updates available" msgstr "Forbedringsoppdateringer tilgjengelig" @@ -3313,14 +3319,14 @@ msgid "Erasing $target" msgstr "" -#: pkg/packagekit/updates.jsx:381 +#: pkg/packagekit/updates.jsx:380 msgid "Errata" msgstr "" -#: pkg/sosreport/sosreport.jsx:383 pkg/systemd/services.jsx:224 -#: pkg/systemd/service-details.jsx:274 pkg/storaged/storage-controls.jsx:105 -#: pkg/storaged/storage-controls.jsx:160 pkg/storaged/overview/overview.jsx:94 -#: pkg/storaged/multipath.jsx:60 pkg/apps/utils.jsx:81 +#: pkg/storaged/storage-controls.jsx:105 pkg/storaged/storage-controls.jsx:160 +#: pkg/storaged/overview/overview.jsx:94 pkg/storaged/multipath.jsx:60 +#: pkg/apps/utils.jsx:81 pkg/sosreport/sosreport.jsx:392 +#: pkg/systemd/service-details.jsx:274 pkg/systemd/services.jsx:224 msgid "Error" msgstr "Feil" @@ -3332,14 +3338,14 @@ msgid "Error has occurred" msgstr "Det har oppstått en feil" -#: pkg/storaged/crypto/keyslots.jsx:256 +#: pkg/storaged/crypto/keyslots.jsx:290 #, fuzzy #| msgid "PackageKit is not installed" msgid "Error installing $0: PackageKit is not installed" msgstr "PackageKit er ikke installert" -#: pkg/systemd/overview-cards/configurationCard.jsx:176 #: pkg/selinux/setroubleshoot-view.jsx:414 +#: pkg/systemd/overview-cards/configurationCard.jsx:174 msgid "Error message" msgstr "Feilmelding" @@ -3421,8 +3427,8 @@ msgid "Extended information" msgstr "Utvidet informasjon" -#: pkg/storaged/block/format-dialog.jsx:161 #: pkg/storaged/partitions/partition-table.jsx:58 +#: pkg/storaged/block/format-dialog.jsx:161 msgid "Extended partition" msgstr "Utvidet partisjon" @@ -3434,7 +3440,7 @@ msgid "FIPS with further Common Criteria restrictions." msgstr "" -#: pkg/networkmanager/interfaces.js:811 pkg/storaged/mdraid/mdraid-disk.jsx:68 +#: pkg/storaged/mdraid/mdraid-disk.jsx:68 pkg/networkmanager/interfaces.js:811 msgid "Failed" msgstr "Feilet" @@ -3454,8 +3460,8 @@ msgid "Failed to add zone" msgstr "Kunne ikke legge til sone" -#: pkg/users/password-dialogs.js:103 pkg/users/password-dialogs.js:125 -#: pkg/lib/credentials.js:232 +#: pkg/lib/credentials.js:232 pkg/users/password-dialogs.js:103 +#: pkg/users/password-dialogs.js:125 msgid "Failed to change password" msgstr "Kunne ikke endre passord" @@ -3522,7 +3528,7 @@ "timer. Please remove custom overrides to configure automatic updates." msgstr "" -#: pkg/packagekit/updates.jsx:498 +#: pkg/packagekit/updates.jsx:497 msgid "Failed to restart service" msgstr "Kan ikke omstarte tjenesten" @@ -3536,7 +3542,7 @@ msgid "Failed to save settings" msgstr "Kan ikke bruke innstillingene: $0" -#: pkg/systemd/services.jsx:235 pkg/systemd/service-details.jsx:445 +#: pkg/systemd/service-details.jsx:445 pkg/systemd/services.jsx:235 msgid "Failed to start" msgstr "Kunne ikke starte" @@ -3565,7 +3571,7 @@ msgid "Filesystem name" msgstr "Filsystem navn" -#: pkg/storaged/dialog.jsx:1118 +#: pkg/storaged/dialog.jsx:1120 #, fuzzy #| msgid "Creating filesystem on $target" msgid "Filesystem outside the target" @@ -3618,7 +3624,7 @@ msgid "Firmware version" msgstr "Fastvareversjon" -#: pkg/storaged/crypto/keyslots.jsx:403 +#: pkg/storaged/crypto/keyslots.jsx:437 msgid "Fix NBDE support" msgstr "" @@ -3644,15 +3650,8 @@ msgid "Force password change" msgstr "Tving passordendring" -#: pkg/storaged/stratis/blockdev.jsx:48 -#: pkg/storaged/lvm2/physical-volume.jsx:50 -#: pkg/storaged/block/format-dialog.jsx:273 -#: pkg/storaged/block/format-dialog.jsx:283 -#: pkg/storaged/block/unformatted-data.jsx:36 -#: pkg/storaged/block/unrecognized-data.jsx:41 pkg/storaged/swap/swap.jsx:100 -#: pkg/storaged/filesystem/filesystem.jsx:104 -#: pkg/storaged/crypto/locked-encrypted-data.jsx:38 -#: pkg/storaged/mdraid/mdraid-disk.jsx:47 pkg/storaged/btrfs/device.jsx:93 +#: pkg/storaged/block/format-dialog.jsx:275 +#: pkg/storaged/block/format-dialog.jsx:285 pkg/storaged/block/actions.jsx:31 msgid "Format" msgstr "Format" @@ -3660,26 +3659,26 @@ msgid "Format $0" msgstr "Formater $0" -#: pkg/storaged/block/format-dialog.jsx:268 +#: pkg/storaged/block/format-dialog.jsx:270 #, fuzzy #| msgid "Stop and unmount" msgid "Format and mount" msgstr "Stopp og demonter" -#: pkg/storaged/block/format-dialog.jsx:277 +#: pkg/storaged/block/format-dialog.jsx:279 #, fuzzy #| msgid "Stop and unmount" msgid "Format and start" msgstr "Stopp og demonter" -#: pkg/storaged/block/format-dialog.jsx:269 -#: pkg/storaged/block/format-dialog.jsx:278 +#: pkg/storaged/block/format-dialog.jsx:271 +#: pkg/storaged/block/format-dialog.jsx:280 #, fuzzy #| msgid "Format" msgid "Format only" msgstr "Format" -#: pkg/storaged/block/format-dialog.jsx:397 +#: pkg/storaged/block/format-dialog.jsx:399 #, fuzzy #| msgid "Formatting a disk will erase all data on it." msgid "Formatting erases all data on a storage device." @@ -3711,8 +3710,8 @@ msgid "From" msgstr "" -#: pkg/users/accounts-list.js:380 pkg/users/account-create-dialog.js:68 -#: pkg/users/account-details.js:248 +#: pkg/users/account-details.js:248 pkg/users/accounts-list.js:380 +#: pkg/users/account-create-dialog.js:68 msgid "Full name" msgstr "Fullt navn" @@ -3723,11 +3722,11 @@ msgid "Gateway" msgstr "IoT-gateway" -#: pkg/systemd/abrtLog.jsx:296 pkg/networkmanager/network-interface.jsx:316 +#: pkg/networkmanager/network-interface.jsx:316 pkg/systemd/abrtLog.jsx:296 msgid "General" msgstr "Generelt" -#: pkg/systemd/services.jsx:255 pkg/networkmanager/wireguard.jsx:214 +#: pkg/networkmanager/wireguard.jsx:214 pkg/systemd/services.jsx:255 #, fuzzy #| msgid "General" msgid "Generated" @@ -3763,24 +3762,24 @@ msgid "Group name" msgstr "Volumgruppenavn" -#: pkg/users/accounts-list.js:313 pkg/users/accounts-list.js:317 -#: pkg/users/account-details.js:446 +#: pkg/users/account-details.js:446 pkg/users/accounts-list.js:313 +#: pkg/users/accounts-list.js:317 #, fuzzy #| msgid "Group" msgid "Groups" msgstr "Gruppe" -#: pkg/storaged/lvm2/vdo-pool.jsx:48 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:104 -#: pkg/storaged/lvm2/block-logical-volume.jsx:211 -#: pkg/storaged/block/resize.jsx:521 pkg/storaged/legacy-vdo/legacy-vdo.jsx:259 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:315 #: pkg/storaged/partitions/partition.jsx:107 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:259 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:315 pkg/storaged/block/resize.jsx:521 +#: pkg/storaged/lvm2/block-logical-volume.jsx:211 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:104 +#: pkg/storaged/lvm2/vdo-pool.jsx:48 msgid "Grow" msgstr "" -#: pkg/storaged/lvm2/block-logical-volume.jsx:281 #: pkg/storaged/partitions/partition.jsx:221 +#: pkg/storaged/lvm2/block-logical-volume.jsx:281 msgid "Grow content" msgstr "" @@ -3837,7 +3836,7 @@ msgstr "" #: pkg/systemd/overview-cards/tuned-dialog.jsx:295 -#: pkg/systemd/overview-cards/cryptoPolicies.jsx:168 pkg/shell/topnav.jsx:255 +#: pkg/systemd/overview-cards/cryptoPolicies.jsx:168 pkg/shell/topnav.jsx:274 msgid "Help" msgstr "Hjelp" @@ -3865,7 +3864,7 @@ msgid "History package count" msgstr "" -#: pkg/users/account-create-dialog.js:84 pkg/users/account-details.js:326 +#: pkg/users/account-details.js:326 pkg/users/account-create-dialog.js:84 #, fuzzy #| msgid "Directory" msgid "Home directory" @@ -3875,11 +3874,11 @@ msgid "Host" msgstr "Vert" -#: pkg/lib/cockpit.js:3852 +#: pkg/lib/cockpit.js:3848 msgid "Host key is incorrect" msgstr "Vertsnøkkelen er feil" -#: pkg/systemd/overview-cards/configurationCard.jsx:67 +#: pkg/systemd/overview-cards/configurationCard.jsx:66 msgid "Hostname" msgstr "Vertsnavn" @@ -3899,10 +3898,10 @@ msgid "How to check" msgstr "" -#: pkg/systemd/hwinfo.jsx:291 pkg/networkmanager/firewall.jsx:696 -#: pkg/storaged/pages.jsx:714 pkg/storaged/btrfs/subvolume.jsx:414 -#: pkg/users/group-create-dialog.js:47 pkg/users/accounts-list.js:230 -#: pkg/users/accounts-list.js:381 +#: pkg/storaged/btrfs/subvolume.jsx:414 pkg/storaged/pages.jsx:714 +#: pkg/networkmanager/firewall.jsx:696 pkg/systemd/hwinfo.jsx:291 +#: pkg/users/accounts-list.js:230 pkg/users/accounts-list.js:381 +#: pkg/users/group-create-dialog.js:47 msgid "ID" msgstr "ID" @@ -3981,8 +3980,8 @@ "Hvis fingeravtrykket stemmer overens, klikker du på \"Godta nøkkel og koble " "til\". Ellers må du ikke koble til og kontakte administratoren din." -#: pkg/networkmanager/ip-settings.jsx:44 pkg/packagekit/updates.jsx:686 -#: pkg/packagekit/updates.jsx:763 +#: pkg/networkmanager/ip-settings.jsx:44 pkg/packagekit/updates.jsx:685 +#: pkg/packagekit/updates.jsx:762 msgid "Ignore" msgstr "Ignorer" @@ -4013,9 +4012,9 @@ msgid "In sync" msgstr "I synk" -#: pkg/networkmanager/network-interface.jsx:256 #: pkg/networkmanager/interfaces.js:793 pkg/networkmanager/interfaces.js:1354 #: pkg/networkmanager/interfaces.js:1361 +#: pkg/networkmanager/network-interface.jsx:256 msgid "Inactive" msgstr "Inaktiv" @@ -4052,7 +4051,7 @@ msgid "Indirect" msgstr "direkte" -#: pkg/packagekit/updates.jsx:755 +#: pkg/packagekit/updates.jsx:754 msgid "Info" msgstr "Info" @@ -4078,7 +4077,7 @@ msgid "Initializing erases all data on a disk." msgstr "Formatering av en disk vil slette alle dataene på den." -#: pkg/packagekit/updates.jsx:584 +#: pkg/packagekit/updates.jsx:583 msgid "Initializing..." msgstr "Initialiserer…" @@ -4086,9 +4085,9 @@ msgid "Insights: " msgstr "Innsikt: " -#: pkg/packagekit/kpatch.jsx:250 pkg/apps/application-list.jsx:206 -#: pkg/apps/application.jsx:52 +#: pkg/apps/application.jsx:52 pkg/apps/application-list.jsx:206 #: pkg/lib/cockpit-components-install-dialog.jsx:126 +#: pkg/packagekit/kpatch.jsx:250 msgid "Install" msgstr "Installer" @@ -4102,7 +4101,7 @@ msgid "Install Stratis support" msgstr "Installer NFS-støtte" -#: pkg/packagekit/updates.jsx:1416 +#: pkg/packagekit/updates.jsx:1415 msgid "Install all updates" msgstr "Installer alle oppdateringer" @@ -4116,7 +4115,7 @@ msgid "Install cockpit-pcp" msgstr "Installer cockpit-pcp" -#: pkg/packagekit/updates.jsx:1429 +#: pkg/packagekit/updates.jsx:1428 #, fuzzy #| msgid "Install all updates" msgid "Install kpatch updates" @@ -4128,7 +4127,7 @@ msgid "Install realmd support" msgstr "Installer NFS-støtte" -#: pkg/packagekit/updates.jsx:1415 pkg/packagekit/updates.jsx:1422 +#: pkg/packagekit/updates.jsx:1414 pkg/packagekit/updates.jsx:1421 msgid "Install security updates" msgstr "Installer sikkerhetsoppdateringer" @@ -4154,17 +4153,17 @@ msgid "Installed" msgstr "Installert" -#: pkg/packagekit/updates.jsx:105 pkg/apps/application.jsx:40 +#: pkg/apps/application.jsx:40 pkg/packagekit/updates.jsx:105 msgid "Installing" msgstr "Installerer" -#: pkg/storaged/crypto/keyslots.jsx:224 +#: pkg/storaged/crypto/keyslots.jsx:258 #: pkg/lib/cockpit-components-install-dialog.jsx:193 msgid "Installing $0" msgstr "Installerer $0" +#: pkg/storaged/crypto/keyslots.jsx:274 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:39 -#: pkg/storaged/crypto/keyslots.jsx:240 #, fuzzy #| msgid "Installing $0" msgid "Installing $0 would remove $1." @@ -4176,7 +4175,7 @@ msgid "Installing packages" msgstr "Installerer" -#: pkg/metrics/metrics.jsx:814 pkg/networkmanager/firewall.jsx:196 +#: pkg/networkmanager/firewall.jsx:196 pkg/metrics/metrics.jsx:814 #, fuzzy #| msgid "Interface" msgid "Interface" @@ -4184,18 +4183,18 @@ msgstr[0] "Grensesnitt" msgstr[1] "Grensesnitt" -#: pkg/networkmanager/network-interface-members.jsx:197 -#: pkg/networkmanager/network-interface-members.jsx:199 +#: pkg/networkmanager/network-interface-members.jsx:202 +#: pkg/networkmanager/network-interface-members.jsx:204 msgid "Interface members" msgstr "Grensesnittmedlemmer" -#: pkg/networkmanager/network-main.jsx:180 -#: pkg/networkmanager/network-interface-members.jsx:203 -#: pkg/networkmanager/bond.jsx:165 pkg/networkmanager/firewall.jsx:859 +#: pkg/networkmanager/network-main.jsx:180 pkg/networkmanager/firewall.jsx:859 +#: pkg/networkmanager/bond.jsx:165 +#: pkg/networkmanager/network-interface-members.jsx:208 msgid "Interfaces" msgstr "Grensesnitt" -#: pkg/lib/cockpit.js:3854 +#: pkg/lib/cockpit.js:3850 msgid "Internal error" msgstr "Intern feil" @@ -4257,8 +4256,8 @@ msgid "Invalid range" msgstr "Ugyldig område" -#: pkg/packagekit/autoupdates.jsx:323 #: pkg/lib/cockpit-components-shutdown.jsx:115 pkg/lib/serverTime.js:690 +#: pkg/packagekit/autoupdates.jsx:323 msgid "Invalid time format" msgstr "Ugyldig tidsformat" @@ -4391,29 +4390,29 @@ msgid "Key password" msgstr "Nøkkel-passord" -#: pkg/storaged/crypto/keyslots.jsx:761 +#: pkg/storaged/crypto/keyslots.jsx:795 msgid "Key slots with unknown types can not be edited here" msgstr "Nøkkel-slots med ukjente typer kan ikke redigeres her" -#: pkg/storaged/crypto/keyslots.jsx:424 +#: pkg/storaged/crypto/keyslots.jsx:458 msgid "Key source" msgstr "Nøkkelkilde" -#: pkg/storaged/crypto/keyslots.jsx:766 pkg/storaged/crypto/keyslots.jsx:789 +#: pkg/storaged/crypto/keyslots.jsx:800 pkg/storaged/crypto/keyslots.jsx:823 msgid "Keys" msgstr "Nøkler" -#: pkg/storaged/stratis/stopped-pool.jsx:134 pkg/storaged/stratis/pool.jsx:544 -#: pkg/storaged/crypto/keyslots.jsx:755 +#: pkg/storaged/crypto/keyslots.jsx:789 pkg/storaged/stratis/pool.jsx:544 +#: pkg/storaged/stratis/stopped-pool.jsx:134 msgid "Keyserver" msgstr "Nøkkelserver" -#: pkg/storaged/stratis/create-dialog.jsx:102 pkg/storaged/stratis/pool.jsx:456 -#: pkg/storaged/crypto/keyslots.jsx:451 pkg/storaged/crypto/keyslots.jsx:509 +#: pkg/storaged/crypto/keyslots.jsx:485 pkg/storaged/crypto/keyslots.jsx:543 +#: pkg/storaged/stratis/pool.jsx:456 pkg/storaged/stratis/create-dialog.jsx:102 msgid "Keyserver address" msgstr "Nøkkelserver adresse" -#: pkg/storaged/stratis/pool.jsx:496 pkg/storaged/crypto/keyslots.jsx:635 +#: pkg/storaged/crypto/keyslots.jsx:669 pkg/storaged/stratis/pool.jsx:496 msgid "Keyserver removal may prevent unlocking $0." msgstr "Fjerning av nøkkelserver kan forhindre opplåsing av $0." @@ -4462,7 +4461,7 @@ msgid "LVM2 volume group" msgstr "LVM volumgruppe" -#: pkg/storaged/utils.js:340 +#: pkg/storaged/utils.js:341 #, fuzzy #| msgid "LVM volume group" msgid "LVM2 volume group $0" @@ -4496,7 +4495,7 @@ msgid "Last cannot be removed" msgstr "Den siste nøkkel-sloten kan ikke fjernes" -#: pkg/packagekit/updates.jsx:785 +#: pkg/packagekit/updates.jsx:784 msgid "Last checked: $0" msgstr "Sist sjekket: $0" @@ -4527,11 +4526,11 @@ msgid "Layout" msgstr "" +#: pkg/networkmanager/bond.jsx:152 pkg/lib/cockpit-components-dialog.jsx:234 +#: pkg/lib/cockpit-components-dialog.jsx:241 #: pkg/systemd/overview-cards/tuned-dialog.jsx:291 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:119 #: pkg/systemd/overview-cards/cryptoPolicies.jsx:164 -#: pkg/networkmanager/bond.jsx:152 pkg/lib/cockpit-components-dialog.jsx:234 -#: pkg/lib/cockpit-components-dialog.jsx:241 msgid "Learn more" msgstr "Lær mer" @@ -4547,7 +4546,7 @@ msgid "Leave domain" msgstr "Forlat domene" -#: pkg/sosreport/sosreport.jsx:319 +#: pkg/sosreport/sosreport.jsx:328 #, fuzzy #| msgid "Using LUKS encryption" msgid "Leave empty to skip encryption" @@ -4559,7 +4558,7 @@ msgid "Licensed under GNU LGPL version 2.1" msgstr "GNU LGPL versjon 2.1" -#: pkg/systemd/terminal.jsx:175 pkg/shell/topnav.jsx:190 +#: pkg/systemd/terminal.jsx:175 pkg/shell/topnav.jsx:200 msgid "Light" msgstr "Lys" @@ -4686,11 +4685,11 @@ msgid "Loading earlier entries" msgstr "Last tidligere oppføringer" -#: pkg/systemd/overview-cards/configurationCard.jsx:179 +#: pkg/systemd/overview-cards/configurationCard.jsx:177 msgid "Loading keys..." msgstr "Laster nøkler..." -#: pkg/systemd/overview-cards/configurationCard.jsx:175 +#: pkg/systemd/overview-cards/configurationCard.jsx:173 msgid "Loading of SSH keys failed" msgstr "Lasting av SSH-nøkler feilet" @@ -4716,12 +4715,12 @@ msgid "Loading unit failed" msgstr "Innlogging feilet" +#: pkg/storaged/storaged.jsx:66 pkg/kdump/kdump-view.jsx:438 #: pkg/systemd/service.jsx:132 pkg/systemd/logDetails.jsx:173 -#: pkg/systemd/services.jsx:683 pkg/systemd/logsJournal.jsx:268 -#: pkg/metrics/metrics.jsx:1978 pkg/kdump/kdump-view.jsx:438 -#: pkg/storaged/storaged.jsx:66 pkg/users/accounts-list.js:318 -#: pkg/users/accounts-list.js:339 pkg/users/accounts-list.js:452 -#: pkg/users/account-details.js:176 +#: pkg/systemd/logsJournal.jsx:268 pkg/systemd/services.jsx:683 +#: pkg/metrics/metrics.jsx:1978 pkg/users/account-details.js:176 +#: pkg/users/accounts-list.js:318 pkg/users/accounts-list.js:339 +#: pkg/users/accounts-list.js:452 msgid "Loading..." msgstr "Laster..." @@ -4749,12 +4748,12 @@ msgid "Local, $0" msgstr "lokalt i $0" -#: pkg/kdump/kdump-view.jsx:243 pkg/storaged/pages.jsx:716 -#: pkg/storaged/dialog.jsx:1138 pkg/storaged/dialog.jsx:1243 +#: pkg/storaged/dialog.jsx:1140 pkg/storaged/dialog.jsx:1245 +#: pkg/storaged/pages.jsx:716 pkg/kdump/kdump-view.jsx:243 msgid "Location" msgstr "Plassering" -#: pkg/storaged/crypto/actions.jsx:75 pkg/users/lock-account-dialog.js:36 +#: pkg/storaged/crypto/actions.jsx:73 pkg/users/lock-account-dialog.js:36 msgid "Lock" msgstr "Lås" @@ -4768,7 +4767,7 @@ msgid "Lock account" msgstr "Lås konto" -#: pkg/storaged/crypto/locked-encrypted-data.jsx:31 +#: pkg/storaged/crypto/locked-encrypted-data.jsx:30 #, fuzzy #| msgctxt "storage-id-desc" #| msgid "Encrypted data" @@ -4779,8 +4778,8 @@ msgid "Locking $target" msgstr "Låser $target" -#: pkg/static/login.html:139 pkg/static/login.js:668 -#: pkg/shell/hosts_dialog.jsx:764 pkg/shell/failures.jsx:75 +#: pkg/static/login.html:139 pkg/shell/hosts_dialog.jsx:764 +#: pkg/shell/failures.jsx:73 pkg/static/login.js:668 msgid "Log in" msgstr "Logg inn" @@ -4798,7 +4797,7 @@ msgid "Log messages" msgstr "Logg meldinger" -#: pkg/metrics/metrics.jsx:1806 pkg/shell/topnav.jsx:222 +#: pkg/shell/topnav.jsx:233 pkg/metrics/metrics.jsx:1806 #: pkg/users/logout-account-dialog.js:36 msgid "Log out" msgstr "Logg ut" @@ -4809,7 +4808,7 @@ msgid "Log user out" msgstr "Logg ut" -#: pkg/users/accounts-list.js:161 pkg/users/account-details.js:212 +#: pkg/users/account-details.js:212 pkg/users/accounts-list.js:161 msgid "Logged in" msgstr "Logget inn" @@ -4824,20 +4823,20 @@ msgid "Logical Volume Manager partition" msgstr "Logisk volum (øyeblikksbilde)" -#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:213 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:249 +#: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:213 msgid "Logical size" msgstr "Logisk størrelse" -#: pkg/storaged/utils.js:290 +#: pkg/storaged/utils.js:291 msgid "Logical volume" msgstr "Logisk volum" -#: pkg/storaged/utils.js:288 +#: pkg/storaged/utils.js:289 msgid "Logical volume (snapshot)" msgstr "Logisk volum (øyeblikksbilde)" -#: pkg/storaged/utils.js:362 +#: pkg/storaged/utils.js:363 msgid "Logical volume of $0" msgstr "Logisk volum på $0" @@ -4851,7 +4850,7 @@ msgid "Login again" msgstr "Logg inn igjen" -#: pkg/lib/cockpit.js:3844 +#: pkg/lib/cockpit.js:3840 msgid "Login failed" msgstr "Innlogging feilet" @@ -4902,7 +4901,7 @@ msgid "MDRAID device" msgstr "RAID-enhet" -#: pkg/storaged/utils.js:334 +#: pkg/storaged/utils.js:335 #, fuzzy #| msgid "RAID device $0" msgid "MDRAID device $0" @@ -4948,7 +4947,7 @@ msgid "Machine ID" msgstr "Maskin ID" -#: pkg/systemd/overview-cards/configurationCard.jsx:196 +#: pkg/systemd/overview-cards/configurationCard.jsx:194 msgid "Machine SSH key fingerprints" msgstr "Fingeravtrykk for maskinens SSH-nøkler" @@ -5054,8 +5053,8 @@ msgid "Mask service" msgstr "Masker tjeneste" -#: pkg/systemd/services.jsx:250 pkg/systemd/services.jsx:251 -#: pkg/systemd/service-details.jsx:426 +#: pkg/systemd/service-details.jsx:426 pkg/systemd/services.jsx:250 +#: pkg/systemd/services.jsx:251 msgid "Masked" msgstr "Maskert" @@ -5080,10 +5079,11 @@ msgid "Media drive" msgstr "Optisk disk" -#: pkg/systemd/overview-cards/usageCard.jsx:144 pkg/systemd/hwinfo.jsx:290 -#: pkg/systemd/hwinfo.jsx:334 pkg/systemd/service-details.jsx:659 -#: pkg/metrics/metrics.jsx:123 pkg/metrics/metrics.jsx:880 -#: pkg/metrics/metrics.jsx:1572 pkg/metrics/metrics.jsx:1950 +#: pkg/systemd/hwinfo.jsx:290 pkg/systemd/hwinfo.jsx:334 +#: pkg/systemd/overview-cards/usageCard.jsx:144 +#: pkg/systemd/service-details.jsx:659 pkg/metrics/metrics.jsx:123 +#: pkg/metrics/metrics.jsx:880 pkg/metrics/metrics.jsx:1572 +#: pkg/metrics/metrics.jsx:1950 msgid "Memory" msgstr "Minne" @@ -5109,12 +5109,12 @@ msgid "Message to logged in users" msgstr "Melding til innloggede brukere" -#: pkg/shell/failures.jsx:43 +#: pkg/shell/failures.jsx:42 msgid "Messages related to the failure might be found in the journal:" msgstr "Meldinger relatert til feilen kan finnes i journalen:" -#: pkg/storaged/lvm2/vdo-pool.jsx:83 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:145 +#: pkg/storaged/lvm2/vdo-pool.jsx:83 msgid "Metadata used" msgstr "Metadata brukt" @@ -5177,8 +5177,8 @@ msgid "Mode" msgstr "Modus" +#: pkg/storaged/drive/drive.jsx:121 pkg/systemd/hwinfo.jsx:277 #: pkg/systemd/overview-cards/systemInformationCard.jsx:111 -#: pkg/systemd/hwinfo.jsx:277 pkg/storaged/drive/drive.jsx:121 msgid "Model" msgstr "Modell" @@ -5203,14 +5203,14 @@ msgid "Monthly" msgstr "Månedlig" -#: pkg/packagekit/updates.jsx:941 +#: pkg/packagekit/updates.jsx:940 msgid "More info..." msgstr "Mer info..." -#: pkg/storaged/stratis/filesystem.jsx:173 pkg/storaged/nfs/nfs.jsx:310 -#: pkg/storaged/filesystem/mounting-dialog.jsx:338 +#: pkg/storaged/nfs/nfs.jsx:310 pkg/storaged/btrfs/subvolume.jsx:343 +#: pkg/storaged/stratis/filesystem.jsx:173 +#: pkg/storaged/filesystem/mounting-dialog.jsx:356 #: pkg/storaged/filesystem/filesystem.jsx:103 -#: pkg/storaged/btrfs/subvolume.jsx:343 msgid "Mount" msgstr "Montér" @@ -5220,7 +5220,7 @@ msgid "Mount Point" msgstr "Monteringspunkt" -#: pkg/storaged/filesystem/mounting-dialog.jsx:134 +#: pkg/storaged/filesystem/mounting-dialog.jsx:137 msgid "Mount after network becomes available, ignore failure" msgstr "" @@ -5237,15 +5237,15 @@ msgid "Mount automatically on $0 on boot" msgstr "Monter automatisk på $0 ved oppstart" -#: pkg/storaged/filesystem/mounting-dialog.jsx:126 +#: pkg/storaged/filesystem/mounting-dialog.jsx:129 msgid "Mount before services start" msgstr "" -#: pkg/storaged/filesystem/mounting-dialog.jsx:334 +#: pkg/storaged/filesystem/mounting-dialog.jsx:352 msgid "Mount configuration" msgstr "Monterings-konfigurasjon" -#: pkg/storaged/filesystem/mounting-dialog.jsx:332 +#: pkg/storaged/filesystem/mounting-dialog.jsx:350 msgid "Mount filesystem" msgstr "Monter filsystem" @@ -5261,12 +5261,12 @@ msgid "Mount options" msgstr "Innstillinger for montering" +#: pkg/storaged/nfs/nfs.jsx:329 pkg/storaged/btrfs/subvolume.jsx:415 +#: pkg/storaged/block/format-dialog.jsx:299 pkg/storaged/stratis/pool.jsx:103 #: pkg/storaged/stratis/filesystem.jsx:90 -#: pkg/storaged/stratis/filesystem.jsx:222 pkg/storaged/stratis/pool.jsx:103 -#: pkg/storaged/block/format-dialog.jsx:297 pkg/storaged/nfs/nfs.jsx:329 -#: pkg/storaged/filesystem/mounting-dialog.jsx:307 +#: pkg/storaged/stratis/filesystem.jsx:222 +#: pkg/storaged/filesystem/mounting-dialog.jsx:326 #: pkg/storaged/filesystem/filesystem.jsx:147 -#: pkg/storaged/btrfs/subvolume.jsx:415 msgid "Mount point" msgstr "Monteringspunkt" @@ -5286,11 +5286,11 @@ msgid "Mount point must start with \"/\"." msgstr "Monteringspunktet må starte med \"/\"." -#: pkg/storaged/nfs/nfs.jsx:172 pkg/storaged/filesystem/mounting-dialog.jsx:60 +#: pkg/storaged/nfs/nfs.jsx:172 pkg/storaged/filesystem/mounting-dialog.jsx:61 msgid "Mount read only" msgstr "Monter skrivebeskyttet" -#: pkg/storaged/filesystem/mounting-dialog.jsx:130 +#: pkg/storaged/filesystem/mounting-dialog.jsx:133 msgid "Mount without waiting, ignore failure" msgstr "" @@ -5298,15 +5298,15 @@ msgid "Mounting $target" msgstr "Monterer $target" -#: pkg/storaged/filesystem/mounting-dialog.jsx:71 +#: pkg/storaged/filesystem/mounting-dialog.jsx:74 msgid "Mounts before services start" msgstr "" -#: pkg/storaged/filesystem/mounting-dialog.jsx:85 +#: pkg/storaged/filesystem/mounting-dialog.jsx:88 msgid "Mounts in parallel with services" msgstr "" -#: pkg/storaged/filesystem/mounting-dialog.jsx:96 +#: pkg/storaged/filesystem/mounting-dialog.jsx:99 msgid "Mounts in parallel with services, but after network is available" msgstr "" @@ -5337,35 +5337,34 @@ msgid "NTP server" msgstr "NTP Server" -#: pkg/systemd/timer-dialog.jsx:157 pkg/systemd/hwinfo.jsx:86 -#: pkg/networkmanager/network-main.jsx:185 -#: pkg/networkmanager/network-main.jsx:200 -#: pkg/networkmanager/dialogs-common.jsx:142 -#: pkg/storaged/stratis/create-dialog.jsx:50 -#: pkg/storaged/stratis/filesystem.jsx:85 -#: pkg/storaged/stratis/filesystem.jsx:193 -#: pkg/storaged/stratis/filesystem.jsx:217 pkg/storaged/stratis/pool.jsx:92 -#: pkg/storaged/stratis/pool.jsx:166 pkg/storaged/stratis/pool.jsx:514 -#: pkg/storaged/lvm2/vdo-pool.jsx:78 pkg/storaged/lvm2/create-dialog.jsx:47 +#: pkg/storaged/partitions/partition.jsx:227 pkg/storaged/btrfs/volume.jsx:89 +#: pkg/storaged/btrfs/subvolume.jsx:148 pkg/storaged/btrfs/subvolume.jsx:413 +#: pkg/storaged/block/format-dialog.jsx:293 +#: pkg/storaged/iscsi/create-dialog.jsx:111 +#: pkg/storaged/iscsi/create-dialog.jsx:168 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:166 -#: pkg/storaged/lvm2/volume-group.jsx:64 pkg/storaged/lvm2/volume-group.jsx:116 -#: pkg/storaged/lvm2/volume-group.jsx:380 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:44 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:138 #: pkg/storaged/lvm2/block-logical-volume.jsx:49 #: pkg/storaged/lvm2/block-logical-volume.jsx:238 #: pkg/storaged/lvm2/block-logical-volume.jsx:286 -#: pkg/storaged/block/format-dialog.jsx:291 -#: pkg/storaged/iscsi/create-dialog.jsx:111 -#: pkg/storaged/iscsi/create-dialog.jsx:168 +#: pkg/storaged/lvm2/create-dialog.jsx:47 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:44 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:138 +#: pkg/storaged/lvm2/volume-group.jsx:64 pkg/storaged/lvm2/volume-group.jsx:116 +#: pkg/storaged/lvm2/volume-group.jsx:380 pkg/storaged/lvm2/vdo-pool.jsx:78 +#: pkg/storaged/stratis/pool.jsx:92 pkg/storaged/stratis/pool.jsx:166 +#: pkg/storaged/stratis/pool.jsx:514 pkg/storaged/stratis/create-dialog.jsx:50 +#: pkg/storaged/stratis/filesystem.jsx:85 +#: pkg/storaged/stratis/filesystem.jsx:193 +#: pkg/storaged/stratis/filesystem.jsx:217 #: pkg/storaged/filesystem/filesystem.jsx:119 #: pkg/storaged/filesystem/filesystem.jsx:141 -#: pkg/storaged/partitions/partition.jsx:227 -#: pkg/storaged/mdraid/create-dialog.jsx:47 pkg/storaged/mdraid/mdraid.jsx:285 -#: pkg/storaged/btrfs/volume.jsx:89 pkg/storaged/btrfs/subvolume.jsx:148 -#: pkg/storaged/btrfs/subvolume.jsx:413 pkg/shell/credentials.jsx:101 -#: pkg/packagekit/updates.jsx:448 pkg/users/authorized-keys-panel.js:127 -#: pkg/users/group-create-dialog.js:39 +#: pkg/storaged/mdraid/mdraid.jsx:285 pkg/storaged/mdraid/create-dialog.jsx:47 +#: pkg/networkmanager/network-main.jsx:185 +#: pkg/networkmanager/network-main.jsx:200 +#: pkg/networkmanager/dialogs-common.jsx:142 pkg/systemd/timer-dialog.jsx:157 +#: pkg/systemd/hwinfo.jsx:86 pkg/shell/credentials.jsx:101 +#: pkg/packagekit/updates.jsx:447 pkg/users/group-create-dialog.js:39 +#: pkg/users/authorized-keys-panel.js:127 msgid "Name" msgstr "Navn" @@ -5373,19 +5372,19 @@ msgid "Name can not be empty." msgstr "Navnet kan ikke være tomt." -#: pkg/storaged/utils.js:212 pkg/storaged/btrfs/utils.jsx:85 +#: pkg/storaged/btrfs/utils.jsx:85 pkg/storaged/utils.js:213 msgid "Name cannot be empty." msgstr "Navnet kan ikke være tomt." -#: pkg/storaged/utils.js:241 +#: pkg/storaged/utils.js:242 msgid "Name cannot be longer than $0 bytes" msgstr "Navnet kan ikke være lengre enn $0 byte" -#: pkg/storaged/utils.js:239 +#: pkg/storaged/utils.js:240 msgid "Name cannot be longer than $0 characters" msgstr "Navnet kan ikke være lengre enn $0 tegn" -#: pkg/storaged/utils.js:214 +#: pkg/storaged/utils.js:215 msgid "Name cannot be longer than 127 characters." msgstr "Navnet kan ikke være lengre enn 127 tegn." @@ -5395,7 +5394,7 @@ msgid "Name cannot be longer than 255 characters." msgstr "Navnet kan ikke være lengre enn 127 tegn." -#: pkg/storaged/utils.js:218 +#: pkg/storaged/utils.js:219 msgid "Name cannot contain the character '$0'." msgstr "Navnet kan ikke inneholde tegnet '$0'." @@ -5405,7 +5404,7 @@ msgid "Name cannot contain the character '/'." msgstr "Navnet kan ikke inneholde tegnet '$0'." -#: pkg/storaged/utils.js:220 +#: pkg/storaged/utils.js:221 msgid "Name cannot contain whitespace." msgstr "Navnet kan ikke inneholde mellomrom." @@ -5456,9 +5455,9 @@ msgid "Networked storage" msgstr "Nettverksbruk" -#: pkg/networkmanager/index.html:23 +#: pkg/networkmanager/index.html:23 pkg/networkmanager/firewall.jsx:1053 #: pkg/networkmanager/network-interface.jsx:705 -#: pkg/networkmanager/firewall.jsx:1053 pkg/networkmanager/manifest.json:0 +#: pkg/networkmanager/manifest.json:0 #: src/appstream/org.cockpit-project.cockpit-networkmanager.metainfo.xml.in:5 msgid "Networking" msgstr "Nettverk" @@ -5467,13 +5466,13 @@ msgid "Never" msgstr "Aldri" -#: pkg/users/expiration-dialogs.js:42 pkg/users/account-details.js:75 +#: pkg/users/account-details.js:75 pkg/users/expiration-dialogs.js:42 #, fuzzy #| msgid "Never lock account" msgid "Never expire account" msgstr "Lås aldri kontoen" -#: pkg/users/expiration-dialogs.js:154 pkg/users/account-details.js:67 +#: pkg/users/account-details.js:67 pkg/users/expiration-dialogs.js:154 msgid "Never expire password" msgstr "Passordet utløper aldri" @@ -5507,8 +5506,8 @@ msgid "New name" msgstr "Omdøp" -#: pkg/storaged/stratis/pool.jsx:407 pkg/storaged/crypto/keyslots.jsx:435 -#: pkg/storaged/crypto/keyslots.jsx:485 +#: pkg/storaged/crypto/keyslots.jsx:469 pkg/storaged/crypto/keyslots.jsx:519 +#: pkg/storaged/stratis/pool.jsx:407 msgid "New passphrase" msgstr "Ny passfrase" @@ -5516,7 +5515,7 @@ msgid "New password" msgstr "Nytt passord" -#: pkg/users/password-dialogs.js:86 pkg/lib/credentials.js:241 +#: pkg/lib/credentials.js:241 pkg/users/password-dialogs.js:86 msgid "New password was not accepted" msgstr "Nytt passord ble ikke godtatt" @@ -5524,7 +5523,7 @@ msgid "Next" msgstr "Neste" -#: pkg/systemd/reporting.jsx:290 pkg/networkmanager/network-interface.jsx:241 +#: pkg/networkmanager/network-interface.jsx:241 pkg/systemd/reporting.jsx:290 msgid "No" msgstr "Nei" @@ -5544,7 +5543,7 @@ msgid "No applications installed or available." msgstr "Ingen applikasjoner installert eller tilgjengelig" -#: pkg/storaged/crypto/keyslots.jsx:778 +#: pkg/storaged/crypto/keyslots.jsx:812 msgid "No available slots" msgstr "Ingen tilgjengelige slots" @@ -5554,7 +5553,7 @@ msgid "No block devices are available." msgstr "Ingen disker er tilgjengelige." -#: pkg/storaged/stratis/stopped-pool.jsx:140 pkg/storaged/stratis/pool.jsx:565 +#: pkg/storaged/stratis/pool.jsx:565 pkg/storaged/stratis/stopped-pool.jsx:140 #, fuzzy #| msgid "No boot device found" msgid "No block devices found" @@ -5594,9 +5593,9 @@ msgid "No devices found" msgstr "Ingen oppstartsenhet funnet" -#: pkg/storaged/stratis/pool.jsx:208 pkg/storaged/lvm2/create-dialog.jsx:54 -#: pkg/storaged/lvm2/volume-group.jsx:200 -#: pkg/storaged/mdraid/create-dialog.jsx:101 pkg/storaged/mdraid/mdraid.jsx:158 +#: pkg/storaged/lvm2/create-dialog.jsx:54 +#: pkg/storaged/lvm2/volume-group.jsx:200 pkg/storaged/stratis/pool.jsx:208 +#: pkg/storaged/mdraid/mdraid.jsx:158 pkg/storaged/mdraid/create-dialog.jsx:101 msgid "No disks are available." msgstr "Ingen disker er tilgjengelige." @@ -5632,7 +5631,7 @@ msgid "No filesystems" msgstr "Ingen filsystem" -#: pkg/storaged/crypto/keyslots.jsx:783 +#: pkg/storaged/crypto/keyslots.jsx:817 msgid "No free key slots" msgstr "Ingen ledige nøkkelslots" @@ -5652,7 +5651,7 @@ msgid "No group name specified" msgstr "Ingen virkelige navn angitt" -#: pkg/systemd/overview-cards/configurationCard.jsx:181 +#: pkg/systemd/overview-cards/configurationCard.jsx:179 msgid "No host keys found." msgstr "Ingen vertsnøkler funnet." @@ -5660,7 +5659,7 @@ msgid "No installation package found for this application." msgstr "Ingen installasjonspakke funnet for dette programmet." -#: pkg/storaged/crypto/keyslots.jsx:700 +#: pkg/storaged/crypto/keyslots.jsx:734 msgid "No keys added" msgstr "Ingen nøkler lagt til" @@ -5672,8 +5671,8 @@ msgid "No log entries" msgstr "Ingen loggoppføringer" -#: pkg/storaged/lvm2/volume-group.jsx:297 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:126 +#: pkg/storaged/lvm2/volume-group.jsx:297 msgid "No logical volumes" msgstr "Ingen logiske volumer" @@ -5737,8 +5736,8 @@ msgid "No storage found" msgstr "Ingen lagring" -#: pkg/storaged/btrfs/volume.jsx:157 pkg/storaged/btrfs/filesystem.jsx:86 -#: pkg/storaged/btrfs/subvolume.jsx:423 +#: pkg/storaged/btrfs/volume.jsx:157 pkg/storaged/btrfs/subvolume.jsx:423 +#: pkg/storaged/btrfs/filesystem.jsx:86 #, fuzzy #| msgid "No logical volumes" msgid "No subvolumes" @@ -5753,7 +5752,7 @@ msgid "No system modifications" msgstr "Ingen systemendringer" -#: pkg/sosreport/sosreport.jsx:488 +#: pkg/sosreport/sosreport.jsx:497 #, fuzzy #| msgid "No system modifications" msgid "No system reports." @@ -5767,8 +5766,8 @@ msgid "No user name specified" msgstr "Ingen brukernavn spesifisert" -#: pkg/systemd/overview-cards/tuned-dialog.jsx:232 #: pkg/networkmanager/firewall.jsx:854 pkg/kdump/kdump-view.jsx:488 +#: pkg/systemd/overview-cards/tuned-dialog.jsx:232 msgid "None" msgstr "Ingen" @@ -5806,8 +5805,8 @@ msgid "Not enough free space" msgstr "Ikke nok plass til å vokse." -#: pkg/storaged/stratis/filesystem.jsx:75 pkg/storaged/stratis/pool.jsx:306 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:95 +#: pkg/storaged/stratis/pool.jsx:306 pkg/storaged/stratis/filesystem.jsx:75 #, fuzzy #| msgid "Not enough space to grow." msgid "Not enough space" @@ -5819,8 +5818,8 @@ msgid "Not enough space to grow" msgstr "Ikke nok plass til å vokse." -#: pkg/systemd/services.jsx:222 pkg/storaged/pages.jsx:278 -#: pkg/storaged/pages.jsx:283 +#: pkg/storaged/pages.jsx:278 pkg/storaged/pages.jsx:283 +#: pkg/systemd/services.jsx:222 msgid "Not found" msgstr "Ikke funnet" @@ -5842,7 +5841,7 @@ msgid "Not permitted to configure realms" msgstr "Kunne ikke klone VM $0" -#: pkg/lib/cockpit.js:3842 +#: pkg/lib/cockpit.js:3838 msgid "Not permitted to perform this action." msgstr "Ikke tillatt å utføre denne handlingen." @@ -5850,13 +5849,13 @@ msgid "Not ready" msgstr "Ikke klar" -#: pkg/packagekit/updates.jsx:1366 +#: pkg/packagekit/updates.jsx:1365 msgid "Not registered" msgstr "Ikke registrert" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:466 #: pkg/systemd/services.jsx:234 pkg/systemd/services.jsx:237 -#: pkg/systemd/services.jsx:697 pkg/systemd/service-details.jsx:466 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:697 msgid "Not running" msgstr "Kjører ikke" @@ -5882,11 +5881,11 @@ msgid "Notice and above" msgstr "Notis og over" -#: pkg/sosreport/sosreport.jsx:322 +#: pkg/sosreport/sosreport.jsx:331 msgid "Obfuscate network addresses, hostnames, and usernames" msgstr "" -#: pkg/sosreport/sosreport.jsx:443 +#: pkg/sosreport/sosreport.jsx:452 msgid "Obfuscated" msgstr "" @@ -5898,8 +5897,8 @@ msgid "Occurred between $0 and $1" msgstr "Forekom mellom $0 og $1" -#: pkg/selinux/setroubleshoot-view.jsx:414 #: pkg/lib/cockpit-components-logs-panel.jsx:98 +#: pkg/selinux/setroubleshoot-view.jsx:414 #, fuzzy #| msgid "Occurances" msgid "Occurrences" @@ -5909,7 +5908,7 @@ msgid "Ok" msgstr "Ok" -#: pkg/storaged/stratis/pool.jsx:402 pkg/storaged/crypto/keyslots.jsx:482 +#: pkg/storaged/crypto/keyslots.jsx:516 pkg/storaged/stratis/pool.jsx:402 msgid "Old passphrase" msgstr "Gammel passordfrase" @@ -5917,7 +5916,7 @@ msgid "Old password" msgstr "Gammelt passord" -#: pkg/users/password-dialogs.js:55 pkg/lib/credentials.js:221 +#: pkg/lib/credentials.js:221 pkg/users/password-dialogs.js:55 msgid "Old password not accepted" msgstr "Gammelt passord aksepteres ikke" @@ -5953,7 +5952,7 @@ msgid "Only use approved and allowed algorithms when booting in FIPS mode." msgstr "" -#: pkg/shell/topnav.jsx:244 +#: pkg/shell/topnav.jsx:255 msgid "Ooops!" msgstr "" @@ -5965,10 +5964,10 @@ msgid "Operation '$operation' on $target" msgstr "Operasjon '$operation' på $target" -#: pkg/sosreport/sosreport.jsx:321 pkg/networkmanager/bridge.jsx:104 -#: pkg/storaged/stratis/create-dialog.jsx:64 +#: pkg/storaged/crypto/encryption.jsx:234 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:223 -#: pkg/storaged/crypto/encryption.jsx:234 pkg/users/account-details.js:269 +#: pkg/storaged/stratis/create-dialog.jsx:64 pkg/sosreport/sosreport.jsx:330 +#: pkg/networkmanager/bridge.jsx:104 pkg/users/account-details.js:269 msgid "Options" msgstr "Alternativer" @@ -5980,7 +5979,7 @@ msgid "Other" msgstr "Annen" -#: pkg/users/account-create-dialog.js:131 pkg/users/account-details.js:279 +#: pkg/users/account-details.js:279 pkg/users/account-create-dialog.js:131 msgid "" "Other authentication methods are still available even when interactive " "password authentication is not allowed." @@ -5999,15 +5998,15 @@ msgid "Overview" msgstr "Oversikt" -#: pkg/storaged/block/format-dialog.jsx:322 #: pkg/storaged/partitions/format-disk-dialog.jsx:61 +#: pkg/storaged/block/format-dialog.jsx:324 #, fuzzy #| msgid "Overview" msgid "Overwrite" msgstr "Oversikt" -#: pkg/storaged/block/format-dialog.jsx:325 #: pkg/storaged/partitions/format-disk-dialog.jsx:64 +#: pkg/storaged/block/format-dialog.jsx:327 #, fuzzy #| msgid "Overwrite existing data with zeros" msgid "Overwrite existing data with zeros (slower)" @@ -6017,7 +6016,7 @@ msgid "PCI" msgstr "PCI" -#: pkg/storaged/dialog.jsx:1329 +#: pkg/storaged/dialog.jsx:1331 #, fuzzy #| msgid "ID" msgid "PID" @@ -6027,7 +6026,7 @@ msgid "Package cockpit-pcp is missing for metrics history" msgstr "Pakke cockpit-pcp mangler i metrikk-historikken" -#: pkg/packagekit/updates.jsx:690 pkg/packagekit/updates.jsx:769 +#: pkg/packagekit/updates.jsx:689 pkg/packagekit/updates.jsx:768 msgid "Package information" msgstr "Pakkeinformasjon" @@ -6035,15 +6034,15 @@ msgid "PackageKit crashed" msgstr "PackageKit krasjet" -#: pkg/packagekit/updates.jsx:1104 +#: pkg/packagekit/updates.jsx:1103 msgid "PackageKit is not installed" msgstr "PackageKit er ikke installert" -#: pkg/packagekit/updates.jsx:1305 +#: pkg/packagekit/updates.jsx:1304 msgid "PackageKit reported error code $0" msgstr "PackageKit rapporterte feilkode $ 0" -#: pkg/packagekit/updates.jsx:364 +#: pkg/packagekit/updates.jsx:363 msgid "Packages" msgstr "Pakker" @@ -6073,7 +6072,7 @@ msgid "Partition" msgstr "Partisjon" -#: pkg/storaged/utils.js:364 +#: pkg/storaged/utils.js:365 msgid "Partition of $0" msgstr "Partisjon på $0" @@ -6098,57 +6097,57 @@ msgid "Passive" msgstr "Passiv" +#: pkg/storaged/crypto/actions.jsx:42 pkg/storaged/crypto/keyslots.jsx:464 +#: pkg/storaged/crypto/keyslots.jsx:784 +#: pkg/storaged/block/format-dialog.jsx:336 +#: pkg/storaged/block/format-dialog.jsx:364 pkg/storaged/stratis/pool.jsx:201 +#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 +#: pkg/storaged/stratis/create-dialog.jsx:75 #: pkg/storaged/stratis/stopped-pool.jsx:58 #: pkg/storaged/stratis/stopped-pool.jsx:129 -#: pkg/storaged/stratis/create-dialog.jsx:75 pkg/storaged/stratis/pool.jsx:201 -#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 -#: pkg/storaged/block/format-dialog.jsx:334 -#: pkg/storaged/block/format-dialog.jsx:362 -#: pkg/storaged/filesystem/mounting-dialog.jsx:323 -#: pkg/storaged/crypto/actions.jsx:43 pkg/storaged/crypto/keyslots.jsx:430 -#: pkg/storaged/crypto/keyslots.jsx:750 +#: pkg/storaged/filesystem/mounting-dialog.jsx:341 msgid "Passphrase" msgstr "Passfrase" -#: pkg/storaged/crypto/keyslots.jsx:573 +#: pkg/storaged/crypto/keyslots.jsx:607 #, fuzzy #| msgid "Passphrase cannot be empty" msgid "Passphrase can not be empty" msgstr "Passfrasen kan ikke være tom" -#: pkg/storaged/stratis/create-dialog.jsx:79 pkg/storaged/stratis/pool.jsx:204 +#: pkg/storaged/crypto/keyslots.jsx:178 pkg/storaged/crypto/keyslots.jsx:472 +#: pkg/storaged/crypto/keyslots.jsx:517 pkg/storaged/crypto/keyslots.jsx:521 +#: pkg/storaged/block/format-dialog.jsx:340 +#: pkg/storaged/block/format-dialog.jsx:368 pkg/storaged/stratis/pool.jsx:204 #: pkg/storaged/stratis/pool.jsx:379 pkg/storaged/stratis/pool.jsx:405 #: pkg/storaged/stratis/pool.jsx:408 pkg/storaged/stratis/pool.jsx:463 -#: pkg/storaged/block/format-dialog.jsx:338 -#: pkg/storaged/block/format-dialog.jsx:366 -#: pkg/storaged/filesystem/mounting-dialog.jsx:326 -#: pkg/storaged/crypto/keyslots.jsx:145 pkg/storaged/crypto/keyslots.jsx:438 -#: pkg/storaged/crypto/keyslots.jsx:483 pkg/storaged/crypto/keyslots.jsx:487 +#: pkg/storaged/stratis/create-dialog.jsx:79 +#: pkg/storaged/filesystem/mounting-dialog.jsx:344 msgid "Passphrase cannot be empty" msgstr "Passfrasen kan ikke være tom" -#: pkg/storaged/crypto/keyslots.jsx:595 +#: pkg/storaged/crypto/keyslots.jsx:629 #, fuzzy #| msgid "Passphrase cannot be empty" msgid "Passphrase from any other key slot" msgstr "Passfrasen kan ikke være tom" -#: pkg/storaged/stratis/pool.jsx:439 pkg/storaged/crypto/keyslots.jsx:586 +#: pkg/storaged/crypto/keyslots.jsx:620 pkg/storaged/stratis/pool.jsx:439 msgid "Passphrase removal may prevent unlocking $0." msgstr "Fjerning av passfrase kan forhindre opplåsing av $0." -#: pkg/storaged/stratis/create-dialog.jsx:88 pkg/storaged/stratis/pool.jsx:381 -#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/block/format-dialog.jsx:347 -#: pkg/storaged/crypto/keyslots.jsx:447 pkg/storaged/crypto/keyslots.jsx:492 +#: pkg/storaged/crypto/keyslots.jsx:481 pkg/storaged/crypto/keyslots.jsx:526 +#: pkg/storaged/block/format-dialog.jsx:349 pkg/storaged/stratis/pool.jsx:381 +#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/stratis/create-dialog.jsx:88 msgid "Passphrases do not match" msgstr "Passfraser stemmer ikke overens" #: pkg/static/login.html:99 pkg/storaged/iscsi/create-dialog.jsx:34 #: pkg/storaged/iscsi/create-dialog.jsx:140 pkg/shell/hosts_dialog.jsx:845 -#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/credentials.jsx:119 -#: pkg/shell/credentials.jsx:262 pkg/shell/credentials.jsx:318 -#: pkg/shell/superuser.jsx:144 pkg/users/account-create-dialog.js:139 -#: pkg/users/account-details.js:296 +#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/superuser.jsx:144 +#: pkg/shell/credentials.jsx:119 pkg/shell/credentials.jsx:262 +#: pkg/shell/credentials.jsx:318 pkg/users/account-details.js:296 +#: pkg/users/account-create-dialog.js:139 msgid "Password" msgstr "Passord" @@ -6240,8 +6239,8 @@ msgid "Path to directory" msgstr "Katalog" -#: pkg/shell/credentials.jsx:172 #: pkg/lib/cockpit-components-file-autocomplete.jsx:169 +#: pkg/shell/credentials.jsx:172 msgid "Path to file" msgstr "Sti til fil" @@ -6279,7 +6278,7 @@ "system." msgstr "" -#: pkg/systemd/overview-cards/configurationCard.jsx:85 +#: pkg/systemd/overview-cards/configurationCard.jsx:84 msgid "Performance profile" msgstr "Ytelsesprofil" @@ -6298,9 +6297,10 @@ msgid "Permanently delete $0 group?" msgstr "Slett $0 volum" -#: pkg/storaged/stratis/pool.jsx:145 pkg/storaged/lvm2/volume-group.jsx:93 +#: pkg/storaged/partitions/partition.jsx:54 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:119 -#: pkg/storaged/partitions/partition.jsx:54 pkg/storaged/mdraid/mdraid.jsx:123 +#: pkg/storaged/lvm2/volume-group.jsx:93 pkg/storaged/stratis/pool.jsx:145 +#: pkg/storaged/mdraid/mdraid.jsx:123 msgid "Permanently delete $0?" msgstr "" @@ -6330,16 +6330,16 @@ msgid "Physical" msgstr "Fysisk" +#: pkg/storaged/block/resize.jsx:436 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:180 #: pkg/storaged/lvm2/block-logical-volume.jsx:130 -#: pkg/storaged/block/resize.jsx:436 #, fuzzy #| msgid "Physical volumes" msgid "Physical Volumes" msgstr "Fysiske volumer" -#: pkg/storaged/lvm2/volume-group.jsx:390 #: pkg/storaged/lvm2/block-logical-volume.jsx:356 +#: pkg/storaged/lvm2/volume-group.jsx:390 msgid "Physical volumes" msgstr "Fysiske volumer" @@ -6349,8 +6349,8 @@ msgid "Physical volumes can not be resized here" msgstr "Fysiske volumer kan ikke endres her." -#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 #: pkg/lib/cockpit-components-shutdown.jsx:211 pkg/lib/serverTime.js:599 +#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 msgid "Pick date" msgstr "Velg dato" @@ -6406,7 +6406,7 @@ msgid "Please unmount them first." msgstr "" -#: pkg/storaged/utils.js:284 +#: pkg/storaged/utils.js:285 msgid "Pool for thin logical volumes" msgstr "Pool for tynne logiske volumer" @@ -6434,8 +6434,8 @@ msgid "Portable" msgstr "Bærbar" -#: pkg/networkmanager/network-interface-members.jsx:203 #: pkg/networkmanager/team.jsx:159 pkg/networkmanager/bridge.jsx:101 +#: pkg/networkmanager/network-interface-members.jsx:208 msgid "Ports" msgstr "Porter" @@ -6458,7 +6458,7 @@ msgid "Preparing" msgstr "Forbereder" -#: pkg/systemd/hw-detect.js:114 pkg/lib/machine-info.js:247 +#: pkg/lib/machine-info.js:247 pkg/systemd/hw-detect.js:114 msgid "Present" msgstr "Til stede" @@ -6468,7 +6468,7 @@ msgid "Preserve" msgstr "Bevar" -#: pkg/systemd/overview-cards/configurationCard.jsx:288 +#: pkg/systemd/overview-cards/configurationCard.jsx:284 msgid "Pretty host name" msgstr "\"Pent\" vertsnavn" @@ -6480,8 +6480,8 @@ msgid "Primary" msgstr "Primær" -#: pkg/systemd/logs.jsx:208 pkg/networkmanager/bridgeport.jsx:80 -#: pkg/networkmanager/teamport.jsx:84 +#: pkg/networkmanager/bridgeport.jsx:80 pkg/networkmanager/teamport.jsx:84 +#: pkg/systemd/logs.jsx:208 msgid "Priority" msgstr "Prioritet" @@ -6510,11 +6510,11 @@ msgid "Problem info" msgstr "Problem info" -#: pkg/storaged/dialog.jsx:1171 +#: pkg/storaged/dialog.jsx:1173 msgid "Processes using the location" msgstr "" -#: pkg/sosreport/sosreport.jsx:292 +#: pkg/sosreport/sosreport.jsx:301 msgid "Progress: $0" msgstr "" @@ -6617,7 +6617,7 @@ msgid "RAID chassis" msgstr "RAID chassis" -#: pkg/storaged/mdraid/create-dialog.jsx:51 pkg/storaged/mdraid/mdraid.jsx:286 +#: pkg/storaged/mdraid/mdraid.jsx:286 pkg/storaged/mdraid/create-dialog.jsx:51 msgid "RAID level" msgstr "RAID-nivå" @@ -6685,11 +6685,11 @@ msgid "Ready" msgstr "Klar" -#: pkg/systemd/overview-cards/configurationCard.jsx:291 +#: pkg/systemd/overview-cards/configurationCard.jsx:287 msgid "Real host name" msgstr "Faktisk vertsnavn" -#: pkg/systemd/overview-cards/configurationCard.jsx:258 +#: pkg/systemd/overview-cards/configurationCard.jsx:254 msgid "" "Real host name can only contain lower-case characters, digits, dashes, and " "periods (with populated subdomains)" @@ -6697,7 +6697,7 @@ "Faktisk vertsnavn kan bare inneholde små bokstaver, sifre, bindestreker og " "punktum (med befolket underdomener)" -#: pkg/systemd/overview-cards/configurationCard.jsx:256 +#: pkg/systemd/overview-cards/configurationCard.jsx:252 msgid "Real host name must be 64 characters or less" msgstr "Faktisk vertsnavn må være på 64 tegn eller mindre" @@ -6707,14 +6707,14 @@ msgid "Reapply and reboot" msgstr "Lagre og start på nytt" -#: pkg/systemd/overview.jsx:109 pkg/systemd/overview.jsx:128 -#: pkg/lib/cockpit-components-logs-panel.jsx:114 #: pkg/lib/cockpit-components-shutdown.jsx:190 #: pkg/lib/cockpit-components-shutdown.jsx:192 +#: pkg/lib/cockpit-components-logs-panel.jsx:114 pkg/systemd/overview.jsx:110 +#: pkg/systemd/overview.jsx:135 msgid "Reboot" msgstr "Omstart" -#: pkg/packagekit/updates.jsx:614 +#: pkg/packagekit/updates.jsx:613 #, fuzzy #| msgid "Reboot recommended" msgid "Reboot after completion" @@ -6724,15 +6724,14 @@ msgid "Reboot recommended" msgstr "Omstart anbefales" -#: pkg/packagekit/updates.jsx:685 pkg/packagekit/updates.jsx:760 -#: pkg/packagekit/updates.jsx:824 +#: pkg/packagekit/updates.jsx:684 pkg/packagekit/updates.jsx:759 +#: pkg/packagekit/updates.jsx:823 msgid "Reboot system..." msgstr "Omstart systemet..." #: pkg/networkmanager/network-main.jsx:188 -#: pkg/networkmanager/network-main.jsx:203 -#: pkg/networkmanager/network-interface-members.jsx:205 -#: pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-main.jsx:203 pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-interface-members.jsx:210 msgid "Receiving" msgstr "Mottar" @@ -6746,7 +6745,7 @@ msgid "Recommended, secure settings for current threat models." msgstr "" -#: pkg/shell/failures.jsx:74 +#: pkg/shell/failures.jsx:72 msgid "Reconnect" msgstr "Koble til på nytt" @@ -6782,25 +6781,25 @@ msgid "Regenerate" msgstr "Generelt" -#: pkg/storaged/crypto/keyslots.jsx:277 +#: pkg/storaged/crypto/keyslots.jsx:311 #, fuzzy #| msgid "Generating report" msgid "Regenerating initrd" msgstr "Genererer rapport" -#: pkg/packagekit/updates.jsx:1378 +#: pkg/packagekit/updates.jsx:1377 msgid "Register…" msgstr "Registrer…" -#: pkg/storaged/dialog.jsx:1259 +#: pkg/storaged/dialog.jsx:1261 msgid "Related processes and services will be forcefully stopped." msgstr "" -#: pkg/storaged/dialog.jsx:1261 +#: pkg/storaged/dialog.jsx:1263 msgid "Related processes will be forcefully stopped." msgstr "" -#: pkg/storaged/dialog.jsx:1263 +#: pkg/storaged/dialog.jsx:1265 msgid "Related services will be forcefully stopped." msgstr "" @@ -6818,7 +6817,7 @@ msgid "Reloading" msgstr "Last på nytt" -#: pkg/packagekit/updates.jsx:510 +#: pkg/packagekit/updates.jsx:509 msgid "Reloading the state of remaining services" msgstr "Last inn tilstanden på gjenværende tjenestene" @@ -6862,19 +6861,19 @@ msgid "Removals:" msgstr "" -#: pkg/systemd/timer-dialog.jsx:361 pkg/storaged/stratis/pool.jsx:443 +#: pkg/storaged/nfs/nfs.jsx:315 pkg/storaged/crypto/keyslots.jsx:649 +#: pkg/storaged/crypto/keyslots.jsx:684 pkg/storaged/crypto/keyslots.jsx:769 +#: pkg/storaged/lvm2/physical-volume.jsx:88 +#: pkg/storaged/lvm2/volume-group.jsx:347 pkg/storaged/stratis/pool.jsx:443 #: pkg/storaged/stratis/pool.jsx:500 pkg/storaged/stratis/pool.jsx:535 -#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/lvm2/volume-group.jsx:347 -#: pkg/storaged/lvm2/physical-volume.jsx:88 pkg/storaged/nfs/nfs.jsx:315 -#: pkg/storaged/crypto/keyslots.jsx:615 pkg/storaged/crypto/keyslots.jsx:650 -#: pkg/storaged/crypto/keyslots.jsx:735 pkg/storaged/mdraid/mdraid-disk.jsx:98 -#: pkg/shell/hosts.jsx:170 pkg/apps/application.jsx:50 -#: pkg/users/authorized-keys-panel.js:142 +#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/mdraid/mdraid-disk.jsx:98 +#: pkg/apps/application.jsx:50 pkg/systemd/timer-dialog.jsx:361 +#: pkg/shell/hosts.jsx:170 pkg/users/authorized-keys-panel.js:142 #: pkg/users/authorized-keys-panel.js:150 msgid "Remove" msgstr "Fjern" -#: pkg/networkmanager/network-interface-members.jsx:110 +#: pkg/networkmanager/network-interface-members.jsx:111 msgid "Remove $0" msgstr "Fjern $0" @@ -6882,11 +6881,11 @@ msgid "Remove $0 service from $1 zone" msgstr "Fjern $0-tjenesten fra $1-sonen" -#: pkg/storaged/stratis/pool.jsx:495 pkg/storaged/crypto/keyslots.jsx:634 +#: pkg/storaged/crypto/keyslots.jsx:668 pkg/storaged/stratis/pool.jsx:495 msgid "Remove $0?" msgstr "Fjern $0?" -#: pkg/storaged/stratis/pool.jsx:493 pkg/storaged/crypto/keyslots.jsx:644 +#: pkg/storaged/crypto/keyslots.jsx:678 pkg/storaged/stratis/pool.jsx:493 #, fuzzy #| msgid "Remove Tang keyserver" msgid "Remove Tang keyserver?" @@ -6917,7 +6916,7 @@ msgid "Remove missing physical volumes?" msgstr "Fjerner fysisk volum fra $target" -#: pkg/storaged/crypto/keyslots.jsx:608 +#: pkg/storaged/crypto/keyslots.jsx:642 #, fuzzy #| msgid "Remove passphrase in $0?" msgid "Remove passphrase in key slot $0?" @@ -6941,12 +6940,12 @@ msgid "Removing" msgstr "Fjerner" -#: pkg/storaged/crypto/keyslots.jsx:222 +#: pkg/storaged/crypto/keyslots.jsx:256 #: pkg/lib/cockpit-components-install-dialog.jsx:191 msgid "Removing $0" msgstr "Fjerner $0" -#: pkg/networkmanager/network-interface-members.jsx:109 +#: pkg/networkmanager/network-interface-members.jsx:110 #, fuzzy #| msgid "" #| "Removing $0 will break the connection to the server, and will make " @@ -6964,7 +6963,7 @@ msgid "Removing $target from MDRAID device" msgstr "Fjerner $target fra RAID-enhet" -#: pkg/storaged/crypto/keyslots.jsx:593 +#: pkg/storaged/crypto/keyslots.jsx:627 msgid "" "Removing a passphrase without confirmation of another passphrase may prevent " "unlocking or key management, if other passphrases are forgotten or lost." @@ -6988,11 +6987,10 @@ msgid "Removing the zone will remove all services within it." msgstr "Hvis du fjerner sonen, fjernes alle tjenester i den." -#: pkg/storaged/stratis/filesystem.jsx:200 pkg/storaged/stratis/pool.jsx:173 -#: pkg/storaged/lvm2/volume-group.jsx:71 #: pkg/storaged/lvm2/block-logical-volume.jsx:53 #: pkg/storaged/lvm2/block-logical-volume.jsx:242 -#: pkg/users/rename-group-dialog.jsx:69 +#: pkg/storaged/lvm2/volume-group.jsx:71 pkg/storaged/stratis/pool.jsx:173 +#: pkg/storaged/stratis/filesystem.jsx:200 pkg/users/rename-group-dialog.jsx:69 msgid "Rename" msgstr "Omdøp" @@ -7060,8 +7058,8 @@ msgid "Repeat monthly" msgstr "Gjenta månedlig" -#: pkg/storaged/crypto/keyslots.jsx:428 pkg/storaged/crypto/keyslots.jsx:441 -#: pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:462 pkg/storaged/crypto/keyslots.jsx:475 +#: pkg/storaged/crypto/keyslots.jsx:524 msgid "Repeat passphrase" msgstr "Gjenta passfrasen" @@ -7069,11 +7067,11 @@ msgid "Repeat weekly" msgstr "Gjenta ukentlig" -#: pkg/sosreport/sosreport.jsx:490 pkg/systemd/reporting.jsx:392 +#: pkg/sosreport/sosreport.jsx:499 pkg/systemd/reporting.jsx:392 msgid "Report" msgstr "Rapport" -#: pkg/sosreport/sosreport.jsx:308 +#: pkg/sosreport/sosreport.jsx:317 #, fuzzy #| msgid "Report" msgid "Report label" @@ -7095,7 +7093,7 @@ msgid "Reporting was canceled" msgstr "Rapportering ble kansellert" -#: pkg/sosreport/sosreport.jsx:485 +#: pkg/sosreport/sosreport.jsx:494 #, fuzzy #| msgid "Reports:" msgid "Reports" @@ -7154,7 +7152,7 @@ msgid "Reserved memory" msgstr "Reservert minne" -#: pkg/systemd/terminal.jsx:183 pkg/systemd/logs.jsx:406 +#: pkg/systemd/logs.jsx:406 pkg/systemd/terminal.jsx:183 msgid "Reset" msgstr "Tilbakestill" @@ -7179,11 +7177,11 @@ msgid "Restart" msgstr "Omstart" -#: pkg/packagekit/updates.jsx:525 pkg/packagekit/updates.jsx:539 +#: pkg/packagekit/updates.jsx:524 pkg/packagekit/updates.jsx:538 msgid "Restart services" msgstr "Omstart tjenester" -#: pkg/packagekit/updates.jsx:761 pkg/packagekit/updates.jsx:836 +#: pkg/packagekit/updates.jsx:760 pkg/packagekit/updates.jsx:835 msgid "Restart services..." msgstr "Omstart tjenester..." @@ -7243,7 +7241,7 @@ msgid "Run at" msgstr "" -#: pkg/sosreport/sosreport.jsx:295 +#: pkg/sosreport/sosreport.jsx:304 #, fuzzy #| msgid "View report" msgid "Run new report" @@ -7253,7 +7251,7 @@ msgid "Run on" msgstr "" -#: pkg/sosreport/sosreport.jsx:273 pkg/sosreport/sosreport.jsx:482 +#: pkg/sosreport/sosreport.jsx:282 pkg/sosreport/sosreport.jsx:491 #, fuzzy #| msgid "Report" msgid "Run report" @@ -7268,13 +7266,13 @@ msgid "Runner" msgstr "" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:458 #: pkg/systemd/services.jsx:232 pkg/systemd/services.jsx:236 -#: pkg/systemd/services.jsx:696 pkg/systemd/service-details.jsx:458 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:696 msgid "Running" msgstr "Kjører" -#: pkg/storaged/dialog.jsx:1332 pkg/storaged/dialog.jsx:1352 +#: pkg/storaged/dialog.jsx:1334 pkg/storaged/dialog.jsx:1354 #, fuzzy #| msgid "time" msgid "Runtime" @@ -7321,7 +7319,7 @@ msgid "SMART self-test of $target" msgstr "SMART selvtest av $target" -#: pkg/sosreport/sosreport.jsx:304 +#: pkg/sosreport/sosreport.jsx:313 msgid "" "SOS reporting collects system information to help with diagnosing problems." msgstr "" @@ -7336,8 +7334,8 @@ msgid "SSH key isn't a path" msgstr "ssh-nøkkel er ikke en bane" -#: pkg/shell/credentials.jsx:79 pkg/shell/credentials.jsx:95 -#: pkg/shell/topnav.jsx:218 +#: pkg/shell/topnav.jsx:229 pkg/shell/credentials.jsx:79 +#: pkg/shell/credentials.jsx:95 msgid "SSH keys" msgstr "SSH-nøkler" @@ -7357,7 +7355,7 @@ msgid "STP priority" msgstr "STP-prioritet" -#: pkg/shell/failures.jsx:46 +#: pkg/shell/failures.jsx:45 msgid "" "Safari users need to import and trust the certificate of the self-signing CA:" msgstr "" @@ -7368,16 +7366,15 @@ msgid "Saturdays" msgstr "Lørdager" -#: pkg/systemd/timer-dialog.jsx:148 pkg/metrics/metrics.jsx:1478 -#: pkg/networkmanager/dialogs-common.jsx:160 pkg/storaged/stratis/pool.jsx:384 +#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/partitions/partition.jsx:197 +#: pkg/storaged/btrfs/volume.jsx:96 pkg/storaged/crypto/encryption.jsx:168 +#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:531 +#: pkg/storaged/crypto/keyslots.jsx:550 pkg/storaged/stratis/pool.jsx:384 #: pkg/storaged/stratis/pool.jsx:413 pkg/storaged/stratis/pool.jsx:468 -#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/filesystem/mounting-dialog.jsx:340 +#: pkg/storaged/filesystem/mounting-dialog.jsx:358 #: pkg/storaged/filesystem/filesystem.jsx:126 -#: pkg/storaged/crypto/encryption.jsx:168 -#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:497 -#: pkg/storaged/crypto/keyslots.jsx:516 -#: pkg/storaged/partitions/partition.jsx:197 pkg/storaged/btrfs/volume.jsx:96 -#: pkg/packagekit/kpatch.jsx:310 +#: pkg/networkmanager/dialogs-common.jsx:160 pkg/systemd/timer-dialog.jsx:148 +#: pkg/metrics/metrics.jsx:1478 pkg/packagekit/kpatch.jsx:310 msgid "Save" msgstr "Lagre" @@ -7385,7 +7382,7 @@ msgid "Save and reboot" msgstr "Lagre og start på nytt" -#: pkg/systemd/overview-cards/motdCard.jsx:61 pkg/kdump/kdump-view.jsx:229 +#: pkg/kdump/kdump-view.jsx:229 pkg/systemd/overview-cards/motdCard.jsx:61 #: pkg/packagekit/autoupdates.jsx:269 msgid "Save changes" msgstr "Lagre endringer" @@ -7398,8 +7395,8 @@ msgid "Save space by storing identical data blocks just once" msgstr "Spar plass ved å lagre identiske datablokker bare en gang" -#: pkg/storaged/crypto/keyslots.jsx:401 pkg/storaged/crypto/keyslots.jsx:456 -#: pkg/storaged/crypto/keyslots.jsx:514 pkg/storaged/crypto/keyslots.jsx:542 +#: pkg/storaged/crypto/keyslots.jsx:435 pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:548 pkg/storaged/crypto/keyslots.jsx:576 msgid "" "Saving a new passphrase requires unlocking the disk. Please provide a " "current disk passphrase." @@ -7447,7 +7444,7 @@ msgid "Seconds" msgstr "Sekunder" -#: pkg/systemd/overview-cards/configurationCard.jsx:92 +#: pkg/systemd/overview-cards/configurationCard.jsx:91 msgid "Secure shell keys" msgstr "Secure Shell nøkler" @@ -7459,7 +7456,7 @@ msgid "Security Enhanced Linux configuration and troubleshooting" msgstr "" -#: pkg/packagekit/updates.jsx:1435 +#: pkg/packagekit/updates.jsx:1434 msgid "Security updates available" msgstr "Sikkerhetsoppdateringer tilgjengelig" @@ -7501,7 +7498,7 @@ #: pkg/networkmanager/network-main.jsx:187 #: pkg/networkmanager/network-main.jsx:202 -#: pkg/networkmanager/network-interface-members.jsx:204 +#: pkg/networkmanager/network-interface-members.jsx:209 msgid "Sending" msgstr "Sender" @@ -7512,9 +7509,9 @@ msgid "Serial number" msgstr "Serienummer" -#: pkg/static/login.html:159 pkg/networkmanager/ip-settings.jsx:262 -#: pkg/kdump/kdump-view.jsx:267 pkg/kdump/kdump-view.jsx:289 -#: pkg/storaged/nfs/nfs.jsx:328 +#: pkg/static/login.html:159 pkg/storaged/nfs/nfs.jsx:328 +#: pkg/networkmanager/ip-settings.jsx:262 pkg/kdump/kdump-view.jsx:267 +#: pkg/kdump/kdump-view.jsx:289 msgid "Server" msgstr "Server" @@ -7530,7 +7527,7 @@ msgid "Server cannot be empty." msgstr "Serveren kan ikke være tom." -#: pkg/lib/cockpit.js:3862 +#: pkg/lib/cockpit.js:3858 msgid "Server has closed the connection." msgstr "Serveren har lukket forbindelsen." @@ -7538,10 +7535,10 @@ msgid "Server software" msgstr "Server programvare" +#: pkg/storaged/dialog.jsx:1351 pkg/networkmanager/firewall.jsx:207 #: pkg/metrics/metrics.jsx:812 pkg/metrics/metrics.jsx:813 #: pkg/metrics/metrics.jsx:868 pkg/metrics/metrics.jsx:906 #: pkg/metrics/metrics.jsx:966 pkg/metrics/metrics.jsx:972 -#: pkg/networkmanager/firewall.jsx:207 pkg/storaged/dialog.jsx:1349 msgid "Service" msgstr "Tjeneste" @@ -7553,19 +7550,19 @@ msgid "Service logs" msgstr "Tjenestelogger" -#: pkg/systemd/services.html:4 pkg/systemd/service-tabs.jsx:40 -#: pkg/systemd/service.jsx:151 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/services.html:4 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/service.jsx:151 pkg/systemd/service-tabs.jsx:40 #: pkg/systemd/manifest.json:0 msgid "Services" msgstr "Tjenester" -#: pkg/storaged/dialog.jsx:1157 +#: pkg/storaged/dialog.jsx:1159 #, fuzzy #| msgid "Service is starting" msgid "Services using the location" msgstr "Tjenesten starter" -#: pkg/shell/topnav.jsx:273 +#: pkg/shell/topnav.jsx:303 msgid "Session" msgstr "Økt" @@ -7587,8 +7584,8 @@ msgid "Set partition type of $0" msgstr "Opprett partisjon på $0" -#: pkg/users/password-dialogs.js:226 pkg/users/password-dialogs.js:233 -#: pkg/users/account-details.js:301 +#: pkg/users/account-details.js:301 pkg/users/password-dialogs.js:226 +#: pkg/users/password-dialogs.js:233 msgid "Set password" msgstr "Angi passord" @@ -7625,13 +7622,13 @@ msgid "Setting up loop device $target" msgstr "" -#: pkg/packagekit/updates.jsx:919 +#: pkg/packagekit/updates.jsx:918 #, fuzzy #| msgid "Setting up" msgid "Settings" msgstr "Setter opp" -#: pkg/packagekit/updates.jsx:375 pkg/packagekit/updates.jsx:450 +#: pkg/packagekit/updates.jsx:374 pkg/packagekit/updates.jsx:449 msgid "Severity" msgstr "Alvorlighetsgrad" @@ -7639,7 +7636,7 @@ msgid "Shared" msgstr "Delt" -#: pkg/users/account-create-dialog.js:93 pkg/users/account-details.js:329 +#: pkg/users/account-details.js:329 pkg/users/account-create-dialog.js:93 #, fuzzy #| msgid "shell" msgid "Shell" @@ -7669,7 +7666,7 @@ msgid "Show confirmation password" msgstr "Bekreft nøkkel-passord" -#: pkg/systemd/overview-cards/configurationCard.jsx:96 +#: pkg/systemd/overview-cards/configurationCard.jsx:95 msgid "Show fingerprints" msgstr "Vis fingeravtrykk" @@ -7699,8 +7696,8 @@ msgid "Show relationships" msgstr "" +#: pkg/storaged/partitions/partition.jsx:101 pkg/storaged/block/resize.jsx:635 #: pkg/storaged/lvm2/block-logical-volume.jsx:205 -#: pkg/storaged/block/resize.jsx:635 pkg/storaged/partitions/partition.jsx:101 msgid "Shrink" msgstr "Krymp" @@ -7708,7 +7705,7 @@ msgid "Shrink logical volume" msgstr "Krymp logisk volum" -#: pkg/storaged/block/resize.jsx:557 pkg/storaged/partitions/partition.jsx:218 +#: pkg/storaged/partitions/partition.jsx:218 pkg/storaged/block/resize.jsx:557 #, fuzzy #| msgid "partition" msgid "Shrink partition" @@ -7723,7 +7720,7 @@ msgid "Shut down" msgstr "Slå av" -#: pkg/systemd/overview.jsx:114 +#: pkg/systemd/overview.jsx:115 msgid "Shutdown" msgstr "Slå av" @@ -7731,40 +7728,40 @@ msgid "Since" msgstr "" -#: pkg/systemd/hw-detect.js:90 pkg/lib/machine-info.js:238 +#: pkg/lib/machine-info.js:238 pkg/systemd/hw-detect.js:90 msgid "Single rank" msgstr "" -#: pkg/systemd/hwinfo.jsx:291 pkg/storaged/stratis/pool.jsx:96 -#: pkg/storaged/lvm2/vdo-pool.jsx:79 +#: pkg/storaged/nfs/nfs.jsx:330 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/block/format-dialog.jsx:315 pkg/storaged/block/resize.jsx:448 +#: pkg/storaged/block/resize.jsx:581 pkg/storaged/pages.jsx:717 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:199 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:206 +#: pkg/storaged/lvm2/block-logical-volume.jsx:291 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:49 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:143 -#: pkg/storaged/lvm2/block-logical-volume.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:313 pkg/storaged/block/resize.jsx:448 -#: pkg/storaged/block/resize.jsx:581 pkg/storaged/nfs/nfs.jsx:330 -#: pkg/storaged/pages.jsx:717 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/lvm2/vdo-pool.jsx:79 pkg/storaged/stratis/pool.jsx:96 +#: pkg/systemd/hwinfo.jsx:291 msgid "Size" msgstr "Størrelse" -#: pkg/storaged/dialog.jsx:1074 +#: pkg/storaged/dialog.jsx:1076 msgid "Size cannot be negative" msgstr "Størrelse kan ikke være negativ" -#: pkg/storaged/dialog.jsx:1072 +#: pkg/storaged/dialog.jsx:1074 msgid "Size cannot be zero" msgstr "Størrelsen kan ikke være null" -#: pkg/storaged/dialog.jsx:1076 +#: pkg/storaged/dialog.jsx:1078 msgid "Size is too large" msgstr "Størrelsen er for stor" -#: pkg/storaged/dialog.jsx:1070 +#: pkg/storaged/dialog.jsx:1072 msgid "Size must be a number" msgstr "Størrelsen må være et tall" -#: pkg/storaged/dialog.jsx:1078 +#: pkg/storaged/dialog.jsx:1080 msgid "Size must be at least $0" msgstr "Størrelsen må være minst $0" @@ -7780,7 +7777,7 @@ msgid "Slot" msgstr "Slot" -#: pkg/storaged/crypto/keyslots.jsx:723 pkg/storaged/mdraid/mdraid-disk.jsx:80 +#: pkg/storaged/crypto/keyslots.jsx:757 pkg/storaged/mdraid/mdraid-disk.jsx:80 msgid "Slot $0" msgstr "Slot $0" @@ -7835,7 +7832,7 @@ "Some other program is currently using the package manager, please wait..." msgstr "Noen andre programmer bruker for øyeblikket pakkebehandling, vent ..." -#: pkg/packagekit/updates.jsx:737 pkg/packagekit/updates.jsx:844 +#: pkg/packagekit/updates.jsx:736 pkg/packagekit/updates.jsx:843 #: pkg/packagekit/updates.jsx:1536 msgid "Some software needs to be restarted manually" msgstr "Noe programvare må startes på nytt manuelt" @@ -7876,10 +7873,9 @@ msgid "Stable" msgstr "Stabil" +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 pkg/storaged/swap/swap.jsx:98 +#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/mdraid/mdraid.jsx:210 #: pkg/systemd/service-details.jsx:144 -#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/swap/swap.jsx:98 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 -#: pkg/storaged/mdraid/mdraid.jsx:210 msgid "Start" msgstr "Start" @@ -7891,7 +7887,7 @@ msgid "Start multipath" msgstr "" -#: pkg/systemd/service-details.jsx:447 pkg/networkmanager/networkmanager.jsx:78 +#: pkg/networkmanager/networkmanager.jsx:78 pkg/systemd/service-details.jsx:447 msgid "Start service" msgstr "Start tjenesten" @@ -7919,18 +7915,18 @@ msgid "Starting swapspace $target" msgstr "" -#: pkg/systemd/hwinfo.jsx:291 pkg/systemd/services-list.jsx:40 -#: pkg/systemd/services-list.jsx:46 pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/services-list.jsx:40 +#: pkg/systemd/services-list.jsx:46 pkg/systemd/hwinfo.jsx:291 msgid "State" msgstr "Tilstand" -#: pkg/systemd/services.jsx:252 pkg/systemd/services.jsx:688 -#: pkg/systemd/service-details.jsx:476 +#: pkg/systemd/service-details.jsx:476 pkg/systemd/services.jsx:252 +#: pkg/systemd/services.jsx:688 msgid "Static" msgstr "Statisk" -#: pkg/systemd/service-details.jsx:648 -#: pkg/networkmanager/network-interface.jsx:265 pkg/packagekit/updates.jsx:908 +#: pkg/networkmanager/network-interface.jsx:265 +#: pkg/systemd/service-details.jsx:648 pkg/packagekit/updates.jsx:907 msgid "Status" msgstr "Status" @@ -7942,10 +7938,9 @@ msgid "Sticky" msgstr "" -#: pkg/systemd/service-details.jsx:140 pkg/storaged/swap/swap.jsx:95 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:62 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 -#: pkg/storaged/mdraid/mdraid.jsx:289 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 pkg/storaged/swap/swap.jsx:95 +#: pkg/storaged/mdraid/mdraid.jsx:289 pkg/systemd/service-details.jsx:140 msgid "Stop" msgstr "Stopp" @@ -7969,7 +7964,7 @@ msgid "Stop editing hosts" msgstr "Slutt å redigere verter" -#: pkg/sosreport/sosreport.jsx:277 +#: pkg/sosreport/sosreport.jsx:286 #, fuzzy #| msgid "Create report" msgid "Stop report" @@ -8000,7 +7995,7 @@ msgid "Storage logs" msgstr "Lagringslogger" -#: pkg/storaged/block/format-dialog.jsx:359 +#: pkg/storaged/block/format-dialog.jsx:361 msgid "Store passphrase" msgstr "" @@ -8016,7 +8011,7 @@ msgid "Stratis block device" msgstr "$0 blokk enhet" -#: pkg/storaged/stratis/stopped-pool.jsx:141 pkg/storaged/stratis/pool.jsx:566 +#: pkg/storaged/stratis/pool.jsx:566 pkg/storaged/stratis/stopped-pool.jsx:141 #, fuzzy #| msgid "$0 block device" msgid "Stratis block devices" @@ -8046,8 +8041,8 @@ msgid "Stratis filesystems pool" msgstr "Filsystem" -#: pkg/storaged/stratis/stopped-pool.jsx:98 pkg/storaged/stratis/pool.jsx:271 -#: pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/pool.jsx:271 pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/stopped-pool.jsx:98 #, fuzzy #| msgid "Storage pools" msgid "Stratis pool" @@ -8063,7 +8058,7 @@ msgid "Striped and mirrored (RAID 10)" msgstr "" -#: pkg/storaged/lvm2/block-logical-volume.jsx:399 +#: pkg/storaged/lvm2/block-logical-volume.jsx:398 msgid "Stripes" msgstr "" @@ -8077,7 +8072,7 @@ msgid "Stub" msgstr "" -#: pkg/shell/topnav.jsx:184 +#: pkg/shell/topnav.jsx:193 msgid "Style" msgstr "" @@ -8119,8 +8114,8 @@ msgid "Sundays" msgstr "Søndager" -#: pkg/metrics/metrics.jsx:130 pkg/metrics/metrics.jsx:725 -#: pkg/metrics/metrics.jsx:1950 pkg/storaged/swap/swap.jsx:88 +#: pkg/storaged/swap/swap.jsx:88 pkg/metrics/metrics.jsx:130 +#: pkg/metrics/metrics.jsx:725 pkg/metrics/metrics.jsx:1950 msgid "Swap" msgstr "Swap" @@ -8134,16 +8129,16 @@ msgid "Swap out" msgstr "Swap ut" -#: pkg/networkmanager/network-interface-members.jsx:67 +#: pkg/networkmanager/network-interface-members.jsx:68 msgid "Switch of $0" msgstr "Slå av $0" -#: pkg/networkmanager/network-interface-members.jsx:87 +#: pkg/networkmanager/network-interface-members.jsx:88 #: pkg/networkmanager/network-interface.jsx:163 msgid "Switch off $0" msgstr "Slå av $0" -#: pkg/networkmanager/network-interface-members.jsx:78 +#: pkg/networkmanager/network-interface-members.jsx:79 #: pkg/networkmanager/network-interface.jsx:144 msgid "Switch on $0" msgstr "Slå på $0" @@ -8158,7 +8153,7 @@ msgid "Switch to limited access" msgstr "Bytt til begrenset tilgang" -#: pkg/networkmanager/network-interface-members.jsx:86 +#: pkg/networkmanager/network-interface-members.jsx:87 #: pkg/networkmanager/network-interface.jsx:162 #, fuzzy #| msgid "" @@ -8171,7 +8166,7 @@ "Hvis du slår av $0, brytes forbindelsen til serveren, og gjør " "administrasjonsgrensesnittet utilgjengelig." -#: pkg/networkmanager/network-interface-members.jsx:77 +#: pkg/networkmanager/network-interface-members.jsx:78 #: pkg/networkmanager/network-interface.jsx:143 #, fuzzy #| msgid "" @@ -8202,18 +8197,18 @@ msgid "Synchronizing MDRAID device $target" msgstr "Synkroniserer RAID-enhet $target" -#: pkg/systemd/services.jsx:913 pkg/shell/nav.jsx:46 pkg/shell/indexes.jsx:343 +#: pkg/systemd/services.jsx:912 pkg/shell/indexes.jsx:343 pkg/shell/nav.jsx:46 msgid "System" msgstr "System" -#: pkg/sosreport/sosreport.jsx:509 +#: pkg/sosreport/sosreport.jsx:518 #, fuzzy #| msgid "System modifications" msgid "System diagnostics" msgstr "Systemendringer" -#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 #: pkg/systemd/hwinfo.jsx:315 +#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 msgid "System information" msgstr "Systeminformasjon" @@ -8225,7 +8220,7 @@ msgid "System modifications" msgstr "Systemendringer" -#: pkg/systemd/overview-cards/configurationCard.jsx:75 +#: pkg/systemd/overview-cards/configurationCard.jsx:74 msgid "System time" msgstr "Systemtid" @@ -8241,7 +8236,7 @@ msgid "Tablet" msgstr "Nettbrett" -#: pkg/storaged/crypto/keyslots.jsx:431 +#: pkg/storaged/crypto/keyslots.jsx:465 msgid "Tang keyserver" msgstr "Tang nøkkelserver" @@ -8306,7 +8301,7 @@ msgid "Testing connection" msgstr "Tester tilkobling" -#: pkg/storaged/crypto/keyslots.jsx:242 +#: pkg/storaged/crypto/keyslots.jsx:276 #, fuzzy #| msgid "$0 is not available from any repository." msgid "The $0 package is not available from any repository." @@ -8318,7 +8313,7 @@ msgid "The $0 package must be installed to create Stratis pools." msgstr "$0-pakken må være installert for å opprette VDO-enheter." -#: pkg/storaged/crypto/keyslots.jsx:237 pkg/storaged/crypto/keyslots.jsx:253 +#: pkg/storaged/crypto/keyslots.jsx:271 pkg/storaged/crypto/keyslots.jsx:287 #, fuzzy #| msgid "The $0 package must be installed to create VDO devices." msgid "The $0 package must be installed." @@ -8418,18 +8413,18 @@ "Opprettelsen av denne VDO-enheten ble ikke fullført, og enheten kan ikke " "brukes." -#: pkg/storaged/crypto/keyslots.jsx:696 +#: pkg/storaged/crypto/keyslots.jsx:730 msgid "" "The currently logged in user is not permitted to see information about keys." msgstr "Den påloggede brukeren har ikke lov til å se informasjon om nøkler." -#: pkg/storaged/block/format-dialog.jsx:369 +#: pkg/storaged/block/format-dialog.jsx:371 msgid "" "The disk needs to be unlocked before formatting. Please provide a existing " "passphrase." msgstr "" -#: pkg/sosreport/sosreport.jsx:370 +#: pkg/sosreport/sosreport.jsx:379 #, fuzzy #| msgid "The $0 could not be deleted" msgid "The file $0 will be deleted." @@ -8499,7 +8494,7 @@ msgid "The fingerprint should match:" msgstr "Vis fingeravtrykk" -#: pkg/packagekit/updates.jsx:515 +#: pkg/packagekit/updates.jsx:514 msgid "The following service will be restarted:" msgid_plural "The following services will be restarted:" msgstr[0] "Følgende tjeneste startes på nytt:" @@ -8533,7 +8528,7 @@ "new user." msgstr "" -#: pkg/storaged/crypto/keyslots.jsx:274 +#: pkg/storaged/crypto/keyslots.jsx:308 msgid "The initrd must be regenerated." msgstr "" @@ -8549,19 +8544,19 @@ msgid "The key you provided was not valid." msgstr "Nøkkelen du oppga var ikke gyldig." -#: pkg/storaged/crypto/keyslots.jsx:736 +#: pkg/storaged/crypto/keyslots.jsx:770 msgid "The last key slot can not be removed" msgstr "Den siste nøkkel-sloten kan ikke fjernes" -#: pkg/storaged/dialog.jsx:1367 +#: pkg/storaged/dialog.jsx:1369 msgid "The listed processes and services will be forcefully stopped." msgstr "" -#: pkg/storaged/dialog.jsx:1369 +#: pkg/storaged/dialog.jsx:1371 msgid "The listed processes will be forcefully stopped." msgstr "" -#: pkg/storaged/dialog.jsx:1371 +#: pkg/storaged/dialog.jsx:1373 #, fuzzy #| msgid "The following service will be restarted:" #| msgid_plural "The following services will be restarted:" @@ -8576,11 +8571,11 @@ msgid "The machine is rebooting" msgstr "Maskinen starter på nytt" -#: pkg/storaged/dialog.jsx:1325 +#: pkg/storaged/dialog.jsx:1327 msgid "The mount point $0 is in use by these processes:" msgstr "" -#: pkg/storaged/dialog.jsx:1345 +#: pkg/storaged/dialog.jsx:1347 msgid "The mount point $0 is in use by these services:" msgstr "" @@ -8625,17 +8620,17 @@ "Serveren nektet å autentisere '$0' ved hjelp av passordgodkjenning, og ingen " "andre støttede godkjenningsmetoder er tilgjengelige." -#: pkg/lib/cockpit.js:3846 +#: pkg/lib/cockpit.js:3842 msgid "The server refused to authenticate using any supported methods." msgstr "Serveren nektet å godkjenne ved hjelp av de støttede metodene." -#: pkg/storaged/crypto/keyslots.jsx:391 +#: pkg/storaged/crypto/keyslots.jsx:425 msgid "" "The system does not currently support unlocking a filesystem with a Tang " "keyserver during boot." msgstr "" -#: pkg/storaged/crypto/keyslots.jsx:390 +#: pkg/storaged/crypto/keyslots.jsx:424 msgid "" "The system does not currently support unlocking the root filesystem with a " "Tang keyserver." @@ -8710,19 +8705,19 @@ "At least $0 are required but only $1 are available." msgstr "" -#: pkg/shell/failures.jsx:42 +#: pkg/shell/failures.jsx:41 msgid "There was an unexpected error while connecting to the machine." msgstr "Det oppsto en uventet feil under tilkoblingen til maskinen." -#: pkg/storaged/crypto/keyslots.jsx:395 +#: pkg/storaged/crypto/keyslots.jsx:429 msgid "These additional steps are necessary:" msgstr "" -#: pkg/storaged/dialog.jsx:1239 +#: pkg/storaged/dialog.jsx:1241 msgid "These changes will be made:" msgstr "" -#: pkg/storaged/utils.js:286 +#: pkg/storaged/utils.js:287 msgid "Thin logical volume" msgstr "Tynt logisk volum" @@ -8747,8 +8742,8 @@ msgid "This VDO device does not use all of its backing device." msgstr "" -#: pkg/storaged/block/format-dialog.jsx:244 -#: pkg/storaged/filesystem/mounting-dialog.jsx:156 +#: pkg/storaged/block/format-dialog.jsx:246 +#: pkg/storaged/filesystem/mounting-dialog.jsx:159 #, fuzzy #| msgid "This device cannot be managed here." msgid "This device can not be used for the installation target." @@ -8758,7 +8753,7 @@ msgid "This device cannot be managed here." msgstr "Denne enheten kan ikke administreres her." -#: pkg/storaged/dialog.jsx:1134 +#: pkg/storaged/dialog.jsx:1136 #, fuzzy #| msgid "This device is currently used for VDO devices." msgid "This device is currently in use." @@ -8777,7 +8772,7 @@ msgid "This host will reboot after updates are installed." msgstr "Denne verten vil starte på nytt etter at oppdateringer er installert." -#: pkg/sosreport/sosreport.jsx:305 +#: pkg/sosreport/sosreport.jsx:314 #, fuzzy #| msgid "The collected information will be stored locally on the system." msgid "This information is stored only on the system." @@ -8839,7 +8834,7 @@ msgid "This pool is in a degraded state." msgstr "RAID-matrisen er i degradert tilstand" -#: pkg/packagekit/updates.jsx:1373 +#: pkg/packagekit/updates.jsx:1372 msgid "This system is not registered" msgstr "Dette systemet er ikke registrert" @@ -8975,7 +8970,7 @@ "For å sikre at forbindelsen din ikke blir fanget opp av en ondsinnet " "tredjepart, må du verifisere vertsnøkkelens fingeravtrykk:" -#: pkg/packagekit/updates.jsx:1376 +#: pkg/packagekit/updates.jsx:1375 msgid "" "To get software updates, this system needs to be registered with Red Hat, " "either using the Red Hat Customer Portal or a local subscription server." @@ -8984,7 +8979,7 @@ "Hat, enten ved hjelp av Red Hat Customer Portal eller en lokal " "abonnementsserver." -#: pkg/static/login.js:768 pkg/shell/hosts_dialog.jsx:477 +#: pkg/shell/hosts_dialog.jsx:477 pkg/static/login.js:768 msgid "" "To verify a fingerprint, run the following on $0 while physically sitting at " "the machine or through a trusted network:" @@ -9000,8 +8995,8 @@ msgid "Toggle" msgstr "" -#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 #: pkg/lib/cockpit-components-shutdown.jsx:212 pkg/lib/serverTime.js:600 +#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 msgid "Toggle date picker" msgstr "" @@ -9011,7 +9006,7 @@ msgid "Toggle filters" msgstr "Skjul filtre" -#: pkg/lib/cockpit.js:3868 +#: pkg/lib/cockpit.js:3864 msgid "Too much data" msgstr "For mye data" @@ -9077,7 +9072,7 @@ msgid "Trust and add host" msgstr "" -#: pkg/storaged/stratis/utils.jsx:86 pkg/storaged/crypto/keyslots.jsx:544 +#: pkg/storaged/crypto/keyslots.jsx:578 pkg/storaged/stratis/utils.jsx:86 msgid "Trust key" msgstr "" @@ -9127,12 +9122,12 @@ msgid "Turn on administrative access" msgstr "Slå på administrativ tilgang" -#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:308 -#: pkg/storaged/block/unrecognized-data.jsx:52 pkg/storaged/pages.jsx:715 #: pkg/storaged/partitions/partition.jsx:183 -#: pkg/storaged/partitions/partition.jsx:229 pkg/shell/credentials.jsx:199 -#: pkg/packagekit/autoupdates.jsx:279 +#: pkg/storaged/partitions/partition.jsx:229 +#: pkg/storaged/block/format-dialog.jsx:310 +#: pkg/storaged/block/unrecognized-data.jsx:51 pkg/storaged/pages.jsx:715 +#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 +#: pkg/shell/credentials.jsx:199 pkg/packagekit/autoupdates.jsx:279 msgid "Type" msgstr "Type" @@ -9158,12 +9153,11 @@ msgid "UDP" msgstr "UDP" -#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/stratis/pool.jsx:519 -#: pkg/storaged/lvm2/volume-group.jsx:386 +#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/btrfs/volume.jsx:127 +#: pkg/storaged/btrfs/device.jsx:78 pkg/storaged/btrfs/filesystem.jsx:77 #: pkg/storaged/lvm2/physical-volume.jsx:117 -#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/mdraid/mdraid.jsx:291 -#: pkg/storaged/btrfs/volume.jsx:127 pkg/storaged/btrfs/device.jsx:78 -#: pkg/storaged/btrfs/filesystem.jsx:77 +#: pkg/storaged/lvm2/volume-group.jsx:386 pkg/storaged/stratis/pool.jsx:519 +#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/mdraid/mdraid.jsx:291 msgid "UUID" msgstr "UUID" @@ -9274,7 +9268,7 @@ msgid "Undo" msgstr "" -#: pkg/storaged/crypto/keyslots.jsx:258 +#: pkg/storaged/crypto/keyslots.jsx:292 msgid "Unexpected PackageKit error during installation of $0: $1" msgstr "" @@ -9283,27 +9277,27 @@ msgid "Unexpected error" msgstr "Uventet feil" -#: pkg/storaged/block/unformatted-data.jsx:31 +#: pkg/storaged/block/unformatted-data.jsx:30 #, fuzzy #| msgid "Unrecognized data" msgid "Unformatted data" msgstr "Ukjente data" -#: pkg/systemd/logs.jsx:368 pkg/systemd/services-list.jsx:39 -#: pkg/systemd/services-list.jsx:44 +#: pkg/systemd/services-list.jsx:39 pkg/systemd/services-list.jsx:44 +#: pkg/systemd/logs.jsx:368 msgid "Unit" msgstr "Enhet" -#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 -#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 -#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 +#: pkg/storaged/swap/swap.jsx:116 pkg/networkmanager/interfaces.js:510 +#: pkg/networkmanager/interfaces.js:1035 #: pkg/networkmanager/network-interface.jsx:199 -#: pkg/networkmanager/network-interface.jsx:201 -#: pkg/networkmanager/interfaces.js:510 pkg/networkmanager/interfaces.js:1035 -#: pkg/storaged/swap/swap.jsx:116 pkg/lib/machine-info.js:61 +#: pkg/networkmanager/network-interface.jsx:201 pkg/lib/machine-info.js:61 #: pkg/lib/machine-info.js:226 pkg/lib/machine-info.js:234 #: pkg/lib/machine-info.js:236 pkg/lib/machine-info.js:243 #: pkg/lib/machine-info.js:245 pkg/lib/machine-info.js:249 +#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 +#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 +#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 msgid "Unknown" msgstr "Ukjent" @@ -9332,14 +9326,13 @@ msgid "Unknown service name" msgstr "Ukjent tjenestenavn" -#: pkg/storaged/crypto/keyslots.jsx:760 +#: pkg/storaged/crypto/keyslots.jsx:794 msgid "Unknown type" msgstr "Ukjent type" -#: pkg/storaged/stratis/stopped-pool.jsx:61 -#: pkg/storaged/crypto/locked-encrypted-data.jsx:37 -#: pkg/storaged/crypto/actions.jsx:41 pkg/storaged/crypto/actions.jsx:46 -#: pkg/shell/credentials.jsx:312 +#: pkg/storaged/crypto/locked-encrypted-data.jsx:36 +#: pkg/storaged/crypto/actions.jsx:40 pkg/storaged/crypto/actions.jsx:45 +#: pkg/storaged/stratis/stopped-pool.jsx:61 pkg/shell/credentials.jsx:312 msgid "Unlock" msgstr "Lås opp" @@ -9370,7 +9363,7 @@ msgid "Unlocking $target" msgstr "Låser opp $target" -#: pkg/storaged/crypto/keyslots.jsx:188 +#: pkg/storaged/crypto/keyslots.jsx:221 #, fuzzy #| msgid "Unlocking disk..." msgid "Unlocking disk" @@ -9381,14 +9374,14 @@ msgid "Unmanaged interfaces" msgstr "Ikke-administrerte grensesnitt" -#: pkg/storaged/stratis/filesystem.jsx:172 pkg/storaged/nfs/nfs.jsx:309 -#: pkg/storaged/filesystem/mounting-dialog.jsx:339 +#: pkg/storaged/nfs/nfs.jsx:309 pkg/storaged/btrfs/subvolume.jsx:338 +#: pkg/storaged/stratis/filesystem.jsx:172 +#: pkg/storaged/filesystem/mounting-dialog.jsx:357 #: pkg/storaged/filesystem/filesystem.jsx:102 -#: pkg/storaged/btrfs/subvolume.jsx:338 msgid "Unmount" msgstr "Demonter" -#: pkg/storaged/filesystem/mounting-dialog.jsx:333 +#: pkg/storaged/filesystem/mounting-dialog.jsx:351 #, fuzzy #| msgid "Unmount filesystem" msgid "Unmount filesystem $0" @@ -9413,7 +9406,7 @@ msgid "Unpin unit" msgstr "Systemd enheter" -#: pkg/storaged/block/unrecognized-data.jsx:35 +#: pkg/storaged/block/unrecognized-data.jsx:34 msgid "Unrecognized data" msgstr "Ukjente data" @@ -9437,7 +9430,7 @@ msgid "Until" msgstr "" -#: pkg/lib/cockpit.js:3848 pkg/lib/cockpit.js:3850 +#: pkg/lib/cockpit.js:3844 pkg/lib/cockpit.js:3846 msgid "Untrusted host" msgstr "" @@ -9445,11 +9438,11 @@ msgid "Update" msgstr "Oppdater" -#: pkg/packagekit/updates.jsx:754 +#: pkg/packagekit/updates.jsx:753 msgid "Update Success Table" msgstr "" -#: pkg/packagekit/updates.jsx:957 +#: pkg/packagekit/updates.jsx:956 msgid "Update history" msgstr "Oppdateringshistorikk" @@ -9457,7 +9450,7 @@ msgid "Update package information" msgstr "Oppdater pakkeinformasjon" -#: pkg/packagekit/updates.jsx:679 pkg/packagekit/updates.jsx:749 +#: pkg/packagekit/updates.jsx:678 pkg/packagekit/updates.jsx:748 msgid "Update was successful" msgstr "Oppdateringen var vellykket" @@ -9465,11 +9458,11 @@ msgid "Updated" msgstr "Oppdatert" -#: pkg/packagekit/updates.jsx:682 +#: pkg/packagekit/updates.jsx:681 msgid "Updated packages may require a reboot to take effect." msgstr "Oppdaterte pakker kan kreve omstart for å tre i kraft." -#: pkg/packagekit/updates.jsx:1441 +#: pkg/packagekit/updates.jsx:1440 msgid "Updates available" msgstr "Oppdateringer tilgjengelig" @@ -9495,13 +9488,15 @@ msgid "Uptime" msgstr "Oppetid" +#: pkg/storaged/btrfs/volume.jsx:129 pkg/storaged/btrfs/device.jsx:80 +#: pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/storaged/block/unrecognized-data.jsx:50 +#: pkg/storaged/lvm2/physical-volume.jsx:119 pkg/storaged/stratis/pool.jsx:521 +#: pkg/storaged/stratis/filesystem.jsx:226 +#: pkg/storaged/filesystem/filesystem.jsx:152 #: pkg/systemd/overview-cards/usageCard.jsx:127 pkg/metrics/metrics.jsx:1949 #: pkg/metrics/metrics.jsx:1950 pkg/metrics/metrics.jsx:1951 -#: pkg/metrics/metrics.jsx:1952 pkg/storaged/stratis/filesystem.jsx:226 -#: pkg/storaged/stratis/pool.jsx:521 pkg/storaged/lvm2/physical-volume.jsx:119 -#: pkg/storaged/block/unrecognized-data.jsx:51 -#: pkg/storaged/filesystem/filesystem.jsx:152 pkg/storaged/btrfs/volume.jsx:129 -#: pkg/storaged/btrfs/device.jsx:80 pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/metrics/metrics.jsx:1952 msgid "Usage" msgstr "Bruk" @@ -9511,18 +9506,18 @@ msgid "Usage of $0" msgstr "Bruk" -#: pkg/networkmanager/dialogs-common.jsx:103 pkg/storaged/dialog.jsx:624 -#: pkg/storaged/dialog.jsx:1139 +#: pkg/storaged/dialog.jsx:624 pkg/storaged/dialog.jsx:1141 +#: pkg/networkmanager/dialogs-common.jsx:103 #, fuzzy #| msgid "Used" msgid "Use" msgstr "Brukt" -#: pkg/storaged/lvm2/vdo-pool.jsx:85 pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 pkg/storaged/lvm2/vdo-pool.jsx:85 msgid "Use compression" msgstr "Bruk komprimering" -#: pkg/storaged/lvm2/vdo-pool.jsx:89 pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 pkg/storaged/lvm2/vdo-pool.jsx:89 msgid "Use deduplication" msgstr "Bruk deduplisering" @@ -9540,21 +9535,21 @@ msgid "Use the following keys to authenticate against other systems" msgstr "Bruk følgende nøkler for å autentisere mot andre systemer" -#: pkg/sosreport/sosreport.jsx:324 +#: pkg/sosreport/sosreport.jsx:333 msgid "Use verbose logging" msgstr "" -#: pkg/metrics/metrics.jsx:813 pkg/metrics/metrics.jsx:907 -#: pkg/storaged/swap/swap.jsx:125 +#: pkg/storaged/swap/swap.jsx:125 pkg/metrics/metrics.jsx:813 +#: pkg/metrics/metrics.jsx:907 msgid "Used" msgstr "Brukt" -#: pkg/storaged/filesystem/mounting-dialog.jsx:110 +#: pkg/storaged/filesystem/mounting-dialog.jsx:113 msgid "" "Useful for mounts that are optional or need interaction (such as passphrases)" msgstr "" -#: pkg/systemd/services.jsx:917 pkg/storaged/dialog.jsx:1331 +#: pkg/storaged/dialog.jsx:1333 pkg/systemd/services.jsx:916 msgid "User" msgstr "Bruker" @@ -9587,7 +9582,7 @@ msgstr "Navnet kan ikke være lengre enn $0 byte" #: pkg/static/login.html:94 pkg/shell/hosts_dialog.jsx:264 -#: pkg/users/account-create-dialog.js:76 pkg/users/account-details.js:262 +#: pkg/users/account-details.js:262 pkg/users/account-create-dialog.js:76 msgid "User name" msgstr "Brukernavn" @@ -9612,7 +9607,7 @@ msgid "VDO backing devices can not be made smaller" msgstr "" -#: pkg/storaged/utils.js:345 pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 pkg/storaged/utils.js:346 msgid "VDO device $0" msgstr "VDO-enhet $0" @@ -9638,7 +9633,7 @@ msgid "Validating authentication token" msgstr "Validerer godkjenningstoken" -#: pkg/systemd/hwinfo.jsx:278 pkg/storaged/drive/drive.jsx:120 +#: pkg/storaged/drive/drive.jsx:120 pkg/systemd/hwinfo.jsx:278 msgid "Vendor" msgstr "Leverandør" @@ -9652,7 +9647,7 @@ msgid "Verify fingerprint" msgstr "Fingeravtrykk" -#: pkg/storaged/stratis/utils.jsx:83 pkg/storaged/crypto/keyslots.jsx:540 +#: pkg/storaged/crypto/keyslots.jsx:574 pkg/storaged/stratis/utils.jsx:83 msgid "Verify key" msgstr "Verifiser nøkkel" @@ -9660,7 +9655,7 @@ msgid "Verifying" msgstr "Verifiserer" -#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:449 +#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:448 msgid "Version" msgstr "Versjon" @@ -9692,8 +9687,8 @@ msgid "View all services" msgstr "Filtrer tjenester" -#: pkg/kdump/kdump-view.jsx:526 #: pkg/lib/cockpit-components-modifications.jsx:154 +#: pkg/kdump/kdump-view.jsx:526 msgid "View automation script" msgstr "Vis automatiseringsskript" @@ -9737,7 +9732,7 @@ msgid "View report" msgstr "Vis rapport" -#: pkg/packagekit/updates.jsx:619 +#: pkg/packagekit/updates.jsx:618 #, fuzzy #| msgid "All logs" msgid "View update log" @@ -9760,8 +9755,8 @@ msgid "Volume group" msgstr "Volumgruppe" -#: pkg/storaged/lvm2/volume-group.jsx:223 #: pkg/storaged/lvm2/physical-volume.jsx:71 +#: pkg/storaged/lvm2/volume-group.jsx:223 #, fuzzy #| msgid "Removing physical volume from $target" msgid "Volume group is missing physical volumes" @@ -9789,7 +9784,7 @@ msgstr "" "Venter på at andre programmer skal bli ferdige å bruke pakkebehandling..." -#: pkg/storaged/crypto/keyslots.jsx:216 +#: pkg/storaged/crypto/keyslots.jsx:250 #: pkg/lib/cockpit-components-install-dialog.jsx:150 #: pkg/lib/cockpit-components-install-dialog.jsx:185 msgid "Waiting for other software management operations to finish" @@ -9826,7 +9821,7 @@ msgid "Web Console for Linux servers" msgstr "Web konsoll for Linux servere" -#: pkg/packagekit/updates.jsx:530 pkg/packagekit/updates.jsx:935 +#: pkg/packagekit/updates.jsx:529 pkg/packagekit/updates.jsx:934 msgid "Web Console will restart" msgstr "Web konsoll starter på nytt" @@ -9860,7 +9855,7 @@ msgid "When empty, connect with the current user" msgstr "" -#: pkg/packagekit/updates.jsx:533 pkg/packagekit/updates.jsx:940 +#: pkg/packagekit/updates.jsx:532 pkg/packagekit/updates.jsx:939 msgid "" "When the Web Console is restarted, you will no longer see progress " "information. However, the update process will continue in the background. " @@ -9925,11 +9920,11 @@ msgid "Yearly" msgstr "Årlig" -#: pkg/systemd/reporting.jsx:281 pkg/networkmanager/network-interface.jsx:241 +#: pkg/networkmanager/network-interface.jsx:241 pkg/systemd/reporting.jsx:281 msgid "Yes" msgstr "Ja" -#: pkg/static/login.js:765 pkg/shell/hosts_dialog.jsx:488 +#: pkg/shell/hosts_dialog.jsx:488 pkg/static/login.js:765 msgid "You are connecting to $0 for the first time." msgstr "Du kobler til $0 for første gang." @@ -9996,11 +9991,11 @@ "Serveren din lukker tilkoblingen snart. Du kan koble til igjen etter at den " "har startet på nytt." -#: pkg/lib/cockpit.js:3838 +#: pkg/lib/cockpit.js:3834 msgid "Your session has been terminated." msgstr "Økten din er avsluttet." -#: pkg/lib/cockpit.js:3840 +#: pkg/lib/cockpit.js:3836 msgid "Your session has expired. Please log in again." msgstr "Økten din har utløpt. Vennligst logg inn igjen." @@ -10068,7 +10063,7 @@ msgid "average: $0%" msgstr "" -#: pkg/storaged/dialog.jsx:1116 +#: pkg/storaged/dialog.jsx:1118 #, fuzzy #| msgid "Create VDO device" msgid "backing device for VDO device" @@ -10123,7 +10118,7 @@ msgstr "" #: pkg/storaged/btrfs/volume.jsx:146 pkg/storaged/btrfs/volume.jsx:158 -#: pkg/storaged/btrfs/filesystem.jsx:87 pkg/storaged/btrfs/subvolume.jsx:424 +#: pkg/storaged/btrfs/subvolume.jsx:424 pkg/storaged/btrfs/filesystem.jsx:87 #, fuzzy #| msgid "Storage volumes" msgid "btrfs subvolumes" @@ -10135,11 +10130,11 @@ msgid "btrfs volume" msgstr "Lagringsvolum" -#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:318 msgid "bug fix" msgstr "feilretting" -#: pkg/storaged/utils.js:175 +#: pkg/storaged/utils.js:176 msgctxt "format-bytes" msgid "bytes" msgstr "bytes" @@ -10180,7 +10175,7 @@ msgid "cpu" msgstr "cpu" -#: pkg/systemd/manifest.json:0 pkg/kdump/manifest.json:0 +#: pkg/kdump/manifest.json:0 pkg/systemd/manifest.json:0 msgid "crash" msgstr "krasj" @@ -10205,20 +10200,21 @@ msgid "debug" msgstr "debug" -#: pkg/storaged/stratis/filesystem.jsx:121 pkg/storaged/stratis/pool.jsx:133 -#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 -#: pkg/storaged/lvm2/block-logical-volume.jsx:64 -#: pkg/storaged/block/format-dialog.jsx:208 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 +#: pkg/storaged/partitions/partition.jsx:43 #: pkg/storaged/partitions/format-disk-dialog.jsx:35 -#: pkg/storaged/partitions/partition.jsx:43 pkg/storaged/mdraid/mdraid.jsx:112 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 #: pkg/storaged/btrfs/subvolume.jsx:217 +#: pkg/storaged/block/format-dialog.jsx:208 +#: pkg/storaged/lvm2/block-logical-volume.jsx:64 +#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 +#: pkg/storaged/stratis/pool.jsx:133 pkg/storaged/stratis/filesystem.jsx:121 +#: pkg/storaged/mdraid/mdraid.jsx:112 #, fuzzy #| msgid "Delete" msgid "delete" msgstr "Slett" -#: pkg/storaged/dialog.jsx:1119 +#: pkg/storaged/dialog.jsx:1121 msgid "device of btrfs volume" msgstr "" @@ -10250,19 +10246,19 @@ msgid "drive" msgstr "dIsk" -#: pkg/systemd/overview-cards/configurationCard.jsx:55 -#: pkg/networkmanager/network-interface.jsx:349 -#: pkg/networkmanager/dialogs-common.jsx:262 -#: pkg/storaged/stratis/filesystem.jsx:220 pkg/storaged/stratis/pool.jsx:517 -#: pkg/storaged/lvm2/volume-group.jsx:384 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 +#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/storaged/crypto/encryption.jsx:233 +#: pkg/storaged/crypto/encryption.jsx:236 #: pkg/storaged/lvm2/block-logical-volume.jsx:288 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/lvm2/volume-group.jsx:384 pkg/storaged/stratis/pool.jsx:517 +#: pkg/storaged/stratis/filesystem.jsx:220 +#: pkg/storaged/filesystem/utils.jsx:221 #: pkg/storaged/filesystem/filesystem.jsx:145 -#: pkg/storaged/filesystem/utils.jsx:221 pkg/storaged/crypto/encryption.jsx:233 -#: pkg/storaged/crypto/encryption.jsx:236 -#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 -#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/users/account-details.js:291 -#: pkg/users/account-details.js:321 +#: pkg/networkmanager/dialogs-common.jsx:261 +#: pkg/networkmanager/network-interface.jsx:349 +#: pkg/systemd/overview-cards/configurationCard.jsx:55 +#: pkg/users/account-details.js:291 pkg/users/account-details.js:321 msgid "edit" msgstr "rediger" @@ -10280,7 +10276,7 @@ msgid "encryption" msgstr "kryptering" -#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:318 msgid "enhancement" msgstr "" @@ -10338,7 +10334,7 @@ msgid "extension" msgstr "utvidelse" -#: pkg/systemd/overview-cards/configurationCard.jsx:153 +#: pkg/systemd/overview-cards/configurationCard.jsx:151 msgid "failed to list ssh host keys: $0" msgstr "kunne ikke liste ssh vertsnøkler: $0" @@ -10520,13 +10516,13 @@ msgid "max: $0%" msgstr "" -#: pkg/storaged/dialog.jsx:1115 +#: pkg/storaged/dialog.jsx:1117 #, fuzzy #| msgid "Member of RAID device" msgid "member of MDRAID device" msgstr "Medlem av RAID-enhet" -#: pkg/storaged/dialog.jsx:1117 +#: pkg/storaged/dialog.jsx:1119 #, fuzzy #| msgid "Create storage pool" msgid "member of Stratis pool" @@ -10554,7 +10550,7 @@ msgid "more details" msgstr "Flere detaljer" -#: pkg/storaged/utils.js:887 pkg/storaged/manifest.json:0 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "mount" msgstr "monter" @@ -10562,7 +10558,7 @@ msgid "nbde" msgstr "nbde" -#: pkg/systemd/manifest.json:0 pkg/networkmanager/manifest.json:0 +#: pkg/networkmanager/manifest.json:0 pkg/systemd/manifest.json:0 msgid "network" msgstr "nettverk" @@ -10596,11 +10592,11 @@ msgid "nice" msgstr "" -#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 -#: pkg/storaged/stratis/stopped-pool.jsx:130 -#: pkg/storaged/stratis/stopped-pool.jsx:134 #: pkg/storaged/crypto/encryption.jsx:232 #: pkg/storaged/crypto/encryption.jsx:235 +#: pkg/storaged/stratis/stopped-pool.jsx:130 +#: pkg/storaged/stratis/stopped-pool.jsx:134 +#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 msgid "none" msgstr "ingen" @@ -10650,7 +10646,7 @@ msgid "password quality" msgstr "passordkvalitet" -#: pkg/packagekit/updates.jsx:344 +#: pkg/packagekit/updates.jsx:343 msgid "patches" msgstr "" @@ -10672,7 +10668,7 @@ msgid "performance" msgstr "Ytelsesmålinger" -#: pkg/storaged/dialog.jsx:1114 +#: pkg/storaged/dialog.jsx:1116 #, fuzzy #| msgid "Create volume group" msgid "physical volume of LVM2 volume group" @@ -10727,17 +10723,17 @@ msgid "recommended" msgstr "anbefalt" -#: pkg/storaged/utils.js:946 +#: pkg/storaged/utils.js:947 msgid "remove from LVM2" msgstr "" -#: pkg/storaged/utils.js:935 +#: pkg/storaged/utils.js:936 #, fuzzy #| msgid "Removing $target from RAID device" msgid "remove from MDRAID" msgstr "Fjerner $target fra RAID-enhet" -#: pkg/storaged/utils.js:905 +#: pkg/storaged/utils.js:906 msgid "remove from btrfs volume" msgstr "" @@ -10749,11 +10745,11 @@ msgid "roles" msgstr "roller" -#: pkg/systemd/overview.jsx:159 +#: pkg/systemd/overview.jsx:169 msgid "running $0" msgstr "kjører $0" -#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:311 +#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:310 #: pkg/packagekit/manifest.json:0 msgid "security" msgstr "sikkerhet" @@ -10831,7 +10827,7 @@ msgid "ssh server is empty" msgstr "ssh server er tom" -#: pkg/storaged/utils.js:924 pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 pkg/storaged/utils.js:925 #: pkg/storaged/mdraid/mdraid.jsx:59 msgid "stop" msgstr "" @@ -10894,8 +10890,8 @@ msgid "unit" msgstr "enhet" -#: pkg/systemd/services.jsx:555 pkg/systemd/services.jsx:565 -#: pkg/systemd/hw-detect.js:129 +#: pkg/systemd/hw-detect.js:129 pkg/systemd/services.jsx:555 +#: pkg/systemd/services.jsx:565 msgid "unknown" msgstr "ukjent" @@ -10907,12 +10903,12 @@ msgid "unmask" msgstr "unmask" -#: pkg/storaged/utils.js:874 pkg/storaged/utils.js:887 -#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/manifest.json:0 +#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/utils.js:875 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "unmount" msgstr "unmount" -#: pkg/storaged/utils.js:533 +#: pkg/storaged/utils.js:534 msgid "unpartitioned space on $0" msgstr "upartisjonert plass på $0" diff -Nru cockpit-314/po/nl.po cockpit-316/po/nl.po --- cockpit-314/po/nl.po 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/po/nl.po 2024-04-25 09:45:58.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-26 02:47+0000\n" +"POT-Creation-Date: 2024-04-11 02:47+0000\n" "PO-Revision-Date: 2023-11-13 13:37+0000\n" "Last-Translator: Geert Warrink \n" "Language-Team: Dutch \n" "Language-Team: Polish \n" "Language-Team: Portuguese (Brazil) $0 não tem permissão para modificar reinos" -#: pkg/lib/cockpit.js:3842 +#: pkg/lib/cockpit.js:3838 msgid "Not permitted to perform this action." msgstr "Não é permitido executar esta ação." @@ -5731,13 +5730,13 @@ msgid "Not ready" msgstr "Não está pronto" -#: pkg/packagekit/updates.jsx:1366 +#: pkg/packagekit/updates.jsx:1365 msgid "Not registered" msgstr "Não registrado" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:466 #: pkg/systemd/services.jsx:234 pkg/systemd/services.jsx:237 -#: pkg/systemd/services.jsx:697 pkg/systemd/service-details.jsx:466 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:697 msgid "Not running" msgstr "Não está rodando" @@ -5763,11 +5762,11 @@ msgid "Notice and above" msgstr "Observe e acima" -#: pkg/sosreport/sosreport.jsx:322 +#: pkg/sosreport/sosreport.jsx:331 msgid "Obfuscate network addresses, hostnames, and usernames" msgstr "" -#: pkg/sosreport/sosreport.jsx:443 +#: pkg/sosreport/sosreport.jsx:452 msgid "Obfuscated" msgstr "" @@ -5779,8 +5778,8 @@ msgid "Occurred between $0 and $1" msgstr "Ocorreu entre $0 e $1" -#: pkg/selinux/setroubleshoot-view.jsx:414 #: pkg/lib/cockpit-components-logs-panel.jsx:98 +#: pkg/selinux/setroubleshoot-view.jsx:414 #, fuzzy #| msgid "Occurances" msgid "Occurrences" @@ -5790,7 +5789,7 @@ msgid "Ok" msgstr "Ok" -#: pkg/storaged/stratis/pool.jsx:402 pkg/storaged/crypto/keyslots.jsx:482 +#: pkg/storaged/crypto/keyslots.jsx:516 pkg/storaged/stratis/pool.jsx:402 msgid "Old passphrase" msgstr "Senha antiga" @@ -5798,7 +5797,7 @@ msgid "Old password" msgstr "Senha Atual" -#: pkg/users/password-dialogs.js:55 pkg/lib/credentials.js:221 +#: pkg/lib/credentials.js:221 pkg/users/password-dialogs.js:55 msgid "Old password not accepted" msgstr "Senha antiga não aceita" @@ -5834,7 +5833,7 @@ msgid "Only use approved and allowed algorithms when booting in FIPS mode." msgstr "" -#: pkg/shell/topnav.jsx:244 +#: pkg/shell/topnav.jsx:255 msgid "Ooops!" msgstr "Ooops!" @@ -5846,10 +5845,10 @@ msgid "Operation '$operation' on $target" msgstr "Operação '$operation' em $target" -#: pkg/sosreport/sosreport.jsx:321 pkg/networkmanager/bridge.jsx:104 -#: pkg/storaged/stratis/create-dialog.jsx:64 +#: pkg/storaged/crypto/encryption.jsx:234 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:223 -#: pkg/storaged/crypto/encryption.jsx:234 pkg/users/account-details.js:269 +#: pkg/storaged/stratis/create-dialog.jsx:64 pkg/sosreport/sosreport.jsx:330 +#: pkg/networkmanager/bridge.jsx:104 pkg/users/account-details.js:269 msgid "Options" msgstr "Opções" @@ -5861,7 +5860,7 @@ msgid "Other" msgstr "De outros" -#: pkg/users/account-create-dialog.js:131 pkg/users/account-details.js:279 +#: pkg/users/account-details.js:279 pkg/users/account-create-dialog.js:131 msgid "" "Other authentication methods are still available even when interactive " "password authentication is not allowed." @@ -5880,15 +5879,15 @@ msgid "Overview" msgstr "Visão geral" -#: pkg/storaged/block/format-dialog.jsx:322 #: pkg/storaged/partitions/format-disk-dialog.jsx:61 +#: pkg/storaged/block/format-dialog.jsx:324 #, fuzzy #| msgid "Overview" msgid "Overwrite" msgstr "Visão geral" -#: pkg/storaged/block/format-dialog.jsx:325 #: pkg/storaged/partitions/format-disk-dialog.jsx:64 +#: pkg/storaged/block/format-dialog.jsx:327 #, fuzzy #| msgid "Overwrite existing data with zeros" msgid "Overwrite existing data with zeros (slower)" @@ -5898,7 +5897,7 @@ msgid "PCI" msgstr "PCI" -#: pkg/storaged/dialog.jsx:1329 +#: pkg/storaged/dialog.jsx:1331 #, fuzzy #| msgid "ID" msgid "PID" @@ -5908,7 +5907,7 @@ msgid "Package cockpit-pcp is missing for metrics history" msgstr "" -#: pkg/packagekit/updates.jsx:690 pkg/packagekit/updates.jsx:769 +#: pkg/packagekit/updates.jsx:689 pkg/packagekit/updates.jsx:768 msgid "Package information" msgstr "Informações do pacote" @@ -5916,15 +5915,15 @@ msgid "PackageKit crashed" msgstr "PackageKit caiu" -#: pkg/packagekit/updates.jsx:1104 +#: pkg/packagekit/updates.jsx:1103 msgid "PackageKit is not installed" msgstr "PackageKit não está instalado" -#: pkg/packagekit/updates.jsx:1305 +#: pkg/packagekit/updates.jsx:1304 msgid "PackageKit reported error code $0" msgstr "PackageKit reportou código de erro $0" -#: pkg/packagekit/updates.jsx:364 +#: pkg/packagekit/updates.jsx:363 msgid "Packages" msgstr "Pacotes" @@ -5952,7 +5951,7 @@ msgid "Partition" msgstr "Partição" -#: pkg/storaged/utils.js:364 +#: pkg/storaged/utils.js:365 msgid "Partition of $0" msgstr "Partição de $0" @@ -5973,55 +5972,55 @@ msgid "Passive" msgstr "Passivo" +#: pkg/storaged/crypto/actions.jsx:42 pkg/storaged/crypto/keyslots.jsx:464 +#: pkg/storaged/crypto/keyslots.jsx:784 +#: pkg/storaged/block/format-dialog.jsx:336 +#: pkg/storaged/block/format-dialog.jsx:364 pkg/storaged/stratis/pool.jsx:201 +#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 +#: pkg/storaged/stratis/create-dialog.jsx:75 #: pkg/storaged/stratis/stopped-pool.jsx:58 #: pkg/storaged/stratis/stopped-pool.jsx:129 -#: pkg/storaged/stratis/create-dialog.jsx:75 pkg/storaged/stratis/pool.jsx:201 -#: pkg/storaged/stratis/pool.jsx:378 pkg/storaged/stratis/pool.jsx:526 -#: pkg/storaged/block/format-dialog.jsx:334 -#: pkg/storaged/block/format-dialog.jsx:362 -#: pkg/storaged/filesystem/mounting-dialog.jsx:323 -#: pkg/storaged/crypto/actions.jsx:43 pkg/storaged/crypto/keyslots.jsx:430 -#: pkg/storaged/crypto/keyslots.jsx:750 +#: pkg/storaged/filesystem/mounting-dialog.jsx:341 msgid "Passphrase" msgstr "Frase-senha" -#: pkg/storaged/crypto/keyslots.jsx:573 +#: pkg/storaged/crypto/keyslots.jsx:607 msgid "Passphrase can not be empty" msgstr "A senha não pode estar vazia" -#: pkg/storaged/stratis/create-dialog.jsx:79 pkg/storaged/stratis/pool.jsx:204 +#: pkg/storaged/crypto/keyslots.jsx:178 pkg/storaged/crypto/keyslots.jsx:472 +#: pkg/storaged/crypto/keyslots.jsx:517 pkg/storaged/crypto/keyslots.jsx:521 +#: pkg/storaged/block/format-dialog.jsx:340 +#: pkg/storaged/block/format-dialog.jsx:368 pkg/storaged/stratis/pool.jsx:204 #: pkg/storaged/stratis/pool.jsx:379 pkg/storaged/stratis/pool.jsx:405 #: pkg/storaged/stratis/pool.jsx:408 pkg/storaged/stratis/pool.jsx:463 -#: pkg/storaged/block/format-dialog.jsx:338 -#: pkg/storaged/block/format-dialog.jsx:366 -#: pkg/storaged/filesystem/mounting-dialog.jsx:326 -#: pkg/storaged/crypto/keyslots.jsx:145 pkg/storaged/crypto/keyslots.jsx:438 -#: pkg/storaged/crypto/keyslots.jsx:483 pkg/storaged/crypto/keyslots.jsx:487 +#: pkg/storaged/stratis/create-dialog.jsx:79 +#: pkg/storaged/filesystem/mounting-dialog.jsx:344 msgid "Passphrase cannot be empty" msgstr "A senha não pode estar vazia" -#: pkg/storaged/crypto/keyslots.jsx:595 +#: pkg/storaged/crypto/keyslots.jsx:629 #, fuzzy #| msgid "Passphrase cannot be empty" msgid "Passphrase from any other key slot" msgstr "A senha não pode estar vazia" -#: pkg/storaged/stratis/pool.jsx:439 pkg/storaged/crypto/keyslots.jsx:586 +#: pkg/storaged/crypto/keyslots.jsx:620 pkg/storaged/stratis/pool.jsx:439 msgid "Passphrase removal may prevent unlocking $0." msgstr "A remoção da senha pode impedir o desbloqueio de $0." -#: pkg/storaged/stratis/create-dialog.jsx:88 pkg/storaged/stratis/pool.jsx:381 -#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/block/format-dialog.jsx:347 -#: pkg/storaged/crypto/keyslots.jsx:447 pkg/storaged/crypto/keyslots.jsx:492 +#: pkg/storaged/crypto/keyslots.jsx:481 pkg/storaged/crypto/keyslots.jsx:526 +#: pkg/storaged/block/format-dialog.jsx:349 pkg/storaged/stratis/pool.jsx:381 +#: pkg/storaged/stratis/pool.jsx:410 pkg/storaged/stratis/create-dialog.jsx:88 msgid "Passphrases do not match" msgstr "As senhas não correspondem" #: pkg/static/login.html:99 pkg/storaged/iscsi/create-dialog.jsx:34 #: pkg/storaged/iscsi/create-dialog.jsx:140 pkg/shell/hosts_dialog.jsx:845 -#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/credentials.jsx:119 -#: pkg/shell/credentials.jsx:262 pkg/shell/credentials.jsx:318 -#: pkg/shell/superuser.jsx:144 pkg/users/account-create-dialog.js:139 -#: pkg/users/account-details.js:296 +#: pkg/shell/hosts_dialog.jsx:854 pkg/shell/superuser.jsx:144 +#: pkg/shell/credentials.jsx:119 pkg/shell/credentials.jsx:262 +#: pkg/shell/credentials.jsx:318 pkg/users/account-details.js:296 +#: pkg/users/account-create-dialog.js:139 msgid "Password" msgstr "Senha" @@ -6109,8 +6108,8 @@ msgid "Path to directory" msgstr "Caminho para o Diretório" -#: pkg/shell/credentials.jsx:172 #: pkg/lib/cockpit-components-file-autocomplete.jsx:169 +#: pkg/shell/credentials.jsx:172 msgid "Path to file" msgstr "Caminho para o arquivo" @@ -6148,7 +6147,7 @@ "system." msgstr "" -#: pkg/systemd/overview-cards/configurationCard.jsx:85 +#: pkg/systemd/overview-cards/configurationCard.jsx:84 msgid "Performance profile" msgstr "Perfil de desempenho" @@ -6164,9 +6163,10 @@ msgid "Permanently delete $0 group?" msgstr "Permanentemente deletar $0 grupo?" -#: pkg/storaged/stratis/pool.jsx:145 pkg/storaged/lvm2/volume-group.jsx:93 +#: pkg/storaged/partitions/partition.jsx:54 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:119 -#: pkg/storaged/partitions/partition.jsx:54 pkg/storaged/mdraid/mdraid.jsx:123 +#: pkg/storaged/lvm2/volume-group.jsx:93 pkg/storaged/stratis/pool.jsx:145 +#: pkg/storaged/mdraid/mdraid.jsx:123 msgid "Permanently delete $0?" msgstr "" @@ -6194,16 +6194,16 @@ msgid "Physical" msgstr "Fisica" +#: pkg/storaged/block/resize.jsx:436 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:180 #: pkg/storaged/lvm2/block-logical-volume.jsx:130 -#: pkg/storaged/block/resize.jsx:436 #, fuzzy #| msgid "Physical volumes" msgid "Physical Volumes" msgstr "Volumes Físicos" -#: pkg/storaged/lvm2/volume-group.jsx:390 #: pkg/storaged/lvm2/block-logical-volume.jsx:356 +#: pkg/storaged/lvm2/volume-group.jsx:390 msgid "Physical volumes" msgstr "Volumes Físicos" @@ -6213,8 +6213,8 @@ msgid "Physical volumes can not be resized here" msgstr "Volumes físicos não podem ser redimensionados aqui." -#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 #: pkg/lib/cockpit-components-shutdown.jsx:211 pkg/lib/serverTime.js:599 +#: pkg/systemd/timer-dialog.jsx:347 pkg/users/expiration-dialogs.js:48 msgid "Pick date" msgstr "" @@ -6268,7 +6268,7 @@ msgid "Please unmount them first." msgstr "" -#: pkg/storaged/utils.js:284 +#: pkg/storaged/utils.js:285 msgid "Pool for thin logical volumes" msgstr "Buscando por Thin Logical Volumes" @@ -6296,8 +6296,8 @@ msgid "Portable" msgstr "Portatil" -#: pkg/networkmanager/network-interface-members.jsx:203 #: pkg/networkmanager/team.jsx:159 pkg/networkmanager/bridge.jsx:101 +#: pkg/networkmanager/network-interface-members.jsx:208 msgid "Ports" msgstr "Portas" @@ -6320,7 +6320,7 @@ msgid "Preparing" msgstr "Preparando" -#: pkg/systemd/hw-detect.js:114 pkg/lib/machine-info.js:247 +#: pkg/lib/machine-info.js:247 pkg/systemd/hw-detect.js:114 msgid "Present" msgstr "Presente" @@ -6330,7 +6330,7 @@ msgid "Preserve" msgstr "Preservar" -#: pkg/systemd/overview-cards/configurationCard.jsx:288 +#: pkg/systemd/overview-cards/configurationCard.jsx:284 msgid "Pretty host name" msgstr "Nome de Host Bonito" @@ -6342,8 +6342,8 @@ msgid "Primary" msgstr "Primário" -#: pkg/systemd/logs.jsx:208 pkg/networkmanager/bridgeport.jsx:80 -#: pkg/networkmanager/teamport.jsx:84 +#: pkg/networkmanager/bridgeport.jsx:80 pkg/networkmanager/teamport.jsx:84 +#: pkg/systemd/logs.jsx:208 msgid "Priority" msgstr "Prioridade" @@ -6372,11 +6372,11 @@ msgid "Problem info" msgstr "Informação do Problema" -#: pkg/storaged/dialog.jsx:1171 +#: pkg/storaged/dialog.jsx:1173 msgid "Processes using the location" msgstr "" -#: pkg/sosreport/sosreport.jsx:292 +#: pkg/sosreport/sosreport.jsx:301 msgid "Progress: $0" msgstr "" @@ -6480,7 +6480,7 @@ msgid "RAID chassis" msgstr "Chassis do RAID" -#: pkg/storaged/mdraid/create-dialog.jsx:51 pkg/storaged/mdraid/mdraid.jsx:286 +#: pkg/storaged/mdraid/mdraid.jsx:286 pkg/storaged/mdraid/create-dialog.jsx:51 msgid "RAID level" msgstr "Nível de RAID" @@ -6549,11 +6549,11 @@ msgid "Ready" msgstr "Pronto" -#: pkg/systemd/overview-cards/configurationCard.jsx:291 +#: pkg/systemd/overview-cards/configurationCard.jsx:287 msgid "Real host name" msgstr "Nome Real de Host" -#: pkg/systemd/overview-cards/configurationCard.jsx:258 +#: pkg/systemd/overview-cards/configurationCard.jsx:254 msgid "" "Real host name can only contain lower-case characters, digits, dashes, and " "periods (with populated subdomains)" @@ -6561,7 +6561,7 @@ "Nome de host real só pode conter caracteres minúsculos, dígitos, traços e " "períodos (com subdomínios preenchidos)" -#: pkg/systemd/overview-cards/configurationCard.jsx:256 +#: pkg/systemd/overview-cards/configurationCard.jsx:252 msgid "Real host name must be 64 characters or less" msgstr "Nome de host real deve conter 64 caracteres ou menos" @@ -6569,14 +6569,14 @@ msgid "Reapply and reboot" msgstr "" -#: pkg/systemd/overview.jsx:109 pkg/systemd/overview.jsx:128 -#: pkg/lib/cockpit-components-logs-panel.jsx:114 #: pkg/lib/cockpit-components-shutdown.jsx:190 #: pkg/lib/cockpit-components-shutdown.jsx:192 +#: pkg/lib/cockpit-components-logs-panel.jsx:114 pkg/systemd/overview.jsx:110 +#: pkg/systemd/overview.jsx:135 msgid "Reboot" msgstr "Reiniciar" -#: pkg/packagekit/updates.jsx:614 +#: pkg/packagekit/updates.jsx:613 #, fuzzy #| msgid "Reboot recommended" msgid "Reboot after completion" @@ -6586,15 +6586,14 @@ msgid "Reboot recommended" msgstr "Recomenda-se reiniciar" -#: pkg/packagekit/updates.jsx:685 pkg/packagekit/updates.jsx:760 -#: pkg/packagekit/updates.jsx:824 +#: pkg/packagekit/updates.jsx:684 pkg/packagekit/updates.jsx:759 +#: pkg/packagekit/updates.jsx:823 msgid "Reboot system..." msgstr "" #: pkg/networkmanager/network-main.jsx:188 -#: pkg/networkmanager/network-main.jsx:203 -#: pkg/networkmanager/network-interface-members.jsx:205 -#: pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-main.jsx:203 pkg/networkmanager/plots.js:44 +#: pkg/networkmanager/network-interface-members.jsx:210 msgid "Receiving" msgstr "Recebendo" @@ -6608,7 +6607,7 @@ msgid "Recommended, secure settings for current threat models." msgstr "" -#: pkg/shell/failures.jsx:74 +#: pkg/shell/failures.jsx:72 msgid "Reconnect" msgstr "Reconectar" @@ -6644,25 +6643,25 @@ msgid "Regenerate" msgstr "Gerado" -#: pkg/storaged/crypto/keyslots.jsx:277 +#: pkg/storaged/crypto/keyslots.jsx:311 #, fuzzy #| msgid "Generating report" msgid "Regenerating initrd" msgstr "Gerando relatório" -#: pkg/packagekit/updates.jsx:1378 +#: pkg/packagekit/updates.jsx:1377 msgid "Register…" msgstr "Registro…" -#: pkg/storaged/dialog.jsx:1259 +#: pkg/storaged/dialog.jsx:1261 msgid "Related processes and services will be forcefully stopped." msgstr "" -#: pkg/storaged/dialog.jsx:1261 +#: pkg/storaged/dialog.jsx:1263 msgid "Related processes will be forcefully stopped." msgstr "" -#: pkg/storaged/dialog.jsx:1263 +#: pkg/storaged/dialog.jsx:1265 msgid "Related services will be forcefully stopped." msgstr "" @@ -6680,7 +6679,7 @@ msgid "Reloading" msgstr "Lendo" -#: pkg/packagekit/updates.jsx:510 +#: pkg/packagekit/updates.jsx:509 msgid "Reloading the state of remaining services" msgstr "" @@ -6726,19 +6725,19 @@ msgid "Removals:" msgstr "Remoções:" -#: pkg/systemd/timer-dialog.jsx:361 pkg/storaged/stratis/pool.jsx:443 +#: pkg/storaged/nfs/nfs.jsx:315 pkg/storaged/crypto/keyslots.jsx:649 +#: pkg/storaged/crypto/keyslots.jsx:684 pkg/storaged/crypto/keyslots.jsx:769 +#: pkg/storaged/lvm2/physical-volume.jsx:88 +#: pkg/storaged/lvm2/volume-group.jsx:347 pkg/storaged/stratis/pool.jsx:443 #: pkg/storaged/stratis/pool.jsx:500 pkg/storaged/stratis/pool.jsx:535 -#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/lvm2/volume-group.jsx:347 -#: pkg/storaged/lvm2/physical-volume.jsx:88 pkg/storaged/nfs/nfs.jsx:315 -#: pkg/storaged/crypto/keyslots.jsx:615 pkg/storaged/crypto/keyslots.jsx:650 -#: pkg/storaged/crypto/keyslots.jsx:735 pkg/storaged/mdraid/mdraid-disk.jsx:98 -#: pkg/shell/hosts.jsx:170 pkg/apps/application.jsx:50 -#: pkg/users/authorized-keys-panel.js:142 +#: pkg/storaged/stratis/pool.jsx:553 pkg/storaged/mdraid/mdraid-disk.jsx:98 +#: pkg/apps/application.jsx:50 pkg/systemd/timer-dialog.jsx:361 +#: pkg/shell/hosts.jsx:170 pkg/users/authorized-keys-panel.js:142 #: pkg/users/authorized-keys-panel.js:150 msgid "Remove" msgstr "Remover" -#: pkg/networkmanager/network-interface-members.jsx:110 +#: pkg/networkmanager/network-interface-members.jsx:111 msgid "Remove $0" msgstr "Remover $0" @@ -6746,11 +6745,11 @@ msgid "Remove $0 service from $1 zone" msgstr "" -#: pkg/storaged/stratis/pool.jsx:495 pkg/storaged/crypto/keyslots.jsx:634 +#: pkg/storaged/crypto/keyslots.jsx:668 pkg/storaged/stratis/pool.jsx:495 msgid "Remove $0?" msgstr "Remover $0?" -#: pkg/storaged/stratis/pool.jsx:493 pkg/storaged/crypto/keyslots.jsx:644 +#: pkg/storaged/crypto/keyslots.jsx:678 pkg/storaged/stratis/pool.jsx:493 msgid "Remove Tang keyserver?" msgstr "Remover o servidor de chaves Tang?" @@ -6779,7 +6778,7 @@ msgid "Remove missing physical volumes?" msgstr "Removendo volume físico de $target" -#: pkg/storaged/crypto/keyslots.jsx:608 +#: pkg/storaged/crypto/keyslots.jsx:642 #, fuzzy #| msgid "Remove passphrase in $0?" msgid "Remove passphrase in key slot $0?" @@ -6801,12 +6800,12 @@ msgid "Removing" msgstr "Removendo" -#: pkg/storaged/crypto/keyslots.jsx:222 +#: pkg/storaged/crypto/keyslots.jsx:256 #: pkg/lib/cockpit-components-install-dialog.jsx:191 msgid "Removing $0" msgstr "Removendo $0" -#: pkg/networkmanager/network-interface-members.jsx:109 +#: pkg/networkmanager/network-interface-members.jsx:110 #, fuzzy #| msgid "" #| "Removing $0 will break the connection to the server, and will make " @@ -6824,7 +6823,7 @@ msgid "Removing $target from MDRAID device" msgstr "Removendo $target de Dispositivo RAID" -#: pkg/storaged/crypto/keyslots.jsx:593 +#: pkg/storaged/crypto/keyslots.jsx:627 msgid "" "Removing a passphrase without confirmation of another passphrase may prevent " "unlocking or key management, if other passphrases are forgotten or lost." @@ -6845,11 +6844,10 @@ msgid "Removing the zone will remove all services within it." msgstr "" -#: pkg/storaged/stratis/filesystem.jsx:200 pkg/storaged/stratis/pool.jsx:173 -#: pkg/storaged/lvm2/volume-group.jsx:71 #: pkg/storaged/lvm2/block-logical-volume.jsx:53 #: pkg/storaged/lvm2/block-logical-volume.jsx:242 -#: pkg/users/rename-group-dialog.jsx:69 +#: pkg/storaged/lvm2/volume-group.jsx:71 pkg/storaged/stratis/pool.jsx:173 +#: pkg/storaged/stratis/filesystem.jsx:200 pkg/users/rename-group-dialog.jsx:69 msgid "Rename" msgstr "Renomear" @@ -6921,8 +6919,8 @@ msgid "Repeat monthly" msgstr "Repita Mensalmente" -#: pkg/storaged/crypto/keyslots.jsx:428 pkg/storaged/crypto/keyslots.jsx:441 -#: pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:462 pkg/storaged/crypto/keyslots.jsx:475 +#: pkg/storaged/crypto/keyslots.jsx:524 msgid "Repeat passphrase" msgstr "Repita a frase secreta" @@ -6930,11 +6928,11 @@ msgid "Repeat weekly" msgstr "Repita Semanalmente" -#: pkg/sosreport/sosreport.jsx:490 pkg/systemd/reporting.jsx:392 +#: pkg/sosreport/sosreport.jsx:499 pkg/systemd/reporting.jsx:392 msgid "Report" msgstr "Relatório" -#: pkg/sosreport/sosreport.jsx:308 +#: pkg/sosreport/sosreport.jsx:317 #, fuzzy #| msgid "Report" msgid "Report label" @@ -6956,7 +6954,7 @@ msgid "Reporting was canceled" msgstr "" -#: pkg/sosreport/sosreport.jsx:485 +#: pkg/sosreport/sosreport.jsx:494 #, fuzzy #| msgid "Report" msgid "Reports" @@ -7015,7 +7013,7 @@ msgid "Reserved memory" msgstr "Memória reservada" -#: pkg/systemd/terminal.jsx:183 pkg/systemd/logs.jsx:406 +#: pkg/systemd/logs.jsx:406 pkg/systemd/terminal.jsx:183 msgid "Reset" msgstr "Redefinir" @@ -7040,13 +7038,13 @@ msgid "Restart" msgstr "Reiniciar" -#: pkg/packagekit/updates.jsx:525 pkg/packagekit/updates.jsx:539 +#: pkg/packagekit/updates.jsx:524 pkg/packagekit/updates.jsx:538 #, fuzzy #| msgid "Start service" msgid "Restart services" msgstr "Começar serviço" -#: pkg/packagekit/updates.jsx:761 pkg/packagekit/updates.jsx:836 +#: pkg/packagekit/updates.jsx:760 pkg/packagekit/updates.jsx:835 #, fuzzy #| msgid "Start service" msgid "Restart services..." @@ -7111,7 +7109,7 @@ msgid "Run at" msgstr "Executar Imagem" -#: pkg/sosreport/sosreport.jsx:295 +#: pkg/sosreport/sosreport.jsx:304 #, fuzzy #| msgid "Report" msgid "Run new report" @@ -7121,7 +7119,7 @@ msgid "Run on" msgstr "" -#: pkg/sosreport/sosreport.jsx:273 pkg/sosreport/sosreport.jsx:482 +#: pkg/sosreport/sosreport.jsx:282 pkg/sosreport/sosreport.jsx:491 #, fuzzy #| msgid "Report" msgid "Run report" @@ -7136,13 +7134,13 @@ msgid "Runner" msgstr "Executor" +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/service-details.jsx:458 #: pkg/systemd/services.jsx:232 pkg/systemd/services.jsx:236 -#: pkg/systemd/services.jsx:696 pkg/systemd/service-details.jsx:458 -#: pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/systemd/services.jsx:696 msgid "Running" msgstr "Executando" -#: pkg/storaged/dialog.jsx:1332 pkg/storaged/dialog.jsx:1352 +#: pkg/storaged/dialog.jsx:1334 pkg/storaged/dialog.jsx:1354 msgid "Runtime" msgstr "" @@ -7187,7 +7185,7 @@ msgid "SMART self-test of $target" msgstr "SMART auto-teste de $target" -#: pkg/sosreport/sosreport.jsx:304 +#: pkg/sosreport/sosreport.jsx:313 msgid "" "SOS reporting collects system information to help with diagnosing problems." msgstr "" @@ -7202,8 +7200,8 @@ msgid "SSH key isn't a path" msgstr "chave ssh não é um caminho" -#: pkg/shell/credentials.jsx:79 pkg/shell/credentials.jsx:95 -#: pkg/shell/topnav.jsx:218 +#: pkg/shell/topnav.jsx:229 pkg/shell/credentials.jsx:79 +#: pkg/shell/credentials.jsx:95 msgid "SSH keys" msgstr "Chave SSH" @@ -7224,7 +7222,7 @@ msgid "STP priority" msgstr "STP Prioridade" -#: pkg/shell/failures.jsx:46 +#: pkg/shell/failures.jsx:45 msgid "" "Safari users need to import and trust the certificate of the self-signing CA:" msgstr "" @@ -7233,16 +7231,15 @@ msgid "Saturdays" msgstr "Sábados" -#: pkg/systemd/timer-dialog.jsx:148 pkg/metrics/metrics.jsx:1478 -#: pkg/networkmanager/dialogs-common.jsx:160 pkg/storaged/stratis/pool.jsx:384 +#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/partitions/partition.jsx:197 +#: pkg/storaged/btrfs/volume.jsx:96 pkg/storaged/crypto/encryption.jsx:168 +#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:531 +#: pkg/storaged/crypto/keyslots.jsx:550 pkg/storaged/stratis/pool.jsx:384 #: pkg/storaged/stratis/pool.jsx:413 pkg/storaged/stratis/pool.jsx:468 -#: pkg/storaged/nfs/nfs.jsx:188 pkg/storaged/filesystem/mounting-dialog.jsx:340 +#: pkg/storaged/filesystem/mounting-dialog.jsx:358 #: pkg/storaged/filesystem/filesystem.jsx:126 -#: pkg/storaged/crypto/encryption.jsx:168 -#: pkg/storaged/crypto/encryption.jsx:195 pkg/storaged/crypto/keyslots.jsx:497 -#: pkg/storaged/crypto/keyslots.jsx:516 -#: pkg/storaged/partitions/partition.jsx:197 pkg/storaged/btrfs/volume.jsx:96 -#: pkg/packagekit/kpatch.jsx:310 +#: pkg/networkmanager/dialogs-common.jsx:160 pkg/systemd/timer-dialog.jsx:148 +#: pkg/metrics/metrics.jsx:1478 pkg/packagekit/kpatch.jsx:310 msgid "Save" msgstr "Salvar" @@ -7250,7 +7247,7 @@ msgid "Save and reboot" msgstr "" -#: pkg/systemd/overview-cards/motdCard.jsx:61 pkg/kdump/kdump-view.jsx:229 +#: pkg/kdump/kdump-view.jsx:229 pkg/systemd/overview-cards/motdCard.jsx:61 #: pkg/packagekit/autoupdates.jsx:269 msgid "Save changes" msgstr "Salvar Mudanças" @@ -7263,8 +7260,8 @@ msgid "Save space by storing identical data blocks just once" msgstr "" -#: pkg/storaged/crypto/keyslots.jsx:401 pkg/storaged/crypto/keyslots.jsx:456 -#: pkg/storaged/crypto/keyslots.jsx:514 pkg/storaged/crypto/keyslots.jsx:542 +#: pkg/storaged/crypto/keyslots.jsx:435 pkg/storaged/crypto/keyslots.jsx:490 +#: pkg/storaged/crypto/keyslots.jsx:548 pkg/storaged/crypto/keyslots.jsx:576 msgid "" "Saving a new passphrase requires unlocking the disk. Please provide a " "current disk passphrase." @@ -7312,7 +7309,7 @@ msgid "Seconds" msgstr "Segundos" -#: pkg/systemd/overview-cards/configurationCard.jsx:92 +#: pkg/systemd/overview-cards/configurationCard.jsx:91 msgid "Secure shell keys" msgstr "" @@ -7324,7 +7321,7 @@ msgid "Security Enhanced Linux configuration and troubleshooting" msgstr "" -#: pkg/packagekit/updates.jsx:1435 +#: pkg/packagekit/updates.jsx:1434 msgid "Security updates available" msgstr "Atualizações de segurança disponíveis" @@ -7368,7 +7365,7 @@ #: pkg/networkmanager/network-main.jsx:187 #: pkg/networkmanager/network-main.jsx:202 -#: pkg/networkmanager/network-interface-members.jsx:204 +#: pkg/networkmanager/network-interface-members.jsx:209 msgid "Sending" msgstr "Enviando" @@ -7379,9 +7376,9 @@ msgid "Serial number" msgstr "Número de série" -#: pkg/static/login.html:159 pkg/networkmanager/ip-settings.jsx:262 -#: pkg/kdump/kdump-view.jsx:267 pkg/kdump/kdump-view.jsx:289 -#: pkg/storaged/nfs/nfs.jsx:328 +#: pkg/static/login.html:159 pkg/storaged/nfs/nfs.jsx:328 +#: pkg/networkmanager/ip-settings.jsx:262 pkg/kdump/kdump-view.jsx:267 +#: pkg/kdump/kdump-view.jsx:289 msgid "Server" msgstr "Servidor" @@ -7397,7 +7394,7 @@ msgid "Server cannot be empty." msgstr "O servidor não pode estar vazio." -#: pkg/lib/cockpit.js:3862 +#: pkg/lib/cockpit.js:3858 msgid "Server has closed the connection." msgstr "O servidor encerrou a conexão." @@ -7405,10 +7402,10 @@ msgid "Server software" msgstr "Software de servidor" +#: pkg/storaged/dialog.jsx:1351 pkg/networkmanager/firewall.jsx:207 #: pkg/metrics/metrics.jsx:812 pkg/metrics/metrics.jsx:813 #: pkg/metrics/metrics.jsx:868 pkg/metrics/metrics.jsx:906 #: pkg/metrics/metrics.jsx:966 pkg/metrics/metrics.jsx:972 -#: pkg/networkmanager/firewall.jsx:207 pkg/storaged/dialog.jsx:1349 msgid "Service" msgstr "Serviço" @@ -7420,19 +7417,19 @@ msgid "Service logs" msgstr "Logs de Serviço" -#: pkg/systemd/services.html:4 pkg/systemd/service-tabs.jsx:40 -#: pkg/systemd/service.jsx:151 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/services.html:4 pkg/networkmanager/firewall.jsx:628 +#: pkg/systemd/service.jsx:151 pkg/systemd/service-tabs.jsx:40 #: pkg/systemd/manifest.json:0 msgid "Services" msgstr "Serviços" -#: pkg/storaged/dialog.jsx:1157 +#: pkg/storaged/dialog.jsx:1159 #, fuzzy #| msgid "Service is starting" msgid "Services using the location" msgstr "O serviço está iniciando" -#: pkg/shell/topnav.jsx:273 +#: pkg/shell/topnav.jsx:303 msgid "Session" msgstr "Sessão" @@ -7454,8 +7451,8 @@ msgid "Set partition type of $0" msgstr "Criar Partição em $0" -#: pkg/users/password-dialogs.js:226 pkg/users/password-dialogs.js:233 -#: pkg/users/account-details.js:301 +#: pkg/users/account-details.js:301 pkg/users/password-dialogs.js:226 +#: pkg/users/password-dialogs.js:233 msgid "Set password" msgstr "Definir uma Senha" @@ -7492,11 +7489,11 @@ msgid "Setting up loop device $target" msgstr "Configurando o dispositivo de loop $target" -#: pkg/packagekit/updates.jsx:919 +#: pkg/packagekit/updates.jsx:918 msgid "Settings" msgstr "Configurações" -#: pkg/packagekit/updates.jsx:375 pkg/packagekit/updates.jsx:450 +#: pkg/packagekit/updates.jsx:374 pkg/packagekit/updates.jsx:449 msgid "Severity" msgstr "Gravidade" @@ -7504,7 +7501,7 @@ msgid "Shared" msgstr "Compartilhado" -#: pkg/users/account-create-dialog.js:93 pkg/users/account-details.js:329 +#: pkg/users/account-details.js:329 pkg/users/account-create-dialog.js:93 msgid "Shell" msgstr "" @@ -7534,7 +7531,7 @@ msgid "Show confirmation password" msgstr "Confirme a senha" -#: pkg/systemd/overview-cards/configurationCard.jsx:96 +#: pkg/systemd/overview-cards/configurationCard.jsx:95 msgid "Show fingerprints" msgstr "Exibir digitais" @@ -7564,8 +7561,8 @@ msgid "Show relationships" msgstr "" +#: pkg/storaged/partitions/partition.jsx:101 pkg/storaged/block/resize.jsx:635 #: pkg/storaged/lvm2/block-logical-volume.jsx:205 -#: pkg/storaged/block/resize.jsx:635 pkg/storaged/partitions/partition.jsx:101 msgid "Shrink" msgstr "Compactar" @@ -7573,7 +7570,7 @@ msgid "Shrink logical volume" msgstr "Compactar Logical Volume" -#: pkg/storaged/block/resize.jsx:557 pkg/storaged/partitions/partition.jsx:218 +#: pkg/storaged/partitions/partition.jsx:218 pkg/storaged/block/resize.jsx:557 #, fuzzy #| msgid "partition" msgid "Shrink partition" @@ -7589,7 +7586,7 @@ msgid "Shut down" msgstr "Encerrar" -#: pkg/systemd/overview.jsx:114 +#: pkg/systemd/overview.jsx:115 msgid "Shutdown" msgstr "Desligar" @@ -7597,40 +7594,40 @@ msgid "Since" msgstr "Desde" -#: pkg/systemd/hw-detect.js:90 pkg/lib/machine-info.js:238 +#: pkg/lib/machine-info.js:238 pkg/systemd/hw-detect.js:90 msgid "Single rank" msgstr "" -#: pkg/systemd/hwinfo.jsx:291 pkg/storaged/stratis/pool.jsx:96 -#: pkg/storaged/lvm2/vdo-pool.jsx:79 +#: pkg/storaged/nfs/nfs.jsx:330 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/block/format-dialog.jsx:315 pkg/storaged/block/resize.jsx:448 +#: pkg/storaged/block/resize.jsx:581 pkg/storaged/pages.jsx:717 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:199 #: pkg/storaged/lvm2/create-logical-volume-dialog.jsx:206 +#: pkg/storaged/lvm2/block-logical-volume.jsx:291 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:49 #: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:143 -#: pkg/storaged/lvm2/block-logical-volume.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:313 pkg/storaged/block/resize.jsx:448 -#: pkg/storaged/block/resize.jsx:581 pkg/storaged/nfs/nfs.jsx:330 -#: pkg/storaged/pages.jsx:717 pkg/storaged/partitions/partition.jsx:235 +#: pkg/storaged/lvm2/vdo-pool.jsx:79 pkg/storaged/stratis/pool.jsx:96 +#: pkg/systemd/hwinfo.jsx:291 msgid "Size" msgstr "Tamanho" -#: pkg/storaged/dialog.jsx:1074 +#: pkg/storaged/dialog.jsx:1076 msgid "Size cannot be negative" msgstr "O tamanho não pode ser negativo" -#: pkg/storaged/dialog.jsx:1072 +#: pkg/storaged/dialog.jsx:1074 msgid "Size cannot be zero" msgstr "O tamanho não pode ser zero" -#: pkg/storaged/dialog.jsx:1076 +#: pkg/storaged/dialog.jsx:1078 msgid "Size is too large" msgstr "O tamanho é muito extenso" -#: pkg/storaged/dialog.jsx:1070 +#: pkg/storaged/dialog.jsx:1072 msgid "Size must be a number" msgstr "O tamanho deve ser um número" -#: pkg/storaged/dialog.jsx:1078 +#: pkg/storaged/dialog.jsx:1080 msgid "Size must be at least $0" msgstr "O tamanho deve ser pelo menos $0" @@ -7647,7 +7644,7 @@ msgid "Slot" msgstr "Slot" -#: pkg/storaged/crypto/keyslots.jsx:723 pkg/storaged/mdraid/mdraid-disk.jsx:80 +#: pkg/storaged/crypto/keyslots.jsx:757 pkg/storaged/mdraid/mdraid-disk.jsx:80 msgid "Slot $0" msgstr "Slot $0" @@ -7702,7 +7699,7 @@ "Algum outro programa está atualmente usando o gerenciador de pacotes, por " "favor aguarde ..." -#: pkg/packagekit/updates.jsx:737 pkg/packagekit/updates.jsx:844 +#: pkg/packagekit/updates.jsx:736 pkg/packagekit/updates.jsx:843 #: pkg/packagekit/updates.jsx:1536 msgid "Some software needs to be restarted manually" msgstr "" @@ -7745,10 +7742,9 @@ msgid "Stable" msgstr "Estável" +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 pkg/storaged/swap/swap.jsx:98 +#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/mdraid/mdraid.jsx:210 #: pkg/systemd/service-details.jsx:144 -#: pkg/storaged/stratis/stopped-pool.jsx:108 pkg/storaged/swap/swap.jsx:98 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:150 -#: pkg/storaged/mdraid/mdraid.jsx:210 msgid "Start" msgstr "Iniciar" @@ -7760,7 +7756,7 @@ msgid "Start multipath" msgstr "Iniciar Multipath" -#: pkg/systemd/service-details.jsx:447 pkg/networkmanager/networkmanager.jsx:78 +#: pkg/networkmanager/networkmanager.jsx:78 pkg/systemd/service-details.jsx:447 msgid "Start service" msgstr "Começar serviço" @@ -7788,18 +7784,18 @@ msgid "Starting swapspace $target" msgstr "Iniciando swapspace $target" -#: pkg/systemd/hwinfo.jsx:291 pkg/systemd/services-list.jsx:40 -#: pkg/systemd/services-list.jsx:46 pkg/storaged/mdraid/mdraid.jsx:287 +#: pkg/storaged/mdraid/mdraid.jsx:287 pkg/systemd/services-list.jsx:40 +#: pkg/systemd/services-list.jsx:46 pkg/systemd/hwinfo.jsx:291 msgid "State" msgstr "Estado" -#: pkg/systemd/services.jsx:252 pkg/systemd/services.jsx:688 -#: pkg/systemd/service-details.jsx:476 +#: pkg/systemd/service-details.jsx:476 pkg/systemd/services.jsx:252 +#: pkg/systemd/services.jsx:688 msgid "Static" msgstr "Estático" -#: pkg/systemd/service-details.jsx:648 -#: pkg/networkmanager/network-interface.jsx:265 pkg/packagekit/updates.jsx:908 +#: pkg/networkmanager/network-interface.jsx:265 +#: pkg/systemd/service-details.jsx:648 pkg/packagekit/updates.jsx:907 msgid "Status" msgstr "Estado" @@ -7812,10 +7808,9 @@ msgid "Sticky" msgstr "Pegajoso" -#: pkg/systemd/service-details.jsx:140 pkg/storaged/swap/swap.jsx:95 #: pkg/storaged/legacy-vdo/legacy-vdo.jsx:62 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 -#: pkg/storaged/mdraid/mdraid.jsx:289 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:149 pkg/storaged/swap/swap.jsx:95 +#: pkg/storaged/mdraid/mdraid.jsx:289 pkg/systemd/service-details.jsx:140 msgid "Stop" msgstr "Pare" @@ -7839,7 +7834,7 @@ msgid "Stop editing hosts" msgstr "" -#: pkg/sosreport/sosreport.jsx:277 +#: pkg/sosreport/sosreport.jsx:286 #, fuzzy #| msgid "Create report" msgid "Stop report" @@ -7870,7 +7865,7 @@ msgid "Storage logs" msgstr "Logs de Armazenamento" -#: pkg/storaged/block/format-dialog.jsx:359 +#: pkg/storaged/block/format-dialog.jsx:361 msgid "Store passphrase" msgstr "Armazene a senha" @@ -7886,7 +7881,7 @@ msgid "Stratis block device" msgstr "$0 Dispositivos de Bloco" -#: pkg/storaged/stratis/stopped-pool.jsx:141 pkg/storaged/stratis/pool.jsx:566 +#: pkg/storaged/stratis/pool.jsx:566 pkg/storaged/stratis/stopped-pool.jsx:141 #, fuzzy #| msgid "$0 block device" msgid "Stratis block devices" @@ -7916,8 +7911,8 @@ msgid "Stratis filesystems pool" msgstr "Sistema de arquivos" -#: pkg/storaged/stratis/stopped-pool.jsx:98 pkg/storaged/stratis/pool.jsx:271 -#: pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/pool.jsx:271 pkg/storaged/stratis/blockdev.jsx:81 +#: pkg/storaged/stratis/stopped-pool.jsx:98 #, fuzzy msgid "Stratis pool" msgstr "Pools de Armazenamento" @@ -7932,7 +7927,7 @@ msgid "Striped and mirrored (RAID 10)" msgstr "" -#: pkg/storaged/lvm2/block-logical-volume.jsx:399 +#: pkg/storaged/lvm2/block-logical-volume.jsx:398 msgid "Stripes" msgstr "" @@ -7946,7 +7941,7 @@ msgid "Stub" msgstr "" -#: pkg/shell/topnav.jsx:184 +#: pkg/shell/topnav.jsx:193 msgid "Style" msgstr "" @@ -7984,8 +7979,8 @@ msgid "Sundays" msgstr "Domingos" -#: pkg/metrics/metrics.jsx:130 pkg/metrics/metrics.jsx:725 -#: pkg/metrics/metrics.jsx:1950 pkg/storaged/swap/swap.jsx:88 +#: pkg/storaged/swap/swap.jsx:88 pkg/metrics/metrics.jsx:130 +#: pkg/metrics/metrics.jsx:725 pkg/metrics/metrics.jsx:1950 msgid "Swap" msgstr "Swap" @@ -8001,18 +7996,18 @@ msgid "Swap out" msgstr "Trocar" -#: pkg/networkmanager/network-interface-members.jsx:67 +#: pkg/networkmanager/network-interface-members.jsx:68 #, fuzzy #| msgid "Switch off $0" msgid "Switch of $0" msgstr "Desligar $0" -#: pkg/networkmanager/network-interface-members.jsx:87 +#: pkg/networkmanager/network-interface-members.jsx:88 #: pkg/networkmanager/network-interface.jsx:163 msgid "Switch off $0" msgstr "Desligar $0" -#: pkg/networkmanager/network-interface-members.jsx:78 +#: pkg/networkmanager/network-interface-members.jsx:79 #: pkg/networkmanager/network-interface.jsx:144 msgid "Switch on $0" msgstr "Ligar $0" @@ -8026,7 +8021,7 @@ msgid "Switch to limited access" msgstr "" -#: pkg/networkmanager/network-interface-members.jsx:86 +#: pkg/networkmanager/network-interface-members.jsx:87 #: pkg/networkmanager/network-interface.jsx:162 #, fuzzy #| msgid "" @@ -8039,7 +8034,7 @@ "Desligando $0 irá encerrar a conexão com o servidor, e tornará a " "administração da interface do usuário indisponível." -#: pkg/networkmanager/network-interface-members.jsx:77 +#: pkg/networkmanager/network-interface-members.jsx:78 #: pkg/networkmanager/network-interface.jsx:143 #, fuzzy #| msgid "" @@ -8071,18 +8066,18 @@ msgid "Synchronizing MDRAID device $target" msgstr "Sincronizando Dispositivo RAID $target" -#: pkg/systemd/services.jsx:913 pkg/shell/nav.jsx:46 pkg/shell/indexes.jsx:343 +#: pkg/systemd/services.jsx:912 pkg/shell/indexes.jsx:343 pkg/shell/nav.jsx:46 msgid "System" msgstr "Sistema" -#: pkg/sosreport/sosreport.jsx:509 +#: pkg/sosreport/sosreport.jsx:518 #, fuzzy #| msgid "System modifications" msgid "System diagnostics" msgstr "Modificações no sistema" -#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 #: pkg/systemd/hwinfo.jsx:315 +#: pkg/systemd/overview-cards/systemInformationCard.jsx:106 msgid "System information" msgstr "Informação do sistema" @@ -8094,7 +8089,7 @@ msgid "System modifications" msgstr "Modificações no sistema" -#: pkg/systemd/overview-cards/configurationCard.jsx:75 +#: pkg/systemd/overview-cards/configurationCard.jsx:74 msgid "System time" msgstr "Hora do sistema" @@ -8111,7 +8106,7 @@ msgid "Tablet" msgstr "Tablet" -#: pkg/storaged/crypto/keyslots.jsx:431 +#: pkg/storaged/crypto/keyslots.jsx:465 #, fuzzy msgid "Tang keyserver" msgstr "Servidor de chaves Tang" @@ -8177,7 +8172,7 @@ msgid "Testing connection" msgstr "Testando conexão" -#: pkg/storaged/crypto/keyslots.jsx:242 +#: pkg/storaged/crypto/keyslots.jsx:276 #, fuzzy #| msgid "$0 is not available from any repository." msgid "The $0 package is not available from any repository." @@ -8187,7 +8182,7 @@ msgid "The $0 package must be installed to create Stratis pools." msgstr "" -#: pkg/storaged/crypto/keyslots.jsx:237 pkg/storaged/crypto/keyslots.jsx:253 +#: pkg/storaged/crypto/keyslots.jsx:271 pkg/storaged/crypto/keyslots.jsx:287 msgid "The $0 package must be installed." msgstr "O pacote $0 deve estar instalado." @@ -8254,20 +8249,20 @@ "A criação deste dispositivo VDO não foi concluída e o dispositivo não pode " "ser usado." -#: pkg/storaged/crypto/keyslots.jsx:696 +#: pkg/storaged/crypto/keyslots.jsx:730 msgid "" "The currently logged in user is not permitted to see information about keys." msgstr "" "O usuário atualmente conectado não tem permissão para ver informações sobre " "chaves." -#: pkg/storaged/block/format-dialog.jsx:369 +#: pkg/storaged/block/format-dialog.jsx:371 msgid "" "The disk needs to be unlocked before formatting. Please provide a existing " "passphrase." msgstr "" -#: pkg/sosreport/sosreport.jsx:370 +#: pkg/sosreport/sosreport.jsx:379 #, fuzzy #| msgid "$0 will be installed." msgid "The file $0 will be deleted." @@ -8326,7 +8321,7 @@ msgid "The fingerprint should match:" msgstr "Exibir digitais" -#: pkg/packagekit/updates.jsx:515 +#: pkg/packagekit/updates.jsx:514 msgid "The following service will be restarted:" msgid_plural "The following services will be restarted:" msgstr[0] "O seguinte serviço será reiniciado:" @@ -8356,7 +8351,7 @@ "new user." msgstr "" -#: pkg/storaged/crypto/keyslots.jsx:274 +#: pkg/storaged/crypto/keyslots.jsx:308 msgid "The initrd must be regenerated." msgstr "" @@ -8372,19 +8367,19 @@ msgid "The key you provided was not valid." msgstr "A chave que você forneceu não era válida." -#: pkg/storaged/crypto/keyslots.jsx:736 +#: pkg/storaged/crypto/keyslots.jsx:770 msgid "The last key slot can not be removed" msgstr "O último slot chave não pode ser removido" -#: pkg/storaged/dialog.jsx:1367 +#: pkg/storaged/dialog.jsx:1369 msgid "The listed processes and services will be forcefully stopped." msgstr "" -#: pkg/storaged/dialog.jsx:1369 +#: pkg/storaged/dialog.jsx:1371 msgid "The listed processes will be forcefully stopped." msgstr "" -#: pkg/storaged/dialog.jsx:1371 +#: pkg/storaged/dialog.jsx:1373 msgid "The listed services will be forcefully stopped." msgstr "Os serviços listados serão interrompidos à força." @@ -8396,11 +8391,11 @@ msgid "The machine is rebooting" msgstr "A máquina esta reiniciando" -#: pkg/storaged/dialog.jsx:1325 +#: pkg/storaged/dialog.jsx:1327 msgid "The mount point $0 is in use by these processes:" msgstr "" -#: pkg/storaged/dialog.jsx:1345 +#: pkg/storaged/dialog.jsx:1347 msgid "The mount point $0 is in use by these services:" msgstr "" @@ -8443,18 +8438,18 @@ "O servidor se recusou a autenticar '$0' usando a autenticação de senha e " "nenhum outro método de autenticação suportado está disponível." -#: pkg/lib/cockpit.js:3846 +#: pkg/lib/cockpit.js:3842 msgid "The server refused to authenticate using any supported methods." msgstr "" "O servidor se recusou a autenticar usando quaisquer métodos suportados." -#: pkg/storaged/crypto/keyslots.jsx:391 +#: pkg/storaged/crypto/keyslots.jsx:425 msgid "" "The system does not currently support unlocking a filesystem with a Tang " "keyserver during boot." msgstr "" -#: pkg/storaged/crypto/keyslots.jsx:390 +#: pkg/storaged/crypto/keyslots.jsx:424 msgid "" "The system does not currently support unlocking the root filesystem with a " "Tang keyserver." @@ -8528,19 +8523,19 @@ "At least $0 are required but only $1 are available." msgstr "" -#: pkg/shell/failures.jsx:42 +#: pkg/shell/failures.jsx:41 msgid "There was an unexpected error while connecting to the machine." msgstr "Ocorreu um erro inesperado enquanto conectava-se à máquina." -#: pkg/storaged/crypto/keyslots.jsx:395 +#: pkg/storaged/crypto/keyslots.jsx:429 msgid "These additional steps are necessary:" msgstr "" -#: pkg/storaged/dialog.jsx:1239 +#: pkg/storaged/dialog.jsx:1241 msgid "These changes will be made:" msgstr "Essas mudanças serão realizadas:" -#: pkg/storaged/utils.js:286 +#: pkg/storaged/utils.js:287 #, fuzzy msgid "Thin logical volume" msgstr "Volume lógico Thin" @@ -8567,8 +8562,8 @@ msgid "This VDO device does not use all of its backing device." msgstr "Este dispositivo VDO não usa todo o seu dispositivo de apoio." -#: pkg/storaged/block/format-dialog.jsx:244 -#: pkg/storaged/filesystem/mounting-dialog.jsx:156 +#: pkg/storaged/block/format-dialog.jsx:246 +#: pkg/storaged/filesystem/mounting-dialog.jsx:159 #, fuzzy #| msgid "This device cannot be managed here." msgid "This device can not be used for the installation target." @@ -8578,7 +8573,7 @@ msgid "This device cannot be managed here." msgstr "Este dispositivo não pode ser gerenciado aqui." -#: pkg/storaged/dialog.jsx:1134 +#: pkg/storaged/dialog.jsx:1136 #, fuzzy #| msgid "This device is currently used for VDO devices." msgid "This device is currently in use." @@ -8597,7 +8592,7 @@ msgid "This host will reboot after updates are installed." msgstr "" -#: pkg/sosreport/sosreport.jsx:305 +#: pkg/sosreport/sosreport.jsx:314 #, fuzzy #| msgid "The collected information will be stored locally on the system." msgid "This information is stored only on the system." @@ -8657,7 +8652,7 @@ msgid "This pool is in a degraded state." msgstr "Esta piscina está em estado de degradação." -#: pkg/packagekit/updates.jsx:1373 +#: pkg/packagekit/updates.jsx:1372 msgid "This system is not registered" msgstr "Este sistema não está registrado" @@ -8793,7 +8788,7 @@ "party, please verify the host key fingerprint:" msgstr "" -#: pkg/packagekit/updates.jsx:1376 +#: pkg/packagekit/updates.jsx:1375 msgid "" "To get software updates, this system needs to be registered with Red Hat, " "either using the Red Hat Customer Portal or a local subscription server." @@ -8802,7 +8797,7 @@ "Red Hat, usando o Portal do Cliente Red Hat ou um servidor de assinatura " "local." -#: pkg/static/login.js:768 pkg/shell/hosts_dialog.jsx:477 +#: pkg/shell/hosts_dialog.jsx:477 pkg/static/login.js:768 msgid "" "To verify a fingerprint, run the following on $0 while physically sitting at " "the machine or through a trusted network:" @@ -8816,8 +8811,8 @@ msgid "Toggle" msgstr "" -#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 #: pkg/lib/cockpit-components-shutdown.jsx:212 pkg/lib/serverTime.js:600 +#: pkg/systemd/timer-dialog.jsx:348 pkg/users/expiration-dialogs.js:49 msgid "Toggle date picker" msgstr "" @@ -8826,7 +8821,7 @@ msgid "Toggle filters" msgstr "Limpar todos filtros" -#: pkg/lib/cockpit.js:3868 +#: pkg/lib/cockpit.js:3864 msgid "Too much data" msgstr "Muitos dados" @@ -8896,7 +8891,7 @@ msgid "Trust and add host" msgstr "Host não confiável" -#: pkg/storaged/stratis/utils.jsx:86 pkg/storaged/crypto/keyslots.jsx:544 +#: pkg/storaged/crypto/keyslots.jsx:578 pkg/storaged/stratis/utils.jsx:86 msgid "Trust key" msgstr "Chave de confiança" @@ -8943,12 +8938,12 @@ msgid "Turn on administrative access" msgstr "" -#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 -#: pkg/storaged/block/format-dialog.jsx:308 -#: pkg/storaged/block/unrecognized-data.jsx:52 pkg/storaged/pages.jsx:715 #: pkg/storaged/partitions/partition.jsx:183 -#: pkg/storaged/partitions/partition.jsx:229 pkg/shell/credentials.jsx:199 -#: pkg/packagekit/autoupdates.jsx:279 +#: pkg/storaged/partitions/partition.jsx:229 +#: pkg/storaged/block/format-dialog.jsx:310 +#: pkg/storaged/block/unrecognized-data.jsx:51 pkg/storaged/pages.jsx:715 +#: pkg/systemd/hwinfo.jsx:81 pkg/systemd/hwinfo.jsx:291 +#: pkg/shell/credentials.jsx:199 pkg/packagekit/autoupdates.jsx:279 msgid "Type" msgstr "Tipo" @@ -8974,12 +8969,11 @@ msgid "UDP" msgstr "UDP" -#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/stratis/pool.jsx:519 -#: pkg/storaged/lvm2/volume-group.jsx:386 +#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/btrfs/volume.jsx:127 +#: pkg/storaged/btrfs/device.jsx:78 pkg/storaged/btrfs/filesystem.jsx:77 #: pkg/storaged/lvm2/physical-volume.jsx:117 -#: pkg/storaged/partitions/partition.jsx:228 pkg/storaged/mdraid/mdraid.jsx:291 -#: pkg/storaged/btrfs/volume.jsx:127 pkg/storaged/btrfs/device.jsx:78 -#: pkg/storaged/btrfs/filesystem.jsx:77 +#: pkg/storaged/lvm2/volume-group.jsx:386 pkg/storaged/stratis/pool.jsx:519 +#: pkg/storaged/stratis/stopped-pool.jsx:127 pkg/storaged/mdraid/mdraid.jsx:291 msgid "UUID" msgstr "UUID" @@ -9074,7 +9068,7 @@ msgid "Undo" msgstr "" -#: pkg/storaged/crypto/keyslots.jsx:258 +#: pkg/storaged/crypto/keyslots.jsx:292 msgid "Unexpected PackageKit error during installation of $0: $1" msgstr "" @@ -9083,27 +9077,27 @@ msgid "Unexpected error" msgstr "Erro inesperado" -#: pkg/storaged/block/unformatted-data.jsx:31 +#: pkg/storaged/block/unformatted-data.jsx:30 #, fuzzy #| msgid "Unrecognized data" msgid "Unformatted data" msgstr "Dados não reconhecidos" -#: pkg/systemd/logs.jsx:368 pkg/systemd/services-list.jsx:39 -#: pkg/systemd/services-list.jsx:44 +#: pkg/systemd/services-list.jsx:39 pkg/systemd/services-list.jsx:44 +#: pkg/systemd/logs.jsx:368 msgid "Unit" msgstr "Unidade" -#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 -#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 -#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 +#: pkg/storaged/swap/swap.jsx:116 pkg/networkmanager/interfaces.js:510 +#: pkg/networkmanager/interfaces.js:1035 #: pkg/networkmanager/network-interface.jsx:199 -#: pkg/networkmanager/network-interface.jsx:201 -#: pkg/networkmanager/interfaces.js:510 pkg/networkmanager/interfaces.js:1035 -#: pkg/storaged/swap/swap.jsx:116 pkg/lib/machine-info.js:61 +#: pkg/networkmanager/network-interface.jsx:201 pkg/lib/machine-info.js:61 #: pkg/lib/machine-info.js:226 pkg/lib/machine-info.js:234 #: pkg/lib/machine-info.js:236 pkg/lib/machine-info.js:243 #: pkg/lib/machine-info.js:245 pkg/lib/machine-info.js:249 +#: pkg/systemd/hw-detect.js:85 pkg/systemd/hw-detect.js:94 +#: pkg/systemd/hw-detect.js:101 pkg/systemd/hw-detect.js:104 +#: pkg/systemd/hw-detect.js:111 pkg/systemd/hw-detect.js:112 msgid "Unknown" msgstr "Desconhecido" @@ -9132,14 +9126,13 @@ msgid "Unknown service name" msgstr "Nome de serviço desconhecido" -#: pkg/storaged/crypto/keyslots.jsx:760 +#: pkg/storaged/crypto/keyslots.jsx:794 msgid "Unknown type" msgstr "Tipo desconhecido" -#: pkg/storaged/stratis/stopped-pool.jsx:61 -#: pkg/storaged/crypto/locked-encrypted-data.jsx:37 -#: pkg/storaged/crypto/actions.jsx:41 pkg/storaged/crypto/actions.jsx:46 -#: pkg/shell/credentials.jsx:312 +#: pkg/storaged/crypto/locked-encrypted-data.jsx:36 +#: pkg/storaged/crypto/actions.jsx:40 pkg/storaged/crypto/actions.jsx:45 +#: pkg/storaged/stratis/stopped-pool.jsx:61 pkg/shell/credentials.jsx:312 msgid "Unlock" msgstr "Destravar" @@ -9170,7 +9163,7 @@ msgid "Unlocking $target" msgstr "Desbloqueando $target" -#: pkg/storaged/crypto/keyslots.jsx:188 +#: pkg/storaged/crypto/keyslots.jsx:221 msgid "Unlocking disk" msgstr "Desbloqueando o disco" @@ -9179,14 +9172,14 @@ msgid "Unmanaged interfaces" msgstr "Interfaces Não Gerenciadas" -#: pkg/storaged/stratis/filesystem.jsx:172 pkg/storaged/nfs/nfs.jsx:309 -#: pkg/storaged/filesystem/mounting-dialog.jsx:339 +#: pkg/storaged/nfs/nfs.jsx:309 pkg/storaged/btrfs/subvolume.jsx:338 +#: pkg/storaged/stratis/filesystem.jsx:172 +#: pkg/storaged/filesystem/mounting-dialog.jsx:357 #: pkg/storaged/filesystem/filesystem.jsx:102 -#: pkg/storaged/btrfs/subvolume.jsx:338 msgid "Unmount" msgstr "Desmontar" -#: pkg/storaged/filesystem/mounting-dialog.jsx:333 +#: pkg/storaged/filesystem/mounting-dialog.jsx:351 #, fuzzy #| msgid "Unmount filesystem" msgid "Unmount filesystem $0" @@ -9210,7 +9203,7 @@ msgid "Unpin unit" msgstr "Serviços do Sistema" -#: pkg/storaged/block/unrecognized-data.jsx:35 +#: pkg/storaged/block/unrecognized-data.jsx:34 msgid "Unrecognized data" msgstr "Dados não reconhecidos" @@ -9234,7 +9227,7 @@ msgid "Until" msgstr "" -#: pkg/lib/cockpit.js:3848 pkg/lib/cockpit.js:3850 +#: pkg/lib/cockpit.js:3844 pkg/lib/cockpit.js:3846 msgid "Untrusted host" msgstr "Host não confiável" @@ -9242,13 +9235,13 @@ msgid "Update" msgstr "Atualizar" -#: pkg/packagekit/updates.jsx:754 +#: pkg/packagekit/updates.jsx:753 #, fuzzy #| msgid "Updates available" msgid "Update Success Table" msgstr "Atualizações disponíveis" -#: pkg/packagekit/updates.jsx:957 +#: pkg/packagekit/updates.jsx:956 msgid "Update history" msgstr "Atualizar histórico" @@ -9257,7 +9250,7 @@ msgid "Update package information" msgstr "Informações do pacote" -#: pkg/packagekit/updates.jsx:679 pkg/packagekit/updates.jsx:749 +#: pkg/packagekit/updates.jsx:678 pkg/packagekit/updates.jsx:748 msgid "Update was successful" msgstr "A atualização foi bem sucedida" @@ -9265,12 +9258,12 @@ msgid "Updated" msgstr "Atualizado" -#: pkg/packagekit/updates.jsx:682 +#: pkg/packagekit/updates.jsx:681 msgid "Updated packages may require a reboot to take effect." msgstr "" "Os pacotes atualizados podem exigir uma reinicialização para ter efeito." -#: pkg/packagekit/updates.jsx:1441 +#: pkg/packagekit/updates.jsx:1440 msgid "Updates available" msgstr "Atualizações disponíveis" @@ -9294,13 +9287,15 @@ msgid "Uptime" msgstr "" +#: pkg/storaged/btrfs/volume.jsx:129 pkg/storaged/btrfs/device.jsx:80 +#: pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/storaged/block/unrecognized-data.jsx:50 +#: pkg/storaged/lvm2/physical-volume.jsx:119 pkg/storaged/stratis/pool.jsx:521 +#: pkg/storaged/stratis/filesystem.jsx:226 +#: pkg/storaged/filesystem/filesystem.jsx:152 #: pkg/systemd/overview-cards/usageCard.jsx:127 pkg/metrics/metrics.jsx:1949 #: pkg/metrics/metrics.jsx:1950 pkg/metrics/metrics.jsx:1951 -#: pkg/metrics/metrics.jsx:1952 pkg/storaged/stratis/filesystem.jsx:226 -#: pkg/storaged/stratis/pool.jsx:521 pkg/storaged/lvm2/physical-volume.jsx:119 -#: pkg/storaged/block/unrecognized-data.jsx:51 -#: pkg/storaged/filesystem/filesystem.jsx:152 pkg/storaged/btrfs/volume.jsx:129 -#: pkg/storaged/btrfs/device.jsx:80 pkg/storaged/btrfs/filesystem.jsx:79 +#: pkg/metrics/metrics.jsx:1952 msgid "Usage" msgstr "Uso" @@ -9311,20 +9306,20 @@ msgid "Usage of $0" msgstr "Uso de $0 núcleo da CPU" -#: pkg/networkmanager/dialogs-common.jsx:103 pkg/storaged/dialog.jsx:624 -#: pkg/storaged/dialog.jsx:1139 +#: pkg/storaged/dialog.jsx:624 pkg/storaged/dialog.jsx:1141 +#: pkg/networkmanager/dialogs-common.jsx:103 #, fuzzy #| msgid "Used" msgid "Use" msgstr "Usado" -#: pkg/storaged/lvm2/vdo-pool.jsx:85 pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:328 pkg/storaged/lvm2/vdo-pool.jsx:85 #, fuzzy #| msgid "Compression" msgid "Use compression" msgstr "Compressão" -#: pkg/storaged/lvm2/vdo-pool.jsx:89 pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:337 pkg/storaged/lvm2/vdo-pool.jsx:89 #, fuzzy #| msgid "Deduplication" msgid "Use deduplication" @@ -9346,23 +9341,23 @@ msgid "Use the following keys to authenticate against other systems" msgstr "Use as seguintes chaves para autenticar contra outros sistemas" -#: pkg/sosreport/sosreport.jsx:324 +#: pkg/sosreport/sosreport.jsx:333 #, fuzzy #| msgid "Last login" msgid "Use verbose logging" msgstr "Último Login" -#: pkg/metrics/metrics.jsx:813 pkg/metrics/metrics.jsx:907 -#: pkg/storaged/swap/swap.jsx:125 +#: pkg/storaged/swap/swap.jsx:125 pkg/metrics/metrics.jsx:813 +#: pkg/metrics/metrics.jsx:907 msgid "Used" msgstr "Usado" -#: pkg/storaged/filesystem/mounting-dialog.jsx:110 +#: pkg/storaged/filesystem/mounting-dialog.jsx:113 msgid "" "Useful for mounts that are optional or need interaction (such as passphrases)" msgstr "" -#: pkg/systemd/services.jsx:917 pkg/storaged/dialog.jsx:1331 +#: pkg/storaged/dialog.jsx:1333 pkg/systemd/services.jsx:916 msgid "User" msgstr "Usuário" @@ -9393,7 +9388,7 @@ msgstr "O nome não pode ser maior que $0 bytes" #: pkg/static/login.html:94 pkg/shell/hosts_dialog.jsx:264 -#: pkg/users/account-create-dialog.js:76 pkg/users/account-details.js:262 +#: pkg/users/account-details.js:262 pkg/users/account-create-dialog.js:76 msgid "User name" msgstr "Nome do usuário" @@ -9420,7 +9415,7 @@ msgid "VDO backing devices can not be made smaller" msgstr "Dispositivos de suporte VDO não podem ser menores" -#: pkg/storaged/utils.js:345 pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:139 pkg/storaged/utils.js:346 msgid "VDO device $0" msgstr "Dispositivo VDO $0" @@ -9447,7 +9442,7 @@ msgid "Validating authentication token" msgstr "Validando token de autenticação" -#: pkg/systemd/hwinfo.jsx:278 pkg/storaged/drive/drive.jsx:120 +#: pkg/storaged/drive/drive.jsx:120 pkg/systemd/hwinfo.jsx:278 msgid "Vendor" msgstr "Fabricante" @@ -9461,7 +9456,7 @@ msgid "Verify fingerprint" msgstr "Digital" -#: pkg/storaged/stratis/utils.jsx:83 pkg/storaged/crypto/keyslots.jsx:540 +#: pkg/storaged/crypto/keyslots.jsx:574 pkg/storaged/stratis/utils.jsx:83 msgid "Verify key" msgstr "Verificar chave" @@ -9469,7 +9464,7 @@ msgid "Verifying" msgstr "Verificando" -#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:449 +#: pkg/systemd/hwinfo.jsx:91 pkg/packagekit/updates.jsx:448 msgid "Version" msgstr "Versão" @@ -9499,8 +9494,8 @@ msgid "View all services" msgstr "Serviços de filtro" -#: pkg/kdump/kdump-view.jsx:526 #: pkg/lib/cockpit-components-modifications.jsx:154 +#: pkg/kdump/kdump-view.jsx:526 msgid "View automation script" msgstr "" @@ -9540,7 +9535,7 @@ msgid "View report" msgstr "" -#: pkg/packagekit/updates.jsx:619 +#: pkg/packagekit/updates.jsx:618 #, fuzzy #| msgid "View all logs" msgid "View update log" @@ -9561,8 +9556,8 @@ msgid "Volume group" msgstr "Grupo de volumes" -#: pkg/storaged/lvm2/volume-group.jsx:223 #: pkg/storaged/lvm2/physical-volume.jsx:71 +#: pkg/storaged/lvm2/volume-group.jsx:223 #, fuzzy #| msgid "Removing physical volume from $target" msgid "Volume group is missing physical volumes" @@ -9590,7 +9585,7 @@ msgstr "" "Aguardando outros programas terminarem de usar o gerenciador de pacotes ..." -#: pkg/storaged/crypto/keyslots.jsx:216 +#: pkg/storaged/crypto/keyslots.jsx:250 #: pkg/lib/cockpit-components-install-dialog.jsx:150 #: pkg/lib/cockpit-components-install-dialog.jsx:185 msgid "Waiting for other software management operations to finish" @@ -9626,7 +9621,7 @@ msgid "Web Console for Linux servers" msgstr "Console da Web para servidores Linux" -#: pkg/packagekit/updates.jsx:530 pkg/packagekit/updates.jsx:935 +#: pkg/packagekit/updates.jsx:529 pkg/packagekit/updates.jsx:934 #, fuzzy #| msgid "Web Console for Linux servers" msgid "Web Console will restart" @@ -9663,7 +9658,7 @@ msgid "When empty, connect with the current user" msgstr "" -#: pkg/packagekit/updates.jsx:533 pkg/packagekit/updates.jsx:940 +#: pkg/packagekit/updates.jsx:532 pkg/packagekit/updates.jsx:939 msgid "" "When the Web Console is restarted, you will no longer see progress " "information. However, the update process will continue in the background. " @@ -9723,11 +9718,11 @@ msgid "Yearly" msgstr "" -#: pkg/systemd/reporting.jsx:281 pkg/networkmanager/network-interface.jsx:241 +#: pkg/networkmanager/network-interface.jsx:241 pkg/systemd/reporting.jsx:281 msgid "Yes" msgstr "Sim" -#: pkg/static/login.js:765 pkg/shell/hosts_dialog.jsx:488 +#: pkg/shell/hosts_dialog.jsx:488 pkg/static/login.js:765 msgid "You are connecting to $0 for the first time." msgstr "" @@ -9793,11 +9788,11 @@ "Seu servidor fechará a conexão em breve. Você pode reconectar depois de ter " "reiniciado." -#: pkg/lib/cockpit.js:3838 +#: pkg/lib/cockpit.js:3834 msgid "Your session has been terminated." msgstr "Sua sessão foi encerrada." -#: pkg/lib/cockpit.js:3840 +#: pkg/lib/cockpit.js:3836 msgid "Your session has expired. Please log in again." msgstr "Sua sessão expirou. Por favor, faça o login novamente." @@ -9867,7 +9862,7 @@ msgid "average: $0%" msgstr "" -#: pkg/storaged/dialog.jsx:1116 +#: pkg/storaged/dialog.jsx:1118 #, fuzzy #| msgid "Create VDO device" msgid "backing device for VDO device" @@ -9923,7 +9918,7 @@ msgstr "" #: pkg/storaged/btrfs/volume.jsx:146 pkg/storaged/btrfs/volume.jsx:158 -#: pkg/storaged/btrfs/filesystem.jsx:87 pkg/storaged/btrfs/subvolume.jsx:424 +#: pkg/storaged/btrfs/subvolume.jsx:424 pkg/storaged/btrfs/filesystem.jsx:87 #, fuzzy #| msgid "Storage volumes" msgid "btrfs subvolumes" @@ -9934,11 +9929,11 @@ msgid "btrfs volume" msgstr "Volume de armazenamento" -#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:215 pkg/packagekit/updates.jsx:318 msgid "bug fix" msgstr "correção de bug" -#: pkg/storaged/utils.js:175 +#: pkg/storaged/utils.js:176 msgctxt "format-bytes" msgid "bytes" msgstr "bytes" @@ -9982,7 +9977,7 @@ msgid "cpu" msgstr "cpu" -#: pkg/systemd/manifest.json:0 pkg/kdump/manifest.json:0 +#: pkg/kdump/manifest.json:0 pkg/systemd/manifest.json:0 msgid "crash" msgstr "" @@ -10006,20 +10001,21 @@ msgid "debug" msgstr "depuração" -#: pkg/storaged/stratis/filesystem.jsx:121 pkg/storaged/stratis/pool.jsx:133 -#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 -#: pkg/storaged/lvm2/block-logical-volume.jsx:64 -#: pkg/storaged/block/format-dialog.jsx:208 -#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 +#: pkg/storaged/partitions/partition.jsx:43 #: pkg/storaged/partitions/format-disk-dialog.jsx:35 -#: pkg/storaged/partitions/partition.jsx:43 pkg/storaged/mdraid/mdraid.jsx:112 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:80 #: pkg/storaged/btrfs/subvolume.jsx:217 +#: pkg/storaged/block/format-dialog.jsx:208 +#: pkg/storaged/lvm2/block-logical-volume.jsx:64 +#: pkg/storaged/lvm2/volume-group.jsx:81 pkg/storaged/lvm2/volume-group.jsx:331 +#: pkg/storaged/stratis/pool.jsx:133 pkg/storaged/stratis/filesystem.jsx:121 +#: pkg/storaged/mdraid/mdraid.jsx:112 #, fuzzy #| msgid "Delete" msgid "delete" msgstr "Excluir" -#: pkg/storaged/dialog.jsx:1119 +#: pkg/storaged/dialog.jsx:1121 msgid "device of btrfs volume" msgstr "" @@ -10052,19 +10048,19 @@ msgid "drive" msgstr "" -#: pkg/systemd/overview-cards/configurationCard.jsx:55 -#: pkg/networkmanager/network-interface.jsx:349 -#: pkg/networkmanager/dialogs-common.jsx:262 -#: pkg/storaged/stratis/filesystem.jsx:220 pkg/storaged/stratis/pool.jsx:517 -#: pkg/storaged/lvm2/volume-group.jsx:384 -#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 +#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/storaged/crypto/encryption.jsx:233 +#: pkg/storaged/crypto/encryption.jsx:236 #: pkg/storaged/lvm2/block-logical-volume.jsx:288 +#: pkg/storaged/lvm2/thin-pool-logical-volume.jsx:141 +#: pkg/storaged/lvm2/volume-group.jsx:384 pkg/storaged/stratis/pool.jsx:517 +#: pkg/storaged/stratis/filesystem.jsx:220 +#: pkg/storaged/filesystem/utils.jsx:221 #: pkg/storaged/filesystem/filesystem.jsx:145 -#: pkg/storaged/filesystem/utils.jsx:221 pkg/storaged/crypto/encryption.jsx:233 -#: pkg/storaged/crypto/encryption.jsx:236 -#: pkg/storaged/partitions/partition.jsx:232 pkg/storaged/btrfs/volume.jsx:124 -#: pkg/storaged/btrfs/filesystem.jsx:74 pkg/users/account-details.js:291 -#: pkg/users/account-details.js:321 +#: pkg/networkmanager/dialogs-common.jsx:261 +#: pkg/networkmanager/network-interface.jsx:349 +#: pkg/systemd/overview-cards/configurationCard.jsx:55 +#: pkg/users/account-details.js:291 pkg/users/account-details.js:321 msgid "edit" msgstr "" @@ -10082,7 +10078,7 @@ msgid "encryption" msgstr "criptografia" -#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:319 +#: pkg/packagekit/updates.jsx:217 pkg/packagekit/updates.jsx:318 msgid "enhancement" msgstr "Aprimoramento" @@ -10126,7 +10122,7 @@ msgid "extension" msgstr "extensão" -#: pkg/systemd/overview-cards/configurationCard.jsx:153 +#: pkg/systemd/overview-cards/configurationCard.jsx:151 msgid "failed to list ssh host keys: $0" msgstr "falha ao listar chaves locais de ssh: $0" @@ -10310,13 +10306,13 @@ msgid "max: $0%" msgstr "" -#: pkg/storaged/dialog.jsx:1115 +#: pkg/storaged/dialog.jsx:1117 #, fuzzy #| msgid "member of RAID device" msgid "member of MDRAID device" msgstr "membro do Dispositivo RAID" -#: pkg/storaged/dialog.jsx:1117 +#: pkg/storaged/dialog.jsx:1119 msgid "member of Stratis pool" msgstr "membro do grupo Stratis" @@ -10341,7 +10337,7 @@ msgid "more details" msgstr "mais detalhes" -#: pkg/storaged/utils.js:887 pkg/storaged/manifest.json:0 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 msgid "mount" msgstr "" @@ -10349,7 +10345,7 @@ msgid "nbde" msgstr "" -#: pkg/systemd/manifest.json:0 pkg/networkmanager/manifest.json:0 +#: pkg/networkmanager/manifest.json:0 pkg/systemd/manifest.json:0 msgid "network" msgstr "rede" @@ -10378,11 +10374,11 @@ msgid "nice" msgstr "" -#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 -#: pkg/storaged/stratis/stopped-pool.jsx:130 -#: pkg/storaged/stratis/stopped-pool.jsx:134 #: pkg/storaged/crypto/encryption.jsx:232 #: pkg/storaged/crypto/encryption.jsx:235 +#: pkg/storaged/stratis/stopped-pool.jsx:130 +#: pkg/storaged/stratis/stopped-pool.jsx:134 +#: pkg/systemd/overview-cards/tuned-dialog.jsx:89 msgid "none" msgstr "nenhum" @@ -10432,7 +10428,7 @@ msgid "password quality" msgstr "" -#: pkg/packagekit/updates.jsx:344 +#: pkg/packagekit/updates.jsx:343 msgid "patches" msgstr "" @@ -10455,7 +10451,7 @@ msgid "performance" msgstr "Armazenar métricas" -#: pkg/storaged/dialog.jsx:1114 +#: pkg/storaged/dialog.jsx:1116 msgid "physical volume of LVM2 volume group" msgstr "volume físico do grupo de volumes LVM2" @@ -10512,17 +10508,17 @@ msgid "recommended" msgstr "recomendado" -#: pkg/storaged/utils.js:946 +#: pkg/storaged/utils.js:947 msgid "remove from LVM2" msgstr "remover do LVM2" -#: pkg/storaged/utils.js:935 +#: pkg/storaged/utils.js:936 #, fuzzy #| msgid "remove from RAID" msgid "remove from MDRAID" msgstr "remover do RAID" -#: pkg/storaged/utils.js:905 +#: pkg/storaged/utils.js:906 #, fuzzy #| msgid "remove from LVM2" msgid "remove from btrfs volume" @@ -10536,11 +10532,11 @@ msgid "roles" msgstr "" -#: pkg/systemd/overview.jsx:159 +#: pkg/systemd/overview.jsx:169 msgid "running $0" msgstr "" -#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:311 +#: pkg/packagekit/updates.jsx:213 pkg/packagekit/updates.jsx:310 #: pkg/packagekit/manifest.json:0 msgid "security" msgstr "segurança" @@ -10619,7 +10615,7 @@ msgid "ssh server is empty" msgstr "servidor ssh está vazio" -#: pkg/storaged/utils.js:924 pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 +#: pkg/storaged/legacy-vdo/legacy-vdo.jsx:46 pkg/storaged/utils.js:925 #: pkg/storaged/mdraid/mdraid.jsx:59 msgid "stop" msgstr "" @@ -10687,8 +10683,8 @@ msgid "unit" msgstr "" -#: pkg/systemd/services.jsx:555 pkg/systemd/services.jsx:565 -#: pkg/systemd/hw-detect.js:129 +#: pkg/systemd/hw-detect.js:129 pkg/systemd/services.jsx:555 +#: pkg/systemd/services.jsx:565 msgid "unknown" msgstr "desconhecido" @@ -10701,13 +10697,13 @@ msgid "unmask" msgstr "unmask" -#: pkg/storaged/utils.js:874 pkg/storaged/utils.js:887 -#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/manifest.json:0 +#: pkg/storaged/btrfs/subvolume.jsx:217 pkg/storaged/utils.js:875 +#: pkg/storaged/utils.js:888 pkg/storaged/manifest.json:0 #, fuzzy msgid "unmount" msgstr "unmount" -#: pkg/storaged/utils.js:533 +#: pkg/storaged/utils.js:534 msgid "unpartitioned space on $0" msgstr "espaço não particionado em $0" diff -Nru cockpit-314/po/ru.po cockpit-316/po/ru.po --- cockpit-314/po/ru.po 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/po/ru.po 2024-04-25 09:45:58.000000000 +0000 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-03-26 02:47+0000\n" +"POT-Creation-Date: 2024-04-11 02:47+0000\n" "PO-Revision-Date: 2023-07-31 12:26+0000\n" "Last-Translator: yangyangdaji <1504305527@qq.com>\n" "Language-Team: Russian \n" "Language-Team: Slovak \n" "Language-Team: Swedish \n" "Language-Team: Turkish \n" "Language-Team: Ukrainian \n" "Language-Team: Chinese (Simplified) - + org.cockpit_project.CockpitClient.desktop diff -Nru cockpit-314/src/cockpit/__init__.py cockpit-316/src/cockpit/__init__.py --- cockpit-314/src/cockpit/__init__.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/__init__.py 2024-04-25 09:45:58.000000000 +0000 @@ -1 +1,5 @@ -from ._version import __version__ # noqa: F401 +from ._version import __version__ + +__all__ = ( + '__version__', +) diff -Nru cockpit-314/src/cockpit/_version.py cockpit-316/src/cockpit/_version.py --- cockpit-314/src/cockpit/_version.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/_version.py 2024-04-25 09:45:58.000000000 +0000 @@ -1 +1 @@ -__version__ = '314' +__version__ = '316' diff -Nru cockpit-314/src/cockpit/beiboot.py cockpit-316/src/cockpit/beiboot.py --- cockpit-314/src/cockpit/beiboot.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/beiboot.py 2024-04-25 09:45:58.000000000 +0000 @@ -303,7 +303,7 @@ # only patch the packages line if we are in beiboot mode if bridge.packages: - message['packages'] = {p: None for p in bridge.packages.packages} + message['packages'] = dict.fromkeys(bridge.packages.packages) bridge.write_control(message) bridge.ssh_peer.thaw_endpoint() diff -Nru cockpit-314/src/cockpit/bridge.py cockpit-316/src/cockpit/bridge.py --- cockpit-314/src/cockpit/bridge.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/bridge.py 2024-04-25 09:45:58.000000000 +0000 @@ -145,7 +145,7 @@ } if self.packages is not None: - init_args['packages'] = {p: None for p in self.packages.packages} + init_args['packages'] = dict.fromkeys(self.packages.packages) self.write_control(init_args) diff -Nru cockpit-314/src/cockpit/channel.py cockpit-316/src/cockpit/channel.py --- cockpit-314/src/cockpit/channel.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/channel.py 2024-04-25 09:45:58.000000000 +0000 @@ -18,9 +18,10 @@ import asyncio import json import logging -from typing import BinaryIO, ClassVar, Dict, Generator, List, Optional, Sequence, Set, Tuple, Type +import traceback +from typing import BinaryIO, ClassVar, Dict, Generator, List, Mapping, Optional, Sequence, Set, Tuple, Type -from .jsonutil import JsonError, JsonObject, JsonValue, create_object, get_bool, get_str +from .jsonutil import JsonError, JsonObject, JsonValue, create_object, get_bool, get_enum, get_str from .protocol import CockpitProblem from .router import Endpoint, Router, RoutingRule @@ -91,6 +92,7 @@ _send_pings: bool = False _out_sequence: int = 0 _out_window: int = SEND_WINDOW + _ack_bytes: bool # Task management _tasks: Set[asyncio.Task] @@ -105,15 +107,16 @@ group = '' # input - def do_control(self, command, message): + def do_control(self, command: str, message: JsonObject) -> None: # Break the various different kinds of control messages out into the # things that our subclass may be interested in handling. We drop the # 'message' field for handlers that don't need it. if command == 'open': self._tasks = set() - self.channel = message['channel'] + self.channel = get_str(message, 'channel') if get_bool(message, 'flow-control', default=False): self._send_pings = True + self._ack_bytes = get_enum(message, 'send-acks', ['bytes'], None) is not None self.group = get_str(message, 'group', 'default') self.freeze_endpoint() self.do_open(message) @@ -142,7 +145,7 @@ except JsonError as exc: raise ChannelError('protocol-error', message=str(exc)) from exc except ChannelError as exc: - self.close(exc.attrs) + self.close(exc.get_attrs()) def do_kill(self, host: 'str | None', group: 'str | None', _message: JsonObject) -> None: # Already closing? Ignore. @@ -176,6 +179,10 @@ def do_ping(self, message: JsonObject) -> None: self.send_pong(message) + def send_ack(self, data: bytes) -> None: + if self._ack_bytes: + self.send_control('ack', bytes=len(data)) + def do_channel_data(self, channel: str, data: bytes) -> None: # Already closing? Ignore. if self._close_args is not None: @@ -183,13 +190,21 @@ # Catch errors and turn them into close messages try: - self.do_data(data) + if not self.do_data(data): + self.send_ack(data) except ChannelError as exc: - self.close(exc.attrs) + self.close(exc.get_attrs()) + + def do_data(self, data: bytes) -> 'bool | None': + """Handles incoming data to the channel. - def do_data(self, _data: bytes) -> None: + Return value is True if the channel takes care of send acks on its own, + in which case it should call self.send_ack() on `data` at some point. + None or False means that the acknowledgement is sent automatically.""" # By default, channels can't receive data. + del data self.close() + return True # output def ready(self, **kwargs: JsonValue) -> None: @@ -333,7 +348,7 @@ try: transport = task.result() except ChannelError as exc: - self.close(exc.attrs) + self.close(exc.get_attrs()) return self.connection_made(transport) @@ -423,7 +438,7 @@ entire contents of a binary-mode file-like object. The subclass must provide an async `run()` function, which will be spawned - as a task. + as a task. The task is cancelled when the channel is closed. On the receiving side, the channel will respond to flow control pings to indicate that it has received the data, but only after it has been consumed @@ -433,31 +448,43 @@ """ # Receive-side flow control: intermix pings and data in the queue and reply - # to pings as we dequeue them. This is a buffer: since we need to handle - # do_data() without blocking, we have no choice. - receive_queue = None + # to pings as we dequeue them. EOF is None. This is a buffer: since we + # need to handle do_data() without blocking, we have no choice. + receive_queue: 'asyncio.Queue[bytes | JsonObject | None]' # Send-side flow control write_waiter = None - async def run(self, options): + async def run(self, options: JsonObject) -> 'JsonObject | None': raise NotImplementedError - async def run_wrapper(self, options): + async def run_wrapper(self, options: JsonObject) -> None: try: - await self.run(options) + self.close(await self.run(options)) + except asyncio.CancelledError: # user requested close self.close() except ChannelError as exc: - self.close(exc.attrs) - - async def read(self): + self.close(exc.get_attrs()) + except BaseException: + self.close({'problem': 'internal-error', 'cause': traceback.format_exc()}) + raise + + async def read(self) -> 'bytes | None': + # Three possibilities for what we'll find: + # - None (EOF) → return None + # - a ping → send a pong + # - bytes (possibly empty) → ack the receipt, and return it while True: item = await self.receive_queue.get() - if isinstance(item, bytes): + if item is None: + return None + if isinstance(item, Mapping): + self.send_pong(item) + else: + self.send_ack(item) return item - self.send_pong(item) - async def write(self, data): + async def write(self, data: bytes) -> None: if not self.send_data(data): self.write_waiter = asyncio.get_running_loop().create_future() await self.write_waiter @@ -478,27 +505,23 @@ self.write_waiter.set_result(None) self.write_waiter = None - def do_open(self, options): + def do_open(self, options: JsonObject) -> None: self.receive_queue = asyncio.Queue() - self.create_task(self.run_wrapper(options), name=f'{self.__class__.__name__}.run_wrapper({options})') + self._run_task = self.create_task(self.run_wrapper(options), + name=f'{self.__class__.__name__}.run_wrapper({options})') - def do_done(self): - self.receive_queue.put_nowait(b'') + def do_done(self) -> None: + self.receive_queue.put_nowait(None) - def do_close(self): - # we might have already sent EOF for done, but two EOFs won't hurt anyone - self.receive_queue.put_nowait(b'') + def do_close(self) -> None: + self._run_task.cancel() - def do_ping(self, message): + def do_ping(self, message: JsonObject) -> None: self.receive_queue.put_nowait(message) - def do_data(self, data): - if not isinstance(data, bytes): - # this will persist past this callback, so make sure we take our - # own copy, in case this was a memoryview into a bytearray. - data = bytes(data) - + def do_data(self, data: bytes) -> bool: self.receive_queue.put_nowait(data) + return True # we will send the 'ack' later (from read()) class GeneratorChannel(Channel): diff -Nru cockpit-314/src/cockpit/channels/dbus.py cockpit-316/src/cockpit/channels/dbus.py --- cockpit-314/src/cockpit/channels/dbus.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/channels/dbus.py 2024-04-25 09:45:58.000000000 +0000 @@ -184,7 +184,7 @@ self.send_json(owner=owner) def handler(message): - name, old, new = message.get_body() + _name, _old, new = message.get_body() send_owner(owner=new if new != "" else None) self.add_signal_handler(handler, sender='org.freedesktop.DBus', @@ -308,7 +308,7 @@ timeout = message.get('timeout') if timeout is not None: - # sd_bus timeout is µs, cockpit API timeout is ms + # sd_bus timeout is μs, cockpit API timeout is ms timeout *= 1000 else: # sd_bus has no "indefinite" timeout, so use MAX_UINT64 @@ -399,7 +399,7 @@ (path, interfaces) = message.get_body() logger.debug('interfaces removed %s %s', path, interfaces) async with self.watch_processing_lock: - notify = {path: {name: None for name in interfaces}} + notify = {path: dict.fromkeys(interfaces)} self.send_json(notify=notify) self.add_async_signal_handler(handler, diff -Nru cockpit-314/src/cockpit/channels/filesystem.py cockpit-316/src/cockpit/channels/filesystem.py --- cockpit-314/src/cockpit/channels/filesystem.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/channels/filesystem.py 2024-04-25 09:45:58.000000000 +0000 @@ -25,21 +25,24 @@ import logging import os import pwd -import random +import re import stat +import tempfile +from pathlib import Path from typing import Callable, Iterable from cockpit._vendor.systemd_ctypes import Handle, PathWatch from cockpit._vendor.systemd_ctypes.inotify import Event as InotifyEvent from cockpit._vendor.systemd_ctypes.pathwatch import Listener as PathWatchListener -from ..channel import Channel, ChannelError, GeneratorChannel +from ..channel import AsyncChannel, Channel, ChannelError, GeneratorChannel from ..jsonutil import ( JsonDict, JsonDocument, JsonError, JsonObject, get_bool, + get_enum, get_int, get_str, get_strv, @@ -49,6 +52,12 @@ logger = logging.getLogger(__name__) +@functools.lru_cache() +def my_umask() -> int: + match = re.search(r'^Umask:\s*0([0-7]*)$', Path('/proc/self/status').read_text(), re.M) + return (match and int(match.group(1), 8)) or 0o077 + + def tag_from_stat(buf): return f'1:{buf.st_ino}-{buf.st_mtime}-{buf.st_mode:o}-{buf.st_uid}-{buf.st_gid}' @@ -114,7 +123,7 @@ def do_yield_data(self, options: JsonObject) -> GeneratorChannel.DataGenerator: path = get_str(options, 'path') - binary = get_str(options, 'binary', None) + binary = get_enum(options, 'binary', ['raw'], None) is not None max_read_size = get_int(options, 'max_read_size', None) logger.debug('Opening file "%s" for reading', path) @@ -149,110 +158,78 @@ raise ChannelError('internal-error', message=str(exc)) from exc -class FsReplaceChannel(Channel): +class FsReplaceChannel(AsyncChannel): payload = 'fsreplace1' - _path = None - _tag = None - _tempfile = None - _temppath = None - - def unlink_temppath(self): - try: - os.unlink(self._temppath) - except OSError: - pass # might have been removed from outside + async def run(self, options: JsonObject) -> JsonObject: + path = get_str(options, 'path') + tag = get_str(options, 'tag', None) + dirname, basename = os.path.split(get_str(options, 'path')) - def do_open(self, options): - self._path = options.get('path') - self._tag = options.get('tag') self.ready() - def do_data(self, data): - if self._tempfile is None: - # if the file exists already and we have an expected tag, check it - stat = None - if self._tag is not None: - try: - stat = os.stat(self._path) - current_tag = tag_from_stat(stat) - except FileNotFoundError: - current_tag = '-' - if self._tag != current_tag: + try: + delete_on_exit = None + data = await self.read() + if data is None: + # if we get EOF right away, that's a request to delete + if tag is not None and tag != tag_from_path(path): raise ChannelError('change-conflict') - - # keep this bounded, in case anything unexpected goes wrong - for _ in range(10): - suffix = ''.join(random.choices("abcdefghijklmnopqrstuvwxyz0123456789_", k=6)) - self._temppath = f'{self._path}.cockpit-tmp.{suffix}' - try: - fd = os.open(self._temppath, os.O_CREAT | os.O_WRONLY | os.O_EXCL, 0o666) - if stat is not None: - # copy permissions from existing file - os.fchmod(fd, stat.st_mode) - os.fchown(fd, stat.st_uid, stat.st_gid) - break - except FileExistsError: - continue - except PermissionError as exc: - raise ChannelError('access-denied') from exc - except FileNotFoundError as exc: - # directory of path does not exist - raise ChannelError('not-found') from exc - except OSError as exc: - raise ChannelError('internal-error', message=str(exc)) from exc + with contextlib.suppress(FileNotFoundError): # delete is idempotent + os.unlink(path) else: - raise ChannelError('internal-error', - message=f"Could not find unique file name for replacing {self._path}") - - try: - self._tempfile = os.fdopen(fd, 'wb') - except OSError: - # Should Not Happen™, but let's be safe and avoid fd leak - os.close(fd) - self.unlink_temppath() - raise - - self._tempfile.write(data) - - def do_done(self): - if self._tempfile is None: - try: - os.unlink(self._path) - # crash on other errors, as they are unexpected - except FileNotFoundError: - pass - else: - self._tempfile.flush() - - if self._tag and self._tag != tag_from_path(self._path): - raise ChannelError('change-conflict') - - try: - os.rename(self._temppath, self._path) - # ensure to not leave the temp file behind - except FileNotFoundError as exc: - self.unlink_temppath() - raise ChannelError('not-found', message=str(exc)) from exc - except IsADirectoryError as exc: - self.unlink_temppath() - # not ideal, but the closest code we have - raise ChannelError('access-denied', message=str(exc)) from exc - except OSError as exc: - self.unlink_temppath() - raise ChannelError('internal-error', message=str(exc)) from exc - - self._tempfile.close() - self._tempfile = None + # otherwise, spool data into a temporary file until EOF then rename into place... + with tempfile.NamedTemporaryFile(dir=dirname, prefix=f'.{basename}-', delete=False) as tmp: + delete_on_exit = tmp.name + loop = asyncio.get_running_loop() + while data is not None: + await loop.run_in_executor(None, tmp.write, data) + data = await self.read() + + await loop.run_in_executor(None, os.fdatasync, tmp.fileno()) + + if tag is None: + # no preconditions about what currently exists or not + # calculate the file mode from the umask + os.fchmod(tmp.fileno(), 0o666 & ~my_umask()) + os.rename(tmp.name, path) + delete_on_exit = None + + elif tag == '-': + # the file must not exist. file mode from umask. + os.fchmod(tmp.fileno(), 0o666 & ~my_umask()) + os.link(tmp.name, path) # will fail if file exists + + else: + # the file must exist with the given tag + buf = os.stat(path) + if tag != tag_from_stat(buf): + raise ChannelError('change-conflict') + # chown/chmod from the existing file permissions + os.fchmod(tmp.fileno(), stat.S_IMODE(buf.st_mode)) + os.fchown(tmp.fileno(), buf.st_uid, buf.st_gid) + os.rename(tmp.name, path) + delete_on_exit = None + + except FileNotFoundError as exc: + raise ChannelError('not-found') from exc + except FileExistsError as exc: + # that's from link() noticing that the target file already exists + raise ChannelError('change-conflict') from exc + except PermissionError as exc: + raise ChannelError('access-denied') from exc + except IsADirectoryError as exc: + # not ideal, but the closest code we have + raise ChannelError('access-denied', message=str(exc)) from exc + except OSError as exc: + raise ChannelError('internal-error', message=str(exc)) from exc + finally: + if delete_on_exit is not None: + os.unlink(delete_on_exit) self.done() - self.close({'tag': tag_from_path(self._path)}) - def do_close(self): - if self._tempfile is not None: - self._tempfile.close() - self.unlink_temppath() - self._tempfile = None + return {'tag': tag_from_path(path)} class FsWatchChannel(Channel): @@ -396,12 +373,12 @@ if reset: if set(self.current_value) & set(updates): # if we have an overlap, we need to do a proper reset - self.send_json({name: None for name in self.current_value}, partial=True) + self.send_json(dict.fromkeys(self.current_value), partial=True) self.current_value = {'partial': True} updates.update(partial=None) else: # otherwise there's no overlap: we can just remove the old keys - updates.update({key: None for key in self.current_value}) + updates.update(dict.fromkeys(self.current_value)) json_merge_and_filter_patch(self.current_value, updates) if updates: diff -Nru cockpit-314/src/cockpit/channels/http.py cockpit-316/src/cockpit/channels/http.py --- cockpit-314/src/cockpit/channels/http.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/channels/http.py 2024-04-25 09:45:58.000000000 +0000 @@ -22,7 +22,7 @@ import ssl from ..channel import AsyncChannel, ChannelError -from ..jsonutil import JsonObject, get_dict, get_int, get_object, get_str, typechecked +from ..jsonutil import JsonObject, get_dict, get_enum, get_int, get_object, get_str, typechecked logger = logging.getLogger(__name__) @@ -31,11 +31,11 @@ payload = 'http-stream2' @staticmethod - def get_headers(response: http.client.HTTPResponse, binary: 'str | None') -> JsonObject: + def get_headers(response: http.client.HTTPResponse, *, binary: bool) -> JsonObject: # Never send these headers remove = {'Connection', 'Transfer-Encoding'} - if binary != 'raw': + if not binary: # Only send these headers for raw binary streams remove.update({'Content-Length', 'Range'}) @@ -98,7 +98,7 @@ async def run(self, options: JsonObject) -> None: logger.debug('open %s', options) - binary = get_str(options, 'binary', None) + binary = get_enum(options, 'binary', ['raw'], None) is not None method = get_str(options, 'method') path = get_str(options, 'path') headers = get_object(options, 'headers', lambda d: {k: typechecked(v, str) for k, v in d.items()}, None) @@ -114,7 +114,7 @@ body = b'' while True: data = await self.read() - if data == b'': + if data is None: break body += data @@ -135,7 +135,7 @@ self.send_control(command='response', status=response.status, reason=response.reason, - headers=self.get_headers(response, binary)) + headers=self.get_headers(response, binary=binary)) # Receive the body and finish up try: diff -Nru cockpit-314/src/cockpit/channels/metrics.py cockpit-316/src/cockpit/channels/metrics.py --- cockpit-314/src/cockpit/channels/metrics.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/channels/metrics.py 2024-04-25 09:45:58.000000000 +0000 @@ -176,10 +176,4 @@ samples = self.sample() self.send_updates(samples, last_samples) last_samples = samples - - try: - await asyncio.wait_for(self.read(), self.interval / 1000) - return - except asyncio.TimeoutError: - # Continue the while loop, we use wait_for as an interval timer. - continue + await asyncio.sleep(self.interval / 1000) diff -Nru cockpit-314/src/cockpit/channels/packages.py cockpit-316/src/cockpit/channels/packages.py --- cockpit-314/src/cockpit/channels/packages.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/channels/packages.py 2024-04-25 09:45:58.000000000 +0000 @@ -48,7 +48,7 @@ raise ValueError(f'Unsupported HTTP method {options["method"]}') self.ready() - if await self.read() != b'': + if await self.read() is not None: raise ValueError('Received unexpected data') path = get_str(options, 'path') diff -Nru cockpit-314/src/cockpit/channels/stream.py cockpit-316/src/cockpit/channels/stream.py --- cockpit-314/src/cockpit/channels/stream.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/channels/stream.py 2024-04-25 09:45:58.000000000 +0000 @@ -22,7 +22,7 @@ from typing import Dict from ..channel import ChannelError, ProtocolChannel -from ..jsonutil import JsonDict, JsonObject, get_bool, get_int, get_object, get_str, get_strv +from ..jsonutil import JsonDict, JsonObject, get_bool, get_enum, get_int, get_object, get_str, get_strv from ..transports import SubprocessProtocol, SubprocessTransport, WindowSize logger = logging.getLogger(__name__) @@ -88,7 +88,7 @@ async def create_transport(self, loop: asyncio.AbstractEventLoop, options: JsonObject) -> SubprocessTransport: args = get_strv(options, 'spawn') - err = get_str(options, 'err', 'msg') + err = get_enum(options, 'err', ['out', 'ignore', 'message'], 'message') cwd = get_str(options, 'directory', '.') pty = get_bool(options, 'pty', default=False) window = get_object(options, 'window', WindowSize, None) diff -Nru cockpit-314/src/cockpit/jsonutil.py cockpit-316/src/cockpit/jsonutil.py --- cockpit-314/src/cockpit/jsonutil.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/jsonutil.py 2024-04-25 09:45:58.000000000 +0000 @@ -16,7 +16,7 @@ # along with this program. If not, see . from enum import Enum -from typing import Callable, Dict, List, Mapping, Optional, Sequence, Type, TypeVar, Union +from typing import Callable, Container, Dict, List, Mapping, Optional, Sequence, Type, TypeVar, Union JsonLiteral = Union[str, float, bool, None] @@ -106,6 +106,18 @@ return _get(obj, as_strv, key, default) +def get_enum( + obj: JsonObject, key: str, choices: Container[str], default: Union[DT, _Empty] = _empty +) -> Union[DT, str]: + def as_choice(value: JsonValue) -> str: + # mypy can't do `__eq__()`-based type narrowing... + # https://github.com/python/mypy/issues/17101 + if isinstance(value, str) and value in choices: + return value + raise JsonError(value, f'invalid value "{value}" not in {choices}') + return _get(obj, as_choice, key, default) + + def get_objv(obj: JsonObject, key: str, constructor: Callable[[JsonObject], T]) -> Union[DT, Sequence[T]]: def as_objv(value: JsonValue) -> Sequence[T]: return tuple(constructor(typechecked(item, dict)) for item in typechecked(value, list)) diff -Nru cockpit-314/src/cockpit/protocol.py cockpit-316/src/cockpit/protocol.py --- cockpit-314/src/cockpit/protocol.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/protocol.py 2024-04-25 09:45:58.000000000 +0000 @@ -18,6 +18,7 @@ import asyncio import json import logging +import traceback import uuid from .jsonutil import JsonError, JsonObject, JsonValue, create_object, get_int, get_str, get_str_or_none, typechecked @@ -44,6 +45,14 @@ self.attrs = create_object(_msg, kwargs) super().__init__(get_str(self.attrs, 'message', problem)) + def get_attrs(self) -> JsonObject: + if self.attrs['problem'] == 'internal-error' and self.__cause__ is not None: + return dict(self.attrs, cause=traceback.format_exception( + self.__cause__.__class__, self.__cause__, self.__cause__.__traceback__ + )) + else: + return self.attrs + class CockpitProtocolError(CockpitProblem): def __init__(self, message: str, problem: str = 'protocol-error'): diff -Nru cockpit-314/src/cockpit/remote.py cockpit-316/src/cockpit/remote.py --- cockpit-314/src/cockpit/remote.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/remote.py 2024-04-25 09:45:58.000000000 +0000 @@ -129,7 +129,7 @@ except ferny.SshAuthenticationError as exc: logger.debug('authentication to host %s failed: %s', host, exc) - results = {method: 'not-provided' for method in exc.methods} + results = dict.fromkeys(exc.methods, "not-provided") if 'password' in results and self.password is not None: if responder.password_attempts == 0: results['password'] = 'not-tried' diff -Nru cockpit-314/src/cockpit/router.py cockpit-316/src/cockpit/router.py --- cockpit-314/src/cockpit/router.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/src/cockpit/router.py 2024-04-25 09:45:58.000000000 +0000 @@ -203,7 +203,7 @@ logger.debug('Trying to find endpoint for new channel %s payload=%s', channel, message.get('payload')) endpoint = self.check_rules(message) except RoutingError as exc: - self.write_control(exc.attrs, command='close', channel=channel) + self.write_control(exc.get_attrs(), command='close', channel=channel) return self.open_channels[channel] = endpoint diff -Nru cockpit-314/test/README.md cockpit-316/test/README.md --- cockpit-314/test/README.md 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/README.md 2024-04-25 09:45:58.000000000 +0000 @@ -83,6 +83,16 @@ message will be printed describing how to access the virtual machine, via ssh and web. See the "Helpful tips" section below. +By default, it's only possible to contact the virtual machine from the host +machine on which it's running. If you want to conduct manual testing from +other devices on your network, set `TEST_BIND_GLOBAL=1`, for example: + + TEST_BIND_GLOBAL=1 bots/vm-run -s cockpit.socket debian-stable + +This will bind the Cockpit and SSH ports to all interfaces, making it possible +to access a URL like http://yourhost.local:9091/ to test Cockpit from another +machine on your LAN. + ## Pixel tests Pixel tests in Cockpit ensure that updates of our dependencies or code changes @@ -95,7 +105,7 @@ reference image. if there is a difference, the test fails and a pixel difference is shown. -This works as our tests run in the [cockpit/tasks container](https://quay.io/repository/cockpit/tasks) +This works as our tests run in the [cockpit/tasks container](https://ghcr.io/cockpit-project/tasks) which pins the browser and font rendering so repeated runs provide the same pixels. To generate new pixels, this tasks container must be used; your own browser and font rendering software might generate different results. For more @@ -156,6 +166,7 @@ TEST_OS The OS to run the tests in. Currently supported values: "centos-9-stream" + "centos-10" "debian-stable" "debian-testing" "fedora-39" diff -Nru cockpit-314/test/browser/browser.sh cockpit-316/test/browser/browser.sh --- cockpit-314/test/browser/browser.sh 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/browser/browser.sh 2024-04-25 09:45:58.000000000 +0000 @@ -95,6 +95,7 @@ --rm \ --shm-size=1024m \ --security-opt=label=disable \ + --env='TEST_*' \ --volume="${TMT_TEST_DATA}":/logs:rw,U --env=LOGS=/logs \ --volume="$(pwd)":/source:rw,U --env=SOURCE=/source \ --volume=/usr/lib/os-release:/run/host/usr/lib/os-release:ro \ diff -Nru cockpit-314/test/common/cdp.py cockpit-316/test/common/cdp.py --- cockpit-314/test/common/cdp.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/common/cdp.py 2024-04-25 09:45:58.000000000 +0000 @@ -10,8 +10,9 @@ import sys import tempfile import time -import typing import urllib.request +from collections.abc import Iterator, Mapping, Sequence +from typing import IO, Any, ClassVar, Collection, override from urllib.error import URLError TEST_DIR = os.path.normpath(os.path.dirname(os.path.realpath(os.path.join(__file__, "..")))) @@ -21,15 +22,15 @@ # The name of the browser NAME: str # The executable names available for the browser - EXECUTABLES: typing.List[str] + EXECUTABLES: ClassVar[Collection[str]] # The filename of the cdp driver JS file CDP_DRIVER_FILENAME: str @property - def name(self): + def name(self) -> str: return self.NAME - def find_exe(self): + def find_exe(self) -> str | None: """Try to find the path of the browser, or None if not found.""" for name in self.EXECUTABLES: exe = shutil.which(name) @@ -38,14 +39,14 @@ return None @abc.abstractmethod - def _path(self, show_browser): + def _path(self, show_browser: bool) -> str | None: """Return the path of the browser if available, or None. Reimplement this in subclasses, so it is easier to return None than to raise the proper exception (done at once in path()). """ - def path(self, show_browser): + def path(self, show_browser: bool) -> str: """Return the path of the browser, if available. In case it is not found, this raises SystemError. @@ -56,7 +57,9 @@ raise SystemError(f"{self.name} is not installed") @abc.abstractmethod - def cmd(self, cdp_port, env, show_browser, browser_home, download_dir): + def cmd( + self, cdp_port: int, env: Mapping[str, str], show_browser: bool, browser_home: str, download_dir: str + ) -> Sequence[str]: pass @@ -65,7 +68,8 @@ EXECUTABLES = ["chromium-browser", "chromium", "google-chrome", "chromium-freeworld"] CDP_DRIVER_FILENAME = f"{TEST_DIR}/common/chromium-cdp-driver.js" - def _path(self, show_browser): + @override + def _path(self, show_browser: bool) -> str | None: """Return path to chromium browser. Support the following locations: @@ -90,7 +94,10 @@ return None - def cmd(self, cdp_port, env, show_browser, browser_home, download_dir): + @override + def cmd( + self, cdp_port: int, env: Mapping[str, str], show_browser: bool, browser_home: str, download_dir: str + ) -> Sequence[str]: exe = self.path(show_browser) return [exe, "--headless" if not show_browser else "", @@ -106,11 +113,15 @@ EXECUTABLES = ["firefox-developer-edition", "firefox-nightly", "firefox"] CDP_DRIVER_FILENAME = f"{TEST_DIR}/common/firefox-cdp-driver.js" - def _path(self, show_browser): + @override + def _path(self, show_browser: bool) -> str | None: """Return path to Firefox browser.""" return self.find_exe() - def cmd(self, cdp_port, env, show_browser, browser_home, download_dir): + @override + def cmd( + self, cdp_port: int, env: Mapping[str, str], show_browser: bool, browser_home: str, download_dir: str + ) -> Sequence[str]: exe = self.path(show_browser) subprocess.check_call([exe, "--headless", "--no-remote", "-CreateProfile", "blank"], env=env) @@ -145,29 +156,42 @@ return cmd -def get_browser(browser): +def get_browser(browser: str) -> Browser: browser_classes = [ Chromium, Firefox, ] - for klass in browser_classes: - if browser == klass.NAME: - return klass() + for cls in browser_classes: + if browser == cls.NAME: + return cls() raise SystemError(f"Unsupported browser: {browser}") -def jsquote(obj): +def jsquote(obj: object) -> str: return json.dumps(obj) class CDP: - def __init__(self, lang=None, verbose=False, trace=False, inject_helpers=None, start_profile=False): + _driver: subprocess.Popen[bytes] | None + _browser: subprocess.Popen[bytes] | None + _browser_home: str | None + _cdp_port_lockfile: IO[str] | None + cur_frame: str | None + + def __init__( + self, + lang: str | None = None, + verbose: bool = False, + trace: bool = False, + inject_helpers: Sequence[str] = (), + start_profile: bool = False + ): self.lang = lang self.timeout = 15 self.valid = False self.verbose = verbose self.trace = trace - self.inject_helpers = inject_helpers or [] + self.inject_helpers = inject_helpers self.start_profile = start_profile self.browser = get_browser(os.environ.get("TEST_BROWSER", "chromium")) self.show_browser = bool(os.environ.get("TEST_SHOW_BROWSER", "")) @@ -177,7 +201,7 @@ self._browser_home = None self._cdp_port_lockfile = None - def invoke(self, fn, **kwargs): + def invoke(self, fn: str, **kwargs: object) -> Any: """Call a particular CDP method such as Runtime.evaluate Use command() for arbitrary JS code. @@ -196,8 +220,13 @@ if fn == 'Runtime.evaluate': cmd = "%s, contextId: getFrameExecId(%s)%s" % (cmd[:-2], jsquote(self.cur_frame), cmd[-2:]) + waitPageLoad = fn in ['Page.navigate', 'Page.reload'] + if trace: - print("-> " + kwargs.get('trace', cmd)) + print(f"-> {kwargs.get('trace', cmd)}" + (" (with waitPageLoad)" if waitPageLoad else "")) + + if waitPageLoad: + self.command(f"client.setupPageLoadHandler({self.timeout})") # avoid having to write the "client." prefix everywhere cmd = "client." + cmd @@ -207,11 +236,21 @@ print("<- " + repr(res["result"])) else: print("<- " + repr(res)) + + if waitPageLoad: + res = self.command("client.pageLoadPromise") + if trace: + print("<- pageLoadPromise " + repr(res)) return res - def command(self, cmd): + def command(self, cmd: str) -> Any: if not self._driver: self.start() + + assert self._driver is not None + assert self._driver.stdin is not None + assert self._driver.stdout is not None + self._driver.stdin.write(cmd.encode("UTF-8")) self._driver.stdin.write(b"\n") self._driver.stdin.flush() @@ -231,7 +270,7 @@ raise RuntimeError(res["error"]) return res["result"] - def claim_port(self, port): + def claim_port(self, port: int) -> bool: f = None try: f = open(os.path.join(tempfile.gettempdir(), ".cdp-%i.lock" % port), "w") @@ -243,7 +282,7 @@ f.close() return False - def find_cdp_port(self): + def find_cdp_port(self) -> int: """Find an unused port and claim it through lock file""" for _ in range(100): @@ -254,7 +293,7 @@ raise RuntimeError("unable to find free port") - def start(self): + def start(self) -> None: environ = os.environ.copy() if self.lang: environ["LC_ALL"] = self.lang @@ -329,10 +368,11 @@ self.invoke("Profiler.enable") self.invoke("Profiler.startPreciseCoverage", callCount=False, detailed=True) - def kill(self): + def kill(self) -> None: self.valid = False self.cur_frame = None if self._driver: + assert self._driver.stdin is not None self._driver.stdin.close() self._driver.wait() self._driver = None @@ -348,16 +388,18 @@ pass # ignore if it crashed for some reason self._browser.wait() self._browser = None + assert self._browser_home is not None shutil.rmtree(self._browser_home, ignore_errors=True) + assert self._cdp_port_lockfile is not None os.remove(self._cdp_port_lockfile.name) self._cdp_port_lockfile.close() - def set_frame(self, frame): + def set_frame(self, frame: str | None) -> None: self.cur_frame = frame if self.trace: print("-> switch to frame %s" % frame) - def get_js_log(self): + def get_js_log(self) -> Sequence[str]: """Return the current javascript console log""" if self.valid: @@ -366,16 +408,10 @@ return ["%s: %s" % tuple(m) for m in messages] return [] - def read_log(self): + def read_log(self) -> Iterator[tuple[str, Any]]: """Returns an iterator that produces log messages one by one. Blocks if there are no new messages right now.""" - if not self.valid: - yield [] - return - - while True: - messages = self.command("waitLog()") - for m in messages: - yield m + while self.valid: + yield from self.command("waitLog()") diff -Nru cockpit-314/test/common/chromium-cdp-driver.js cockpit-316/test/common/chromium-cdp-driver.js --- cockpit-314/test/common/chromium-cdp-driver.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/common/chromium-cdp-driver.js 2024-04-25 09:45:58.000000000 +0000 @@ -188,6 +188,8 @@ if (pageLoadHandler) { debug("loadEventFired, resolving pageLoadHandler"); pageLoadHandler(); + } else { + debug("loadEventFired, but no pageLoadHandler"); } }); @@ -209,22 +211,25 @@ } function setupLocalFunctions(client) { - client.waitPageLoad = (args) => new Promise((resolve, reject) => { - const timeout = setTimeout(() => { - pageLoadHandler = null; - reject("Timeout waiting for page load"); // eslint-disable-line prefer-promise-reject-errors - }, (args.timeout ?? 15) * 1000); - pageLoadHandler = () => { - clearTimeout(timeout); - pageLoadHandler = null; - resolve({}); - }; - }); + client.setupPageLoadHandler = timeout => { + if (pageLoadHandler !== null) + return Promise.reject("setupPageLoadHandler: already pending"); // eslint-disable-line prefer-promise-reject-errors - client.reloadPageAndWait = (args) => new Promise((resolve, reject) => { - pageLoadHandler = () => { pageLoadHandler = null; resolve({}) }; - client.Page.reload(args); - }); + client.pageLoadPromise = new Promise((resolve, reject) => { + const timeout_timer = setTimeout(() => { + pageLoadHandler = null; + reject("Timeout waiting for page load"); // eslint-disable-line prefer-promise-reject-errors + }, timeout * 1000); + + pageLoadHandler = () => { + clearTimeout(timeout_timer); + pageLoadHandler = null; + resolve({}); + }; + }); + + return Promise.resolve({}); + }; async function setCSS({ text, frame }) { await client.DOM.enable(); diff -Nru cockpit-314/test/common/firefox-cdp-driver.js cockpit-316/test/common/firefox-cdp-driver.js --- cockpit-314/test/common/firefox-cdp-driver.js 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/common/firefox-cdp-driver.js 2024-04-25 09:45:58.000000000 +0000 @@ -228,8 +228,10 @@ client.Page.loadEventFired(() => { if (pageLoadHandler) { - debug("loadEventFired, resolving pageLoadHandler"); + debug("loadEventFired, calling pageLoadHandler"); pageLoadHandler(); + } else { + debug("loadEventFired, but no pageLoadHandler"); } }); @@ -281,22 +283,25 @@ } function setupLocalFunctions(client) { - client.waitPageLoad = (args) => new Promise((resolve, reject) => { - const timeout = setTimeout(() => { - pageLoadHandler = null; - reject("Timeout waiting for page load"); // eslint-disable-line prefer-promise-reject-errors - }, 15000); - pageLoadHandler = () => { - clearTimeout(timeout); - pageLoadHandler = null; - resolve({}); - }; - }); + client.setupPageLoadHandler = timeout => { + if (pageLoadHandler !== null) + return Promise.reject("setupPageLoadHandler: already pending"); // eslint-disable-line prefer-promise-reject-errors + + client.pageLoadPromise = new Promise((resolve, reject) => { + const timeout_timer = setTimeout(() => { + pageLoadHandler = null; + reject("Timeout waiting for page load"); // eslint-disable-line prefer-promise-reject-errors + }, timeout * 1000); + + pageLoadHandler = () => { + clearTimeout(timeout_timer); + pageLoadHandler = null; + resolve({}); + }; + }); - client.reloadPageAndWait = (args) => new Promise((resolve, reject) => { - pageLoadHandler = () => { pageLoadHandler = null; resolve({}) }; - client.Page.reload(args); - }); + return Promise.resolve({}); + }; } // helper functions for testlib.py which are too unwieldy to be poked in from Python diff -Nru cockpit-314/test/common/lcov.py cockpit-316/test/common/lcov.py --- cockpit-314/test/common/lcov.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/common/lcov.py 2024-04-25 09:45:58.000000000 +0000 @@ -33,6 +33,7 @@ import subprocess import sys from bisect import bisect_left +from typing import Any, Mapping, Sequence from task import github @@ -91,7 +92,7 @@ our_sources = set() for s in sources: - if "node_modules" not in s and (s.endswith(('.js', '.jsx'))): + if "node_modules" not in s and (s.endswith(('.js', '.jsx', '.ts', '.tsx'))): our_sources.add(s) dst_col, src_id, src_line = 0, 0, 0 @@ -287,12 +288,12 @@ out.write("end_of_record\n") -def write_lcov(covdata, outlabel): +def write_lcov(covdata: Sequence[Mapping[str, str]], outlabel: str) -> None: with open(f"{BASE_DIR}/package.json") as f: package = json.load(f) dist_map = get_dist_map(package) - file_hits = {} + file_hits: Any = {} def covranges(functions): for f in functions: @@ -370,7 +371,7 @@ if distfile: ranges = sorted(covranges(script['functions']), key=lambda r: r['endOffset'] - r['startOffset'], reverse=True) - hits = {} + hits: Any = {} for r in ranges: record_range(hits, r, distfile) merge_hits(file_hits, hits) @@ -459,7 +460,7 @@ subprocess.check_call(["git", "-c", "diff.noprefix=false", "diff", "--patience", branch], stdout=f) -def create_coverage_report(): +def create_coverage_report() -> None: output = os.environ.get("TEST_ATTACHMENTS", BASE_DIR) lcov_files = glob.glob(f"{BASE_DIR}/lcov/*.info.gz") try: diff -Nru cockpit-314/test/common/pywrap cockpit-316/test/common/pywrap --- cockpit-314/test/common/pywrap 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/common/pywrap 2024-04-25 09:45:58.000000000 +0000 @@ -21,7 +21,7 @@ test -d "${top_srcdir}/bots" || "${top_srcdir}/test/common/make-bots" # Prepend the path -PYTHONPATH="${top_srcdir}/test/common:${top_srcdir}/bots:${top_srcdir}/bots/machine${PYTHONPATH:+:${PYTHONPATH}}" +PYTHONPATH="${top_srcdir}/test/common:${top_srcdir}/bots:${PYTHONPATH:+:${PYTHONPATH}}" export PYTHONPATH # Run the script diff -Nru cockpit-314/test/common/run-tests cockpit-316/test/common/run-tests --- cockpit-314/test/common/run-tests 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/common/run-tests 2024-04-25 09:45:58.000000000 +0000 @@ -18,8 +18,8 @@ from typing import List, Optional, Tuple import testlib -import testvm from lcov import create_coverage_report, prepare_for_code_coverage +from machine import testvm os.environ['PYTHONUNBUFFERED'] = '1' diff -Nru cockpit-314/test/common/storagelib.py cockpit-316/test/common/storagelib.py --- cockpit-314/test/common/storagelib.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/common/storagelib.py 2024-04-25 09:45:58.000000000 +0000 @@ -136,8 +136,11 @@ def dialog_wait_open(self): self.browser.wait_visible('#dialog') - def dialog_wait_alert(self, text): - self.browser.wait_in_text('#dialog .pf-v5-c-alert__title', text) + def dialog_wait_alert(self, text1, text2=None): + def has_alert_title(): + t = self.browser.text('#dialog .pf-v5-c-alert__title') + return text1 in t or (text2 is not None and text2 in t) + self.browser.wait(has_alert_title) def dialog_wait_title(self, text): self.browser.wait_in_text('#dialog .pf-v5-c-modal-box__title', text) @@ -560,8 +563,9 @@ grubby --update-kernel=ALL --args="root=UUID=$uuid rootflags=defaults rd.luks.uuid=$luks_uuid rd.lvm.lv=root/root" ! test -f /etc/kernel/cmdline || cp /etc/kernel/cmdline /new-root/etc/kernel/cmdline """, timeout=300) - m.spawn("dd if=/dev/zero of=/dev/vda bs=1M count=100; reboot", "reboot", check=False) - m.wait_reboot(300) + # destroy bootability of the current root partition, just to make sure + m.execute("rm -rf /etc/*") + m.reboot() self.assertEqual(m.execute("findmnt -n -o SOURCE /").strip(), "/dev/mapper/root-root") # Cards and tables diff -Nru cockpit-314/test/common/tap-cdp cockpit-316/test/common/tap-cdp --- cockpit-314/test/common/tap-cdp 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/common/tap-cdp 2024-04-25 09:45:58.000000000 +0000 @@ -23,7 +23,7 @@ import subprocess import sys -import cdp +from cdp import CDP tap_line_re = re.compile(r'^(ok [0-9]+|not ok [0-9]+|bail out!|[0-9]+\.\.[0-9]+|# )', re.IGNORECASE) @@ -54,7 +54,7 @@ if opts.strip and opts.test.startswith(opts.strip): opts.test = opts.test[len(opts.strip):] -cdp = cdp.CDP("C.utf8") +cdp = CDP("C.utf8") try: cdp.browser.path(cdp.show_browser) @@ -82,7 +82,6 @@ ignore_resource_errors = False for t, message in cdp.read_log(): - # fail on browser level errors if t == 'cdp': if message['level'] == "error": diff -Nru cockpit-314/test/common/testlib.py cockpit-316/test/common/testlib.py --- cockpit-314/test/common/testlib.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/common/testlib.py 2024-04-25 09:45:58.000000000 +0000 @@ -19,9 +19,9 @@ import argparse import base64 +import contextlib import errno import fnmatch -import functools import glob import io import json @@ -35,19 +35,22 @@ import time import traceback import unittest -from time import sleep -from typing import Any, Callable, Dict, List, Optional, Union +from collections.abc import Collection, Container, Iterator, Mapping, Sequence +from typing import Any, Callable, ClassVar, Literal, Never, TypedDict, TypeVar import cdp -import testvm from lcov import write_lcov from lib.constants import OSTREE_IMAGES +from machine import testvm try: from PIL import Image except ImportError: Image = None +_T = TypeVar('_T') +_FT = TypeVar("_FT", bound=Callable[..., Any]) + BASE_DIR = os.path.realpath(f'{__file__}/../../..') TEST_DIR = f'{BASE_DIR}/test' BOTS_DIR = f'{BASE_DIR}/bots' @@ -59,30 +62,27 @@ PIXEL_TEST_MESSAGE = "Some pixel tests have failed" __all__ = ( - # Test definitions - 'test_main', - 'arg_parser', + 'PIXEL_TEST_MESSAGE', + 'TEST_DIR', + 'UNEXPECTED_MESSAGE', 'Browser', + 'Error', 'MachineCase', - 'nondestructive', + 'arg_parser', 'no_retry_when_changed', + 'nondestructive', 'onlyImage', - 'skipImage', + 'opts', + 'sit', + 'skipBrowser', 'skipDistroPackage', + 'skipImage', 'skipOstree', - 'skipBrowser', + 'test_main', + 'timeout', 'todo', - 'todoPybridge', 'todoPybridgeRHEL8', - 'timeout', - 'Error', - - 'sit', 'wait', - 'opts', - 'TEST_DIR', - 'UNEXPECTED_MESSAGE', - 'PIXEL_TEST_MESSAGE' ) # Command line options @@ -96,6 +96,7 @@ opts.fetch = True opts.coverage = False + # Browser layouts # # A browser can be switched into a number of different layouts, such @@ -119,42 +120,48 @@ # The browser starts out in the first layout of this list, which is # "desktop" by default. -default_layouts = [ +class BrowserLayout(TypedDict): + name: str + theme: Literal["light"] | Literal["dark"] + shell_size: tuple[int, int] + content_size: tuple[int, int] + + +default_layouts: Sequence[BrowserLayout] = ( { "name": "desktop", "theme": "light", - "shell_size": [1920, 1200], - "content_size": [1680, 1130] + "shell_size": (1920, 1200), + "content_size": (1680, 1130) }, { "name": "medium", "theme": "light", - "is_mobile": False, - "shell_size": [1280, 768], - "content_size": [1040, 698] + "shell_size": (1280, 768), + "content_size": (1040, 698) }, { "name": "mobile", "theme": "light", - "shell_size": [414, 1920], - "content_size": [414, 1856] + "shell_size": (414, 1920), + "content_size": (414, 1856) }, { "name": "dark", "theme": "dark", - "shell_size": [1920, 1200], - "content_size": [1680, 1130] + "shell_size": (1920, 1200), + "content_size": (1680, 1130) }, { "name": "rtl", "theme": "light", - "shell_size": [1920, 1200], - "content_size": [1680, 1130] + "shell_size": (1920, 1200), + "content_size": (1680, 1130) }, -] +) -def attach(filename: str, move: bool = False): +def attach(filename: str, move: bool = False) -> None: """Put a file into the attachments directory. :param filename: file to put in attachments directory @@ -171,7 +178,7 @@ shutil.copy(filename, dest) -def unique_filename(base, ext): +def unique_filename(base: str, ext: str) -> str: for i in range(20): if i == 0: f = f"{base}.{ext}" @@ -183,7 +190,19 @@ class Browser: - def __init__(self, address, label, machine, pixels_label=None, coverage_label=None, port=None): + layouts: Sequence[BrowserLayout] + current_layout: BrowserLayout | None + port: str | int + + def __init__( + self, + address: str, + label: str, + machine: 'MachineCase', + pixels_label: str | None = None, + coverage_label: str | None = None, + port: int | str | None = None + ) -> None: if ":" in address: self.address, _, self.port = address.rpartition(":") else: @@ -194,7 +213,7 @@ self.default_user = "admin" self.label = label self.pixels_label = pixels_label - self.used_pixel_references = set() + self.used_pixel_references = set[str]() self.coverage_label = coverage_label self.machine = machine path = os.path.dirname(__file__) @@ -226,7 +245,7 @@ if self.cdp.browser.name == "chromium": self.cdp.invoke("Page.setDownloadBehavior", behavior="allow", downloadPath=self.cdp.download_dir) - def open(self, href: str, cookie: Optional[Dict[str, str]] = None, tls: bool = False): + def open(self, href: str, cookie: Mapping[str, str] | None = None, tls: bool = False) -> None: """Load a page into the browser. :param href: the path of the Cockpit page to load, such as "/users". Either PAGE or URL needs to be given. @@ -237,7 +256,7 @@ Error: When a timeout occurs waiting for the page to load. """ if href.startswith("/"): - schema = tls and "https" or "http" + schema = "https" if tls else "http" href = "%s://%s:%s%s" % (schema, self.address, self.port, href) if not self.current_layout and os.environ.get("TEST_SHOW_BROWSER") in [None, "pixels"]: @@ -248,22 +267,13 @@ self.cdp.invoke("Network.setCookie", **cookie) self.switch_to_top() - opts = {} - if self.cdp.browser.name == "firefox": - # by default, Firefox optimizes this away if the current and the given href URL - # are the same (Like in TestKeys.testAuthorizedKeys). - # Force a reload in this case, to make tests and the waitPageLoad below predictable - # But that option has the inverse effect with Chromium (argh) - opts["transitionType"] = "reload" - elif self.cdp.browser.name == 'chromium': - # Chromium also optimizes this away, but doesn't have a knob to force loading - # so load the blank page first - self.cdp.invoke("Page.navigate", url="about:blank") - self.cdp.invoke("waitPageLoad", timeout=5) - self.cdp.invoke("Page.navigate", url=href, **opts) - self.cdp.invoke("waitPageLoad", timeout=self.cdp.timeout) + # Some browsers optimize this away if the current URL is already href + # (e.g. in TestKeys.testAuthorizedKeys). Load the blank page first to always + # force a load. + self.cdp.invoke("Page.navigate", url="about:blank") + self.cdp.invoke("Page.navigate", url=href) - def set_user_agent(self, ua: str): + def set_user_agent(self, ua: str) -> None: """Set the user agent of the browser :param ua: user agent string @@ -271,7 +281,7 @@ """ self.cdp.invoke("Emulation.setUserAgentOverride", userAgent=ua) - def reload(self, ignore_cache: bool = False): + def reload(self, ignore_cache: bool = False) -> None: """Reload the current page :param ignore_cache: if true browser cache is ignored (default False) @@ -280,11 +290,11 @@ self.switch_to_top() self.wait_js_cond("ph_select('iframe.container-frame').every(function (e) { return e.getAttribute('data-loaded'); })") - self.cdp.invoke("reloadPageAndWait", ignoreCache=ignore_cache) + self.cdp.invoke("Page.reload", ignoreCache=ignore_cache) self.machine.allow_restart_journal_messages() - def switch_to_frame(self, name: str): + def switch_to_frame(self, name: str | None) -> None: """Switch to frame in browser tab Each page has a main frame and can have multiple subframes, usually @@ -294,19 +304,26 @@ """ self.cdp.set_frame(name) - def switch_to_top(self): + def switch_to_top(self) -> None: """Switch to the main frame Switch to the main frame from for example an iframe. """ self.cdp.set_frame(None) - def upload_file(self, selector: str, file: str): + def upload_files(self, selector: str, files: Sequence[str]) -> None: + """Upload a local file to the browser + + The selector should select the element. + Files is a list of absolute paths to files which should be uploaded. + """ r = self.cdp.invoke("Runtime.evaluate", expression='document.querySelector(%s)' % jsquote(selector)) objectId = r["result"]["objectId"] - self.cdp.invoke("DOM.setFileInputFiles", files=[file], objectId=objectId) + self.cdp.invoke("DOM.setFileInputFiles", files=files, objectId=objectId) - def raise_cdp_exception(self, func, arg, details, trailer=None): + def raise_cdp_exception( + self, func: str, arg: str, details: Mapping[str, Any], trailer: str | None = None + ) -> Never: # unwrap a typical error string if details.get("exception", {}).get("type") == "string": msg = details["exception"]["value"] @@ -318,7 +335,7 @@ msg += "\n" + trailer raise Error("%s(%s): %s" % (func, arg, msg)) - def inject_js(self, code: str): + def inject_js(self, code: str) -> None: """Execute JS code that does not return anything :param code: a string containing JavaScript code @@ -327,7 +344,7 @@ self.cdp.invoke("Runtime.evaluate", expression=code, trace=code, silent=False, awaitPromise=True, returnByValue=False, no_trace=True) - def eval_js(self, code: str, no_trace: bool = False) -> Optional[Any]: + def eval_js(self, code: str, no_trace: bool = False) -> Any: """Execute JS code that returns something :param code: a string containing JavaScript code @@ -349,7 +366,7 @@ print("eval_js(%s): cannot interpret return value %s" % (code, result)) return None - def call_js_func(self, func: str, *args: Any) -> Optional[Any]: + def call_js_func(self, func: str, *args: object) -> Any: """Call a JavaScript function :param func: JavaScript function to call @@ -357,7 +374,7 @@ """ return self.eval_js("%s(%s)" % (func, ','.join(map(jsquote, args)))) - def set_mock(self, mock: Dict[str, str], base: Optional[str] = ""): + def set_mock(self, mock: Mapping[str, str], base: str = "") -> None: """Replace some DOM elements with mock text The 'mock' parameter is a dictionary from CSS selectors to the @@ -373,7 +390,7 @@ """ self.call_js_func('ph_set_texts', {base + " " + k: v for k, v in mock.items()}) - def cookie(self, name: str): + def cookie(self, name: str) -> Mapping[str, object] | None: """Retrieve a browser cookie by name :param name: the name of the cookie @@ -381,14 +398,27 @@ """ cookies = self.cdp.invoke("Network.getCookies") for c in cookies["cookies"]: + assert isinstance(c, Mapping) if c["name"] == name: return c return None - def go(self, url_hash: str): + def go(self, url_hash: str) -> None: self.call_js_func('ph_go', url_hash) - def mouse(self, selector: str, event: str, x: int = 0, y: int = 0, btn: int = 0, ctrlKey: bool = False, shiftKey: bool = False, altKey: bool = False, metaKey: bool = False): + def mouse( + self, + selector: str, + event: str, + x: int = 0, + y: int = 0, + btn: int = 0, + *, + ctrlKey: bool = False, + shiftKey: bool = False, + altKey: bool = False, + metaKey: bool = False + ) -> None: """Simulate a browser mouse event :param selector: the element to interact with @@ -404,14 +434,14 @@ self.wait_visible(selector) self.call_js_func('ph_mouse', selector, event, x, y, btn, ctrlKey, shiftKey, altKey, metaKey) - def click(self, selector: str): + def click(self, selector: str) -> None: """Click on a ui element :param selector: the selector to click on """ self.mouse(selector + ":not([disabled]):not([aria-disabled=true])", "click", 0, 0, 0) - def val(self, selector: str): + def val(self, selector: str) -> Any: """Get the value attribute of a selector. :param selector: the selector to get the value of @@ -419,7 +449,7 @@ self.wait_visible(selector) return self.call_js_func('ph_val', selector) - def set_val(self, selector: str, val): + def set_val(self, selector: str, val: object) -> None: """Set the value attribute of a non disabled DOM element. This also emits a change DOM change event. @@ -430,15 +460,15 @@ self.wait_visible(selector + ':not([disabled]):not([aria-disabled=true])') self.call_js_func('ph_set_val', selector, val) - def text(self, selector: str): + def text(self, selector: str) -> str: """Get an element's textContent value. :param selector: the selector to get the value of """ self.wait_visible(selector) - return self.call_js_func('ph_text', selector) + return self.call_js_func('ph_text', selector) or '' - def attr(self, selector: str, attr): + def attr(self, selector: str, attr: str) -> Any: """Get the value of a given attribute of an element. :param selector: the selector to get the attribute of @@ -447,7 +477,7 @@ self._wait_present(selector) return self.call_js_func('ph_attr', selector, attr) - def set_attr(self, selector, attr, val): + def set_attr(self, selector: str, attr: str, val: object) -> None: """Set an attribute value of an element. :param selector: the selector @@ -457,7 +487,7 @@ self._wait_present(selector + ':not([disabled]):not([aria-disabled=true])') self.call_js_func('ph_set_attr', selector, attr, val) - def get_checked(self, selector: str): + def get_checked(self, selector: str) -> bool: """Get checked state of a given selector. :param selector: the selector @@ -466,7 +496,7 @@ self.wait_visible(selector + ':not([disabled]):not([aria-disabled=true])') return self.call_js_func('ph_get_checked', selector) - def set_checked(self, selector: str, val): + def set_checked(self, selector: str, val: bool) -> None: """Set checked state of a given selector. :param selector: the selector @@ -475,7 +505,7 @@ self.wait_visible(selector + ':not([disabled]):not([aria-disabled=true])') self.call_js_func('ph_set_checked', selector, val) - def focus(self, selector: str): + def focus(self, selector: str) -> None: """Set focus on selected element. :param selector: the selector @@ -483,7 +513,7 @@ self.wait_visible(selector + ':not([disabled]):not([aria-disabled=true])') self.call_js_func('ph_focus', selector) - def blur(self, selector: str): + def blur(self, selector: str) -> None: """Remove keyboard focus from selected element. :param selector: the selector @@ -492,13 +522,13 @@ self.call_js_func('ph_blur', selector) # TODO: Unify them so we can have only one - def key_press(self, keys: str, modifiers: int = 0, use_ord: bool = False): + def key_press(self, keys: str, modifiers: int = 0, use_ord: bool = False) -> None: if self.cdp.browser.name == "chromium": self._key_press_chromium(keys, modifiers, use_ord) else: self._key_press_firefox(keys, modifiers, use_ord) - def _key_press_chromium(self, keys: str, modifiers: int = 0, use_ord=False): + def _key_press_chromium(self, keys: str, modifiers: int = 0, use_ord: bool = False) -> None: for key in keys: args = {"type": "keyDown", "modifiers": modifiers} @@ -516,7 +546,7 @@ args["type"] = "keyUp" self.cdp.invoke("Input.dispatchKeyEvent", **args) - def _key_press_firefox(self, keys: str, modifiers: int = 0, use_ord: bool = False): + def _key_press_firefox(self, keys: str, modifiers: int = 0, use_ord: bool = False) -> None: # https://python-reference.readthedocs.io/en/latest/docs/str/ASCII.html # Both line feed and carriage return are normalized to Enter (https://html.spec.whatwg.org/multipage/form-elements.html) keyMap = { @@ -540,14 +570,14 @@ args["type"] = "keyUp" self.cdp.invoke("Input.dispatchKeyEvent", **args) - def select_from_dropdown(self, selector: str, value): + def select_from_dropdown(self, selector: str, value: object) -> None: self.wait_visible(selector + ':not([disabled]):not([aria-disabled=true])') text_selector = f"{selector} option[value='{value}']" self._wait_present(text_selector) self.set_val(selector, value) self.wait_val(selector, value) - def select_PF4(self, selector: str, value): + def select_PF4(self, selector: str, value: str) -> None: self.click(f"{selector}:not([disabled]):not([aria-disabled=true])") select_entry = f"{selector} + ul button:contains('{value}')" self.click(select_entry) @@ -556,12 +586,14 @@ else: self.wait_text(f"{selector} .pf-v5-c-select__toggle-text", value) - def select_PF5(self, selector_button: str, selector: str, value): + def select_PF5(self, selector_button: str, selector: str, value: object) -> None: self.click(f"{selector_button}:not([disabled]):not([aria-disabled=true])") select_entry = f"{selector} ul button:contains('{value}')" self.click(select_entry) - def set_input_text(self, selector: str, val: str, append: bool = False, value_check: bool = True, blur: bool = True): + def set_input_text( + self, selector: str, val: str, append: bool = False, value_check: bool = True, blur: bool = True + ) -> None: self.focus(selector) if not append: self.key_press("a", 2) # Ctrl + a @@ -575,29 +607,20 @@ if value_check: self.wait_val(selector, val) - def set_file_autocomplete_val(self, group_identifier: str, location: str): + def set_file_autocomplete_val(self, group_identifier: str, location: str) -> None: self.set_input_text(f"{group_identifier} .pf-v5-c-select__toggle-typeahead input", location) # click away the selection list, to force a state update self.click(f"{group_identifier} .pf-v5-c-select__toggle-typeahead") self.wait_not_present(f"{group_identifier} .pf-v5-c-select__menu") - def wait_timeout(self, timeout: int): - browser = self - - class WaitParamsRestorer(): - def __init__(self, timeout): - self.timeout = timeout - - def __enter__(self): - pass - - def __exit__(self, type_, value, traceback): - browser.cdp.timeout = self.timeout - r = WaitParamsRestorer(self.cdp.timeout) + @contextlib.contextmanager + def wait_timeout(self, timeout: int) -> Iterator[None]: + old_timeout = self.cdp.timeout self.cdp.timeout = timeout - return r + yield + self.cdp.timeout = old_timeout - def wait(self, predicate: Callable): + def wait(self, predicate: Callable[[], _T | None]) -> _T: for _ in range(self.cdp.timeout * self.timeout_factor * 5): val = predicate() if val: @@ -605,7 +628,7 @@ time.sleep(0.2) raise Error('timed out waiting for predicate to become true') - def wait_js_cond(self, cond: str, error_description: str = "null"): + def wait_js_cond(self, cond: str, error_description: str = "null") -> None: count = 0 timeout = self.cdp.timeout * self.timeout_factor start = time.time() @@ -634,92 +657,92 @@ else: raise e - def wait_js_func(self, func: str, *args: Any): + def wait_js_func(self, func: str, *args: object) -> None: self.wait_js_cond("%s(%s)" % (func, ','.join(map(jsquote, args)))) - def is_present(self, selector: str) -> Optional[bool]: + def is_present(self, selector: str) -> bool: return self.call_js_func('ph_is_present', selector) - def _wait_present(self, selector: str): + def _wait_present(self, selector: str) -> None: self.wait_js_func('ph_is_present', selector) - def wait_not_present(self, selector: str): + def wait_not_present(self, selector: str) -> None: self.wait_js_func('!ph_is_present', selector) - def is_visible(self, selector: str) -> Optional[bool]: + def is_visible(self, selector: str) -> bool: return self.call_js_func('ph_is_visible', selector) - def wait_visible(self, selector: str): + def wait_visible(self, selector: str) -> None: self._wait_present(selector) self.wait_js_func('ph_is_visible', selector) - def wait_val(self, selector: str, val: str): + def wait_val(self, selector: str, val: object) -> None: self.wait_visible(selector) self.wait_js_func('ph_has_val', selector, val) - def wait_not_val(self, selector: str, val: str): + def wait_not_val(self, selector: str, val: str) -> None: self.wait_visible(selector) self.wait_js_func('!ph_has_val', selector, val) - def wait_attr(self, selector, attr, val): + def wait_attr(self, selector: str, attr: str, val: object) -> None: self._wait_present(selector) self.wait_js_func('ph_has_attr', selector, attr, val) - def wait_attr_contains(self, selector, attr, val): + def wait_attr_contains(self, selector: str, attr: str, val: object) -> None: self._wait_present(selector) self.wait_js_func('ph_attr_contains', selector, attr, val) - def wait_attr_not_contains(self, selector, attr, val): + def wait_attr_not_contains(self, selector: str, attr: str, val: object) -> None: self._wait_present(selector) self.wait_js_func('!ph_attr_contains', selector, attr, val) - def wait_not_attr(self, selector, attr, val): + def wait_not_attr(self, selector: str, attr: str, val: object) -> None: self._wait_present(selector) self.wait_js_func('!ph_has_attr', selector, attr, val) - def wait_not_visible(self, selector: str): + def wait_not_visible(self, selector: str) -> None: self.wait_js_func('!ph_is_visible', selector) - def wait_in_text(self, selector: str, text: str): + def wait_in_text(self, selector: str, text: str) -> None: self.wait_visible(selector) self.wait_js_cond("ph_in_text(%s,%s)" % (jsquote(selector), jsquote(text)), error_description="() => 'actual text: ' + ph_text(%s)" % jsquote(selector)) - def wait_not_in_text(self, selector: str, text: str): + def wait_not_in_text(self, selector: str, text: str) -> None: self.wait_visible(selector) self.wait_js_func('!ph_in_text', selector, text) - def wait_collected_text(self, selector: str, text: str): + def wait_collected_text(self, selector: str, text: str) -> None: self.wait_js_func('ph_collected_text_is', selector, text) - def wait_text(self, selector: str, text: str): + def wait_text(self, selector: str, text: str) -> None: self.wait_visible(selector) self.wait_js_cond("ph_text_is(%s,%s)" % (jsquote(selector), jsquote(text)), error_description="() => 'actual text: ' + ph_text(%s)" % jsquote(selector)) - def wait_text_not(self, selector: str, text: str): + def wait_text_not(self, selector: str, text: str) -> None: self.wait_visible(selector) self.wait_js_func('!ph_text_is', selector, text) - def wait_text_matches(self, selector: str, pattern: str): + def wait_text_matches(self, selector: str, pattern: str) -> None: self.wait_visible(selector) self.wait_js_func('ph_text_matches', selector, pattern) - def wait_popup(self, elem_id: str): + def wait_popup(self, elem_id: str) -> None: """Wait for a popup to open. :param id: the 'id' attribute of the popup. """ self.wait_visible('#' + elem_id) - def wait_popdown(self, elem_id: str): + def wait_popdown(self, elem_id: str) -> None: """Wait for a popup to close. :param id: the 'id' attribute of the popup. """ self.wait_not_visible('#' + elem_id) - def wait_language(self, lang: str): + def wait_language(self, lang: str) -> None: parts = lang.split("-") code_1 = parts[0] code_2 = parts[0] @@ -727,11 +750,11 @@ code_2 += "_" + parts[1].upper() self.wait_js_cond("cockpit.language == '%s' || cockpit.language == '%s'" % (code_1, code_2)) - def dialog_cancel(self, sel: str, button: str = "button[data-dismiss='modal']"): + def dialog_cancel(self, sel: str, button: str = "button[data-dismiss='modal']") -> None: self.click(sel + " " + button) self.wait_not_visible(sel) - def enter_page(self, path: str, host: Optional[str] = None, reconnect: bool = True): + def enter_page(self, path: str, host: str | None = None, reconnect: bool = True) -> None: """Wait for a page to become current. :param path: The identifier the page. This is a string starting with "/" @@ -769,10 +792,17 @@ self._wait_present("body") self.wait_visible("body") - def leave_page(self): + def leave_page(self) -> None: self.switch_to_top() - def try_login(self, user: Optional[str] = None, password: Optional[str] = None, superuser: Optional[bool] = True, legacy_authorized: Optional[bool] = None): + def try_login( + self, + user: str | None = None, + password: str | None = None, + *, + superuser: bool | None = True, + legacy_authorized: bool | None = None + ) -> None: """Fills in the login dialog and clicks the button. This differs from login_and_go() by not expecting any particular result. @@ -801,9 +831,18 @@ self.eval_js('window.localStorage.setItem("superuser:%s", "%s");' % (user, "any" if superuser else "none")) self.click('#login-button') - def login_and_go(self, path: Optional[str] = None, user: Optional[str] = None, host: Optional[str] = None, - superuser: bool = True, urlroot: Optional[str] = None, tls: bool = False, password: Optional[str] = None, - legacy_authorized: Optional[bool] = None): + def login_and_go( + self, + path: str | None = None, + *, + user: str | None = None, + host: str | None = None, + superuser: bool | None = True, + urlroot: str | None = None, + tls: bool = False, + password: str | None = None, + legacy_authorized: bool | None = None + ) -> None: """Fills in the login dialog, clicks the button and navigates to the given path :param user: the username to login with @@ -826,14 +865,14 @@ href = "/@" + host + href self.open(href, tls=tls) - self.try_login(user, password, superuser=superuser, legacy_authorized=legacy_authorized) + self.try_login(user=user, password=password, superuser=superuser, legacy_authorized=legacy_authorized) self._wait_present('#content') self.wait_visible('#content') if path: self.enter_page(path.split("#")[0], host=host) - def logout(self): + def logout(self) -> None: self.assert_no_oops() self.switch_to_top() @@ -854,12 +893,19 @@ self.machine.allow_restart_journal_messages() - def relogin(self, path: Optional[str] = None, user: Optional[str] = None, password: Optional[str] = None, - superuser: Optional[bool] = None, wait_remote_session_machine: Optional[testvm.Machine] = None): + def relogin( + self, + path: str | None = None, + user: str | None = None, + *, + password: str | None = None, + superuser: bool | None = None, + wait_remote_session_machine: testvm.Machine | None = None + ) -> None: self.logout() if wait_remote_session_machine: wait_remote_session_machine.execute("while pgrep -a cockpit-ssh; do sleep 1; done") - self.try_login(user, password=password, superuser=superuser) + self.try_login(user=user, password=password, superuser=superuser) self._wait_present('#content') self.wait_visible('#content') if path: @@ -869,22 +915,24 @@ host = None self.enter_page(path.split("#")[0], host=host) - def open_session_menu(self): + def open_session_menu(self) -> None: self.wait_visible("#toggle-menu") if (self.attr("#toggle-menu", "aria-expanded") != "true"): self.click("#toggle-menu") - def layout_is_mobile(self): - return self.current_layout and self.current_layout["shell_size"][0] < 420 + def layout_is_mobile(self) -> bool: + if not self.current_layout: + return False + return self.current_layout["shell_size"][0] < 420 - def open_superuser_dialog(self): + def open_superuser_dialog(self) -> None: if self.layout_is_mobile(): self.open_session_menu() self.click("#super-user-indicator-mobile button") else: self.click("#super-user-indicator button") - def check_superuser_indicator(self, expected: str): + def check_superuser_indicator(self, expected: str) -> None: if self.layout_is_mobile(): self.open_session_menu() self.wait_text("#super-user-indicator-mobile", expected) @@ -892,7 +940,12 @@ else: self.wait_text("#super-user-indicator", expected) - def become_superuser(self, user: Optional[str] = None, password: Optional[str] = None, passwordless: Optional[bool] = False): + def become_superuser( + self, + user: str | None = None, + password: str | None = None, + passwordless: bool | None = False + ) -> None: cur_frame = self.cdp.cur_frame self.switch_to_top() @@ -911,7 +964,7 @@ self.check_superuser_indicator("Administrative access") self.switch_to_frame(cur_frame) - def drop_superuser(self): + def drop_superuser(self) -> None: cur_frame = self.cdp.cur_frame self.switch_to_top() @@ -922,7 +975,7 @@ self.switch_to_frame(cur_frame) - def click_system_menu(self, path: str, enter: bool = True): + def click_system_menu(self, path: str, enter: bool = True) -> None: """Click on a "System" menu entry with given URL path Enters the given target frame afterwards, unless enter=False is given @@ -934,29 +987,30 @@ # strip off parameters after hash self.enter_page(path.split('#')[0].rstrip('/')) - def get_pf_progress_value(self, progress_bar_sel): + def get_pf_progress_value(self, progress_bar_sel: str) -> int: """Get numeric value of a PatternFly component""" sel = progress_bar_sel + " .pf-v5-c-progress__indicator" self.wait_visible(sel) self.wait_attr_contains(sel, "style", "width:") style = self.attr(sel, "style") m = re.search(r"width: (\d+)%;", style) + assert m is not None return int(m.group(1)) - def ignore_ssl_certificate_errors(self, ignore: bool): - action = ignore and "continue" or "cancel" + def ignore_ssl_certificate_errors(self, ignore: bool) -> None: + action = "continue" if ignore else "cancel" if opts.trace: print("-> Setting SSL certificate error policy to %s" % action) self.cdp.command(f"setSSLBadCertificateAction('{action}')") - def grant_permissions(self, *args: str): + def grant_permissions(self, *args: str) -> None: """Grant permissions to the browser""" # https://chromedevtools.github.io/devtools-protocol/tot/Browser/#method-grantPermissions self.cdp.invoke("Browser.grantPermissions", origin="http://%s:%s" % (self.address, self.port), permissions=args) - def snapshot(self, title: str, label: Optional[str] = None): + def snapshot(self, title: str, label: str | None = None) -> None: """Take a snapshot of the current screen and save it as a PNG and HTML. Arguments: @@ -986,17 +1040,17 @@ attach(filename, move=True) print("Wrote HTML dump to " + filename) - def _set_window_size(self, width: int, height: int): + def _set_window_size(self, width: int, height: int) -> None: self.cdp.invoke("Emulation.setDeviceMetricsOverride", width=width, height=height, deviceScaleFactor=0, mobile=False) - def _set_emulated_media_theme(self, name: str): + def _set_emulated_media_theme(self, name: str) -> None: # https://bugzilla.mozilla.org/show_bug.cgi?id=1549434 if self.cdp.browser.name == "chromium": self.cdp.invoke("Emulation.setEmulatedMedia", features=[{'name': 'prefers-color-scheme', 'value': name}]) - def _set_direction(self, direction: str): + def _set_direction(self, direction: str) -> None: cur_frame = self.cdp.cur_frame if self.is_present("#shell-page"): self.switch_to_top() @@ -1004,7 +1058,7 @@ self.switch_to_frame(cur_frame) self.set_attr("html", "dir", direction) - def set_layout(self, name: str): + def set_layout(self, name: str) -> None: layout = next(lo for lo in self.layouts if lo["name"] == name) if layout != self.current_layout: if layout["name"] == "rtl": @@ -1018,7 +1072,9 @@ self._adjust_window_for_fixed_content_size() self._set_emulated_media_theme(layout["theme"]) - def _adjust_window_for_fixed_content_size(self): + def _adjust_window_for_fixed_content_size(self) -> None: + assert self.current_layout is not None + if self.eval_js("window.name").startswith("cockpit1:"): # Adjust the window size further so that the content is # exactly the expected size. This will make sure that @@ -1034,21 +1090,24 @@ if delta[0] != 0 or delta[1] != 0: self._set_window_size(shell_size[0] + delta[0], shell_size[1] + delta[1]) - def assert_pixels_in_current_layout(self, selector: str, key: str, - ignore: Optional[List[str]] = None, - mock: Optional[Dict[str, str]] = None, - sit_after_mock: bool = False, - scroll_into_view: Optional[str] = None, - wait_animations: bool = True, - wait_delay: float = 0.5): + def assert_pixels_in_current_layout( + self, + selector: str, + key: str, + *, + ignore: Collection[str] = (), + mock: Mapping[str, str] | None = None, + sit_after_mock: bool = False, + scroll_into_view: str | None = None, + wait_animations: bool = True, + wait_delay: float = 0.5 + ) -> None: """Compare the given element with its reference in the current layout""" - if ignore is None: - ignore = [] - if not (Image and self.pixels_label): return + assert self.current_layout is not None self._adjust_window_for_fixed_content_size() self.call_js_func('ph_scrollIntoViewIfNeeded', scroll_into_view or selector) self.call_js_func('ph_blur_active') @@ -1084,7 +1143,7 @@ rect = self.call_js_func('ph_element_clip', selector) - def relative_clips(sels): + def relative_clips(sels: Collection[str]) -> Collection[tuple[int, int, int, int]]: return [( r['x'] - rect['x'], r['y'] - rect['y'], @@ -1139,19 +1198,19 @@ # Pixels that are different but have been ignored are # marked in the delta image in green. - def masked(ref): + def masked(ref: tuple[int, int, int, int]) -> bool: return ref[3] != 255 - def ignorable_coord(x, y): + def ignorable_coord(x: int, y: int) -> bool: for (x0, y0, x1, y1) in ignore_rects: if x >= x0 - 2 and x < x1 + 2 and y >= y0 - 2 and y < y1 + 2: return True return False - def ignorable_change(a, b): - return abs(a[0] - b[0]) <= 2 and abs(a[1] - b[1]) <= 2 and abs(a[1] - b[1]) <= 2 + def ignorable_change(a: tuple[int, int, int], b: tuple[int, int, int]) -> bool: + return abs(a[0] - b[0]) <= 2 and abs(a[1] - b[1]) <= 2 and abs(a[2] - b[2]) <= 2 - def img_eq(ref, now, delta): + def img_eq(ref: Image, now: Image, delta: Image) -> bool: # This is slow but exactly what we want. # ImageMath might be able to speed this up. data_ref = ref.load() @@ -1193,23 +1252,25 @@ print("Differences in pixel test " + base) self.failed_pixel_tests += 1 - def assert_pixels(self, selector: str, key: str, - ignore: Optional[List[str]] = None, - mock: Optional[Dict[str, str]] = None, - sit_after_mock: bool = False, - skip_layouts: Optional[List[str]] = None, - scroll_into_view: Optional[str] = None, - wait_animations: bool = True, - wait_after_layout_change: bool = False, - wait_delay: float = 0.5): + def assert_pixels( + self, + selector: str, + key: str, + *, + ignore: Collection[str] = (), + mock: Mapping[str, str] | None = None, + sit_after_mock: bool = False, + skip_layouts: Container[str] = (), + scroll_into_view: str | None = None, + wait_animations: bool = True, + wait_after_layout_change: bool = False, + wait_delay: float = 0.5 + ) -> None: """Compare the given element with its reference in all layouts""" if ignore is None: ignore = [] - if skip_layouts is None: - skip_layouts = [] - if not (Image and self.pixels_label): return @@ -1236,7 +1297,7 @@ self.set_layout(previous_layout) - def assert_no_unused_pixel_test_references(self): + def assert_no_unused_pixel_test_references(self) -> None: """Check whether all reference images in test/reference have been used.""" if not (Image and self.pixels_label): @@ -1248,14 +1309,14 @@ print("Unused reference image " + os.path.basename(u)) self.failed_pixel_tests += 1 - def get_js_log(self): + def get_js_log(self) -> Sequence[str]: """Return the current javascript log""" if self.cdp: return self.cdp.get_js_log() return [] - def copy_js_log(self, title: str, label: Optional[str] = None): + def copy_js_log(self, title: str, label: str | None = None) -> None: """Copy the current javascript log""" logs = list(self.get_js_log()) @@ -1266,15 +1327,15 @@ attach(filename, move=True) print("Wrote JS log to " + filename) - def kill(self): + def kill(self) -> None: self.cdp.kill() - def write_coverage_data(self): + def write_coverage_data(self) -> None: if self.coverage_label and self.cdp and self.cdp.valid: coverage = self.cdp.invoke("Profiler.takePreciseCoverage") write_lcov(coverage['result'], self.coverage_label) - def assert_no_oops(self): + def assert_no_oops(self) -> None: if self.allow_oops: return @@ -1286,43 +1347,52 @@ class MachineCase(unittest.TestCase): image = testvm.DEFAULT_IMAGE - libexecdir = None + libexecdir: str | None = None + sshd_socket: str | None = None runner = None machine: testvm.Machine - machines = Dict[str, testvm.Machine] + machines: Mapping[str, testvm.Machine] machine_class = None browser: Browser network = None - journal_start = None + journal_start: str | None = None # provision is a dictionary of dictionaries, one for each additional machine to be created, e.g.: # provision = { 'openshift' : { 'image': 'openshift', 'memory_mb': 1024 } } # These will be instantiated during setUp, and replaced with machine objects - provision: Optional[Dict[str, Dict[str, Union[str, int]]]] = None + provision: ClassVar[Mapping[str, Mapping[str, Any]] | None] = None global_machine = None @classmethod - def get_global_machine(cls): + def get_global_machine(cls) -> testvm.Machine: if cls.global_machine: return cls.global_machine - cls.global_machine = cls.new_machine(cls, restrict=True, cleanup=False) + cls.global_machine = cls().new_machine(restrict=True, cleanup=False) if opts.trace: print(f"Starting global machine {cls.global_machine.label}") cls.global_machine.start() return cls.global_machine @classmethod - def kill_global_machine(cls): + def kill_global_machine(cls) -> None: if cls.global_machine: cls.global_machine.kill() cls.global_machine = None - def label(self): + def label(self) -> str: return self.__class__.__name__ + '-' + self._testMethodName - def new_machine(self, image=None, forward=None, restrict=True, cleanup=True, inherit_machine_class=True, **kwargs): - machine_class = inherit_machine_class and self.machine_class or testvm.VirtMachine + def new_machine( + self, + image: str | None = None, + forward: Mapping[str, int] | None = None, + restrict: bool = True, + cleanup: bool = True, + inherit_machine_class: bool = True, + **kwargs: Any + ) -> testvm.Machine: + machine_class = (inherit_machine_class and self.machine_class) or testvm.VirtMachine if opts.address: if forward: @@ -1348,7 +1418,7 @@ self.addCleanup(machine.kill) return machine - def new_browser(self, machine=None, coverage=False): + def new_browser(self, machine: testvm.Machine | None = None, coverage: bool = False) -> Browser: if machine is None: machine = self.machine label = self.label() + "-" + machine.label @@ -1370,17 +1440,20 @@ self.addCleanup(browser.kill) return browser - def getError(self): + def getError(self) -> str | None: # errors is a list of (method, exception) calls (usually multiple # per method); None exception means success errors = [] + assert hasattr(self, '_outcome') if hasattr(self._outcome, 'errors'): + assert hasattr(self, '_feedErrorsToResult') # Python 3.4 - 3.10 (These two methods have no side effects) result = self.defaultTestResult() errors = result.errors self._feedErrorsToResult(result, self._outcome.errors) elif hasattr(self._outcome, 'result') and hasattr(self._outcome.result, '_excinfo'): # pytest emulating unittest + assert isinstance(self._outcome.result._excinfo, str) return self._outcome.result._excinfo else: # Python 3.11+ now records errors and failures seperate @@ -1391,7 +1464,7 @@ except IndexError: return None - def is_nondestructive(self): + def is_nondestructive(self) -> bool: test_method = getattr(self.__class__, self._testMethodName) return get_decorator(test_method, self.__class__, "nondestructive") @@ -1402,17 +1475,17 @@ # some tests start e.g. centos-7 as first machine, bridge may not exist there return any('python' in m.execute('head -c 30 /usr/bin/cockpit-bridge || true') for m in self.machines.values()) - def disable_preload(self, *packages, machine=None): + def disable_preload(self, *packages: str, machine: testvm.Machine | None = None) -> None: if machine is None: machine = self.machine for pkg in packages: machine.write(f"/etc/cockpit/{pkg}.override.json", '{ "preload": [ ] }') - def enable_preload(self, package: str, *pages: str): + def enable_preload(self, package: str, *pages: str) -> None: pages_str = ', '.join(f'"{page}"' for page in pages) self.machine.write(f"/etc/cockpit/{package}.override.json", f'{{ "preload": [ {pages_str} ] }}') - def system_before(self, version): + def system_before(self, version: int) -> bool: try: v = self.machine.execute("""rpm -q --qf '%{V}' cockpit-system || dpkg-query -W -f '${source:Upstream-Version}' cockpit-system || @@ -1423,7 +1496,7 @@ return int(v[0]) < version - def setUp(self, restrict=True): + def setUp(self, restrict: bool = True) -> None: self.allowed_messages = self.default_allowed_messages self.allowed_console_errors = self.default_allowed_console_errors self.allow_core_dumps = False @@ -1462,7 +1535,7 @@ first_machine = True # First create all machines, wait for them later for key in sorted(provision.keys()): - options = provision[key].copy() + options = dict(provision[key]) if 'address' in options: del options['address'] if 'dns' in options: @@ -1499,7 +1572,7 @@ machine.dhcp_server() self.journal_start = self.machine.journal_cursor() - self.browser: Browser = self.new_browser(coverage=opts.coverage) + self.browser = self.new_browser(coverage=opts.coverage) # fail tests on criticals self.machine.write("/etc/cockpit/cockpit.conf", "[Log]\nFatal = criticals\n") if self.is_nondestructive(): @@ -1510,12 +1583,25 @@ if self.is_devel_build(): self.disable_preload("packagekit", "systemd") - if self.machine.image.startswith('debian') or self.machine.image.startswith('ubuntu') or self.machine.image == 'arch': + image = self.machine.image + + if image.startswith(('debian', 'ubuntu')) or image == 'arch': self.libexecdir = '/usr/lib/cockpit' else: self.libexecdir = '/usr/libexec' - def nonDestructiveSetup(self): + if image.startswith(('debian', 'ubuntu')): + self.sshd_service = 'ssh.service' + self.sshd_socket = 'ssh.socket' + else: + self.sshd_service = 'sshd.service' + if image == 'arch': + self.sshd_socket = None + else: + self.sshd_socket = 'sshd.socket' + self.restart_sshd = f'systemctl try-restart {self.sshd_service}' + + def nonDestructiveSetup(self) -> None: """generic setUp/tearDown for @nondestructive tests""" m = self.machine @@ -1545,7 +1631,7 @@ self.restore_file("/var/log/wtmp") home_dirs = m.execute("ls /home").strip().split() - def cleanup_home_dirs(): + def cleanup_home_dirs() -> None: for d in m.execute("ls /home").strip().split(): if d not in home_dirs: m.execute("rm -r /home/" + d) @@ -1587,7 +1673,7 @@ " swapon --show=NAME --noheadings | grep $dev | xargs -r swapoff; " "done; until rmmod scsi_debug; do sleep 0.2; done", stdout=None) - def terminate_sessions(): + def terminate_sessions() -> None: # on OSTree we don't get "web console" sessions with the cockpit/ws container; just SSH; but also, some tests start # admin sessions without Cockpit self.machine.execute("""for u in $(loginctl --no-legend list-users | awk '{ if ($2 != "root") print $1 }'); do @@ -1627,7 +1713,7 @@ self.addCleanup(terminate_sessions) - def tearDown(self): + def tearDown(self) -> None: error = self.getError() if error: @@ -1656,9 +1742,17 @@ shutil.rmtree(self.tmpdir, ignore_errors=True) - def login_and_go(self, path: Optional[str] = None, user: Optional[str] = None, host: Optional[str] = None, - superuser: bool = True, urlroot: Optional[str] = None, tls: bool = False, - enable_root_login: bool = False): + def login_and_go( + self, + path: str | None = None, + *, + user: str | None = None, + host: str | None = None, + superuser: bool = True, + urlroot: str | None = None, + tls: bool = False, + enable_root_login: bool = False + ) -> None: if enable_root_login: self.enable_root_login() self.machine.start_cockpit(tls=tls) @@ -1666,7 +1760,14 @@ with self.browser.wait_timeout(30): self.browser.login_and_go(path, user=user, host=host, superuser=superuser, urlroot=urlroot, tls=tls) - def start_machine_troubleshoot(self, new=False, known_host=False, password=None, expect_closed_dialog=True, browser=None): + def start_machine_troubleshoot( + self, + new: bool = False, + known_host: bool = False, + password: str | None = None, + expect_closed_dialog: bool = True, + browser: Browser | None = None + ) -> None: b = browser or self.browser b.click('#machine-troubleshoot') @@ -1685,7 +1786,9 @@ if expect_closed_dialog: b.wait_not_present('#hosts_setup_server_dialog') - def add_machine(self, address, known_host=False, password="foobar", browser=None): + def add_machine( + self, address: str, known_host: bool = False, password: str = "foobar", browser: Browser | None = None + ) -> None: b = browser or self.browser b.switch_to_top() b.go(f"/@{address}") @@ -1806,19 +1909,19 @@ if env_allow: default_allowed_console_errors += env_allow.split(",") - def allow_journal_messages(self, *patterns: str): + def allow_journal_messages(self, *patterns: str) -> None: """Don't fail if the journal contains a entry completely matching the given regexp""" for p in patterns: self.allowed_messages.append(p) - def allow_hostkey_messages(self): + def allow_hostkey_messages(self) -> None: self.allow_journal_messages('.*: .* host key for server is not known: .*', '.*: refusing to connect to unknown host: .*', '.*: .* host key for server has changed to: .*', '.*: host key for this server changed key type: .*', '.*: failed to retrieve resource: hostkey-unknown') - def allow_restart_journal_messages(self): + def allow_restart_journal_messages(self) -> None: self.allow_journal_messages(".*Connection reset by peer.*", "connection unexpectedly closed by peer", ".*Broken pipe.*", @@ -1847,11 +1950,11 @@ 'which: no python in .*' ) - def check_journal_messages(self, machine=None): + def check_journal_messages(self, machine: testvm.Machine | None = None) -> None: """Check for unexpected journal entries.""" machine = machine or self.machine # on main machine, only consider journal entries since test case start - cursor = (machine == self.machine) and self.journal_start or None + cursor = self.journal_start if machine == self.machine else None # Journald does not always set trusted fields like # _SYSTEMD_UNIT or _EXE correctly for the last few messages of @@ -1912,6 +2015,7 @@ first = m print(m) if not all_found: + assert first is not None self.copy_js_log("FAIL") self.copy_journal("FAIL") self.copy_cores("FAIL") @@ -1919,12 +2023,12 @@ # fail test on the unexpected messages raise Error(UNEXPECTED_MESSAGE + "journal messages:\n" + first) - def allow_browser_errors(self, *patterns): + def allow_browser_errors(self, *patterns: str) -> None: """Don't fail if the test caused a console error contains the given regexp""" for p in patterns: self.allowed_console_errors.append(p) - def check_browser_errors(self): + def check_browser_errors(self) -> None: if not self.browser: return for log in self.browser.get_js_log(): @@ -1939,13 +2043,13 @@ self.browser.assert_no_oops() - def check_pixel_tests(self): + def check_pixel_tests(self) -> None: if self.browser: self.browser.assert_no_unused_pixel_test_references() if self.browser.failed_pixel_tests > 0: raise Error(PIXEL_TEST_MESSAGE) - def snapshot(self, title: str, label: Optional[str] = None): + def snapshot(self, title: str, label: str | None = None) -> None: """Take a snapshot of the current screen and save it as a PNG. Arguments: @@ -1959,7 +2063,7 @@ sys.stderr.write("Unexpected exception in snapshot():\n") sys.stderr.write(traceback.format_exc()) - def copy_js_log(self, title, label=None): + def copy_js_log(self, title: str, label: str | None = None) -> None: if self.browser is not None: try: self.browser.copy_js_log(title, label) @@ -1968,7 +2072,7 @@ sys.stderr.write("Unexpected exception in copy_js_log():\n") sys.stderr.write(traceback.format_exc()) - def copy_journal(self, title: str, label: Optional[str] = None): + def copy_journal(self, title: str, label: str | None = None) -> None: for _, m in self.machines.items(): if m.ssh_reachable: log = unique_filename("%s-%s-%s" % (label or self.label(), m.label, title), "log.gz") @@ -1977,7 +2081,7 @@ print("Journal extracted to %s" % (log)) attach(log, move=True) - def copy_cores(self, title: str, label: Optional[str] = None): + def copy_cores(self, title: str, label: str | None = None) -> None: if self.allow_core_dumps: return for _, m in self.machines.items(): @@ -1996,7 +2100,7 @@ # Enable this to temporarily(!) create artifacts for core dumps, if a crash is hard to reproduce # attach(dest, move=True) - def settle_cpu(self): + def settle_cpu(self) -> None: """Wait until CPU usage in the VM settles down Wait until the process with the highest CPU usage drops below 20% @@ -2010,7 +2114,7 @@ break time.sleep(3) - def sed_file(self, expr: str, path: str, apply_change_action: Optional[str] = None): + def sed_file(self, expr: str, path: str, apply_change_action: str | None = None) -> None: """sed a file on primary machine This is safe for @nondestructive tests, the file will be restored during cleanup. @@ -2029,11 +2133,15 @@ def file_exists(self, path: str) -> bool: """Check if file exists on test machine""" - return self.machine.execute(f"if test -e {path}; then echo yes; fi").strip() != "" - def restore_dir(self, path: str, post_restore_action: Optional[str] = None, reboot_safe: bool = False, - restart_unit: Optional[str] = None): + def restore_dir( + self, + path: str, + post_restore_action: str | None = None, + reboot_safe: bool = False, + restart_unit: str | None = None + ) -> None: """Backup/restore a directory for a nondestructive test This takes care to not ever touch the original content on disk, but uses transient overlays. @@ -2086,7 +2194,7 @@ self.addCleanup(exe, f"if systemctl --quiet is-active {restart_unit}; then touch {restart_stamp}; fi; " f"systemctl stop {restart_unit}") - def restore_file(self, path: str, post_restore_action: Optional[str] = None): + def restore_file(self, path: str, post_restore_action: str | None = None) -> None: """Backup/restore a file for a nondestructive test This is less robust than restore_dir(), but works for files that need to get changed atomically. @@ -2106,8 +2214,15 @@ else: self.addCleanup(self.machine.execute, f"rm -f {path}") - def write_file(self, path: str, content: str, append: bool = False, owner: Optional[str] = None, perm: Optional[str] = None, - post_restore_action: Optional[str] = None): + def write_file( + self, + path: str, + content: str, + append: bool = False, + owner: str | None = None, + perm: str | None = None, + post_restore_action: str | None = None + ) -> None: """Write a file on primary machine This is safe for @nondestructive tests, the file will be removed during cleanup. @@ -2120,7 +2235,7 @@ self.restore_file(path, post_restore_action=post_restore_action) m.write(path, content, append=append, owner=owner, perm=perm) - def enable_root_login(self): + def enable_root_login(self) -> None: """Enable root login By default root login is disabled in cockpit, removing the root entry of /etc/cockpit/disallowed-users allows root to login. @@ -2131,7 +2246,7 @@ if not self.machine.ostree_image and self.file_exists(disallowed_conf): self.sed_file('/root/d', disallowed_conf) - def setup_provisioned_hosts(self, disable_preload: bool = False): + def setup_provisioned_hosts(self, disable_preload: bool = False) -> None: """Setup provisioned hosts for testing This sets the hostname of all machines to the name given in the @@ -2142,15 +2257,17 @@ if disable_preload: self.disable_preload("packagekit", "playground", "systemd", machine=m) - def authorize_pubkey(self, machine, account, pubkey): + @staticmethod + def authorize_pubkey(machine: testvm.Machine, account: str, pubkey: str) -> None: machine.execute(f"a={account} d=/home/$a/.ssh; mkdir -p $d; chown $a:$a $d; chmod 700 $d") machine.write(f"/home/{account}/.ssh/authorized_keys", pubkey) machine.execute(f"a={account}; chown $a:$a /home/$a/.ssh/authorized_keys") - def get_pubkey(self, machine, account): + @staticmethod + def get_pubkey(machine: testvm.Machine, account: str) -> str: return machine.execute(f"cat /home/{account}/.ssh/id_rsa.pub") - def setup_ssh_auth(self): + def setup_ssh_auth(self) -> None: self.machine.execute("d=/home/admin/.ssh; mkdir -p $d; chown admin:admin $d; chmod 700 $d") self.machine.execute("test -f /home/admin/.ssh/id_rsa || ssh-keygen -f /home/admin/.ssh/id_rsa -t rsa -N ''") self.machine.execute("chown admin:admin /home/admin/.ssh/id_rsa*") @@ -2165,11 +2282,11 @@ # -def jsquote(js: str) -> str: +def jsquote(js: object) -> str: return json.dumps(js) -def get_decorator(method, _class, name, default=None): +def get_decorator(method: object, _class: object, name: str, default: Any = None) -> Any: """Get decorator value of a test method or its class Return None if the decorator was not set. @@ -2182,7 +2299,8 @@ # Test decorators # -def skipBrowser(reason: str, *browsers: str): + +def skipBrowser(reason: str, *browsers: str) -> Callable[[_FT], _FT]: """Decorator for skipping a test on given browser(s) Skips a test for provided *reason* on *browsers*. @@ -2193,7 +2311,7 @@ return lambda testEntity: testEntity -def skipImage(reason: str, *images: str): +def skipImage(reason: str, *images: str) -> Callable[[_FT], _FT]: """Decorator for skipping a test for given image(s) Skip a test for a provided *reason* for given *images*. These @@ -2206,7 +2324,7 @@ return lambda testEntity: testEntity -def onlyImage(reason: str, *images: str): +def onlyImage(reason: str, *images: str) -> Callable[[_FT], _FT]: """Decorator to only run a test on given image(s) Only run this test on provided *images* for *reason*. These @@ -2217,7 +2335,7 @@ return lambda testEntity: testEntity -def skipOstree(reason: str): +def skipOstree(reason: str) -> Callable[[_FT], _FT]: """Decorator for skipping a test on OSTree images Skip test for *reason* on OSTree images defined in OSTREE_IMAGES in bots/lib/constants.py. @@ -2227,7 +2345,7 @@ return lambda testEntity: testEntity -def skipDistroPackage(): +def skipDistroPackage() -> Callable[[_FT], _FT]: """For tests which apply to BaseOS packages With that, tests can evolve with latest code, without constantly breaking them when @@ -2238,7 +2356,7 @@ return lambda testEntity: testEntity -def nondestructive(testEntity): +def nondestructive(testEntity: _T) -> _T: """Tests decorated as nondestructive will all run against the same VM Can be used on test classes and individual test methods. @@ -2247,7 +2365,7 @@ return testEntity -def no_retry_when_changed(testEntity): +def no_retry_when_changed(testEntity: _T) -> _T: """Tests decorated with no_retry_when_changed will only run once if they've been changed Tests that have been changed are expected to succeed 3 times, if the test @@ -2258,66 +2376,41 @@ return testEntity -def todo(reason: str = ''): +def todo(reason: str = '') -> Callable[[_T], _T]: """Tests decorated with @todo are expected to fail. An optional reason can be given, and will appear in the TAP output if run via run-tests. """ - def wrapper(testEntity): + def wrapper(testEntity: _T) -> _T: setattr(testEntity, '_testlib__todo', reason) return testEntity return wrapper -def todoPybridge(reason: Optional[str] = None): - if not reason: - reason = 'still fails with python bridge' - - def wrap(test_method): - @functools.wraps(test_method) - def wrapped_test(self): - is_pybridge = self.is_pybridge() - try: - test_method(self) - if is_pybridge: - return self.fail(reason) - return None - # only accept our testlib Errors, plus RuntimeError for TestSuperuserDashboardOldMachine - except (Error, RuntimeError): - if is_pybridge: - traceback.print_exc() - return self.skipTest(reason) - raise - - return wrapped_test - - return wrap - - -def todoPybridgeRHEL8(reason: Optional[str] = None): - if testvm.DEFAULT_IMAGE.startswith('rhel-8') or testvm.DEFAULT_IMAGE.startswith('centos-8'): - return todoPybridge(reason or 'known fail on el8 with python bridge') +def todoPybridgeRHEL8(reason: str | None = None) -> Callable[[_T], _T]: + # We don't currently test this scenario but we probably want to bring it + # back some day. We'll implement this again when we do that. return lambda testEntity: testEntity -def timeout(seconds: int): +def timeout(seconds: int) -> Callable[[_T], _T]: """Change default test timeout of 600s, for long running tests Can be applied to an individual test method or the entire class. This only applies to test/common/run-tests, not to calling check-* directly. """ - def wrapper(testEntity): + def wrapper(testEntity: _T) -> _T: setattr(testEntity, '_testlib__timeout', seconds) return testEntity return wrapper class TapRunner: - def __init__(self, verbosity=1): + def __init__(self, verbosity: int = 1): self.verbosity = verbosity - def runOne(self, test): + def runOne(self, test: unittest.TestCase) -> unittest.TestResult: result = unittest.TestResult() print('# ----------------------------------------------------------------------') print('#', test) @@ -2346,11 +2439,11 @@ print(f"# Result {test} failed") return result - def run(self, testable): - tests = [] + def run(self, testable: unittest.TestSuite) -> int: + tests: list[unittest.TestCase] = [] # The things to test - def collapse(test, tests): + def collapse(test: unittest.TestCase | unittest.TestSuite, tests: list[unittest.TestCase]) -> None: if isinstance(test, unittest.TestCase): tests.append(test) else: @@ -2380,8 +2473,8 @@ # Return 77 if all tests were skipped if len(skips) == test_count: - skips = ", ".join([f"{s[0]!s} {s[1]}" for s in skips]) - sys.stdout.write(f"# SKIP {skips}\n") + skipstr = ", ".join([f"{s[0]!s} {s[1]}" for s in skips]) + sys.stdout.write(f"# SKIP {skipstr}\n") return 77 if failures: plural = "S" if failures > 1 else "" @@ -2393,7 +2486,8 @@ return 0 -def print_tests(tests): +def print_tests(tests: unittest.TestSuite | Collection[unittest.TestSuite | unittest.TestCase]) -> None: + assert hasattr(unittest.loader, '_FailedTest') for test in tests: if isinstance(test, unittest.TestSuite): print_tests(test) @@ -2404,7 +2498,7 @@ print(test.id().replace("__main__.", "")) -def arg_parser(enable_sit=True): +def arg_parser(enable_sit: bool = True) -> argparse.ArgumentParser: parser = argparse.ArgumentParser(description='Run Cockpit test(s)') parser.add_argument('-v', '--verbose', dest="verbosity", action='store_const', const=2, help='Verbose output') @@ -2423,13 +2517,18 @@ help="Collect code coverage data") parser.add_argument("-l", "--list", action="store_true", help="Print the list of tests that would be executed") # TMT compatibility, pass testnames as whitespace separated list - parser.add_argument('tests', nargs='*', default=os.getenv("TEST_NAMES").split() if os.getenv("TEST_NAMES") else []) + parser.add_argument('tests', nargs='*', default=os.getenv("TEST_NAMES", '').split()) parser.set_defaults(verbosity=1, fetch=True) return parser -def test_main(options=None, suite=None, attachments=None, **kwargs): +def test_main( + options: argparse.Namespace | None = None, + suite: unittest.TestSuite | None = None, + attachments: str | None = None, + **kwargs: object +) -> int: """ Run all test cases, as indicated by arguments. @@ -2446,15 +2545,17 @@ sys.stdout.flush() sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', buf_arg) - standalone = options is None parser = arg_parser() parser.add_argument('--machine', metavar="hostname[:port]", dest="address", default=None, help="Run this test against an already running machine") parser.add_argument('--browser', metavar="hostname[:port]", dest="browser", default=None, help="When using --machine, use this cockpit web address") - if standalone: + if options is None: options = parser.parse_args() + standalone = True + else: + standalone = False # Sit should always imply verbose if options.sit: @@ -2493,14 +2594,14 @@ class Error(Exception): - def __init__(self, msg): + def __init__(self, msg: str) -> None: self.msg = msg - def __str__(self): + def __str__(self) -> str: return self.msg -def wait(func: Callable, msg: Optional[str] = None, delay: int = 1, tries: int = 60): +def wait(func: Callable[[], _T | None], msg: str | None = None, delay: int = 1, tries: int = 60) -> _T: """Wait for FUNC to return something truthy, and return that. FUNC is called repeatedly until it returns a true value or until a @@ -2528,11 +2629,11 @@ else: pass t = t + 1 - sleep(delay) + time.sleep(delay) raise Error(msg or "Condition did not become true.") -def sit(machines=None): +def sit(machines: Mapping[str, testvm.Machine] = {}) -> None: """ Wait until the user confirms to continue. @@ -2540,7 +2641,7 @@ the browser. """ - for (_, machine) in (machines or {}).items(): + for machine in machines.values(): sys.stderr.write(machine.diagnose()) print("Press RET to continue...") sys.stdin.readline() diff -Nru cockpit-314/test/example/check-example cockpit-316/test/example/check-example --- cockpit-314/test/example/check-example 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/example/check-example 2024-04-25 09:45:58.000000000 +0000 @@ -38,7 +38,7 @@ if os.environ.get('TEST_FAILURES'): self.assertFalse(True) # noqa: FBT003 - @unittest.skip + @unittest.skip('not supported') def testSkip(self): self.login_and_go("/system") self.assertFalse(True) # noqa: FBT003 diff -Nru cockpit-314/test/pytest/test_bridge.py cockpit-316/test/pytest/test_bridge.py --- cockpit-314/test/pytest/test_bridge.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/pytest/test_bridge.py 2024-04-25 09:45:58.000000000 +0000 @@ -20,7 +20,7 @@ from cockpit._vendor.systemd_ctypes import bus from cockpit.bridge import Bridge -from cockpit.channel import Channel +from cockpit.channel import AsyncChannel, Channel, ChannelRoutingRule from cockpit.channels import CHANNEL_TYPES from cockpit.jsonutil import JsonDict, JsonObject, JsonValue, get_bool, get_dict, get_int, json_merge_patch from cockpit.packages import BridgeConfig @@ -538,6 +538,16 @@ await transport.check_close(channel=ch) assert not myfile.exists() + # acks + ch = await transport.check_open('fsreplace1', path=str(myfile), send_acks='bytes') + transport.send_data(ch, b'some stuff') + await transport.assert_msg('', command='ack', bytes=10, channel=ch) + transport.send_data(ch, b'some more stuff') + await transport.assert_msg('', command='ack', bytes=15, channel=ch) + transport.send_done(ch) + await transport.assert_msg('', command='done', channel=ch) + await transport.check_close(channel=ch) + @pytest.mark.asyncio async def test_fsreplace1_change_conflict(transport: MockTransport, tmp_path: Path) -> None: @@ -616,6 +626,13 @@ transport.send_done(ch) await transport.assert_msg('', command='close', channel=ch, problem='not-found') + # invalid send-acks option + await transport.check_open('fsreplace1', path=str(tmp_path), send_acks='not-valid', + problem='protocol-error', + reply_keys={ + 'message': """attribute 'send-acks': invalid value "not-valid" not in ['bytes']""" + }) + @pytest.mark.asyncio @pytest.mark.parametrize('channeltype', CHANNEL_TYPES) @@ -692,7 +709,7 @@ print('sending done') transport.send_done(ch) - if payload in ['dbus-json3', 'fswatch1', 'null']: + if payload in ['dbus-json3', 'fswatch1', 'metrics1', 'null']: transport.send_close(ch) while True: @@ -735,6 +752,72 @@ assert Bridge.get_os_release() == expected +class AckChannel(AsyncChannel): + payload = 'ack1' + + async def run(self, options: JsonObject) -> None: + self.semaphore = asyncio.Semaphore(0) + self.ready() + while await self.read(): + await self.semaphore.acquire() + + +@pytest.mark.asyncio +async def test_async_acks(bridge: Bridge, transport: MockTransport) -> None: + # Inject our mock channel type + for rule in bridge.routing_rules: + if isinstance(rule, ChannelRoutingRule): + rule.table['ack1'] = [AckChannel] + + # invalid send-acks values + await transport.check_open('ack1', send_acks=True, problem='protocol-error') + await transport.check_open('ack1', send_acks='x', problem='protocol-error') + + # open the channel with acks off + ch = await transport.check_open('ack1') + # send a bunch of data and get no acks + for _ in range(20): + transport.send_data(ch, b'x') + # this will assert that we receive only the close message (and no acks) + await transport.check_close(ch) + + # open the channel with acks on + ch = await transport.check_open('ack1', send_acks='bytes') + # send a bunch of data + for _ in range(20): + transport.send_data(ch, b'x') + # we should get exactly one ack (from the first read) before things block + await transport.assert_msg('', channel=ch, command='ack', bytes=1) + # this will assert that we receive only the close message (and no additional acks) + await transport.check_close(ch) + + # open the channel with acks on + ch = await transport.check_open('ack1', send_acks='bytes') + # fish the open channel out of the bridge + ack = bridge.open_channels[ch] + assert isinstance(ack, AckChannel) + # let's give ourselves a bit more headroom + for _ in range(5): + ack.semaphore.release() + # send a bunch of data and get some acks + for _ in range(10): + transport.send_data(ch, b'x') + for _ in range(6): + await transport.assert_msg('', channel=ch, command='ack', bytes=1) + # make sure that as we "consume" the data we get more acks: + for _ in range(4): + # no ack in the queue... + await transport.assert_empty() + ack.semaphore.release() + # ... but now there is. + await transport.assert_msg('', channel=ch, command='ack', bytes=1) + # make some more room (for data we didn't send) + for _ in range(5): + ack.semaphore.release() + # but we shouldn't have gotten any acks for those + await transport.check_close(ch) + + @pytest.mark.asyncio async def test_flow_control(transport: MockTransport, tmp_path: Path) -> None: bigun = tmp_path / 'bigun' diff -Nru cockpit-314/test/pytest/test_packages.py cockpit-316/test/pytest/test_packages.py --- cockpit-314/test/pytest/test_packages.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/pytest/test_packages.py 2024-04-25 09:45:58.000000000 +0000 @@ -283,4 +283,3 @@ assert document.data.read().decode() == 'min' document = packages.load_path('/one/two.min.js', {}) assert document.data.read().decode() == 'min' - diff -Nru cockpit-314/test/pytest/test_transport.py cockpit-316/test/pytest/test_transport.py --- cockpit-314/test/pytest/test_transport.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/pytest/test_transport.py 2024-04-25 09:45:58.000000000 +0000 @@ -212,7 +212,7 @@ @pytest.mark.asyncio async def test_terminal_write_eof(self): # Make sure write_eof() fails - with self.create_terminal() as (ours, protocol, transport): + with self.create_terminal() as (ours, _protocol, transport): assert not transport.can_write_eof() with pytest.raises(RuntimeError): transport.write_eof() @@ -221,7 +221,7 @@ @pytest.mark.asyncio async def test_terminal_disconnect(self): # Make sure disconnecting the session shows up as an EOF - with self.create_terminal() as (ours, protocol, transport): + with self.create_terminal() as (ours, protocol, _transport): os.close(ours) while not protocol.eof: await asyncio.sleep(0.1) @@ -390,3 +390,86 @@ await asyncio.sleep(0.1) transport.close() + + @pytest.mark.asyncio + async def test_simple_close(self) -> None: + protocol, transport = self.subprocess(['cat']) + protocol.output = [] + + protocol.write(b'abcd') + assert protocol.transport + assert protocol.transport.get_write_buffer_size() == 0 + protocol.transport.close() + assert protocol.transport is None # make sure it closed immediately + # we have another ref on the transport + transport.close() # should be idempotent + + @pytest.mark.asyncio + async def test_flow_control(self) -> None: + protocol, transport = self.subprocess(['cat']) + protocol.output = [] + + protocol.write(b'abcd') + assert protocol.transport is not None + transport.pause_reading() + await asyncio.sleep(0.1) + transport.resume_reading() + while protocol.received < 4: + await asyncio.sleep(0.1) + assert protocol.transport is not None + transport.write_eof() + protocol.close_on_eof = False + while not protocol.eof: + await asyncio.sleep(0.1) + assert not transport.is_reading() + transport.pause_reading() # no-op + assert not transport.is_reading() + transport.resume_reading() # no-op + assert not transport.is_reading() + + @pytest.mark.asyncio + async def test_write_backlog_eof(self) -> None: + protocol, transport = self.subprocess(['cat']) + protocol.output = [] + protocol.write_a_lot() + + assert transport.can_write_eof() + transport.write_eof() + assert not transport.is_closing() + while protocol.transport is not None: + await asyncio.sleep(0.1) + assert protocol.transport is None + + @pytest.mark.asyncio + async def test_write_backlog_close(self) -> None: + protocol, transport = self.subprocess(['cat']) + protocol.output = [] + protocol.write_a_lot() + + assert transport + transport.close() + assert transport.is_closing() + # FIXME: closing the channel should kill the process, like asyncio's SubprocessTransport + # See https://github.com/cockpit-project/cockpit/pull/18340 + transport.kill() + while protocol.transport is not None: + await asyncio.sleep(0.1) + assert protocol.transport is None + + @pytest.mark.asyncio + async def test_write_backlog_eof_and_close(self) -> None: + protocol, transport = self.subprocess(['cat']) + protocol.output = [] + protocol.write_a_lot() + + assert transport + transport.write_eof() + transport.close() + assert protocol.transport + assert protocol.transport.is_closing() + # FIXME: closing the channel should kill the process, like asyncio's SubprocessTransport + # See https://github.com/cockpit-project/cockpit/pull/18340 + transport.kill() + while protocol.transport is not None: + await asyncio.sleep(0.1) + assert protocol.transport is None diff -Nru cockpit-314/test/static-code cockpit-316/test/static-code --- cockpit-314/test/static-code 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/static-code 2024-04-25 09:45:58.000000000 +0000 @@ -1,16 +1,15 @@ #!/bin/bash -# run static code checks like eslint, flake8, mypy, ruff, vulture. +# run static code checks like eslint, mypy, ruff, vulture. set -eu -# requires: .flake8 # requires: pyproject.toml # requires: containers/flatpak/test/ruff.toml # requires: pkg/ruff.toml # requires: test/common/ruff.toml # requires: test/example/ruff.toml # requires: test/verify/ruff.toml -# requires: tools/vulture-suppressions/ruff.toml +# requires: tools/vulture_suppressions/ruff.toml # we consider any function named test_* to be a test case # each test is considered to succeed if it exits with no output @@ -34,34 +33,18 @@ find_scripts 'python3' '*.py' } -test_flake8() { - command -v flake8 >/dev/null || skip 'no flake8' - find_python_files | xargs -r -0 flake8 -} - test_ruff() { command -v ruff >/dev/null || skip 'no ruff' find_python_files | xargs -r -0 ruff check --quiet --no-cache } if [ "${WITH_PARTIAL_TREE:-0}" = 0 ]; then - mypy_strict_files=' - src/cockpit/__init__.py - src/cockpit/_version.py - src/cockpit/jsonutil.py - src/cockpit/protocol.py - src/cockpit/transports.py - ' test_mypy() { command -v mypy >/dev/null || skip 'no mypy' for pkg in systemd_ctypes ferny bei; do test -e "src/cockpit/_vendor/${pkg}/__init__.py" || skip "no ${pkg}" done - mypy --no-error-summary src/cockpit test/pytest - # test scripts individually, to avoid clashing on `__main__` - # also skip integration tests, they are too big and not annotated - find_scripts 'python3' "*.none" | grep -zv 'test/' | xargs -r -0 -n1 mypy --no-error-summary - mypy --no-error-summary --strict $mypy_strict_files + find_python_files | xargs -r -0 mypy --no-error-summary } test_vulture() { @@ -81,7 +64,16 @@ if [ "${WITH_PARTIAL_TREE:-0}" = 0 ]; then test_eslint() { test -x node_modules/.bin/eslint -a -x /usr/bin/node || skip 'no eslint' - find_scripts 'node' '*.js' '*.jsx' | xargs -0 node_modules/.bin/eslint + find_scripts 'node' '*.[jt]s' '*.[jt]sx' | xargs -0 node_modules/.bin/eslint + } + + test_typescript() { + test -x node_modules/.bin/tsc -a -x /usr/bin/node || skip 'no tsc' + # https://github.com/microsoft/TypeScript/issues/30511 + # We can't tell tsc to ignore the .d.ts in node_modules/ and check our + # own cockpit.d.ts, so we do two separate invocations as a workaround: + node_modules/.bin/tsc --typeRoots /dev/null --strict pkg/lib/cockpit.d.ts + node_modules/.bin/tsc --checkJs false --skipLibCheck } fi @@ -108,11 +100,21 @@ } test_json_verify() { - # Check all JSON files for validity - - git ls-files -z '*.json' | while read -d '' filename; do - python3 -m json.tool "${filename}" /dev/null 2>&1 | sed "s@^@${filename}: @" - done + # Check (almost) all JSON files for validity + git ls-files -z '*.json' | grep -zv ^tsconfig | xargs -r -0 python3 -c " +import argparse +import json + +parser = argparse.ArgumentParser() +parser.add_argument('files', nargs='+', type=argparse.FileType(encoding='utf-8')) +args = parser.parse_args() + +for file in args.files: + try: + json.load(file) + except ValueError as exc: # both JSONDecodeError and UnicodeError + print(f'{file.name}: {exc}') +" } test_html_verify() { diff -Nru cockpit-314/test/verify/check-apps cockpit-316/test/verify/check-apps --- cockpit-314/test/verify/check-apps 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-apps 2024-04-25 09:45:58.000000000 +0000 @@ -243,7 +243,7 @@ def set_lang(lang): b.switch_to_top() b.open_session_menu() - b.click(".display-language-menu") + b.click("button.display-language-menu") b.wait_visible('#display-language-modal') b.click(f'#display-language-modal li[data-value={lang}] button') b.click("#display-language-modal footer button.pf-m-primary") diff -Nru cockpit-314/test/verify/check-bots-api cockpit-316/test/verify/check-bots-api --- cockpit-314/test/verify/check-bots-api 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-bots-api 2024-04-25 09:45:58.000000000 +0000 @@ -26,7 +26,7 @@ from glob import glob import testlib -import testvm +from machine import testvm @unittest.skipUnless("TEST_OS" in os.environ, "TEST_OS not set") diff -Nru cockpit-314/test/verify/check-client cockpit-316/test/verify/check-client --- cockpit-314/test/verify/check-client 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-client 2024-04-25 09:45:58.000000000 +0000 @@ -39,7 +39,7 @@ if self.m_target.image.startswith("debian") or self.m_target.image.startswith("ubuntu"): self.m_target.execute("dpkg --purge cockpit-pcp-dbgsym || true; dpkg --purge cockpit-pcp pcp") elif self.m_target.image != 'arch': - self.m_target.execute("rpm --erase --verbose cockpit-pcp pcp") + self.m_target.execute("rpm --erase --verbose cockpit-pcp pcp; systemctl daemon-reload") # replicate the plumbing bits of src/client/cockpit-client to set up cockpit-beiboot self.m_client.write("/etc/cockpit/cockpit.conf", """ diff -Nru cockpit-314/test/verify/check-connection cockpit-316/test/verify/check-connection --- cockpit-314/test/verify/check-connection 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-connection 2024-04-25 09:45:58.000000000 +0000 @@ -123,10 +123,10 @@ b.set_val("#login-password-input", "foobar") # sever the connection on the login page - m.execute("iptables -w -I INPUT -p tcp --dport 9090 -j REJECT --reject-with tcp-reset") + stop_cockpit() b.click('#login-button') b.wait_text_not('#login-fatal-message', "") - m.execute("iptables -w -D INPUT -p tcp --dport 9090 -j REJECT --reject-with tcp-reset") + start_cockpit() b.reload() b.wait_visible("#login") b.set_val("#login-user-input", "admin") @@ -135,14 +135,21 @@ b.enter_page("/system") # sever the connection on the server page - m.execute("iptables -w -I INPUT -p tcp --dport 9090 -j REJECT") - b.switch_to_top() - with b.wait_timeout(60): - b.wait_visible(".curtains-ct") + # would be nice to use `firewall-cmd --add-rich-rule`, but firewalld always allows "established" connections + m.execute("nft add table ip cockpittest") + m.execute("nft add chain ip cockpittest INPUT '{ type filter hook input priority 0; policy accept; }'") + m.execute("nft insert rule ip cockpittest INPUT tcp dport 9090 reject") + + try: + b.switch_to_top() + with b.wait_timeout(60): + b.wait_visible(".curtains-ct") + + b.wait_in_text(".curtains-ct h1", "Disconnected") + b.wait_in_text('.curtains-ct .pf-v5-c-empty-state__body', "Connection has timed out.") + finally: + m.execute("nft delete table ip cockpittest") - b.wait_in_text(".curtains-ct h1", "Disconnected") - b.wait_in_text('.curtains-ct .pf-v5-c-empty-state__body', "Connection has timed out.") - m.execute("iptables -w -D INPUT -p tcp --dport 9090 -j REJECT") b.click("#machine-reconnect") b.enter_page("/system") b.logout() @@ -591,29 +598,29 @@ m.execute("passwd -d user") self.sed_file('$ a\\\nPermitEmptyPasswords yes', '/etc/ssh/sshd_config', - 'systemctl restart sshd.service') + self.restart_sshd) - def assertInOrNot(string, result, expected): + def assertInOrNot(string: str, result: str, *, expected: bool) -> None: if expected: self.assertIn(string, result) else: self.assertNotIn(string, result) - def checkMotdForUser(string, user, expected): + def checkMotdForUser(string: str, user: str, *, expected: bool) -> None: result = m.execute(f"ssh -o StrictHostKeyChecking=no -n {user}@localhost") - assertInOrNot(string, result, expected) + assertInOrNot(string, result, expected=expected) - def checkMotdContent(string, expected=True): + def checkMotdContent(string: str, *, expected: bool = True) -> None: # Needs https://github.com/linux-pam/linux-pam/pull/292 (or PAM 1.5.0) old_pam = m.image.startswith('rhel-8-') or m.image in ['centos-8-stream', 'ubuntu-2204'] # check issue (should be exactly the same as motd) - assertInOrNot(string, m.execute("cat /etc/issue.d/cockpit.issue"), expected) + assertInOrNot(string, m.execute("cat /etc/issue.d/cockpit.issue"), expected=expected) # check motd as 'root' (via cat) and 'admin' and 'user' (via ssh) - assertInOrNot(string, m.execute("cat /etc/motd.d/cockpit"), expected) + assertInOrNot(string, m.execute("cat /etc/motd.d/cockpit"), expected=expected) checkMotdForUser(string, expected=expected, user='admin') - checkMotdForUser(string, expected=old_pam and expected or False, user='user') + checkMotdForUser(string, expected=old_pam and expected, user='user') m.stop_cockpit() checkMotdContent('systemctl') @@ -1199,6 +1206,7 @@ b.wait_visible("#nav-system li:contains(Hackices)") self.assertFalse(b.is_present("#nav-system li:contains(Services)")) + @testlib.nondestructive def testBridgeCLI(self): m = self.machine @@ -1288,7 +1296,7 @@ b.logout() b.cdp.invoke("Browser.close") - @testlib.skipImage("nginx not installed", "centos-8-stream", "rhel-*", "debian-*", "ubuntu-*", "arch") + @testlib.skipImage("nginx not installed", "centos-*", "rhel-*", "debian-*", "ubuntu-*", "arch") @testlib.skipOstree("nginx not installed") @testlib.skipBrowser("Firefox needs proper cert and CA", "firefox") def testNginxTLS(self): @@ -1367,7 +1375,7 @@ b.click('#login-button') b.wait_visible('.pf-v5-c-card.system-health') - @testlib.skipImage("nginx not installed", "centos-8-stream", "rhel-*", "debian-*", "ubuntu-*", "arch") + @testlib.skipImage("nginx not installed", "centos-*", "rhel-*", "debian-*", "ubuntu-*", "arch") @testlib.skipOstree("nginx not installed") @testlib.skipBrowser("Firefox needs proper cert and CA", "firefox") def testNginxNoTLS(self): diff -Nru cockpit-314/test/verify/check-kdump cockpit-316/test/verify/check-kdump --- cockpit-314/test/verify/check-kdump 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-kdump 2024-04-25 09:45:58.000000000 +0000 @@ -37,7 +37,7 @@ def assertActive(self, active, browser=None): browser = browser or self.browser - browser.wait_visible(".pf-v5-c-switch__input" + (active and ":checked" or ":not(:checked)")) + browser.wait_visible(".pf-v5-c-switch__input" + (":checked" if active else ":not(:checked)")) def enableKdump(self): if self.machine.image.startswith("fedora"): diff -Nru cockpit-314/test/verify/check-loopback cockpit-316/test/verify/check-loopback --- cockpit-314/test/verify/check-loopback 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-loopback 2024-04-25 09:45:58.000000000 +0000 @@ -49,9 +49,9 @@ self.assertIn("no-cockpit", b.text('#login-fatal')) m.disconnect() - self.restore_dir("/etc/ssh", restart_unit="sshd.service") + self.restore_dir("/etc/ssh", restart_unit=self.sshd_service) m.execute("sed -i 's/.*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config $(ls /etc/ssh/sshd_config.d/* 2>/dev/null || true)") - m.execute("systemctl try-restart sshd.service") + m.execute(self.restart_sshd) m.wait_execute() b.reload() diff -Nru cockpit-314/test/verify/check-metrics cockpit-316/test/verify/check-metrics --- cockpit-314/test/verify/check-metrics 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-metrics 2024-04-25 09:45:58.000000000 +0000 @@ -9,7 +9,7 @@ import packagelib import testlib from lib.constants import TEST_OS_DEFAULT -from machine_core import ssh_connection +from machine.machine_core import ssh_connection def getMaximumSpike(test, g_type, saturation, hour, minute): @@ -32,7 +32,7 @@ polygon_class = ".polygon-sat" if saturation else ".polygon-use" sel = f"#metrics-hour-{hour} div.metrics-minute[data-minute='{minute}'] div.metrics-data-{g_type} .compressed{polygon_class}" - m = re.search(r"--%s:\s*([0-9.]+);" % (saturation and "saturation" or "utilization"), test.browser.attr(sel, "style")) + m = re.search(r"--%s:\s*([0-9.]+);" % ("saturation" if saturation else "utilization"), test.browser.attr(sel, "style")) test.assertIsNotNone(m) return float(m.group(1)) @@ -414,10 +414,8 @@ b.wait_in_text("#metrics-hour-1615197600000 div.metrics-minute[data-minute='39'] .metrics-events span.spikes_info", "Load") # Now add the journal - # Journal was recorded on Fedora 33 and when trying to use it with older systemd it fails with: - # `Journal file /var/log/journal/*/journal.journal uses an unsupported feature, ignoring file.` - - if self.machine.image == "centos-8-stream" or self.machine.image.startswith("rhel-8-"): + # Older systemds get a slightly wrong log window with --since/until, so only run on newer ones + if re.search(r"centos-9|rhel-9|debian-stable|ubuntu-2204|ubuntu-stable", self.machine.image): return m.upload(["verify/files/metrics-archives/journal.journal.gz"], "/tmp") @@ -426,23 +424,25 @@ b.reload() b.enter_page("/metrics") + # details for load event at 10:39 b.wait_in_text(".metrics-heading", "CPU") b.click("#metrics-hour-1615197600000 button.metrics-events-expander") b.click("#metrics-hour-1615197600000 div.metrics-minute[data-minute='39'] .metrics-events button.spikes_info") - b.wait_visible(".cockpit-log-message:contains('Created slice cockpittest.slice.')") - b.wait_in_text(".cockpit-logline:first-child .cockpit-log-message", "cpu-piglet") - b.click(".cockpit-logline:first-child .cockpit-log-message") + b.wait_in_text(".cockpit-log-panel", "load-hog.service: Succeeded.") + b.wait_in_text(".cockpit-log-panel", "Stopping /usr/bin/sh -ec for i in `seq 500`") + b.click(".cockpit-logline:contains('Stopping /usr/bin/sh -ec for i in `seq 500`') .cockpit-log-message") b.enter_page("/system/logs") - b.wait_in_text(".pf-v5-c-card__title", "cpu-piglet") + b.wait_in_text(".pf-v5-c-card__header", "load-hog.service") + b.wait_in_text(".pf-v5-c-card__title", "Stopping /usr/bin/sh -ec") b.click("li:contains('Logs')") - b.wait_visible(".cockpit-log-message:contains('Created slice cockpittest.slice.')") + b.wait_visible(".cockpit-log-message:contains('Stopping /usr/bin/sh -ec')") b.go("/metrics") b.enter_page("/metrics") # logs exist, should show tight range b.click("button:contains('View detailed logs')") b.enter_page("/system/logs") - b.wait_visible(".cockpit-log-message:contains('Created slice cockpittest.slice.')") + b.wait_visible(".cockpit-log-message:contains('load-hog.service: Succeeded.')") url = b.eval_js('window.location.hash') self.assertIn("priority=info", url) self.assertIn("since=2021-3-8%2010%3A39%3A0", url) @@ -696,7 +696,7 @@ for _ in range(10): b.click("#metrics-header-section button.pf-m-secondary") b.wait_visible('#switch-pmproxy') - found = b.is_present("#switch-pmproxy" + (expected and ":checked" or ":not(:checked)")) + found = b.is_present("#switch-pmproxy" + (":checked" if expected else ":not(:checked)")) b.click(f"{self.pcp_dialog_selector} button.btn-cancel") b.wait_not_present(self.pcp_dialog_selector) @@ -1429,7 +1429,7 @@ # avoid dynamic host name changes during PCP data collection, and start from clean slate m.execute("""systemctl stop pmlogger || true systemctl reset-failed pmlogger || true - rm -rf /var/log/pcp/pmlogger + rm -rf /var/log/pcp/pmlogger/* hostnamectl set-hostname grafana-client""") # start Grafana diff -Nru cockpit-314/test/verify/check-networkmanager-basic cockpit-316/test/verify/check-networkmanager-basic --- cockpit-314/test/verify/check-networkmanager-basic 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-networkmanager-basic 2024-04-25 09:45:58.000000000 +0000 @@ -51,7 +51,7 @@ # FIXME: rtl test was flaky, debug it and remove the skip b.assert_pixels( "#networking", "network-main", - [ + ignore=[ "td[data-label=Sending]", "td[data-label=Receiving]", "td[data-label='IP address']", diff -Nru cockpit-314/test/verify/check-networkmanager-bond cockpit-316/test/verify/check-networkmanager-bond --- cockpit-314/test/verify/check-networkmanager-bond 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-networkmanager-bond 2024-04-25 09:45:58.000000000 +0000 @@ -297,7 +297,7 @@ b.wait_not_present("#networking-interfaces tr[data-interface='tbond']") b.wait_visible(f"#networking-interfaces tr[data-interface='{iface}']") - @testlib.skipImage("TODO: no dhclient on Arch image", "arch") + @testlib.skipImage("no dhclient on OS image", "arch", "centos-10*", "rhel-10*") @testlib.skipImage("Main interface can't be managed", "debian-*", "ubuntu-*") @testlib.skipOstree("not using dhclient") def testSlowly(self): diff -Nru cockpit-314/test/verify/check-networkmanager-checkpoints cockpit-316/test/verify/check-networkmanager-checkpoints --- cockpit-314/test/verify/check-networkmanager-checkpoints 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-networkmanager-checkpoints 2024-04-25 09:45:58.000000000 +0000 @@ -66,7 +66,7 @@ b.wait_not_present("#confirm-breaking-change-popup") @testlib.skipImage("Main interface settings are read-only", "debian-*") - @testlib.skipImage("not using dhclient", "arch") + @testlib.skipImage("no dhclient on OS image", "arch", "centos-10*", "rhel-10*") @testlib.skipOstree("not using dhclient") def testCheckpointSlowRollback(self): b = self.browser diff -Nru cockpit-314/test/verify/check-networkmanager-settings cockpit-316/test/verify/check-networkmanager-settings --- cockpit-314/test/verify/check-networkmanager-settings 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-networkmanager-settings 2024-04-25 09:45:58.000000000 +0000 @@ -129,7 +129,7 @@ # Check that IPv4/IPv6 settings dialogs only show the supported IP methods for wireguard # Skip images without the wireguard-tools package - if m.image not in ["rhel4edge", "centos-8-stream"] and not m.image.startswith("rhel-8"): + if m.image not in ["rhel4edge", "centos-8-stream", "centos-10"] and not m.image.startswith("rhel-8"): b.go("/network") b.click("#networking-add-wg") b.set_input_text("#network-wireguard-settings-addresses-input", "1.2.3.4/24") diff -Nru cockpit-314/test/verify/check-networkmanager-team cockpit-316/test/verify/check-networkmanager-team --- cockpit-314/test/verify/check-networkmanager-team 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-networkmanager-team 2024-04-25 09:45:58.000000000 +0000 @@ -25,6 +25,7 @@ @testlib.skipOstree("NetworkManager-team not installed") @testlib.skipImage("TODO: networkmanager fails on Arch Linux", "arch") +@testlib.skipImage("team not supported", "centos-10*", "rhel-10*") @testlib.skipDistroPackage() @testlib.nondestructive class TestTeam(netlib.NetworkCase): diff -Nru cockpit-314/test/verify/check-networkmanager-wireguard cockpit-316/test/verify/check-networkmanager-wireguard --- cockpit-314/test/verify/check-networkmanager-wireguard 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-networkmanager-wireguard 2024-04-25 09:45:58.000000000 +0000 @@ -8,6 +8,7 @@ import testlib +@testlib.skipImage("wireguard not available", "centos-10*", "rhel-10*") class TestWireGuard(packagelib.PackageCase, netlib.NetworkCase): provision = { "machine1": {"address": "192.168.100.11/24", "memory_mb": 768}, diff -Nru cockpit-314/test/verify/check-packagekit cockpit-316/test/verify/check-packagekit --- cockpit-314/test/verify/check-packagekit 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-packagekit 2024-04-25 09:45:58.000000000 +0000 @@ -19,6 +19,7 @@ import os import time +from collections.abc import Collection import packagelib import testlib @@ -68,8 +69,9 @@ # make sure we don't have any extra ones self.assertFalse(self.browser.is_present(selector.format(len(updates) + 1))) - def check_nth_update(self, index, pkgname, version, severity="bug", - num_issues=None, desc_matches=None, cves=None, bugs=None, arch=None): + def check_nth_update(self, index: int, pkgname: str, version: str, severity: str = "bug", + num_issues: 'int | None' = None, desc_matches: Collection[str] = (), + cves: Collection[str] = (), bugs: Collection[str] = (), arch: 'str | None' = None) -> str: """Check the contents of the package update table row at index None properties will not be tested. @@ -93,7 +95,7 @@ severity_to_aria = {"bug": "bug fix", "enhancement": "enhancement", "security": "security"} b.wait_visible(f"{row} [data-label=Severity] .severity-icon[aria-label='{severity_to_aria[severity]}']") self.assertEqual(b.text(row + "[data-label=Severity]").strip(), - num_issues is not None and str(num_issues) or "") + '' if num_issues is None else str(num_issues)) # should not be expanded by default self.assertNotIn("pf-m-expanded", b.attr(row, "class")) @@ -104,7 +106,7 @@ desc = b.text(row + "> tr.pf-m-expanded") # details should contain all description bits, CVEs and bug numbers - for m in (desc_matches or []) + (cves or []) + (bugs or []): + for m in (*desc_matches, *cves, *bugs): self.assertIn(m, desc) return row @@ -145,8 +147,7 @@ self.restore_file("/etc/dnf/plugins/kpatch.conf") m.execute("systemctl disable --now kpatch") - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") # Enable and install kpatch with b.wait_timeout(30): @@ -288,8 +289,7 @@ # Refresh cache so cockpit does not try to reload page m.execute("pkcon refresh") - m.start_cockpit() - b.login_and_go("/system") + self.login_and_go("/system") # status on /system front page: no repos at all, thus no updates self.wait_checking_updates() b.wait_text(self.update_text, "System is up to date") @@ -462,8 +462,7 @@ self.testObj.enableRepo() def test_frontend(self): - m.start_cockpit() - b.login_and_go("/updates") + self.testObj.login_and_go("/updates") # check update is present with b.wait_timeout(30): @@ -505,9 +504,7 @@ # ensure that rebooting actually worked m.wait_reboot() - m.start_cockpit() - b.reload() - b.login_and_go("/updates") + self.testObj.login_and_go("/updates") else: b.wait_in_text("#status", "1 service needs to be restarted") b.click("#services-need-restart button") @@ -532,9 +529,7 @@ # ensure that rebooting actually worked m.wait_reboot() - m.start_cockpit() - b.reload() - b.login_and_go("/updates") + self.testObj.login_and_go("/updates") else: # update required a service restart b.wait_not_present("#reboot-system") @@ -603,7 +598,6 @@ @testlib.nondestructive def testFailServiceRestart(self): b = self.browser - m = self.machine packageName = "apple" scriptContent = "#!/bin/sh\nsleep infinity" @@ -628,8 +622,7 @@ self.enableRepo() - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") # check update is present with b.wait_timeout(30): @@ -692,8 +685,7 @@ self.enableRepo() m.execute("pkcon refresh") - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.wait_visible("#available-updates") b.wait_in_text("#status", "6 updates available, including 3 security fixes") @@ -815,9 +807,7 @@ # ensure that rebooting actually worked m.wait_reboot() - m.start_cockpit() - b.reload() - b.login_and_go("/updates") + self.login_and_go("/updates") else: b.click("#ignore") @@ -846,8 +836,7 @@ self.enableRepo() m.execute("pkcon refresh") - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.wait_visible("#available-updates") b.wait_in_text("#status", "1 security fix available") @@ -877,7 +866,6 @@ @testlib.nondestructive def testInfoTruncation(self): b = self.browser - m = self.machine # update with not too many binary packages for i in range(4): @@ -898,8 +886,7 @@ self.enableRepo() - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.wait_in_text("table[aria-label='Available updates']", "Things change") @@ -954,8 +941,7 @@ self.enableRepo() m.execute("pkcon refresh") - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.wait_visible("#available-updates") b.click("#available-updates button#install-all") @@ -991,8 +977,7 @@ # break the upgrade by removing the generated packages from the repo m.execute(f"rm -f {self.repo_dir}/vapor*.deb {self.repo_dir}/vapor*.rpm {self.repo_dir}/vapor*.pkg*") - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.wait_visible("#available-updates") b.wait_in_text("#status", "1 update available") @@ -1030,8 +1015,7 @@ self.enableRepo() m.execute("pkcon refresh") - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.click("#available-updates button#install-all") @@ -1061,12 +1045,11 @@ mv /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service.disabled /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service systemctl daemon-reload""") - m.start_cockpit() if not self.is_pybridge(): # TODO: conditions not implemented on C bridge; once we drop it, drop this special case and # enable the manifest documentation for conditions in doc/guide/packages.xml self.assertIn("\nupdates", m.execute("cockpit-bridge --packages")) - b.login_and_go("/updates") + self.login_and_go("/updates") # error message present b.wait_in_text(".pf-v5-c-page__main-section .pf-v5-l-stack .pf-v5-c-code-block__content", "PackageKit is not installed") @@ -1150,8 +1133,7 @@ self.enableRepo() m.execute("pkcon refresh") - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.click("#available-updates button#install-all") @@ -1204,8 +1186,7 @@ m.execute("rpm --erase --verbose kpatch kpatch-dnf") - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.wait_visible("#status") b.wait_in_text("#kpatch-settings", "Not available") @@ -1281,12 +1262,10 @@ self.update_text_action = "#page_status_notification_updates a" def testNoUpdates(self): - m = self.machine b = self.browser # fresh machine, no updates available; by default our rhel-* images are not registered - m.start_cockpit() - b.login_and_go("/system") + self.login_and_go("/system") # show unregistered status on system front page with b.wait_timeout(30): b.wait_in_text(self.update_text, "Not registered") @@ -1319,7 +1298,6 @@ b.wait_text(self.update_text, "System is up to date") def testAvailableUpdates(self): - m = self.machine b = self.browser # one available update @@ -1327,9 +1305,7 @@ self.createPackage("vanilla", "1.0", "2") self.enableRepo() - m.start_cockpit() - - b.login_and_go("/system") + self.login_and_go("/system") # by default our rhel-* images are not registered; show warning on system page with b.wait_timeout(30): b.wait_in_text(self.update_text, "Not registered") @@ -1375,8 +1351,7 @@ self.enableRepo() m.execute("pkcon refresh") - m.start_cockpit() - b.login_and_go("/system") + self.login_and_go("/system") with b.wait_timeout(30): b.wait_text(self.update_text, "System is up to date") @@ -1407,8 +1382,7 @@ b = self.browser m = self.machine - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.wait_visible("#status") @@ -1593,8 +1567,7 @@ self.createPackage("kernel-rt", "1.0", "2") self.enableRepo() - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.wait_visible("#available-updates") @@ -1685,8 +1658,7 @@ self.createPackage("vanilla", "1.0", "2") self.enableRepo() - m.start_cockpit() - b.login_and_go("/updates") + self.login_and_go("/updates") with b.wait_timeout(30): b.wait_visible("#available-updates") @@ -1734,8 +1706,7 @@ }) self.enableRepo() - m.start_cockpit() - b.login_and_go('/updates') + self.login_and_go('/updates') # click through install dialog with b.wait_timeout(30): diff -Nru cockpit-314/test/verify/check-pages cockpit-316/test/verify/check-pages --- cockpit-314/test/verify/check-pages 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-pages 2024-04-25 09:45:58.000000000 +0000 @@ -18,9 +18,13 @@ # along with Cockpit; If not, see . import os +import subprocess +import tempfile import time +from pathlib import Path import testlib +from lib.constants import TEST_OS_DEFAULT RHEL_DOC_BASE = "https://access.redhat.com/documentation" @@ -33,7 +37,7 @@ b = self.browser b.click("#toggle-docs") - b.wait_visible("#toggle-docs + ul") + b.wait_visible("#toggle-docs-menu") expected = "Web Console" expected += "".join(items) expected += "About Web Console" @@ -45,9 +49,9 @@ elif m.image == "arch": expected = "Arch Linux documentation" + expected - b.wait_collected_text("#toggle-docs + ul", expected) + b.wait_collected_text("#toggle-docs-menu", expected) b.click("#toggle-docs") - b.wait_not_present("#toggle-docs + ul") + b.wait_not_present("#toggle-docs-menu") def check_system_menu(self, label, present): b = self.browser @@ -60,7 +64,7 @@ self.browser.switch_to_top() self.browser.open_session_menu() - self.browser.click(".display-language-menu") + self.browser.click("button.display-language-menu") self.browser.wait_visible('#display-language-modal') def testBasic(self): @@ -121,10 +125,10 @@ b.switch_to_top() self.checkDocs(["Managing services"]) b.click("#toggle-docs") - b.wait_visible(f'#toggle-docs + ul a:contains("Managing services")[href^="{RHEL_DOC_BASE}"]') - b.wait_visible(f'#toggle-docs + ul a:contains("Web Console")[href^="{RHEL_DOC_BASE}"]') + b.wait_visible(f'#toggle-docs-menu a:contains("Managing services")[href^="{RHEL_DOC_BASE}"]') + b.wait_visible(f'#toggle-docs-menu a:contains("Web Console")[href^="{RHEL_DOC_BASE}"]') b.click("#toggle-docs") - b.wait_not_present("#toggle-docs + ul") + b.wait_not_present("#toggle-docs-menu") b.go("/network") self.checkDocs(["Managing networking bonds", "Managing networking teams", "Managing networking bridges", "Managing VLANs", "Managing firewall"]) @@ -862,6 +866,96 @@ # logging out too fast, some D-Bus services get disconnected self.allow_restart_journal_messages() + @testlib.skipBrowser(".upload_files() doesn't work on Firefox", "firefox") + def testUpload(self) -> None: + b = self.browser + m = self.machine + + self.restore_dir("/home/admin") + self.login_and_go("/playground/react-patterns") # , debugging="upload") + files_dir = Path(testlib.TEST_DIR) / "verify" / "files" / "metrics-archives" + test_upload_file = str(files_dir / "double_events.zip") + dest_file = "/home/admin/double_events.zip" + + filehash = subprocess.check_output(["sha512sum", test_upload_file]).strip().decode().split(' ')[0] + filesize = subprocess.check_output(["stat", "--format", "%s", test_upload_file]).strip().decode() + + b.upload_files("#demo-upload input[type='file']", [test_upload_file]) + + testlib.wait(lambda: m.execute(f"test -f {dest_file} && echo {dest_file} || echo 'no'").strip() == dest_file) + self.assertEqual(m.execute(f"stat --format '%s' {dest_file}").strip(), filesize) + self.assertEqual(m.execute(f"sha512sum {dest_file} | awk '{{ print $1 }}'").strip(), filehash) + b.wait_visible("#upload-file-btn:not(:disabled)") + + # Various cases of big file upload + with tempfile.TemporaryDirectory() as tmpdir: + big_file = str(Path(tmpdir) / "bigfile.img") + # the VM has a total of 1.5G memory, so this would fill it + # use SI sizes to make sure we test the last incomplete block + subprocess.check_call(["truncate", "-s", "1500MB", big_file]) + + # Uploaded to completion. It's slow, so only do it on default OS. + # We do this to make sure the file is spooled to disk, not memory. + if self.machine.image == TEST_OS_DEFAULT: + b.upload_files("#demo-upload input[type='file']", [big_file]) + b.wait(lambda: b.get_pf_progress_value(".upload-progress-0") >= 2) + with b.wait_timeout(120): + b.wait_visible("#upload-file-btn:not(:disabled)") + self.assertEqual(int(m.execute('stat -c%s /home/admin/bigfile.img')), 1500 * 1000 * 1000) + m.execute('rm /home/admin/bigfile.img') + + # Cancelled + b.upload_files("#demo-upload input[type='file']", [big_file]) + b.wait(lambda: b.get_pf_progress_value(".upload-progress-0") >= 2) + b.click(".cancel-button-0") + b.wait_visible("#upload-file-btn:not(:disabled)") + b.wait_in_text(".pf-v5-c-alert", "Aborted") + m.execute('! test -f /home/admin/bigfile.img') + + # Early ENOSPC error (before we would block on 'ack') + m.execute("mkdir -p /mnt/upload; mount -t tmpfs -o size=1M none /mnt/upload;") + self.addCleanup(m.execute, "umount /mnt/upload; rmdir /mnt/upload;") + b.set_file_autocomplete_val("#demo-upload", "/mnt/upload/") + b.upload_files("#demo-upload input[type='file']", [big_file]) + b.wait_visible("#upload-file-btn:not(:disabled)") + b.wait_in_text(".pf-v5-c-alert", "No space left on device") + self.assertEqual(m.execute('ls -A /mnt/upload'), '') # nothing left behind + + # Later ENOSPC error (after we've blocked) + m.execute("umount /mnt/upload; mount -t tmpfs -o size=10M none /mnt/upload;") + b.set_file_autocomplete_val("#demo-upload", "/mnt/upload/") + b.upload_files("#demo-upload input[type='file']", [big_file]) + b.wait_visible("#upload-file-btn:not(:disabled)") + b.wait_in_text(".pf-v5-c-alert", "No space left on device") + self.assertEqual(m.execute('ls -A /mnt/upload'), '') + + # Upload permission error + b.set_file_autocomplete_val("#demo-upload", "/root/") + b.drop_superuser() + b.upload_files("#demo-upload input[type='file']", [test_upload_file]) + b.wait_in_text(".pf-v5-c-alert", "Not permitted to perform this action") + + @testlib.skipBrowser(".upload_files() doesn't work on Firefox", "firefox") + def testUploadMultiple(self) -> None: + b = self.browser + m = self.machine + + self.restore_dir("/home/admin") + dest_dir = "/home/admin/keys/" + m.execute(['runuser', '-u', 'admin', 'mkdir', dest_dir]) + files_dir = Path(testlib.TEST_DIR) / "verify" / "files" / "ssh" + files = [str(files_dir / f) for f in os.listdir(files_dir)] + print("to be uploaded files", files) + + self.login_and_go("/playground/react-patterns") # , debugging="upload") + b.wait_visible("#demo-upload") + b.set_file_autocomplete_val("#demo-upload", dest_dir) + b.upload_files("#demo-upload input[type='file']", files) + + with b.wait_timeout(30): + b.wait(lambda: int(m.execute(f"ls {dest_dir} | wc -l").strip()) == len(files)) + b.wait_visible("#upload-file-btn:not(:disabled)") + if __name__ == '__main__': testlib.test_main() diff -Nru cockpit-314/test/verify/check-selinux cockpit-316/test/verify/check-selinux --- cockpit-314/test/verify/check-selinux 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-selinux 2024-04-25 09:45:58.000000000 +0000 @@ -311,7 +311,7 @@ def assertEnforce(active): # polled every 10s with b.wait_timeout(20): - b.wait_visible(".pf-v5-c-switch__input" + (active and ":checked" or ":not(:checked)")) + b.wait_visible(".pf-v5-c-switch__input" + (":checked" if active else ":not(:checked)")) # SELinux should be enabled and enforcing at the beginning assertEnforce(active=True) diff -Nru cockpit-314/test/verify/check-shell-menu cockpit-316/test/verify/check-shell-menu --- cockpit-314/test/verify/check-shell-menu 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-shell-menu 2024-04-25 09:45:58.000000000 +0000 @@ -81,11 +81,11 @@ # Clicking inside the iframed pages should close the docs menu b.click("#toggle-docs") - b.wait_visible("#toggle-docs + ul") + b.wait_visible("#toggle-docs-menu") b.enter_page("/system") b.focus("#overview main") b.switch_to_top() - b.wait_not_present("#toggle-docs + ul") + b.wait_not_present("#toggle-docs-menu") # Check that we can use a link with a hash in it b.click_system_menu("/system/#/memory") diff -Nru cockpit-314/test/verify/check-shell-multi-machine cockpit-316/test/verify/check-shell-multi-machine --- cockpit-314/test/verify/check-shell-multi-machine 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-shell-multi-machine 2024-04-25 09:45:58.000000000 +0000 @@ -72,7 +72,7 @@ machine.execute("loginctl terminate-user admin") -def change_ssh_port(machine, address, port=None, timeout_sec=120): +def change_ssh_port(machine, address, sshd_socket, sshd_service, port=None, timeout_sec=120): try: port = int(port) except (ValueError, TypeError): @@ -92,13 +92,16 @@ machine.execute("systemctl restart ssh.socket") else: machine.execute("sed -i 's/.*Port .*/#\\0/' /etc/ssh/sshd_config") - machine.execute( - f"printf 'ListenAddress 127.27.0.15:22\nListenAddress {address}:{port}\n' >> /etc/ssh/sshd_config") + machine.write("/etc/ssh/sshd_config", + f"ListenAddress 127.27.0.15:22\nListenAddress {address}:{port}\n", + append=True) # We stop the sshd.socket unit and just go with a regular # daemon. This is more portable and reloading/restarting the # socket doesn't seem to work well. # - machine.execute("( ! systemctl is-active sshd.socket || systemctl stop sshd.socket) && systemctl restart sshd.service") + if sshd_socket: + machine.execute(f"systemctl stop {sshd_socket}") + machine.execute(f"systemctl restart {sshd_service}") start_time = time.time() error = None @@ -138,7 +141,7 @@ m2 = self.machine2 m3 = self.machine3 m3_host = "10.111.113.3:2222" - change_ssh_port(m3, "10.111.113.3", 2222) + change_ssh_port(m3, "10.111.113.3", self.sshd_socket, self.sshd_service, port=2222) hostname_selector = "#system_information_hostname_text" @@ -195,7 +198,7 @@ m = self.machine m3 = self.machine3 - change_ssh_port(m3, "10.111.113.3", 2222) + change_ssh_port(m3, "10.111.113.3", self.sshd_socket, self.sshd_service, port=2222) m.write("/etc/ssh/ssh_config", "Host m2\n\tHostName 10.111.113.2\n", append=True) m.write("/etc/ssh/ssh_config", "Host m3\n\tHostName 10.111.113.3\n\tPort 2222\n", append=True) @@ -559,7 +562,7 @@ # Logging in as root is no longer allowed by default by sshd m2.execute("sed -ri 's/#?PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config") - m2.execute("systemctl restart sshd") + m2.execute(self.restart_sshd) machine_path = "/@10.111.113.2" @@ -664,7 +667,7 @@ b.logout() b.wait_visible("#login") - change_ssh_port(m2, "10.111.113.2", 2222) + change_ssh_port(m2, "10.111.113.2", self.sshd_socket, self.sshd_service, port=2222) m2.disconnect() del self.machines["machine2"] # No more access to m2 diff -Nru cockpit-314/test/verify/check-shell-multi-machine-key cockpit-316/test/verify/check-shell-multi-machine-key --- cockpit-314/test/verify/check-shell-multi-machine-key 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-shell-multi-machine-key 2024-04-25 09:45:58.000000000 +0000 @@ -108,8 +108,7 @@ # https://bugs.libssh.org/T233 and because we have a lot of # keys and cockpit-ssh tries them all, and many of them twice. self.machine2.write("/etc/ssh/sshd_config", "MaxAuthTries 100", append=True) - self.machine2.execute( - "( ! systemctl is-active sshd.socket || systemctl stop sshd.socket) && systemctl restart sshd.service", direct=True) + self.machine2.execute(self.restart_sshd, direct=True) self.machine2.wait_execute() # Disable preloading on all machines ("machine1" is done in testlib.py) diff -Nru cockpit-314/test/verify/check-static-login cockpit-316/test/verify/check-static-login --- cockpit-314/test/verify/check-static-login 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-static-login 2024-04-25 09:45:58.000000000 +0000 @@ -259,9 +259,9 @@ # On OSTree this happens over ssh if m.ostree_image: - self.restore_dir("/etc/ssh", restart_unit="sshd") + self.restore_dir("/etc/ssh", restart_unit=self.sshd_service) m.execute("sed -i 's/.*ChallengeResponseAuthentication.*/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*") - m.execute("( ! systemctl is-active sshd.socket || systemctl stop sshd.socket) && systemctl restart sshd.service") + m.execute(self.restart_sshd) # test steps below assume a pam_pwquality config with retry > 1; on some images authselect drops that setting if not m.image.startswith('debian') and not m.image.startswith('ubuntu') and not m.image.startswith("arch"): @@ -358,9 +358,9 @@ conf = "/etc/pam.d/cockpit" if m.ostree_image: conf = "/etc/pam.d/sshd" - self.restore_dir("/etc/ssh", restart_unit="sshd") + self.restore_dir("/etc/ssh", restart_unit=self.sshd_service) m.execute("sed -i 's/.*ChallengeResponseAuthentication.*/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*") - m.execute("( ! systemctl is-active sshd.socket || systemctl stop sshd.socket) && systemctl restart sshd.service") + m.execute(self.restart_sshd) # On Arch Linux the ordering matters due to an auth include for system-remote-login if self.machine.image == "arch": diff -Nru cockpit-314/test/verify/check-storage-mounting cockpit-316/test/verify/check-storage-mounting --- cockpit-314/test/verify/check-storage-mounting 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-storage-mounting 2024-04-25 09:45:58.000000000 +0000 @@ -314,7 +314,7 @@ self.dialog_wait_open() self.dialog_set_val("mount_options.extra", "hurr") self.dialog_apply() - self.dialog_wait_alert("bad option") + self.dialog_wait_alert("Unknown parameter 'hurr'", "bad option") self.dialog_cancel() self.dialog_wait_close() @@ -342,7 +342,7 @@ self.dialog_wait_open() self.dialog_set_val("mount_options.extra", "hurr") self.dialog_apply() - self.dialog_wait_alert("bad option") + self.dialog_wait_alert("Unknown parameter 'hurr'", "bad option") self.dialog_cancel() self.dialog_wait_close() diff -Nru cockpit-314/test/verify/check-storage-swap cockpit-316/test/verify/check-storage-swap --- cockpit-314/test/verify/check-storage-swap 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-storage-swap 2024-04-25 09:45:58.000000000 +0000 @@ -44,7 +44,7 @@ # It should have been started and have a fstab entry self.click_card_row("GPT partitions", 1) - b.wait_text(self.card_desc("Swap", "Used"), "0") + b.wait_text(self.card_desc("Swap", "Used"), "0 B") self.assertIn("defaults", m.execute(f"findmnt --fstab -n -o OPTIONS {disk}1")) # Stopping should set it to noauto @@ -54,7 +54,7 @@ # Start it again to test teardown below b.click(self.card_button("Swap", "Start")) - b.wait_text(self.card_desc("Swap", "Used"), "0") + b.wait_text(self.card_desc("Swap", "Used"), "0 B") self.assertIn("defaults", m.execute(f"findmnt --fstab -n -o OPTIONS {disk}1")) # It should have the right partition type @@ -86,7 +86,7 @@ # fstab entry m.execute(f"mkswap -f {disk}") b.click(self.card_button("Swap", "Start")) - b.wait_text(self.card_desc("Swap", "Used"), "0") + b.wait_text(self.card_desc("Swap", "Used"), "0 B") testlib.wait(lambda: "defaults" in m.execute(f"findmnt --fstab -n -o OPTIONS {disk}")) def testEncrypted(self): @@ -111,7 +111,7 @@ # It should have been started and have a fstab entry self.click_card_row("Storage", name=disk) - b.wait_text(self.card_desc("Swap", "Used"), "0") + b.wait_text(self.card_desc("Swap", "Used"), "0 B") dev = b.text(self.card_desc("Encryption", "Cleartext device")) testlib.wait(lambda: "defaults" in m.execute(f"findmnt --fstab -n -o OPTIONS {dev}")) diff -Nru cockpit-314/test/verify/check-storage-vdo cockpit-316/test/verify/check-storage-vdo --- cockpit-314/test/verify/check-storage-vdo 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-storage-vdo 2024-04-25 09:45:58.000000000 +0000 @@ -24,6 +24,7 @@ SIZE_10G = "10000000000" +@testlib.skipImage("vdo not currently available in RHEL 10", "rhel-10*", "centos-10*") class TestStorageVDO(storagelib.StorageCase): provision = {"0": {"memory_mb": 1800}} @@ -389,6 +390,7 @@ @testlib.onlyImage("VDO API only supported on RHEL", "rhel-*", "centos-*") +@testlib.skipImage("vdo not currently available in RHEL 10", "rhel-10*", "centos-10*") class TestStoragePackagesVDO(packagelib.PackageCase, storagelib.StorageHelpers): provision = {"0": {"memory_mb": 1500}} diff -Nru cockpit-314/test/verify/check-system-info cockpit-316/test/verify/check-system-info --- cockpit-314/test/verify/check-system-info 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-system-info 2024-04-25 09:45:58.000000000 +0000 @@ -80,13 +80,14 @@ m.write("/etc/os-release", os_release) m.execute("chattr +i /etc/os-release; (systemctl restart systemd-hostnamed || systemctl restart hostnamed)") + # set static machine ID, as they have different lengths which disturbs the pixel test + m.execute("mv /etc/machine-id /etc/machine-id.orig") + m.write("/etc/machine-id", "123456789abcdef123456789abcdef00") + self.login_and_go("/system") b.wait_visible('#system_information_os_text') - mid = m.execute("cat /etc/machine-id") - b.wait_text('#system_machine_id', mid) - # Health card can contain only one item - it normally is "Loading available updates fail" # But sometimes it also contains information about failed services which breaks mobile pixel tests m.execute("systemctl reset-failed") @@ -98,7 +99,6 @@ testlib.wait(lambda: b.get_pf_progress_value("#system-usage-cpu-progress + td") < 30) b.assert_pixels("#overview", "overview", ignore=[ ".system-health .pf-v5-c-card__body", - "#system_machine_id", "#system_uptime", # #system_information_systime_button is not enough, need to grab the icon as well "tr:contains('System time') td", @@ -108,6 +108,8 @@ "#tuned-status-button", ]) + m.execute("mv /etc/machine-id.orig /etc/machine-id") + # Generate a new rsa key and change the config m.execute("ssh-keygen -f /etc/ssh/weirdname -t rsa -N ''") m.execute("chmod 600 /etc/ssh/weirdname") @@ -132,8 +134,7 @@ # Change ssh config and restart self.sed_file(r"s,.*HostKey *,#,; $ a HostKey /etc/ssh/weirdname", "/etc/ssh/sshd_config", - # Restart sshd but stop socket so we can make sure we are restarted - "( ! systemctl is-active sshd.socket || systemctl stop sshd.socket) && systemctl restart sshd.service") + self.restart_sshd) ssh_reconnect(m) b.click("#system-ssh-keys-link") @@ -182,6 +183,7 @@ m.execute("rm /usr/lib/os-release || true") self.login_and_go("/system") + mid = m.execute("cat /etc/machine-id") b.wait_text('#system_machine_id', mid) # uptime (introduced in PR #13885) @@ -495,7 +497,7 @@ if expect_smt_state is not None: b.wait_visible('#cpu-mitigations-dialog .nosmt-heading:contains(nosmt)') b.wait_visible('#cpu-mitigations-dialog #nosmt-switch input' + - (expect_smt_state and ":checked" or ":not(:checked)")) + (":checked" if expect_smt_state else ":not(:checked)")) b.logout() finally: @@ -526,7 +528,7 @@ b.click('#hwinfo button:contains(Mitigations)') b.click('#cpu-mitigations-dialog #nosmt-switch input') b.wait_visible('#cpu-mitigations-dialog #nosmt-switch input' + - (self.expect_smt_default and ':not(:checked)' or ':checked')) + (':not(:checked)' if self.expect_smt_default else ':checked')) b.click('#cpu-mitigations-dialog Button:contains(Save and reboot)') m.wait_reboot() @@ -569,10 +571,10 @@ b.click('#hwinfo button:contains(Mitigations)') b.wait_visible('#cpu-mitigations-dialog .nosmt-heading:contains(nosmt)') b.wait_visible('#cpu-mitigations-dialog #nosmt-switch input' + - (self.expect_smt_default and ':not(:checked)' or ':checked')) + (':not(:checked)' if self.expect_smt_default else ':checked')) b.click('#cpu-mitigations-dialog #nosmt-switch input') b.wait_visible('#cpu-mitigations-dialog #nosmt-switch input' + - (self.expect_smt_default and ':checked' or ':not(:checked)')) + (':checked' if self.expect_smt_default else ':not(:checked)')) b.click('#cpu-mitigations-dialog Button:contains(Save and reboot)') m.wait_reboot() if self.expect_smt_default: diff -Nru cockpit-314/test/verify/check-system-journal cockpit-316/test/verify/check-system-journal --- cockpit-314/test/verify/check-system-journal 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-system-journal 2024-04-25 09:45:58.000000000 +0000 @@ -329,6 +329,7 @@ self.allow_journal_messages(".*Data from the specified boot .* is not available: No such boot ID in journal.*") + @testlib.nondestructive def testIdentifierReloading(self): """ Test verifies https://github.com/cockpit-project/cockpit/issues/20123 @@ -342,7 +343,7 @@ m.execute(f"logger -p 5 --tag {tag_info} {tag_info.upper()}") self.login_and_go("/system/logs") - b.go("#/?priority=err") + b.go(f"#/?priority=err&since=@{self.test_start_time}") b.wait_visible(f"#journal-box .cockpit-logline .cockpit-log-message:contains('{tag_error.upper()}')") b.wait_not_present(f"#journal-box .cockpit-logline .cockpit-log-message:contains('{tag_info.upper()}')") b.select_PF4("#journal-identifier-menu .pf-v5-c-select__toggle", tag_error) diff -Nru cockpit-314/test/verify/check-system-realms cockpit-316/test/verify/check-system-realms --- cockpit-314/test/verify/check-system-realms 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-system-realms 2024-04-25 09:45:58.000000000 +0000 @@ -29,31 +29,22 @@ WAIT_KRB_SCRIPT = """ set -ex -# HACK: This needs to work, but may take a minute -for x in $(seq 1 60); do - if getent passwd {0}; then - break +# Configuring kerberos in sssd takes some time +for _retry in $(seq 5); do + if getent passwd {0} && + ssh -oStrictHostKeyChecking=no -oBatchMode=yes -l {0} x0.cockpit.lan true; then + exit 0 fi if systemctl --quiet is-failed sssd.service; then systemctl status --lines=100 sssd.service >&2 exit 1 fi sss_cache -E || true + systemctl reset-failed sssd.service systemctl restart sssd.service - sleep $x -done -# ensure this works now, if the above loop timed out -getent passwd {0} - -# HACK: This needs to work but may take a minute -for x in $(seq 1 60); do - if ssh -oStrictHostKeyChecking=no -oBatchMode=yes -l {0} x0.cockpit.lan true; then - break - fi - sss_cache -E || true - systemctl restart sssd.service - sleep $x + sleep 10 done +exit 1 """ # https://en.wikipedia.org/wiki/HMAC-based_One-time_Password_algorithm @@ -556,6 +547,9 @@ # validate Kerberos setup for ws m.execute(f"echo {self.admin_password} | kinit -f {self.admin_user}@COCKPIT.LAN") + # HACK: https://launchpad.net/bugs/2061055 + if m.image == 'ubuntu-stable': + m.execute(self.restart_sshd) m.execute(WAIT_KRB_SCRIPT.format(f"{self.admin_user}@cockpit.lan"), timeout=300) # kerberos login should work @@ -747,7 +741,7 @@ # enable ssh GSSAPI authentication m.execute("sed -ri 's/#GSSAPIAuthentication.*/GSSAPIAuthentication yes/' /etc/ssh/sshd_config") - m.execute("systemctl restart sshd") + m.execute(self.restart_sshd) # avoid "unknown host" error in SSH m.execute("su -c 'mkdir -p ~/.ssh; ssh-keyscan localhost > ~/.ssh/known_hosts' alice") @@ -1025,6 +1019,9 @@ # no nss-myhostname there self.machine.execute("echo '10.111.113.1 x0.cockpit.lan' >> /etc/hosts") self.machine.execute(JOIN_SCRIPT % args, timeout=1800) + # HACK: https://launchpad.net/bugs/2061055 + if self.machine.image == 'ubuntu-stable': + self.machine.execute(self.restart_sshd) self.machine.execute(WAIT_KRB_SCRIPT.format("admin"), timeout=300) @testlib.skipBrowser("Firefox cannot work with cookies", "firefox") diff -Nru cockpit-314/test/verify/check-system-services cockpit-316/test/verify/check-system-services --- cockpit-314/test/verify/check-system-services 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-system-services 2024-04-25 09:45:58.000000000 +0000 @@ -20,7 +20,7 @@ import time import testlib -import testvm +from machine import testvm @testlib.nondestructive diff -Nru cockpit-314/test/verify/check-users cockpit-316/test/verify/check-users --- cockpit-314/test/verify/check-users 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/check-users 2024-04-25 09:45:58.000000000 +0000 @@ -652,9 +652,9 @@ # On OSTree this happens over ssh if m.ostree_image: - self.restore_dir("/etc/ssh", restart_unit="sshd") + self.restore_dir("/etc/ssh", restart_unit=self.sshd_service) m.execute("sed -i 's/.*ChallengeResponseAuthentication.*/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*") - m.execute("systemctl try-restart sshd.service") + m.execute(self.restart_sshd) b.wait_visible("#login") b.wait_not_visible("#conversation-group") diff -Nru cockpit-314/test/verify/files/mock-faf-server.py cockpit-316/test/verify/files/mock-faf-server.py --- cockpit-314/test/verify/files/mock-faf-server.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/files/mock-faf-server.py 2024-04-25 09:45:58.000000000 +0000 @@ -1,7 +1,9 @@ #!/usr/bin/python3 # export uReport_URL="http://localhost:12345" -import cgi +import email +import email.parser +import email.policy import json import sys from http.server import BaseHTTPRequestHandler, HTTPServer @@ -32,21 +34,25 @@ self.wfile.write(json.dumps(response, indent=2).encode('UTF-8')) def do_POST(self): - form = cgi.FieldStorage( - fp=self.rfile, - headers=self.headers, - environ={ - 'REQUEST_METHOD': 'POST', - 'CONTENT_TYPE': self.headers['Content-Type'], - } - ) + content_length = int(self.headers.get('content-length', 0)) + data = self.rfile.read(content_length) + + # Without the cgi module, we need to massage the data to form a valid message + p = email.parser.BytesFeedParser(policy=email.policy.HTTP) + p.feed('Content-Type: {}\r\n'.format(self.headers.get('content-type', '')).encode('utf-8')) + p.feed('\r\n'.encode('utf-8')) + p.feed(data) + m = p.close() + + assert m.is_multipart(), "not a multipart message" + parts = list(m.iter_parts()) + json_str = parts[0].get_payload() self.send_response(202) self.send_header('Content-Type', 'application/json') self.send_header('Connection', 'close') self.end_headers() - json_str = form['file'].file.read() try: # just check that it's a JSON json.loads(json_str) diff -Nru cockpit-314/test/verify/files/mock-insights cockpit-316/test/verify/files/mock-insights --- cockpit-314/test/verify/files/mock-insights 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/verify/files/mock-insights 2024-04-25 09:45:58.000000000 +0000 @@ -24,7 +24,7 @@ import subprocess from http.server import BaseHTTPRequestHandler, HTTPServer -systems = {} +systems: dict[str, object] = {} class handler(BaseHTTPRequestHandler): diff -Nru cockpit-314/test/vm.install cockpit-316/test/vm.install --- cockpit-314/test/vm.install 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/test/vm.install 2024-04-25 09:45:58.000000000 +0000 @@ -46,6 +46,11 @@ echo 'Defaults secure_path = /sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin' > /etc/sudoers.d/usr-local fi +if [ "$PLATFORM_ID" = "platform:el10" ]; then + # HACK: https://bugzilla.redhat.com/show_bug.cgi?id=2273078 + printf '[network]\nfirewall_driver = "nftables"\n' > /etc/containers/containers.conf +fi + # start cockpit once to ensure it works, and generate the certificate (to avoid re-doing that for each test) systemctl start cockpit systemctl stop cockpit diff -Nru cockpit-314/tools/arch/PKGBUILD cockpit-316/tools/arch/PKGBUILD --- cockpit-314/tools/arch/PKGBUILD 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/tools/arch/PKGBUILD 2024-04-25 09:45:58.000000000 +0000 @@ -5,7 +5,7 @@ pkgbase=cockpit pkgname=(cockpit cockpit-packagekit cockpit-pcp cockpit-storaged cockpit-test) -pkgver=314 +pkgver=316 pkgrel=1 pkgdesc='A systemd web based user interface for Linux servers' arch=('x86_64') diff -Nru cockpit-314/tools/build-debian-copyright cockpit-316/tools/build-debian-copyright --- cockpit-314/tools/build-debian-copyright 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/tools/build-debian-copyright 2024-04-25 09:45:58.000000000 +0000 @@ -104,7 +104,7 @@ raise SystemError('Can not determine licenses of:\n%s' % comment) for license_id in licenses: if license_id.lower() not in license_ids: - raise KeyError('License {license_id} not found in {TEMPLATE_FILE}') + raise KeyError(f'License {license_id} not found in {TEMPLATE_FILE}') # All bundles also contain our own code licenses.add("LGPL-2.1-or-later") diff -Nru cockpit-314/tools/cockpit.spec cockpit-316/tools/cockpit.spec --- cockpit-314/tools/cockpit.spec 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/tools/cockpit.spec 2024-04-25 09:45:58.000000000 +0000 @@ -49,7 +49,7 @@ License: LGPL-2.1-or-later URL: https://cockpit-project.org/ -Version: 314 +Version: 316 Release: 1%{?dist} Source0: https://github.com/cockpit-project/cockpit/releases/download/%{version}/cockpit-%{version}.tar.xz @@ -330,7 +330,7 @@ Obsoletes: cockpit-dashboard < %{version}-%{release} %if 0%{?rhel} Requires: NetworkManager >= 1.6 -Requires: kexec-tools +Requires: /usr/bin/kdumpctl Requires: sos Requires: sudo Recommends: PackageKit @@ -345,12 +345,12 @@ Recommends: (reportd if abrt) %endif -Provides: bundled(npm(@patternfly/patternfly)) = 5.2.1 -Provides: bundled(npm(@patternfly/react-core)) = 5.2.3 -Provides: bundled(npm(@patternfly/react-icons)) = 5.2.1 -Provides: bundled(npm(@patternfly/react-styles)) = 5.2.1 -Provides: bundled(npm(@patternfly/react-table)) = 5.2.4 -Provides: bundled(npm(@patternfly/react-tokens)) = 5.2.1 +Provides: bundled(npm(@patternfly/patternfly)) = 5.3.0 +Provides: bundled(npm(@patternfly/react-core)) = 5.3.0 +Provides: bundled(npm(@patternfly/react-icons)) = 5.3.0 +Provides: bundled(npm(@patternfly/react-styles)) = 5.3.0 +Provides: bundled(npm(@patternfly/react-table)) = 5.3.0 +Provides: bundled(npm(@patternfly/react-tokens)) = 5.3.0 Provides: bundled(npm(argparse)) = 1.0.10 Provides: bundled(npm(array-buffer-byte-length)) = 1.0.1 Provides: bundled(npm(attr-accept)) = 2.2.2 @@ -561,7 +561,7 @@ Summary: Cockpit user interface for kernel crash dumping Requires: cockpit-bridge >= %{required_base} Requires: cockpit-shell >= %{required_base} -Requires: kexec-tools +Requires: /usr/bin/kdumpctl BuildArch: noarch %description kdump diff -Nru cockpit-314/tools/debian/changelog cockpit-316/tools/debian/changelog --- cockpit-314/tools/debian/changelog 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/tools/debian/changelog 2024-04-25 09:45:58.000000000 +0000 @@ -1,4 +1,4 @@ -cockpit (314-1) UNRELEASED; urgency=medium +cockpit (316-1) UNRELEASED; urgency=medium * Work in progress diff -Nru cockpit-314/tools/release cockpit-316/tools/release --- cockpit-314/tools/release 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/tools/release 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,95 @@ +#!/bin/sh + +set -eux + +# Produce a Cockpit release tarball. +# +# This is the script used to create the official releases. +# +# It takes two mandatory arguments: +# +# - the URL to clone the repository from, +# eg. 'https://github.com/cockpit-project/cockpit'. +# +# - the version to release, which is also the tag name, eg. '215'. +# +# The release tarball contains a number of files that are not directly in +# version control: +# - the usual automake stuff +# - several submodules +# - pre-compiled HTML and JS code +# +# This script shallow-clones the specified version of Cockpit from the +# specified URL, and downloads the version of the tasks container specified in +# that version. It then does an offline build of the release tarball, which is +# deterministic. +# +# You can use this script to verify the integrity of a particular Cockpit +# release tarball, or even use it to create the tarball for yourself, as an +# alternative to downloading it. +# +# The result of running `./autogen.sh && make dist VERSION=...` on any system +# ought to be the same, so long as the same versions of the autotools are +# present. Everything else present in the tarball is definitively pinned down +# in one way or another by the contents of the git repository. This script is +# a bit overkill, but it's written in hopes that someone reading it can +# reasonably convince themselves about the origin of absolutely everything in a +# Cockpit source release. +# +# If this script produces a tarball with a different checksum than the +# officially-released one, then please report a bug. + +URL="$1" +VERSION="$2" + +# We collect the sources into a temporary directory, then use tar to pipe them +# into a container with no network or filesystem access, where the actual build +# takes place. The container pipes the built source release back to us. + +SOURCE="$(mktemp -dt 'cockpit-build-XXXXXX')" +trap 'rm -rf "${SOURCE}"' EXIT + +# Clone the release and selected submodules into the temporary directory. +git clone \ + --depth=1 \ + --recurse-submodules=node_modules \ + --recurse-submodules=vendor \ + -b "${VERSION}" \ + "${URL}" \ + "${SOURCE}" + +# Show exactly what we're building. +git -C "${SOURCE}" show --no-patch "${VERSION}" + +# Download the tasks container image used for this release. +IMAGE="$(cat "${SOURCE}"/.cockpit-ci/container)" +podman pull "${IMAGE}" + +# Build the checked out sources into the release tarball, offline. +tar -C "${SOURCE}" -c . | \ + podman \ + run \ + --rm \ + --pull=never \ + --network=none \ + --log-driver=none \ + --interactive \ + --env=VERSION="${VERSION}" \ + "${IMAGE}" \ + sh -euxc ' + ( + mkdir work + cd work + rpm -q autoconf automake + automake --version + autoconf --version + tar x + ./autogen.sh + make dist VERSION="${VERSION}" + ) >&2 + cat work/cockpit-"${VERSION}".tar.xz + ' \ + > cockpit-"${VERSION}".tar.xz + +# Show the result. +sha256sum cockpit-"${VERSION}".tar.xz diff -Nru cockpit-314/tools/vulture-suppressions/cockpit.py cockpit-316/tools/vulture-suppressions/cockpit.py --- cockpit-314/tools/vulture-suppressions/cockpit.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/tools/vulture-suppressions/cockpit.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -from cockpit.internal_endpoints import User -from cockpit.misc.print import Printer - -# D-Bus properties -User.full -User.groups -User.home -User.id -User.shell - -# getattr() -Printer.dbus_call -Printer.fsinfo -Printer.help -Printer.packages_reload -Printer.wait diff -Nru cockpit-314/tools/vulture-suppressions/ferny.py cockpit-316/tools/vulture-suppressions/ferny.py --- cockpit-314/tools/vulture-suppressions/ferny.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/tools/vulture-suppressions/ferny.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -from cockpit._vendor.ferny import InteractionHandler - -InteractionHandler.commands -InteractionHandler.run_command diff -Nru cockpit-314/tools/vulture-suppressions/pytest.py cockpit-316/tools/vulture-suppressions/pytest.py --- cockpit-314/tools/vulture-suppressions/pytest.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/tools/vulture-suppressions/pytest.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -import pytest - -pytest.Module._obj # type: ignore[attr-defined] diff -Nru cockpit-314/tools/vulture-suppressions/ruff.toml cockpit-316/tools/vulture-suppressions/ruff.toml --- cockpit-314/tools/vulture-suppressions/ruff.toml 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/tools/vulture-suppressions/ruff.toml 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -extend = "../../pyproject.toml" - -[lint] -ignore = [ - "B018" # Found useless expression. Either assign it to a variable or remove it. -] diff -Nru cockpit-314/tools/vulture-suppressions/stdlib.py cockpit-316/tools/vulture-suppressions/stdlib.py --- cockpit-314/tools/vulture-suppressions/stdlib.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/tools/vulture-suppressions/stdlib.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -import asyncio -import ssl -import tempfile -import unittest -import xmlrpc.server - -asyncio.BaseTransport.get_protocol -asyncio.BaseTransport.set_protocol -asyncio.ReadTransport.is_reading -asyncio.SubprocessTransport.get_pipe_transport -asyncio.WriteTransport.get_write_buffer_limits -asyncio.WriteTransport.get_write_buffer_size -asyncio.WriteTransport.set_write_buffer_limits - -ssl.create_default_context().check_hostname -ssl.create_default_context().verify_mode - -unittest.IsolatedAsyncioTestCase.asyncTearDown - -tempfile.TemporaryDirectory._rmtree # type: ignore[attr-defined] - -xmlrpc.server.SimpleXMLRPCRequestHandler.rpc_paths diff -Nru cockpit-314/tools/vulture-suppressions/testlib.py cockpit-316/tools/vulture-suppressions/testlib.py --- cockpit-314/tools/vulture-suppressions/testlib.py 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/tools/vulture-suppressions/testlib.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -from .testlib import Browser - -# used in cockpit-machines, cockpit-podman, cockpit-certificates -Browser.get_checked - -# kept as being potentially useful in the future -Browser.upload_file -Browser.wait_attr_not_contains -Browser.select_PF5 diff -Nru cockpit-314/tools/vulture_suppressions/cockpit.py cockpit-316/tools/vulture_suppressions/cockpit.py --- cockpit-314/tools/vulture_suppressions/cockpit.py 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/tools/vulture_suppressions/cockpit.py 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,17 @@ +from cockpit.internal_endpoints import cockpit_User +from cockpit.misc.print import Printer + +# D-Bus properties +user = cockpit_User() +user.full +user.groups +user.home +user.id +user.shell + +# getattr() +Printer.dbus_call +Printer.fsinfo +Printer.help +Printer.packages_reload +Printer.wait diff -Nru cockpit-314/tools/vulture_suppressions/ferny.py cockpit-316/tools/vulture_suppressions/ferny.py --- cockpit-314/tools/vulture_suppressions/ferny.py 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/tools/vulture_suppressions/ferny.py 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,4 @@ +from cockpit._vendor.ferny import InteractionHandler + +InteractionHandler.commands +InteractionHandler.run_command diff -Nru cockpit-314/tools/vulture_suppressions/pytest.py cockpit-316/tools/vulture_suppressions/pytest.py --- cockpit-314/tools/vulture_suppressions/pytest.py 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/tools/vulture_suppressions/pytest.py 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,3 @@ +import pytest + +pytest.Module._obj # type: ignore[attr-defined] diff -Nru cockpit-314/tools/vulture_suppressions/ruff.toml cockpit-316/tools/vulture_suppressions/ruff.toml --- cockpit-314/tools/vulture_suppressions/ruff.toml 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/tools/vulture_suppressions/ruff.toml 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,6 @@ +extend = "../../pyproject.toml" + +[lint] +ignore = [ + "B018" # Found useless expression. Either assign it to a variable or remove it. +] diff -Nru cockpit-314/tools/vulture_suppressions/stdlib.py cockpit-316/tools/vulture_suppressions/stdlib.py --- cockpit-314/tools/vulture_suppressions/stdlib.py 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/tools/vulture_suppressions/stdlib.py 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,22 @@ +import asyncio +import ssl +import tempfile +import unittest +import xmlrpc.server + +asyncio.BaseTransport.get_protocol +asyncio.BaseTransport.set_protocol +asyncio.ReadTransport.is_reading +asyncio.SubprocessTransport.get_pipe_transport +asyncio.WriteTransport.get_write_buffer_limits +asyncio.WriteTransport.get_write_buffer_size +asyncio.WriteTransport.set_write_buffer_limits + +ssl.create_default_context().check_hostname +ssl.create_default_context().verify_mode + +unittest.IsolatedAsyncioTestCase.asyncTearDown + +tempfile.TemporaryDirectory._rmtree # type: ignore[attr-defined] + +xmlrpc.server.SimpleXMLRPCRequestHandler.rpc_paths diff -Nru cockpit-314/tools/vulture_suppressions/testlib.py cockpit-316/tools/vulture_suppressions/testlib.py --- cockpit-314/tools/vulture_suppressions/testlib.py 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-316/tools/vulture_suppressions/testlib.py 2024-04-25 09:45:58.000000000 +0000 @@ -0,0 +1,12 @@ +from testlib import Browser, BrowserLayout + +# used in cockpit-machines, cockpit-podman, cockpit-certificates +Browser.get_checked + +# kept as being potentially useful in the future +Browser.wait_attr_not_contains +Browser.select_PF5 + +# https://github.com/jendrikseipp/vulture/issues/249 +BrowserLayout.theme # type: ignore[attr-defined] +BrowserLayout.content_size # type: ignore[attr-defined] diff -Nru cockpit-314/version.m4 cockpit-316/version.m4 --- cockpit-314/version.m4 2024-03-27 17:06:18.000000000 +0000 +++ cockpit-316/version.m4 2024-04-25 09:45:58.000000000 +0000 @@ -1 +1 @@ -m4_define(VERSION_NUMBER, [314]) +m4_define(VERSION_NUMBER, [316])