diff --git a/src/dialogs/delete.tsx b/src/dialogs/delete.tsx index 2e7f2941..d3319311 100644 --- a/src/dialogs/delete.tsx +++ b/src/dialogs/delete.tsx @@ -25,6 +25,7 @@ import { Modal, ModalVariant } from '@patternfly/react-core/dist/esm/components/ import cockpit from 'cockpit'; import { InlineNotification } from 'cockpit-components-inline-notification'; import type { Dialogs, DialogResult } from 'dialogs'; +import { fmt_to_fragments } from 'utils'; import type { FolderFileInfo } from '../app'; @@ -40,23 +41,25 @@ const ConfirmDeletionDialog = ({ dialogResult, path, selected, setSelected } : { let modalTitle; if (selected.length > 1) { - modalTitle = cockpit.format(forceDelete ? _("Force delete $0 items") : _("Delete $0 items?"), selected.length); + const selectedJSX = {selected.length}; + modalTitle = fmt_to_fragments(forceDelete ? _("Force delete $0 items") : _("Delete $0 items?"), selectedJSX); } else { const selectedItem = selected[0]; + const selectedJSX = {selectedItem.name}; if (selectedItem.type === "reg") { - modalTitle = cockpit.format( - forceDelete ? _("Force delete file $0?") : _("Delete file $0?"), selectedItem.name + modalTitle = fmt_to_fragments( + forceDelete ? _("Force delete file $0?") : _("Delete file $0?"), selectedJSX ); } else if (selectedItem.type === "lnk") { - modalTitle = cockpit.format( - forceDelete ? _("Force delete link $0?") : _("Delete link $0?"), selectedItem.name + modalTitle = fmt_to_fragments( + forceDelete ? _("Force delete link $0?") : _("Delete link $0?"), selectedJSX ); } else if (selectedItem.type === "dir") { - modalTitle = cockpit.format( - forceDelete ? _("Force delete directory $0?") : _("Delete directory $0?"), selectedItem.name + modalTitle = fmt_to_fragments( + forceDelete ? _("Force delete directory $0?") : _("Delete directory $0?"), selectedJSX ); } else { - modalTitle = cockpit.format(forceDelete ? _("Force delete $0") : _("Delete $0?"), selectedItem.name); + modalTitle = fmt_to_fragments(forceDelete ? _("Force delete $0") : _("Delete $0?"), selectedJSX); } } diff --git a/src/dialogs/editor.tsx b/src/dialogs/editor.tsx index e2309440..0c79e1af 100644 --- a/src/dialogs/editor.tsx +++ b/src/dialogs/editor.tsx @@ -30,6 +30,7 @@ import { debounce } from "throttle-debounce"; import cockpit from 'cockpit'; import { EventEmitter } from 'cockpit/event.ts'; import type { Dialogs, DialogResult } from 'dialogs'; +import { fmt_to_fragments } from 'utils'; import "./editor.scss"; @@ -165,7 +166,7 @@ export const EditFileModal = ({ dialogResult, path } : { }; /* Translators: This is the title of a modal dialog. $0 represents a filename. */ - let title = <>{cockpit.format(state?.writable ? _("Edit “$0”") : _("View “$0”"), path)}; + let title = <>{fmt_to_fragments(state?.writable ? _("Edit $0") : _("View $0"), {path})}; if (!state.writable) { // TODO: dark mode and lack of spacing title = (<>{title}); diff --git a/src/dialogs/permissions.jsx b/src/dialogs/permissions.jsx index 5ab0b53c..2473082e 100644 --- a/src/dialogs/permissions.jsx +++ b/src/dialogs/permissions.jsx @@ -31,6 +31,7 @@ import { basename } from "cockpit-path"; import { useInit } from 'hooks'; import { etc_group_syntax, etc_passwd_syntax } from 'pam_user_parser'; import { superuser } from 'superuser'; +import { fmt_to_fragments } from 'utils.tsx'; import { useFilesContext } from '../app.tsx'; import { map_permissions, inode_types } from '../common.ts'; @@ -119,7 +120,7 @@ const EditPermissionsModal = ({ dialogResult, selected, path }) => { position="top" variant={ModalVariant.small} /* Translators: $0 represents a filename */ - title={cockpit.format(_("“$0” permissions"), selected.name)} + title={fmt_to_fragments(_("$0 permissions"), {selected.name})} description={inode_types[selected.type] || "Unknown type"} isOpen onClose={dialogResult.resolve} diff --git a/test/check-application b/test/check-application index 4e969788..3752d597 100755 --- a/test/check-application +++ b/test/check-application @@ -2292,7 +2292,7 @@ class TestFiles(testlib.MachineCase): # Opening an test file, editing and closing (discard) open_editor("test.txt") - b.wait_text(".pf-v5-c-modal-box__title", "Edit “/home/admin/test.txt”") + b.wait_text(".pf-v5-c-modal-box__title", "Edit /home/admin/test.txt") b.wait_text(".file-editor-modal textarea", "test\n") # Save button is disabled when not editing yet @@ -2401,7 +2401,7 @@ class TestFiles(testlib.MachineCase): b.go("/files#/?path=/etc") self.assert_last_breadcrumb("etc") open_editor("cockpit-files-test.cfg") - b.wait_text(".pf-v5-c-modal-box__title", "View “/etc/cockpit-files-test.cfg”Read-only") + b.wait_text(".pf-v5-c-modal-box__title", "View /etc/cockpit-files-test.cfgRead-only") b.assert_pixels(".file-editor-modal", "editor-modal-read-only") b.click(".pf-v5-c-modal-box__footer button.pf-m-secondary") diff --git a/test/reference b/test/reference index 3604d52f..b850a11e 160000 --- a/test/reference +++ b/test/reference @@ -1 +1 @@ -Subproject commit 3604d52f83a03997f6967325d5c5606796bba07f +Subproject commit b850a11e0c20e3f9bd0f02e4db9e36372ee82cc4