Merge branch 'main' into fix-launcher-scrolling-interrupt

This commit is contained in:
Henry Riehl
2026-02-27 13:41:22 +00:00
194 changed files with 11000 additions and 3322 deletions
+1
View File
@@ -7,3 +7,4 @@ RELEASE.md
__pycache__
result
build
/debian/
-12
View File
@@ -1,12 +0,0 @@
[Unit]
Description=Noctalia Shell Service
BindsTo=graphical-session.target
After=graphical-session.target
[Service]
ExecStart=qs -c noctalia-shell
Restart=on-failure
RestartSec=1
[Install]
WantedBy=graphical-session.target
@@ -1,6 +1,7 @@
/*
* GTK Colors
* GTK Colors (GTK3)
* Generated by Noctalia's Template Processor
* stylelint-disable at-rule-no-unknown
*/
@define-color accent_color {{colors.primary.default.hex}};
@@ -37,7 +38,7 @@
@define-color sidebar_bg_color {{colors.surface_container.default.hex}};
@define-color sidebar_fg_color {{colors.on_surface.default.hex}};
@define-color sidebar_backdrop_color @sidebar_bg_color;
@define-color sidebar_backdrop_color @window_bg_color;
@define-color sidebar_border_color @window_bg_color;
@define-color secondary_sidebar_bg_color {{colors.surface.default.hex}};
+103
View File
@@ -0,0 +1,103 @@
/*
* GTK Colors (GTK4)
* Generated by Noctalia's Template Processor
* stylelint-disable at-rule-no-unknown
*/
@define-color accent_color {{colors.primary.default.hex}};
@define-color accent_bg_color {{colors.primary.default.hex}};
@define-color accent_fg_color {{colors.on_primary.default.hex}};
@define-color destructive_bg_color {{colors.error.default.hex}};
@define-color destructive_fg_color {{colors.on_error.default.hex}};
@define-color error_bg_color {{colors.error.default.hex}};
@define-color error_fg_color {{colors.on_error.default.hex}};
@define-color window_bg_color {{colors.surface.default.hex}};
@define-color window_fg_color {{colors.on_surface.default.hex}};
@define-color view_bg_color {{colors.surface.default.hex}};
@define-color view_fg_color {{colors.on_surface.default.hex}};
@define-color headerbar_bg_color {{colors.surface.default.hex}};
@define-color headerbar_fg_color {{colors.on_surface.default.hex}};
@define-color headerbar_backdrop_color @window_bg_color;
@define-color popover_bg_color {{colors.surface_container.default.hex}};
@define-color popover_fg_color {{colors.on_surface.default.hex}};
@define-color card_bg_color {{colors.surface_container.default.hex}};
@define-color card_fg_color {{colors.on_surface.default.hex}};
@define-color dialog_bg_color {{colors.surface.default.hex}};
@define-color dialog_fg_color {{colors.on_surface.default.hex}};
@define-color overview_bg_color {{colors.surface_container.default.hex}};
@define-color overview_fg_color {{colors.on_surface.default.hex}};
@define-color sidebar_bg_color {{colors.surface_container.default.hex}};
@define-color sidebar_fg_color {{colors.on_surface.default.hex}};
@define-color sidebar_backdrop_color @window_bg_color;
@define-color sidebar_border_color @window_bg_color;
@define-color secondary_sidebar_bg_color {{colors.surface.default.hex}};
@define-color secondary_sidebar_fg_color {{colors.on_surface.default.hex}};
/* Backdrop/unfocused states */
@define-color theme_unfocused_fg_color @window_fg_color;
@define-color theme_unfocused_text_color @view_fg_color;
@define-color theme_unfocused_bg_color @window_bg_color;
@define-color theme_unfocused_base_color @window_bg_color;
@define-color theme_unfocused_selected_bg_color @accent_bg_color;
@define-color theme_unfocused_selected_fg_color @accent_fg_color;
:root {
--accent-color: {{colors.primary.default.hex}};
--accent-bg-color: {{colors.primary.default.hex}};
--accent-fg-color: {{colors.on_primary.default.hex}};
--destructive-bg-color: {{colors.error.default.hex}};
--destructive-fg-color: {{colors.on_error.default.hex}};
--error-bg-color: {{colors.error.default.hex}};
--error-fg-color: {{colors.on_error.default.hex}};
--error-color: {{colors.error.default.hex}};
--window-bg-color: {{colors.surface.default.hex}};
--window-fg-color: {{colors.on_surface.default.hex}};
--view-bg-color: {{colors.surface.default.hex}};
--view-fg-color: {{colors.on_surface.default.hex}};
--headerbar-bg-color: {{colors.surface.default.hex}};
--headerbar-fg-color: {{colors.on_surface.default.hex}};
--headerbar-backdrop-color: @window_bg_color;
--popover-bg-color: {{colors.surface_container.default.hex}};
--popover-fg-color: {{colors.on_surface.default.hex}};
--card-bg-color: {{colors.surface_container.default.hex}};
--card-fg-color: {{colors.on_surface.default.hex}};
--dialog-bg-color: {{colors.surface.default.hex}};
--dialog-fg-color: {{colors.on_surface.default.hex}};
--overview-bg-color: {{colors.surface_container.default.hex}};
--overview-fg-color: {{colors.on_surface.default.hex}};
--sidebar-bg-color: {{colors.surface_container.default.hex}};
--sidebar-fg-color: {{colors.on_surface.default.hex}};
--sidebar-backdrop-color: @window_bg_color;
--sidebar-border-color: @window_bg_color;
--warning-bg-color: {{colors.tertiary_container.default.hex}};
--warning-fg-color: {{colors.on_tertiary_container.default.hex}};
--warning-color: {{colors.tertiary.default.hex}};
--success-color: {{colors.secondary.default.hex}};
--success-bg-color: {{colors.secondary_container.default.hex}};
--success-fg-color: {{colors.on_secondary_container.default.hex}};
--shade-color: rgba(0, 0, 0, 0.36);
}
+16 -13
View File
@@ -1,6 +1,6 @@
# Syntax highlighting
# -------------------
"attribute" = "secondary"
"attribute" = { fg = "primary", modifiers = ["bold"] }
"type" = "primary"
"type.enum.variant" = "secondary"
@@ -11,27 +11,30 @@
"constant.character" = "secondaryContainer"
"constant.character.escape" = "tertiaryContainer"
"string" = "tertiary"
"string.regexp" = "tertiaryContainer"
"string.special" = "tertiary"
"string.special.symbol" = "tertiary"
"string" = { fg = "tertiary", bg = "surfaceContainerHigh" }
"string.regexp" = { fg = "tertiaryContainer", bg = "surfaceContainerHigh" }
"string.special" = { fg = "tertiary", bg = "surfaceContainerHigh" }
"string.special.symbol" = { fg = "tertiary", bg = "surfaceContainerHigh" }
"string.special.path" = { fg = "secondary", underline = { color = "secondary", style = "line" } }
"comment" = { fg = "outline", modifiers = ["italic"] }
"path" = { fg = "secondary", underline = { color = "secondary", style = "line" } }
"comment" = { fg = "outline", bg = "surfaceContainerHigh", modifiers = ["italic"] }
"variable" = "onSurface"
"variable.builtin" = "secondary"
"variable.parameter" = { fg = "onSurfaceVariant", modifiers = ["italic"] }
"variable.other.member" = "onSurface"
"variable.other.member" = "primary"
"label" = "secondary"
"punctuation" = "onBackground"
"punctuation.special" = "onBackground"
"punctuation" = "outlineVariant"
"punctuation.special" = "outline"
"keyword" = "primary"
"keyword.control.conditional" = { fg = "tertiary", modifiers = ["italic"] }
"keyword" = { fg = "primary", modifiers = ["bold"] }
"keyword.control.conditional" = { fg = "tertiary", modifiers = ["italic", "bold"] }
"operator" = "primary"
"operator" = { fg = "secondary", modifiers = ["bold"] }
"function" = "tertiary"
"function.macro" = "tertiary"
@@ -44,7 +47,7 @@
"markup.heading" = "primary"
"markup.list" = "onSurface"
"markup.bold" = { fg = "second", modifiers = ["bold"] }
"markup.bold" = { fg = "secondary", modifiers = ["bold"] }
"markup.italic" = { fg = "secondary", modifiers = ["italic"] }
"markup.link.url" = { fg = "secondary", modifiers = ["italic", "underlined"] }
"markup.link.label" = "primary"
+37
View File
@@ -0,0 +1,37 @@
# window border
window.active.border.color: {{colors.primary.default.hex}}
window.inactive.border.color: {{colors.secondary.default.hex}}
# ToggleKeybinds status indicator
window.active.indicator.toggled-keybind.color: {{colors.error.default.hex}}
# window titlebar background
window.active.title.bg.color: {{colors.primary.default.hex}}
window.inactive.title.bg.color: {{colors.secondary.default.hex}}
window.active.label.text.color: {{colors.on_primary.default.hex}}
window.inactive.label.text.color: {{colors.on_secondary.default.hex}}
window.label.text.justify: center
# window button hover overlay
window.button.hover.bg.color: {{colors.hover.default.hex}}
# window buttons
window.active.button.unpressed.image.color: {{colors.on_primary.default.hex}}
window.inactive.button.unpressed.image.color: {{colors.on_primary.default.hex}}
# menu
menu.border.color: {{colors.on_primary.default.hex}}
menu.items.bg.color: {{colors.primary.default.hex}}
menu.items.text.color: {{colors.on_primary.default.hex}}
menu.items.active.bg.color: {{colors.secondary.default.hex}}
menu.items.active.text.color: {{colors.on_secondary.default.hex}}
menu.separator.color: {{colors.on_primary.default.hex}}
menu.title.bg.color: {{colors.primary.default.hex}}
menu.title.text.color: {{colors.on_primary.default.hex}}
# on screen display (window-cycle dialog)
osd.bg.color: {{colors.primary.default.hex}}
osd.border.color: {{colors.on_primary.default.hex}}
osd.label.text.color: {{colors.on_primary.default.hex}}
osd.window-switcher.preview.border.color: {{colors.outline.default.hex}}
+7
View File
@@ -0,0 +1,7 @@
:root {
--theme-color: "Matugen";
--hue-rotate: 220deg;
<* for name, value in colors *>
--md-sys-color-{{name | replace: "_", "-" }}: {{value.default.rgb}};
<* endfor *>
}
+109 -13
View File
@@ -8,6 +8,7 @@
"disable-dnd": "'Nicht stören' deaktivieren",
"disable-wifi": "WLAN deaktivieren",
"disconnect-vpn": "Verbindung zu {name} trennen",
"dock-settings": "Dock-Einstellungen",
"enable-bluetooth": "Bluetooth aktivieren",
"enable-dnd": "'Nicht stören' aktivieren",
"enable-wifi": "WLAN aktivieren",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Zeige die Auswahl des Energieprofils im Akku-Panel an.",
"show-power-profile-label": "Energieprofil-Steuerung anzeigen"
},
"brightness": {
"apply-all-description": "Helligkeit für alle Monitore ändern, wenn das Scrollrad verwendet wird.",
"apply-all-label": "Änderungen beim Scrollen auf alle Monitore anwenden"
},
"clock": {
"clock-display-description": "Passen Sie die Anzeige Ihrer Uhr an, indem Sie Token aus der Liste unten hinzufügen. Um das 12-Stunden-Format zu verwenden, müssen Sie das 'AP'-Token einschließen.",
"clock-display-label": "Uhrenanzeige",
@@ -87,7 +92,7 @@
"browse-file": "Datei durchsuchen",
"browse-library": "Bibliothek durchsuchen",
"color-selection-description": "Wendet Themenfarben auf Symbole an.",
"enable-colorization-description": "Farbgebung durch Themenfarben für das Kontrollzentrum-Symbol aktivieren.",
"enable-colorization-description": "Farbgebung für das Symbol aktivieren, Designfarben anwenden.",
"icon-description": "Symbol aus der Bibliothek oder eine benutzerdefinierte Datei auswählen.",
"select-custom-icon": "Benutzerdefiniertes Symbol auswählen",
"use-distro-logo-description": "Logo Ihrer Distribution anstelle eines benutzerdefinierten Symbols verwenden.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Wenn der Ausgabetext diesem Wert entspricht, wird die Schaltfläche eingeklappt.",
"collapse-condition-label": "Einklappbedingung",
"color-selection-description": "Themenfarben auf Symbol und Text anwenden.",
"default-tooltip": "Benutzerdefinierte Schaltfläche, in den Einstellungen konfigurieren",
"display-command-output-description": "Befehl eingeben, der in regelmäßigen Abständen ausgeführt wird. Die erste Zeile seiner Ausgabe wird als Text angezeigt.",
"display-command-output-label": "Befehlsausgabe anzeigen",
"display-command-output-stream-description": "Geben Sie einen Befehl ein, der kontinuierlich ausgeführt werden soll.",
"dynamic-text": "Dynamischer Text",
"enable-colorization-description": "Farbgebung durch Themenfarben für das benutzerdefinierte Schaltflächensymbol und den Text aktivieren.",
"enable-colorization-label": "Farbgebung aktivieren",
"general-tooltip-text-description": "Benutzerdefinierter Text, der im Tooltip der Schaltfläche angezeigt wird.",
"general-tooltip-text-label": "Benutzerdefinierter Tooltip-Text",
"hide-mode-always-expanded": "Immer erweitert",
"hide-mode-description": "Steuert die Sichtbarkeit des Widgets, wenn der Befehl keine Ausgabe hat.",
"hide-mode-expand-with-output": "Mit Ausgabe erweitern",
@@ -128,16 +136,22 @@
"right-click-description": "Befehl, der ausgeführt wird, wenn die Schaltfläche rechts angeklickt wird.",
"right-click-label": "Rechtsklick",
"right-click-update-text": "Text beim Rechtsklick aktualisieren",
"show-exec-tooltip-description": "Tooltips mit Befehlsdetails anzeigen (Linksklick, Rechtsklick, Mittelklick, Mausrad).",
"show-exec-tooltip-label": "Befehls-Tooltips anzeigen",
"show-icon-description": "Schaltet die Sichtbarkeit des Widget-Symbols um.",
"show-icon-label": "Symbol anzeigen",
"show-text-tooltip-description": "Zeige Tooltips mit der Ausgabe des Textbefehls.",
"show-text-tooltip-label": "Dynamische Text-Tooltips anzeigen",
"text-stream-description": "Gestreamte Zeilen aus dem Befehl werden als Text auf der Schaltfläche angezeigt.",
"text-stream-label": "Stream",
"wheel-description": "Befehl, der bei Verwendung des Scrollrads ausgeführt wird.<br>Verwenden Sie $delta für die Scrollrad-Delta im Befehl.",
"wheel-down": "Scrollrad runter",
"wheel-down-description": "Befehl, der ausgeführt wird, wenn das Scrollrad heruntergescrollt wird.",
"wheel-down-label": "Scrollrad runter Befehl",
"wheel-label": "Scrollrad",
"wheel-mode-separate-description": "Separate Befehle für Scrollrad hoch und runter aktivieren.",
"wheel-mode-separate-label": "Separate Scrollrad-Befehle",
"wheel-up": "Scrollrad hoch",
"wheel-up-description": "Befehl, der ausgeführt wird, wenn das Scrollrad hochgescrollt wird.",
"wheel-up-label": "Scrollrad hoch Befehl",
"wheel-update-text": "Anzeigetext beim Scrollen aktualisieren"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Aktionen",
"active": "Aktiv",
"add": "Hinzufügen",
"appearance": "Aussehen",
"apply": "Anwenden",
@@ -363,6 +378,7 @@
"available": "Verfügbar",
"back": "Zurück",
"battery": "Akku",
"behavior": "Verhalten",
"bluetooth": "Bluetooth",
"brightness": "Helligkeit",
"browse": "Durchsuchen",
@@ -395,6 +411,7 @@
"disconnected": "Getrennt",
"disconnecting": "Verbindung wird getrennt...",
"display-mode": "Anzeigemodus",
"documentation": "Dokumentation",
"download": "Herunterladen",
"duration": "Dauer",
"dysfunctional": "Dysfunktional",
@@ -458,6 +475,7 @@
"primary": "Primär",
"random": "Zufällig",
"reboot": "Neu starten",
"reboot-to-uefi": "In UEFI neu starten",
"record": "Aufnahme starten",
"refresh": "Aktualisieren",
"required": "(erforderlich)",
@@ -470,6 +488,8 @@
"scanning": "Scannen...",
"screen-corners": "Bildschirmecken",
"search": "Suche",
"second": "{count} Sekunde",
"second-plural": "{count} Sekunden",
"secondary": "Sekundär",
"security": "Sicherheit",
"select": "Auswählen",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Klicken zum Einklappen",
"click-to-expand": "Zum Erweitern klicken",
"description": "Ihre Benachrichtigungen werden hier angezeigt, sobald sie eintreffen.",
"no-notifications": "Keine Benachrichtigungen"
@@ -751,6 +772,9 @@
"visualizer-type-description": "Wählen Sie einen Visualisierungstyp für die Medienwiedergabe.",
"visualizer-type-label": "Visualisierungsart",
"volumes-desc": "Lautstärkeregler und Audiopegel anpassen.",
"volumes-feedback-sound-file-description": "Pfad zur Sounddatei, die beim Ändern der Lautstärke abgespielt wird.",
"volumes-feedback-sound-file-label": "Audiodatei für Lautstärke-Feedback",
"volumes-feedback-sound-file-select-title": "Audiodatei für Lautstärkerückmeldung auswählen",
"volumes-input-volume-description": "Mikrofon-Eingabe-Lautstärke.",
"volumes-mute-input-description": "Die Standard-Audio-Eingabe (Mikrofon) stummschalten.",
"volumes-mute-input-label": "Audio-Eingabe stummschalten",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "Kapselfarbe",
"appearance-capsule-opacity-description": "Deckkraft der Widget-Hintergründe festlegen, wenn Kapsel angezeigt wird.",
"appearance-capsule-opacity-label": "Kapsel-Deckkraft",
"appearance-content-padding-description": "Passen Sie den Abstand zwischen Leistenrändern und Widgets an.",
"appearance-content-padding-label": "Inhaltsabstand",
"appearance-density-description": "Innenabstand der Leiste für kompaktes oder geräumiges Aussehen anpassen.",
"appearance-density-label": "Leistendichte",
"appearance-desc": "Erscheinungsbild und Position der Leiste anpassen.",
"appearance-display-mode-description": "Wählen Sie, wann die Leiste sichtbar ist.",
"appearance-floating-description": "Leiste als schwebende 'Pille' anzeigen.",
"appearance-floating-label": "Schwebende Leiste",
"appearance-font-scale-description": "Die Skalierung der Schriftgröße für Text in der Leiste anpassen.",
"appearance-font-scale-label": "Schriftskalierung",
"appearance-frame-radius": "Innenradius",
"appearance-frame-settings-description": "Rahmenstärke und inneren Eckenradius anpassen",
"appearance-frame-settings-label": "Rahmeneinstellungen",
@@ -798,12 +826,16 @@
"appearance-position-label": "Leistenposition",
"appearance-show-capsule-description": "Widget-Hintergründe anzeigen.",
"appearance-show-capsule-label": "Kapsel anzeigen",
"appearance-show-on-workspace-switch-description": "Die Bar automatisch kurz einblenden, wenn der Arbeitsbereich wechselt.",
"appearance-show-on-workspace-switch-label": "Leiste bei Arbeitsflächenwechsel anzeigen",
"appearance-show-outline-description": "Zeige eine sichtbare Umrandung um jedes Widget an.",
"appearance-show-outline-label": "Widget-Umrisse anzeigen",
"appearance-type-description": "Wählen Sie den Stil der Leiste: Einfach, Schwebend oder Gerahmt.",
"appearance-type-label": "Leistentyp",
"appearance-use-separate-opacity-description": "Ermöglicht die Verwendung eines separaten Deckkraftwerts für den Leistenhintergrund.",
"appearance-use-separate-opacity-label": "Separate Leisten-Deckkraft",
"appearance-widget-spacing-description": "Den Abstand zwischen jedem Widget in der Leiste anpassen.",
"appearance-widget-spacing-label": "Widget-Abstand",
"monitor-configure-widgets": "Widgets konfigurieren",
"monitor-override-settings": "Globale Einstellungen überschreiben",
"monitor-override-settings-description": "Benutzerdefinierte Einstellungen für diesen Monitor verwenden.",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "Authentifizierung erforderlich",
"bluetooth-devices-unnamed": "Unbenannte Geräte werden nicht angezeigt.",
"bluetooth-discoverable": "Dieses Gerät ist auffindbar als <b> {hostName} </b>, solange dieser Einstellungs-Tab geöffnet ist.",
"bluetooth-discoverable": "Dieses Gerät ist auffindbar als <b>{hostName}</b>, solange dieser Einstellungs-Tab geöffnet ist.",
"bluetooth-rssi-polling-description": "Periodisch RSSI für verbundene Geräte über bluetoothctl abfragen. Möglicherweise nicht für alle Geräte verfügbar; verbraucht bei Aktivierung minimale Ressourcen.",
"bluetooth-rssi-polling-interval-description": "Konfigurieren, wie oft die Signalstärke für verbundene Geräte aktualisiert werden soll.",
"bluetooth-rssi-polling-interval-label": "Abfrageintervall",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "Der Befehl, der ausgeführt werden soll, wenn die Schaltfläche geklickt wird.",
"shortcuts-custom-button-enable-on-state-logic-description": "Aktiviert ein zweites Symbol und 'Aktiv'-Zustand basierend auf einem Prüfbefehl.",
"shortcuts-custom-button-enable-on-state-logic-label": "Aktiv-Zustand-Logik aktivieren",
"shortcuts-custom-button-general-tooltip-text-description": "Allgemeine Beschreibung für den Tooltip der Schaltfläche.",
"shortcuts-custom-button-general-tooltip-text-label": "Allgemeiner Tooltip-Text",
"shortcuts-custom-button-icon-description": "Wählen Sie ein Symbol aus der Bibliothek.",
"shortcuts-custom-button-on-clicked-label": "Linksklick-Befehl",
"shortcuts-custom-button-on-middle-clicked-label": "Mittelklick-Befehl",
"shortcuts-custom-button-on-right-clicked-label": "Rechtsklick-Befehl",
"shortcuts-custom-button-on-middle-clicked-description": "Befehl, der ausgeführt wird, wenn die Schaltfläche mit der mittleren Maustaste angeklickt wird.",
"shortcuts-custom-button-on-state-command-description": "Befehl, der ausgeführt wird, um zu prüfen, ob sich die Schaltfläche im 'Aktiv'-Zustand befinden soll. Gibt 0 für aktiv, ungleich 0 für inaktiv zurück.",
"shortcuts-custom-button-on-state-command-label": "Befehl für Aktiv-Zustand-Prüfung",
"shortcuts-custom-button-on-state-icon-description": "Das Symbol für die Schaltfläche, wenn sie sich im 'Aktiv'-Zustand befindet.",
@@ -943,6 +973,7 @@
"clock-style-label": "Uhrstil",
"clock-style-minimal": "Minimal",
"clock-width-description": "Breite des Uhr-Widgets in Pixeln.",
"cpu-intensive-note": "Widgets, die mit ! markiert sind, verbrauchen mehr CPU und sollten bewusst aktiviert werden.",
"edit-mode-button-label": "Bearbeitungsmodus aktivieren",
"edit-mode-controls-explanation": "Linksklick & Ziehen: Widget verschieben oder Größe ändern.\nRechtsklick: Kontextmenü-Optionen öffnen.",
"edit-mode-description": "Aktiviere den Bearbeitungsmodus, um Desktop-Widgets zu verschieben und neu zu positionieren. Im aktivierten Zustand zeigen Widgets eine Ziehumrandung und können neu positioniert werden.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "Tasten anzeigen",
"media-player-show-visualizer-description": "Audiovisualisierungs-Overlay anzeigen.",
"media-player-visualizer-type-description": "Wählen Sie einen Visualisierungstyp für den Hintergrund des Desktop-Medienplayers.",
"overview-enabled-description": "Desktop-Widgets anzeigen, während die Compositor-Übersicht geöffnet ist.",
"overview-enabled-label": "In Übersicht anzeigen",
"system-stat-layout-bottom": "Unten",
"system-stat-layout-description": "Wählen Sie, wie die Legende relativ zum Diagramm angezeigt wird.",
"system-stat-layout-label": "Layout",
@@ -971,7 +1004,7 @@
"system-stat-rounded-corners-label": "Abgerundete Ecken",
"system-stat-show-background-description": "Zeige den Hintergrundcontainer für das Systemstatistik-Widget.",
"system-stat-show-background-label": "Hintergrund anzeigen",
"system-stat-stat-type-description": "Wähle, welche Systemstatistik angezeigt werden soll.",
"system-stat-stat-type-description": "Wählen Sie, welche Systemstatistik angezeigt werden soll.",
"system-stat-stat-type-label": "Statistiktyp",
"title": "Desktop-Widgets",
"weather-enabled-description": "Zeige ein Wetter-Widget auf dem Desktop an.",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "Zeige den Hintergrundcontainer für das Wetter-Widget an."
},
"display": {
"monitors-backlight-device-auto-option": "Standard",
"monitors-backlight-device-description": "Wähle ein Hintergrundbeleuchtungsgerät für diesen Ausgang.",
"monitors-backlight-device-label": "Hintergrundbeleuchtungsgerät",
"monitors-brightness-step-description": "Schrittgröße für Helligkeitsänderungen anpassen (Mausrad und Tastenkürzel).",
"monitors-brightness-step-label": "Helligkeits-Schrittgröße",
"monitors-brightness-unavailable-ddc-disabled": "Helligkeitssteuerung nicht verfügbar. Aktivieren Sie \"Externe Helligkeitsunterstützung\", um die Helligkeit dieses Displays zu steuern.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "Mindesthelligkeit erzwingen (1%)",
"monitors-external-brightness-description": "DDCUtil-Unterstützung zum Steuern der Helligkeit externer Displays über das DDC/CI-Protokoll aktivieren.",
"monitors-external-brightness-label": "Externe Helligkeitsunterstützung",
"monitors-global-brightness-description": "Helligkeit für alle Monitore gleichzeitig anpassen.",
"monitors-global-brightness-label": "Alle Monitore",
"monitors-title": "Monitor-spezifische Einstellungen",
"night-light-auto-schedule-description": "Basierend auf Sonnenuntergang und Sonnenaufgang in <i>{location}</i> — empfohlen.",
"night-light-auto-schedule-label": "Automatische Planung",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "Exklusiv",
"appearance-floating-distance-description": "Schwebeabstand vom Bildschirmrand anpassen.",
"appearance-floating-distance-label": "Dock-Schwebeabstand",
"appearance-frame-indicator-description": "Zeige eine kleine Anzeige am Rahmen, wenn das Dock ausgeblendet ist.",
"appearance-frame-indicator-label": "Gerahmter Dock-Indikator",
"appearance-group-apps-description": "Gruppiere mehrere Fenster derselben App zu einem Dock-Eintrag.",
"appearance-group-apps-label": "Gleiche Apps gruppieren",
"appearance-group-click-action-cycle": "Fenster durchwechseln",
"appearance-group-click-action-description": "Wählen Sie, was ein Linksklick für gruppierte Apps tut.",
"appearance-group-click-action-label": "Aktion beim Klick auf gruppierte App",
"appearance-group-click-action-list": "Fensterliste öffnen",
"appearance-group-context-menu-mode-description": "Wählen Sie, wie sich das Kontextmenü für gruppierte Apps verhält.",
"appearance-group-context-menu-mode-extended": "Erweitert",
"appearance-group-context-menu-mode-label": "Gruppierter App-Menü-Modus",
"appearance-group-context-menu-mode-list": "Fensterliste",
"appearance-group-indicator-style-description": "Wählen Sie, wie gruppierte laufende Indikatoren den Zustand des fokussierten Fensters anzeigen.",
"appearance-group-indicator-style-dots": "Punkte",
"appearance-group-indicator-style-label": "Gruppierter Anzeigestil",
"appearance-group-indicator-style-number": "Nummer",
"appearance-hide-show-speed-description": "Geschwindigkeit der Ein-/Ausblend-Animation des Docks anpassen.",
"appearance-hide-show-speed-label": "Ein-/Ausblend-Geschwindigkeit",
"appearance-icon-size-description": "Gesamtgröße des Docks anpassen.",
"appearance-icon-size-label": "Dock-Größe",
"appearance-inactive-indicators-description": "Anzeige von Indikator-Pillen für alle Apps, nicht nur für die aktuell aktive.",
"appearance-inactive-indicators-label": "Laufende Indikatoren",
"appearance-launcher-position-description": "Wählen Sie, wo das Launcher-Symbol im Dock erscheint.",
"appearance-launcher-position-end": "Ende",
"appearance-launcher-position-label": "Position des Starters",
"appearance-launcher-position-start": "Start",
"appearance-pinned-static-description": "Gepinnte App-Symbole immer in statischer Reihenfolge nach links schieben.",
"appearance-pinned-static-label": "Statische angeheftete Apps",
"appearance-position-description": "Wählen Sie, wo das Dock auf dem Bildschirm angezeigt wird.",
"appearance-position-label": "Position",
"appearance-show-launcher-icon-description": "Das Anwendungsstarter-Symbol im Dock anzeigen.",
"appearance-show-launcher-icon-label": "App-Launcher anzeigen",
"appearance-sit-on-frame-description": "Richten Sie das Dock innerhalb des Rahmenrands aus, anstatt es oben zu platzieren.",
"appearance-sit-on-frame-label": "Dock sitzt am Rahmen",
"appearance-type-description": "Wähle zwischen einer schwebenden Pillenform oder einer statischen, am Rand befestigten Leiste.",
"appearance-type-floating": "Schwebend",
"appearance-type-label": "Dock-Stil",
"appearance-type-static": "Statisch",
"enabled-description": "Dock vollständig anzeigen oder ausblenden.",
"enabled-label": "Dock aktivieren",
"monitors-desc": "Dock auf bestimmten Monitoren anzeigen. Standardmäßig werden alle angezeigt, wenn keine ausgewählt wurden.",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "Ändern Sie die Größe des Monotextes.",
"fonts-monospace-scale-label": "Schriftgröße mit fester Breite",
"fonts-monospace-search-placeholder": "Monospace-Schriftarten suchen...",
"fonts-reset-scaling": "Skalierung zurücksetzen",
"fonts-title": "Schriftarten",
"keybinds-conflict-description": "Die Tastenkombination ist bereits {action} zugewiesen.",
"keybinds-conflict-title": "Tastenbelegungskonflikt",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "Avatar auswählen",
"profile-title": "Profil",
"profile-tooltip": "Profilbild",
"reverse-scrolling-description": "Die interpretierte Scrollrichtung umkehren.",
"reverse-scrolling-label": "Scrollen umkehren",
"screen-corners-desc": "Bildschirmecken-Rundung und visuelle Effekte anpassen.",
"screen-corners-radius-description": "Rundung der Bildschirmecken anpassen.",
"screen-corners-radius-label": "Bildschirmecken-Radius",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "Hintergrundbild geändert",
"wallpaper-changed-placeholder": "z.B. notify-send \"Hintergrundbild\" \"Geändert\""
},
"idle": {
"custom-add": "Befehl hinzufügen",
"custom-description": "Führe einen Shell-Befehl nach einer Zeit der Inaktivität aus.",
"custom-entry-command": "Befehl",
"custom-entry-delete": "Löschen",
"custom-entry-timeout": "Inaktivitätszeit",
"custom-label": "Benutzerdefinierte Leerlaufbefehle",
"enable-description": "Automatisch den Bildschirm ausschalten, sperren oder in den Ruhezustand versetzen nach einer Zeit der Inaktivität.",
"enable-label": "Leerlaufverwaltung aktivieren",
"fade-duration-description": "Sekunden für die Schwarzblende-Animation, bevor jede Aktion ausgelöst wird. Jede Mausbewegung bricht die Überblendung ab.",
"fade-duration-label": "Einblenddauer",
"lock-description": "Sekunden der Inaktivität, bevor der Sperrbildschirm aktiviert wird.",
"lock-label": "Bildschirmsperre",
"screen-off-description": "Sekunden der Inaktivität, bevor die Monitore ausgeschaltet werden.",
"screen-off-label": "Bildschirm ausschalten",
"status-description": "Leerlaufzeit, wie vom Compositor gemeldet.",
"status-label": "Leerlaufzeit",
"suspend-description": "Sekunden der Inaktivität, bevor das System in den Ruhezustand geht.",
"tab-behavior": "Verhalten",
"tab-custom": "Benutzerdefiniert",
"timeouts-description": "Auf 0 setzen, um eine Stufe zu deaktivieren. Timeouts werden pausiert, während Keep Awake aktiv ist.",
"timeouts-label": "Zeitüberschreitungen",
"unavailable": "Native Leerlaufüberwachung ist auf diesem Compositor nicht verfügbar."
},
"indicator": {
"default-value": "Standard: {value}",
"system-default": "Systemstandard"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "Wendet eine Farbüberlagerung auf das Hintergrundbild des Sperrbildschirms an.",
"lock-screen-tint-strength-label": "Stärke der Sperrbildschirmtönung",
"monitors-desc": "Sperrbildschirm auf bestimmten Monitoren anzeigen. Standardmäßig auf alle, wenn keine ausgewählt sind.",
"password-chars-description": "Niedliche Symbole, die dein Passwort verstecken.",
"password-chars-label": "Zufällige Passwortsymbole",
"show-hibernate-description": "Die Option 'Ruhezustand' in den Energieoptionen anzeigen.",
"show-hibernate-label": "Ruhezustand anzeigen",
"show-session-buttons-description": "Zugriff auf die Energieeinstellungen vom Sperrbildschirm aus erlauben.",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "Niedrige Dringlichkeit",
"duration-normal-urgency-description": "Wie lange Benachrichtigungen normaler Priorität sichtbar bleiben.",
"duration-normal-urgency-label": "Normale Dringlichkeit",
"duration-reset": "Timeout-Dauer zurücksetzen",
"duration-respect-expire-description": "Die in der Benachrichtigung gesetzte Ablaufzeit verwenden.",
"duration-respect-expire-label": "Ablaufzeit respektieren",
"duration-title": "Benachrichtigungsdauer",
"history-clear-dismiss-description": "Benachrichtigung aus dem Verlauf löschen, wenn sie verworfen wird.",
"history-clear-dismiss-label": "Löschen beim Schließen",
"history-critical-urgency-description": "Kritische Prioritätsbenachrichtigungen im Verlauf speichern.",
"history-critical-urgency-label": "Kritische Dringlichkeit im Verlauf speichern",
"history-desc": "Steuern, welche Benachrichtigungen basierend auf ihrer Dringlichkeitsstufe im Verlauf gespeichert werden.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "Benachrichtigungs-Daemon aktivieren oder deaktivieren, erfordert einen Neustart von Noctalia Shell.",
"settings-enabled-label": "Benachrichtigungen aktivieren",
"settings-location-description": "Wo Benachrichtigungen auf dem Bildschirm erscheinen.",
"settings-markdown-description": "Benachrichtigungsinhalt mit Markdown-Formatierung rendern.",
"settings-markdown-label": "Markdown aktivieren",
"sounds-desc": "Benachrichtigungs-Soundeffekte und Lautstärke konfigurieren.",
"sounds-enabled-description": "Soundeffekte für eingehende Benachrichtigungen aktivieren.",
"sounds-enabled-label": "Benachrichtigungstöne aktivieren",
@@ -1493,16 +1589,13 @@
"box-border-label": "Containerumriss",
"box-border-radius-description": "Passt die Eckenrundung wichtiger Layoutbereiche an, wie z. B. Seitenleisten, Karten und Inhaltsbereiche.",
"box-border-radius-label": "Eckenradius",
"box-border-radius-reset": "Container-Radius zurücksetzen",
"control-border-radius-description": "Steuert die Krümmung interaktiver Elemente, einschließlich Schaltflächen, Umschalter und Textfelder.",
"control-border-radius-label": "Eingaberadius",
"control-border-radius-reset": "Eingaberadius zurücksetzen",
"desc": "Passen Sie das Aussehen, die Haptik und das Verhalten der Benutzeroberfläche an.",
"dim-desktop-description": "Den Desktop abdunkeln, wenn Fenster oder Menüs geöffnet sind.",
"dim-desktop-label": "Desktop abdunkeln",
"dimmer-opacity-description": "Deckkraft für das Abdunkeln des Desktops festlegen.",
"dimmer-opacity-label": "Deckkraft des gedimmten Desktops",
"dimmer-opacity-reset": "Deckkraft des gedimmten Desktops zurücksetzen",
"panel-background-opacity-description": "Legen Sie die Hintergrundtransparenz für alle Panels fest (Leiste, Starter, Einstellungen, usw.).",
"panel-background-opacity-label": "Panel-Hintergrunddeckkraft",
"panels-attached-to-bar-description": "Die Panels rasten an der Stange und den Bildschirmrändern ein und sorgen so für ein nahtloses Erscheinungsbild mit stilvollen, umgekehrten Ecken.",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "Panels & Leiste oben behalten",
"scaling-description": "Ändert die Größe der allgemeinen Benutzeroberfläche, mit Ausnahme der Leiste.",
"scaling-label": "Oberflächenskalierung",
"scaling-reset-scaling": "Schnittstellenskalierung zurücksetzen",
"settings-panel-header": "Einstellungs-Panel",
"settings-panel-mode-description": "Wählen Sie das Layout der Einstellungen (möglicherweise ist ein Neustart erforderlich).",
"settings-panel-mode-label": "Einstellungs-Panel-Modus",
"settings-panel-sidebar-card-style-description": "Umhüllt die Einstellungs-Seitenleiste mit einem gefüllten Hintergrund und abgerundeten Ecken.",
"settings-panel-sidebar-card-style-label": "Seitenleisten-Kartenstil",
"shadows-description": "Aktiviert Schlagschatten unter Leisten und Panels.",
"shadows-direction-description": "Wählen Sie, wohin der Schatten geworfen wird.",
"shadows-direction-label": "Schattenrichtung",
@@ -1762,6 +1857,7 @@
"collapse": "Seitenleiste einklappen",
"copy-address": "Adresse kopieren",
"delete-notification": "Benachrichtigung löschen",
"dismiss-notification": "Benachrichtigung schließen",
"do-not-disturb-enabled": "Nicht stören",
"expand": "Seitenleiste ausklappen",
"forget-network": "Netzwerk vergessen",
+109 -14
View File
@@ -8,6 +8,7 @@
"disable-dnd": "Disable Do Not Disturb",
"disable-wifi": "Disable Wi-Fi",
"disconnect-vpn": "Disconnect {name}",
"dock-settings": "Dock settings",
"enable-bluetooth": "Enable Bluetooth",
"enable-dnd": "Enable Do Not Disturb",
"enable-wifi": "Enable Wi-Fi",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Display the power profile selection inside the battery panel.",
"show-power-profile-label": "Show power profile controls"
},
"brightness": {
"apply-all-description": "Change brightness for every monitor when using the scroll wheel.",
"apply-all-label": "Apply scroll changes to all monitors"
},
"clock": {
"clock-display-description": "Customize your clock's display by adding tokens from the list below. To use the 12-hour format, you must include the 'AP' token.",
"clock-display-label": "Clock display",
@@ -87,7 +92,7 @@
"browse-file": "Browse File",
"browse-library": "Browse Library",
"color-selection-description": "Apply theme colors to icons.",
"enable-colorization-description": "Enable colorization for the control center icon, applying theme colors.",
"enable-colorization-description": "Enable colorization for icon, applying theme colors.",
"icon-description": "Select an icon from the library or a custom file.",
"select-custom-icon": "Select a custom icon",
"use-distro-logo-description": "Use your distribution's logo instead of a custom icon.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "If the output text matches this value, the button will collapse.",
"collapse-condition-label": "Collapse condition",
"color-selection-description": "Apply theme colors to icon and text.",
"default-tooltip": "Custom button, configure in settings",
"display-command-output-description": "Enter a command to run at a regular interval. The first line of its output will be displayed as text.",
"display-command-output-label": "Display command output",
"display-command-output-stream-description": "Enter a command to run continuously.",
"dynamic-text": "Dynamic text",
"enable-colorization-description": "Enable colorization for the custom button icon and text, applying theme colors.",
"enable-colorization-label": "Enable colorization",
"general-tooltip-text-description": "Custom text to display in the button's tooltip.",
"general-tooltip-text-label": "Custom tooltip text",
"hide-mode-always-expanded": "Always expanded",
"hide-mode-description": "Controls widget visibility when the command has no output.",
"hide-mode-expand-with-output": "Expand when has output",
@@ -128,16 +136,22 @@
"right-click-description": "Command to execute when the button is right-clicked.",
"right-click-label": "Right click",
"right-click-update-text": "Update displayed text on right-click",
"show-exec-tooltip-description": "Show tooltips with command details (left/right/middle click, wheel).",
"show-exec-tooltip-label": "Show command tooltips",
"show-icon-description": "Toggles the visibility of the widget's icon.",
"show-icon-label": "Show icon",
"show-text-tooltip-description": "Show tooltips with the output from the text command.",
"show-text-tooltip-label": "Show dynamic text tooltips",
"text-stream-description": "Streamed lines from the command will be displayed as text on the button.",
"text-stream-label": "Stream",
"wheel-description": "Command to execute when the scroll wheel is used.<br>Use $delta for the scroll wheel delta in the command.",
"wheel-down": "Scroll down",
"wheel-down-description": "Command to execute when the scroll wheel is scrolled down.",
"wheel-down-label": "Wheel down command",
"wheel-label": "Scroll wheel",
"wheel-mode-separate-description": "Enable separate commands for wheel up and down.",
"wheel-mode-separate-label": "Separate wheel commands",
"wheel-up": "Scroll up",
"wheel-up-description": "Command to execute when the scroll wheel is scrolled up.",
"wheel-up-label": "Wheel up command",
"wheel-update-text": "Update displayed text on scroll"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Actions",
"active": "Active",
"add": "Add",
"appearance": "Appearance",
"apply": "Apply",
@@ -363,6 +378,7 @@
"available": "Available",
"back": "Back",
"battery": "Battery",
"behavior": "Behavior",
"bluetooth": "Bluetooth",
"brightness": "Brightness",
"browse": "Browse",
@@ -395,6 +411,7 @@
"disconnected": "Disconnected",
"disconnecting": "Disconnecting...",
"display-mode": "Display mode",
"documentation": "Documentation",
"download": "Download",
"duration": "Duration",
"dysfunctional": "Dysfunctional",
@@ -458,7 +475,7 @@
"primary": "Primary",
"random": "Random",
"reboot": "Reboot",
"reboot-to-uefi": "Reboot to UEFI Firmware",
"reboot-to-uefi": "Reboot to UEFI",
"record": "Start recording",
"refresh": "Refresh",
"required": "(required)",
@@ -471,6 +488,8 @@
"scanning": "Scanning...",
"screen-corners": "Screen Corners",
"search": "Search",
"second": "{count} second",
"second-plural": "{count} seconds",
"secondary": "Secondary",
"security": "Security",
"select": "Select",
@@ -598,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Click to collapse",
"click-to-expand": "Click to expand",
"description": "Your notifications will show up here as they arrive.",
"no-notifications": "No notifications"
@@ -752,6 +772,9 @@
"visualizer-type-description": "Choose a visualization type for media playback.",
"visualizer-type-label": "Visualization type",
"volumes-desc": "Adjust volume controls and audio levels.",
"volumes-feedback-sound-file-description": "Path to the sound file played when changing volume.",
"volumes-feedback-sound-file-label": "Volume feedback sound file",
"volumes-feedback-sound-file-select-title": "Select volume feedback sound file",
"volumes-input-volume-description": "Microphone input volume level.",
"volumes-mute-input-description": "Mute the default audio input (microphone).",
"volumes-mute-input-label": "Mute audio input",
@@ -777,12 +800,16 @@
"appearance-capsule-color-label": "Capsule color",
"appearance-capsule-opacity-description": "Set the opacity level for widget backgrounds when capsule is shown.",
"appearance-capsule-opacity-label": "Capsule opacity",
"appearance-content-padding-description": "Adjust the padding between bar edges and widgets.",
"appearance-content-padding-label": "Content padding",
"appearance-density-description": "Adjust the bar's padding for a compact or spacious look.",
"appearance-density-label": "Bar density",
"appearance-desc": "Customize the bar's appearance and position.",
"appearance-display-mode-description": "Choose when the bar is visible.",
"appearance-floating-description": "Display the bar as a floating 'pill'.",
"appearance-floating-label": "Floating bar",
"appearance-font-scale-description": "Adjust the font size scale for text displayed in the bar.",
"appearance-font-scale-label": "Font scale",
"appearance-frame-radius": "Inner Radius",
"appearance-frame-settings-description": "Adjust frame thickness and inner corner radius",
"appearance-frame-settings-label": "Frame Settings",
@@ -799,12 +826,16 @@
"appearance-position-label": "Bar position",
"appearance-show-capsule-description": "Show widget backgrounds.",
"appearance-show-capsule-label": "Show capsule",
"appearance-show-on-workspace-switch-description": "Automatically show the bar briefly when the workspace changes.",
"appearance-show-on-workspace-switch-label": "Show bar on workspace switch",
"appearance-show-outline-description": "Displays a visible border around every widget.",
"appearance-show-outline-label": "Show widget outlines",
"appearance-type-description": "Choose the style of the bar: Simple, Floating or Framed.",
"appearance-type-label": "Bar type",
"appearance-use-separate-opacity-description": "Enable to use a separate opacity value for the bar background.",
"appearance-use-separate-opacity-label": "Use separate bar opacity",
"appearance-widget-spacing-description": "Adjust the spacing between each widget in the bar.",
"appearance-widget-spacing-label": "Widget spacing",
"monitor-configure-widgets": "Configure widgets",
"monitor-override-settings": "Override global settings",
"monitor-override-settings-description": "Use custom settings for this monitor.",
@@ -882,7 +913,7 @@
"connections": {
"authentication-required": "Authentication required",
"bluetooth-devices-unnamed": "Unnamed devices are not shown.",
"bluetooth-discoverable": "This device is discoverable as <b> {hostName} </b> while this settings tab is open.",
"bluetooth-discoverable": "This device is discoverable as <b>{hostName}</b> while this settings tab is open.",
"bluetooth-rssi-polling-description": "Periodically sample RSSI for connected devices via bluetoothctl. May not be available for all devices; uses minimal resources when enabled.",
"bluetooth-rssi-polling-interval-description": "Configure how often to update signal strength for connected devices.",
"bluetooth-rssi-polling-interval-label": "Polling interval",
@@ -901,16 +932,14 @@
"shortcuts-custom-button-command-description": "The command to execute when the button is clicked.",
"shortcuts-custom-button-enable-on-state-logic-description": "Enable a second icon and 'hot' state based on a check command.",
"shortcuts-custom-button-enable-on-state-logic-label": "Enable on-state logic",
"shortcuts-custom-button-general-tooltip-text-description": "General description for the button's tooltip.",
"shortcuts-custom-button-general-tooltip-text-label": "General tooltip text",
"shortcuts-custom-button-icon-description": "Select an icon from the library.",
"shortcuts-custom-button-on-clicked-label": "Left click command",
"shortcuts-custom-button-on-middle-clicked-label": "Middle click command",
"shortcuts-custom-button-on-right-clicked-label": "Right click command",
"shortcuts-custom-button-on-middle-clicked-description": "Command to execute when the button is middle-clicked.",
"shortcuts-custom-button-on-state-command-description": "Command to execute to check if the button should be in the 'on' state. Returns 0 for on, non-zero for off.",
"shortcuts-custom-button-on-state-command-label": "On-state check command",
"shortcuts-custom-button-on-state-icon-description": "The icon for the button when it's in the 'on' state.",
"shortcuts-custom-button-on-state-icon-label": "On-state icon",
"shortcuts-custom-button-state-checks-add": "Add State Check",
"shortcuts-custom-button-state-checks-add": "Add state check",
"shortcuts-custom-button-state-checks-command": "Command to execute for this state check",
"shortcuts-custom-button-state-checks-label": "State checks",
"shortcuts-custom-button-state-checks-remove": "Remove",
@@ -944,6 +973,7 @@
"clock-style-label": "Clock style",
"clock-style-minimal": "Minimal",
"clock-width-description": "Width of the clock widget in pixels.",
"cpu-intensive-note": "Widgets marked with ! use more CPU and should be enabled mindfully.",
"edit-mode-button-label": "Enter edit mode",
"edit-mode-controls-explanation": "Left-click & drag: Move or resize the widget.\nRight-click: Open the context menu options.",
"edit-mode-description": "Enable edit mode to move and reposition desktop widgets. When enabled, widgets show a drag outline and can be repositioned.",
@@ -964,6 +994,8 @@
"media-player-show-buttons-label": "Show buttons",
"media-player-show-visualizer-description": "Show the audio visualizer overlay.",
"media-player-visualizer-type-description": "Choose a visualization type.",
"overview-enabled-description": "Show desktop widgets while the compositor overview is open.",
"overview-enabled-label": "Show in overview",
"system-stat-layout-bottom": "Bottom",
"system-stat-layout-description": "Choose how the legend is displayed relative to the graph.",
"system-stat-layout-label": "Layout",
@@ -980,6 +1012,9 @@
"weather-show-background-description": "Show the background container for the weather widget."
},
"display": {
"monitors-backlight-device-auto-option": "Default",
"monitors-backlight-device-description": "Select a backlight device for this output.",
"monitors-backlight-device-label": "Backlight device",
"monitors-brightness-step-description": "Adjust the step size for brightness changes (scroll wheel and keyboard shortcuts).",
"monitors-brightness-step-label": "Brightness step size",
"monitors-brightness-unavailable-ddc-disabled": "Brightness control unavailable. Enable \"External brightness support\" to control this display's brightness.",
@@ -989,6 +1024,8 @@
"monitors-enforce-minimum-label": "Enforce minimum brightness (1%)",
"monitors-external-brightness-description": "Enable DDCUtil support for controlling brightness on external displays via DDC/CI protocol.",
"monitors-external-brightness-label": "External brightness support",
"monitors-global-brightness-description": "Adjust brightness for all monitors at once.",
"monitors-global-brightness-label": "All monitors",
"monitors-title": "Per-monitor settings",
"night-light-auto-schedule-description": "Based on the sunset and sunrise time in <i>{location}</i> — recommended.",
"night-light-auto-schedule-label": "Automatic scheduling",
@@ -1025,16 +1062,44 @@
"appearance-display-exclusive": "Exclusive",
"appearance-floating-distance-description": "Set the distance between the dock and the edge of the screen.",
"appearance-floating-distance-label": "Dock floating distance",
"appearance-frame-indicator-description": "Show a small indicator on the frame when the dock is hidden.",
"appearance-frame-indicator-label": "Frame dock indicator",
"appearance-group-apps-description": "Group multiple windows from the same app into one dock entry.",
"appearance-group-apps-label": "Group same apps",
"appearance-group-click-action-cycle": "Cycle windows",
"appearance-group-click-action-description": "Choose what left-click does for grouped apps.",
"appearance-group-click-action-label": "Grouped app click action",
"appearance-group-click-action-list": "Open window list",
"appearance-group-context-menu-mode-description": "Choose how the context menu behaves for grouped apps.",
"appearance-group-context-menu-mode-extended": "Extended",
"appearance-group-context-menu-mode-label": "Grouped app menu mode",
"appearance-group-context-menu-mode-list": "Window list",
"appearance-group-indicator-style-description": "Choose how grouped running indicators display focused window state.",
"appearance-group-indicator-style-dots": "Dots",
"appearance-group-indicator-style-label": "Grouped indicator style",
"appearance-group-indicator-style-number": "Number",
"appearance-hide-show-speed-description": "Adjust the speed of the dock hide/show animation.",
"appearance-hide-show-speed-label": "Hide/show speed",
"appearance-icon-size-description": "Adjust the overall size of the dock.",
"appearance-icon-size-label": "Dock size",
"appearance-inactive-indicators-description": "Display indicator pills for all apps, not just the currently active one.",
"appearance-inactive-indicators-label": "Running indicators",
"appearance-launcher-position-description": "Choose where the launcher icon appears in the dock.",
"appearance-launcher-position-end": "End",
"appearance-launcher-position-label": "Launcher position",
"appearance-launcher-position-start": "Start",
"appearance-pinned-static-description": "Always push pinned app icons to the left in static order.",
"appearance-pinned-static-label": "Static pinned apps",
"appearance-position-description": "Choose where the dock appears on screen.",
"appearance-position-label": "Position",
"appearance-show-launcher-icon-description": "Show the application launcher icon in the dock.",
"appearance-show-launcher-icon-label": "Show app launcher",
"appearance-sit-on-frame-description": "Align the dock inside the frame border instead of sitting on top.",
"appearance-sit-on-frame-label": "Dock sits on frame",
"appearance-type-description": "Choose between a floating pill or a static bar attached to the edge.",
"appearance-type-floating": "Floating",
"appearance-type-label": "Dock style",
"appearance-type-static": "Static",
"enabled-description": "Show or hide the dock entirely.",
"enabled-label": "Enable dock",
"monitors-desc": "Show dock on specific monitors. Defaults to all if none are chosen.",
@@ -1058,7 +1123,6 @@
"fonts-monospace-scale-description": "Increase or decrease the size of the monospaced text.",
"fonts-monospace-scale-label": "Monospaced font size",
"fonts-monospace-search-placeholder": "Search monospace font...",
"fonts-reset-scaling": "Reset scaling",
"fonts-title": "Fonts",
"keybinds-conflict-description": "The key combination is already assigned to {action}.",
"keybinds-conflict-title": "Keybind conflict",
@@ -1084,6 +1148,8 @@
"profile-select-avatar": "Select avatar image",
"profile-title": "Profile",
"profile-tooltip": "Profile picture",
"reverse-scrolling-description": "Reverse the interpreted scroll direction",
"reverse-scrolling-label": "Reverse scrolling",
"screen-corners-desc": "Customize screen corner rounding and visual effects.",
"screen-corners-radius-description": "Adjust the rounded corners of the screen.",
"screen-corners-radius-label": "Screen corners radius",
@@ -1131,6 +1197,30 @@
"wallpaper-changed-label": "Wallpaper changed",
"wallpaper-changed-placeholder": "e.g. notify-send \"Wallpaper\" \"Changed\""
},
"idle": {
"custom-add": "Add command",
"custom-description": "Run a shell command after a period of inactivity.",
"custom-entry-command": "Command",
"custom-entry-delete": "Delete",
"custom-entry-timeout": "Inactivity time",
"custom-label": "Custom idle commands",
"enable-description": "Automatically turn off the screen, lock, or suspend after a period of inactivity.",
"enable-label": "Enable idle management",
"fade-duration-description": "Seconds for the fade-to-black animation before each action fires. Any mouse movement cancels the fade.",
"fade-duration-label": "Fade duration",
"lock-description": "Seconds of inactivity before the lock screen activates.",
"lock-label": "Lock screen",
"screen-off-description": "Seconds of inactivity before monitors are turned off.",
"screen-off-label": "Turn off screen",
"status-description": "Idle time as reported by the compositor.",
"status-label": "Idle time",
"suspend-description": "Seconds of inactivity before the system suspends.",
"tab-behavior": "Behavior",
"tab-custom": "Custom",
"timeouts-description": "Set to 0 to disable a stage. Timeouts are paused while Keep Awake is active.",
"timeouts-label": "Timeouts",
"unavailable": "Native idle monitoring is not available on this compositor."
},
"indicator": {
"default-value": "Default: {value}",
"system-default": "System Default"
@@ -1249,6 +1339,8 @@
"lock-screen-tint-strength-description": "Applies a tint overlay to the lock screen wallpaper.",
"lock-screen-tint-strength-label": "Lock screen tint strength",
"monitors-desc": "Show lock screen on specific monitors. Defaults to all if none are chosen.",
"password-chars-description": "Cute icons used to hide your password.",
"password-chars-label": "Random password icons",
"show-hibernate-description": "Show the option 'hibernate' in the power controls.",
"show-hibernate-label": "Show hibernate",
"show-session-buttons-description": "Allow access to power settings from the lock screen.",
@@ -1270,10 +1362,11 @@
"duration-low-urgency-label": "Low urgency",
"duration-normal-urgency-description": "How long normal priority notifications stay visible.",
"duration-normal-urgency-label": "Normal urgency",
"duration-reset": "Reset timeout duration",
"duration-respect-expire-description": "Use the expire timeout set in the notification.",
"duration-respect-expire-label": "Respect expire timeout",
"duration-title": "Notification duration",
"history-clear-dismiss-description": "Clear notification from history when dismissed.",
"history-clear-dismiss-label": "Clear on dismissed",
"history-critical-urgency-description": "Save critical priority notifications to history.",
"history-critical-urgency-label": "Save critical urgency to history",
"history-desc": "Control which notifications are saved to history based on their urgency level.",
@@ -1291,6 +1384,8 @@
"settings-enabled-description": "Enable or disable the notification daemon, requires a restart of Noctalia shell.",
"settings-enabled-label": "Enable notifications",
"settings-location-description": "Where notifications appear on screen.",
"settings-markdown-description": "Render notification content using Markdown formatting.",
"settings-markdown-label": "Enable Markdown",
"sounds-desc": "Configure notification sound effects and volume.",
"sounds-enabled-description": "Enable sound effects for incoming notifications.",
"sounds-enabled-label": "Enable notification sounds",
@@ -1494,16 +1589,13 @@
"box-border-label": "Container outline",
"box-border-radius-description": "Adjusts the corner roundness of major layout sections, such as sidebars, cards, and content panels.",
"box-border-radius-label": "Container radius",
"box-border-radius-reset": "Reset container radius",
"control-border-radius-description": "Controls the curvature of interactive elements, including buttons, toggles, and text fields.",
"control-border-radius-label": "Input radius",
"control-border-radius-reset": "Reset input radius",
"desc": "Customize the look, feel, and behavior of the interface.",
"dim-desktop-description": "Dim the desktop when panels or menus are open.",
"dim-desktop-label": "Dim desktop",
"dimmer-opacity-description": "Set the opacity level for desktop dimming.",
"dimmer-opacity-label": "Dimmed desktop opacity",
"dimmer-opacity-reset": "Reset dimmed desktop opacity",
"panel-background-opacity-description": "Set the background opacity for all panels (bar, launcher, settings, etc...).",
"panel-background-opacity-label": "Panel background opacity",
"panels-attached-to-bar-description": "Panels lock to the bar and screen edges, creating a seamless look with stylish inverted corners.",
@@ -1512,9 +1604,11 @@
"panels-overlay-label": "Keep panels & bar on top",
"scaling-description": "Changes the size of the general user interface, excluding the bar.",
"scaling-label": "Interface scaling",
"scaling-reset-scaling": "Reset interface scaling",
"settings-panel-header": "Settings panel",
"settings-panel-mode-description": "Choose settings layout (may require reopening).",
"settings-panel-mode-label": "Settings panel mode",
"settings-panel-sidebar-card-style-description": "Wraps the settings sidebar in a filled background with rounded corners.",
"settings-panel-sidebar-card-style-label": "Sidebar card style",
"shadows-description": "Enables drop shadows under bars and panels.",
"shadows-direction-description": "Choose where the shadow is cast to.",
"shadows-direction-label": "Shadow direction",
@@ -1763,6 +1857,7 @@
"collapse": "Collapse sidebar",
"copy-address": "Copy address",
"delete-notification": "Delete notification",
"dismiss-notification": "Dismiss notification",
"do-not-disturb-enabled": "Do Not Disturb",
"expand": "Expand sidebar",
"forget-network": "Forget network",
+114 -18
View File
@@ -8,6 +8,7 @@
"disable-dnd": "Desactivar 'No molestar'",
"disable-wifi": "Desactivar Wi-Fi",
"disconnect-vpn": "Desconectar {name}",
"dock-settings": "Ajustes del dock",
"enable-bluetooth": "Activar Bluetooth",
"enable-dnd": "Activar 'No molestar'",
"enable-wifi": "Activar Wi-Fi",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Muestra la selección de perfil de energía en el panel de batería.",
"show-power-profile-label": "Mostrar controles de perfil de energía"
},
"brightness": {
"apply-all-description": "Cambiar el brillo de todos los monitores al usar la rueda de desplazamiento.",
"apply-all-label": "Aplicar cambios de desplazamiento a todos los monitores"
},
"clock": {
"clock-display-description": "Personaliza la visualización del reloj añadiendo tokens de la lista de abajo. Para usar el formato de 12 horas, debes incluir el token 'AP'.",
"clock-display-label": "Visualización del reloj",
@@ -75,7 +80,7 @@
"horizontal-bar-label": "Barra horizontal",
"preview": "Vista previa",
"tooltip-format-description": "Formato de la información mostrada al pasar el cursor sobre el reloj. Déjalo vacío para usar el formato por defecto.",
"tooltip-format-label": "Formato del emergente",
"tooltip-format-label": "Formato del texto emergente",
"use-custom-font-description": "Anular la fuente predeterminada del sistema con una fuente específica para el reloj.",
"use-custom-font-label": "Usar fuente personalizada",
"use-monospaced-font-description": "Cuando está activada, el reloj usará la fuente monoespaciada.",
@@ -87,7 +92,7 @@
"browse-file": "Explorar archivo",
"browse-library": "Explorar biblioteca",
"color-selection-description": "Aplica colores del tema a los iconos.",
"enable-colorization-description": "Habilita el coloreado del icono del centro de control, aplicando los colores del tema.",
"enable-colorization-description": "Habilitar la colorización para el icono, aplicando los colores del tema.",
"icon-description": "Selecciona un icono de la biblioteca o un archivo personalizado.",
"select-custom-icon": "Seleccionar un icono personalizado",
"use-distro-logo-description": "Usar el logo de tu distribución en lugar de un icono personalizado.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Si el texto de salida coincide con este valor, el botón se colapsará.",
"collapse-condition-label": "Condición de colapso",
"color-selection-description": "Aplicar colores del tema al icono y al texto.",
"default-tooltip": "Botón personalizado, configurar en ajustes",
"display-command-output-description": "Introduce un comando para ejecutar a intervalos regulares. La primera línea de su salida se mostrará como texto.",
"display-command-output-label": "Mostrar salida del comando",
"display-command-output-stream-description": "Introduce un comando para ejecutar continuamente.",
"dynamic-text": "Texto dinámico",
"enable-colorization-description": "Habilitar el coloreado para el icono y el texto del botón personalizado, aplicando los colores del tema.",
"enable-colorization-label": "Habilitar coloreado",
"general-tooltip-text-description": "Texto personalizado para mostrar en la descripción emergente del botón.",
"general-tooltip-text-label": "Texto emergente personalizado",
"hide-mode-always-expanded": "Siempre expandido",
"hide-mode-description": "Controla la visibilidad del widget cuando el comando no tiene salida.",
"hide-mode-expand-with-output": "Expandir cuando tiene salida",
@@ -128,16 +136,22 @@
"right-click-description": "Comando a ejecutar cuando se hace clic derecho en el botón.",
"right-click-label": "Clic derecho",
"right-click-update-text": "Actualizar el texto mostrado al hacer clic derecho",
"show-exec-tooltip-description": "Mostrar texto emergente con los detalles del comandos (clic izquierdo/derecho/central, rueda).",
"show-exec-tooltip-label": "Mostrar texto emergente de comandos",
"show-icon-description": "Alterna la visibilidad del icono del widget.",
"show-icon-label": "Mostrar icono",
"show-text-tooltip-description": "Mostrar texto emergente con la salida del comando de texto.",
"show-text-tooltip-label": "Mostrar textos emergentes dinámicos",
"text-stream-description": "Las líneas transmitidas desde el comando se mostrarán como texto en el botón.",
"text-stream-label": "Salida del comando",
"wheel-description": "Comando a ejecutar cuando se usa la rueda de desplazamiento.<br>Usa $delta para el delta de la rueda de desplazamiento en el comando.",
"wheel-down": "Rueda abajo",
"wheel-down-description": "Comando a ejecutar cuando la rueda de desplazamiento se desplaza hacia abajo.",
"wheel-down-label": "Comando de rueda hacia abajo",
"wheel-label": "Rueda de desplazamiento",
"wheel-mode-separate-description": "Habilitar comandos separados para rueda arriba y abajo.",
"wheel-mode-separate-label": "Comandos de rueda separados",
"wheel-up": "Rueda arriba",
"wheel-up-description": "Comando a ejecutar cuando la rueda de desplazamiento se desplaza hacia arriba.",
"wheel-up-label": "Comando de rueda hacia arriba",
"wheel-update-text": "Actualizar texto mostrado al desplazarse"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Acciones",
"active": "Activo",
"add": "Añadir",
"appearance": "Apariencia",
"apply": "Aplicar",
@@ -363,6 +378,7 @@
"available": "Disponible",
"back": "Atrás",
"battery": "Batería",
"behavior": "Comportamiento",
"bluetooth": "Bluetooth",
"brightness": "Brillo",
"browse": "Navegar",
@@ -395,6 +411,7 @@
"disconnected": "Desconectado",
"disconnecting": "Desconectando...",
"display-mode": "Modo de pantalla",
"documentation": "Documentación",
"download": "Descargar",
"duration": "Duración",
"dysfunctional": "Disfuncional",
@@ -458,6 +475,7 @@
"primary": "Primario",
"random": "Aleatorio",
"reboot": "Reiniciar",
"reboot-to-uefi": "Reiniciar a UEFI",
"record": "Iniciar grabación",
"refresh": "Refrescar",
"required": "(obligatorio)",
@@ -470,6 +488,8 @@
"scanning": "Escaneando...",
"screen-corners": "Esquinas de la pantalla",
"search": "Buscar",
"second": "{count} segundo",
"second-plural": "{count} segundos",
"secondary": "Secundario",
"security": "Seguridad",
"select": "Seleccionar",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Clic para contraer",
"click-to-expand": "Haz clic para expandir",
"description": "Tus notificaciones aparecerán aquí a medida que lleguen.",
"no-notifications": "No hay notificaciones"
@@ -751,6 +772,9 @@
"visualizer-type-description": "Elige un tipo de visualización para la reproducción de medios.",
"visualizer-type-label": "Tipo de visualización",
"volumes-desc": "Ajusta los controles de volumen y los niveles de audio.",
"volumes-feedback-sound-file-description": "Ruta al archivo de sonido que se reproduce al cambiar el volumen.",
"volumes-feedback-sound-file-label": "Archivo de sonido de feedback de volumen",
"volumes-feedback-sound-file-select-title": "Seleccionar archivo de sonido de retroalimentación de volumen",
"volumes-input-volume-description": "Nivel de volumen de entrada del micrófono.",
"volumes-mute-input-description": "Silencia la entrada de audio predeterminada (micrófono).",
"volumes-mute-input-label": "Silenciar entrada de audio",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "Color de la cápsula",
"appearance-capsule-opacity-description": "Establecer el nivel de opacidad para los fondos de los widgets cuando se muestra la cápsula.",
"appearance-capsule-opacity-label": "Opacidad de la cápsula",
"appearance-content-padding-description": "Ajusta el espacio entre los bordes de la barra y los widgets.",
"appearance-content-padding-label": "Espaciado del contenido",
"appearance-density-description": "Ajusta el relleno de la barra para un aspecto compacto o espacioso.",
"appearance-density-label": "Densidad de la barra",
"appearance-desc": "Personaliza la apariencia y posición de la barra.",
"appearance-display-mode-description": "Elige cuando será visible la barra.",
"appearance-floating-description": "Muestra la barra como una 'píldora' flotante.",
"appearance-floating-label": "Barra flotante",
"appearance-font-scale-description": "Ajustar la escala del tamaño de fuente para el texto mostrado en la barra.",
"appearance-font-scale-label": "Escala de fuente",
"appearance-frame-radius": "Radio interno",
"appearance-frame-settings-description": "Ajustar el grosor del marco y el radio de la esquina interior",
"appearance-frame-settings-label": "Ajustes del marco",
@@ -798,12 +826,16 @@
"appearance-position-label": "Posición de la barra",
"appearance-show-capsule-description": "Mostrar fondos de los widgets.",
"appearance-show-capsule-label": "Mostrar cápsula",
"appearance-show-on-workspace-switch-description": "Mostrar la barra brevemente de forma automática cuando el espacio de trabajo cambie.",
"appearance-show-on-workspace-switch-label": "Mostrar barra al cambiar de espacio de trabajo",
"appearance-show-outline-description": "Muestra un borde visible alrededor de cada widget.",
"appearance-show-outline-label": "Mostrar contornos de widgets",
"appearance-type-description": "Elige el estilo de la barra: Simple, Flotante o Con marco.",
"appearance-type-label": "Tipo de barra",
"appearance-use-separate-opacity-description": "Permitir usar un valor de opacidad separado para el fondo de la barra.",
"appearance-use-separate-opacity-label": "Usar opacidad de barra separada",
"appearance-widget-spacing-description": "Ajusta el espaciado entre cada widget en la barra.",
"appearance-widget-spacing-label": "Espaciado de widgets",
"monitor-configure-widgets": "Configurar widgets",
"monitor-override-settings": "Anular la configuración global",
"monitor-override-settings-description": "Usar ajustes personalizados para este monitor.",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "Autenticación requerida",
"bluetooth-devices-unnamed": "Los dispositivos sin nombre no se muestran.",
"bluetooth-discoverable": "Este dispositivo es detectable como <b> {hostName} </b> mientras esta pestaña de ajustes esté abierta.",
"bluetooth-discoverable": "Este dispositivo es detectable como <b>{hostName}</b> mientras esta pestaña de ajustes esté abierta.",
"bluetooth-rssi-polling-description": "Muestrea periódicamente el RSSI de los dispositivos conectados a través de bluetoothctl. Puede que no esté disponible para todos los dispositivos; usa recursos mínimos cuando está activado.",
"bluetooth-rssi-polling-interval-description": "Configura con qué frecuencia actualizar la intensidad de la señal para los dispositivos conectados.",
"bluetooth-rssi-polling-interval-label": "Intervalo de sondeo",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "El comando a ejecutar cuando se hace clic en el botón.",
"shortcuts-custom-button-enable-on-state-logic-description": "Habilita un segundo icono y un estado 'caliente' basado en un comando de comprobación.",
"shortcuts-custom-button-enable-on-state-logic-label": "Habilitar lógica de estado activado",
"shortcuts-custom-button-general-tooltip-text-description": "Descripción general para el tooltip del botón.",
"shortcuts-custom-button-general-tooltip-text-label": "Texto de tooltip general",
"shortcuts-custom-button-icon-description": "Selecciona un icono de la biblioteca.",
"shortcuts-custom-button-on-clicked-label": "Comando de clic izquierdo",
"shortcuts-custom-button-on-middle-clicked-label": "Comando de clic central",
"shortcuts-custom-button-on-right-clicked-label": "Comando de clic derecho",
"shortcuts-custom-button-on-middle-clicked-description": "Comando para ejecutar al hacer clic con el botón central.",
"shortcuts-custom-button-on-state-command-description": "Comando a ejecutar para comprobar si el botón debe estar en el estado 'encendido'. Devuelve 0 para encendido, no cero para apagado.",
"shortcuts-custom-button-on-state-command-label": "Comando de comprobación de estado activado",
"shortcuts-custom-button-on-state-icon-description": "El icono para el botón cuando está en el estado 'encendido'.",
@@ -913,8 +943,8 @@
"shortcuts-custom-button-state-checks-command": "Comando a ejecutar para esta comprobación de estado",
"shortcuts-custom-button-state-checks-label": "Comprobaciones de estado",
"shortcuts-custom-button-state-checks-remove": "Eliminar",
"shortcuts-custom-button-tooltip-description": "El tooltip a mostrar al pasar el cursor sobre el botón.",
"shortcuts-custom-button-tooltip-label": "Tooltip",
"shortcuts-custom-button-tooltip-description": "El texto emergente a mostrar al pasar el cursor sobre el botón.",
"shortcuts-custom-button-tooltip-label": "Texto emergente",
"shortcuts-title": "Widgets de accesos directos",
"system-monitor-disk-path-description": "Selecciona qué punto de montaje de disco debe monitorear la tarjeta del monitor del sistema en el centro de control.",
"system-monitor-disk-path-label": "Ruta del disco del monitor del sistema",
@@ -943,6 +973,7 @@
"clock-style-label": "Estilo de reloj",
"clock-style-minimal": "Minimal",
"clock-width-description": "Ancho del widget de reloj en píxeles.",
"cpu-intensive-note": "Los widgets marcados con ! usan más CPU y deberían activarse con precaución.",
"edit-mode-button-label": "Entrar en modo de edición",
"edit-mode-controls-explanation": "Clic izquierdo y arrastrar: Mover o redimensionar el widget.\nClic derecho: Abrir las opciones del menú contextual.",
"edit-mode-description": "Habilita el modo de edición para mover y cambiar la posición de los widgets del escritorio. Cuando está habilitado, los widgets muestran un contorno de arrastre y se pueden reposicionar.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "Mostrar botones",
"media-player-show-visualizer-description": "Mostrar la superposición del visualizador de audio.",
"media-player-visualizer-type-description": "Elige un tipo de visualización para el fondo del reproductor multimedia de escritorio.",
"overview-enabled-description": "Mostrar widgets de escritorio mientras la vista general del compositor esté abierta.",
"overview-enabled-label": "Mostrar en la vista general",
"system-stat-layout-bottom": "Abajo",
"system-stat-layout-description": "Elige cómo se muestra la leyenda en relación con el gráfico.",
"system-stat-layout-label": "Diseño",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "Mostrar el contenedor de fondo para el widget del clima."
},
"display": {
"monitors-backlight-device-auto-option": "Predeterminado",
"monitors-backlight-device-description": "Selecciona un dispositivo de retroiluminación para esta salida.",
"monitors-backlight-device-label": "Dispositivo de Retroiluminación",
"monitors-brightness-step-description": "Ajusta el tamaño del paso para los cambios de brillo (rueda de desplazamiento y atajos de teclado).",
"monitors-brightness-step-label": "Tamaño del paso de brillo",
"monitors-brightness-unavailable-ddc-disabled": "Control de brillo no disponible. Habilita \"Soporte de brillo externo\" para controlar el brillo de esta pantalla.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "Forzar brillo mínimo (1%)",
"monitors-external-brightness-description": "Habilitar soporte DDCUtil para controlar el brillo en pantallas externas mediante el protocolo DDC/CI.",
"monitors-external-brightness-label": "Soporte de brillo externo",
"monitors-global-brightness-description": "Ajustar el brillo de todos los monitores a la vez.",
"monitors-global-brightness-label": "Todos los monitores",
"monitors-title": "Configuración por monitor",
"night-light-auto-schedule-description": "Basado en la hora del atardecer y amanecer en <i>{location}</i> — recomendado.",
"night-light-auto-schedule-label": "Programación automática",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "Exclusivo",
"appearance-floating-distance-description": "Ajusta la distancia de flotación desde el borde de la pantalla.",
"appearance-floating-distance-label": "Distancia de flotación del dock",
"appearance-frame-indicator-description": "Mostrar un pequeño indicador en el marco cuando el dock está oculto.",
"appearance-frame-indicator-label": "Indicador de muelle enmarcado",
"appearance-group-apps-description": "Agrupar varias ventanas de la misma app en una entrada del Dock.",
"appearance-group-apps-label": "Agrupar aplicaciones similares",
"appearance-group-click-action-cycle": "Alternar ventanas",
"appearance-group-click-action-description": "Elige qué hace el clic izquierdo para las aplicaciones agrupadas.",
"appearance-group-click-action-label": "Acción al hacer clic en aplicación agrupada",
"appearance-group-click-action-list": "Abrir lista de ventanas",
"appearance-group-context-menu-mode-description": "Elige cómo se comporta el menú contextual para las aplicaciones agrupadas.",
"appearance-group-context-menu-mode-extended": "Extendido",
"appearance-group-context-menu-mode-label": "Modo de menú de aplicaciones agrupado",
"appearance-group-context-menu-mode-list": "Lista de ventanas",
"appearance-group-indicator-style-description": "Elige cómo los indicadores de aplicaciones agrupadas muestran el estado de la ventana enfocada.",
"appearance-group-indicator-style-dots": "Puntos",
"appearance-group-indicator-style-label": "Estilo de indicador agrupado",
"appearance-group-indicator-style-number": "Número",
"appearance-hide-show-speed-description": "Ajusta la velocidad de la animación de ocultar/mostrar del dock.",
"appearance-hide-show-speed-label": "Velocidad de ocultar/mostrar",
"appearance-icon-size-description": "Ajusta el tamaño general del dock.",
"appearance-icon-size-label": "Tamaño del dock",
"appearance-inactive-indicators-description": "Mostrar indicadores en forma de pastillas para todas las aplicaciones, no solo para la que está activa actualmente.",
"appearance-inactive-indicators-label": "Indicadores de ejecución",
"appearance-launcher-position-description": "Elige dónde aparece el icono del lanzador en el dock.",
"appearance-launcher-position-end": "Fin",
"appearance-launcher-position-label": "Posición del lanzador",
"appearance-launcher-position-start": "Iniciar",
"appearance-pinned-static-description": "Siempre empuja los iconos de las aplicaciones ancladas a la izquierda en orden estático.",
"appearance-pinned-static-label": "Aplicaciones ancladas estáticas",
"appearance-position-description": "Elige dónde aparece el dock en la pantalla.",
"appearance-position-label": "Posición",
"appearance-show-launcher-icon-description": "Mostrar el icono del lanzador de aplicaciones en el dock.",
"appearance-show-launcher-icon-label": "Mostrar lanzador de aplicaciones",
"appearance-sit-on-frame-description": "Alinear el dock dentro del borde del marco en lugar de que se superponga.",
"appearance-sit-on-frame-label": "El Dock se asienta en el marco",
"appearance-type-description": "Elige entre una barra flotante con forma de píldora o una barra estática anclada al borde.",
"appearance-type-floating": "Flotante",
"appearance-type-label": "Estilo del dock",
"appearance-type-static": "Estático",
"enabled-description": "Mostrar u ocultar el dock por completo.",
"enabled-label": "Habilitar dock",
"monitors-desc": "Mostrar el dock en monitores específicos. Por defecto, se muestra en todos si no se elige ninguno.",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "Aumentar o disminuir el tamaño del texto monoespaciado.",
"fonts-monospace-scale-label": "Tamaño de fuente monoespaciada",
"fonts-monospace-search-placeholder": "Buscar fuentes monoespaciadas...",
"fonts-reset-scaling": "Restablecer la escala",
"fonts-title": "Fuentes",
"keybinds-conflict-description": "La combinación de teclas ya está asignada a {action}.",
"keybinds-conflict-title": "Conflicto de atajos de teclado",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "Seleccionar imagen de avatar",
"profile-title": "Perfil",
"profile-tooltip": "Foto de perfil",
"reverse-scrolling-description": "Invertir dirección de desplazamiento interpretada.",
"reverse-scrolling-label": "Desplazamiento inverso",
"screen-corners-desc": "Personaliza el redondeo de las esquinas de la pantalla y los efectos visuales.",
"screen-corners-radius-description": "Ajusta las esquinas redondeadas de la pantalla.",
"screen-corners-radius-label": "Radio de las esquinas de la pantalla",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "Fondo de pantalla cambiado",
"wallpaper-changed-placeholder": "p. ej. notify-send \"Fondo de pantalla\" \"Cambiado\""
},
"idle": {
"custom-add": "Añadir comando",
"custom-description": "Ejecuta un comando de shell después de un período de inactividad.",
"custom-entry-command": "Comando",
"custom-entry-delete": "Eliminar",
"custom-entry-timeout": "Tiempo de inactividad",
"custom-label": "Comandos de Inactividad Personalizados",
"enable-description": "Apagar la pantalla, bloquear o suspender automáticamente después de un período de inactividad.",
"enable-label": "Activar gestión de inactividad",
"fade-duration-description": "Segundos para la animación de fundido a negro antes de que se active cada acción. Cualquier movimiento del ratón cancela el fundido.",
"fade-duration-label": "Duración del fundido",
"lock-description": "Segundos de inactividad antes de que se active la pantalla de bloqueo.",
"lock-label": "Bloquear pantalla",
"screen-off-description": "Segundos de inactividad antes de que los monitores se apaguen.",
"screen-off-label": "Apagar pantalla",
"status-description": "Tiempo de inactividad según lo informado por el Compositor.",
"status-label": "Tiempo de Inactividad",
"suspend-description": "Segundos de inactividad antes de que el sistema se suspenda.",
"tab-behavior": "Comportamiento",
"tab-custom": "Personalizado",
"timeouts-description": "Establece en 0 para deshabilitar una etapa. Los tiempos de espera se pausan mientras Keep Awake está activo.",
"timeouts-label": "Tiempos de Espera",
"unavailable": "La monitorización nativa de inactividad no está disponible en este Compositor."
},
"indicator": {
"default-value": "Predeterminado: {value}",
"system-default": "Predeterminado del sistema"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "Aplica una superposición de tinte al fondo de pantalla de la pantalla de bloqueo.",
"lock-screen-tint-strength-label": "Intensidad del tinte de la pantalla de bloqueo",
"monitors-desc": "Mostrar pantalla de bloqueo en monitores específicos. Por defecto, se mostrará en todos si no se elige ninguno.",
"password-chars-description": "Iconos bonitos usados para ocultar tu contraseña.",
"password-chars-label": "Iconos de contraseña aleatorios",
"show-hibernate-description": "Mostrar la opción 'hibernar' en los controles de energía.",
"show-hibernate-label": "Mostrar hibernar",
"show-session-buttons-description": "Permitir el acceso a las opciones de sesión desde la pantalla de bloqueo.",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "Urgencia baja",
"duration-normal-urgency-description": "Cuánto tiempo permanecen visibles las notificaciones de prioridad normal.",
"duration-normal-urgency-label": "Urgencia normal",
"duration-reset": "Restablecer la duración del tiempo de espera",
"duration-respect-expire-description": "Usa el tiempo de expiración establecido en la notificación.",
"duration-respect-expire-label": "Respetar tiempo de expiración",
"duration-title": "Duración de la notificación",
"history-clear-dismiss-description": "Borrar notificación del historial al descartarla.",
"history-clear-dismiss-label": "Borrar al descartar",
"history-critical-urgency-description": "Guardar notificaciones de prioridad crítica en el historial.",
"history-critical-urgency-label": "Guardar urgencia crítica en el historial",
"history-desc": "Controlar qué notificaciones se guardan en el historial según su nivel de urgencia.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "Activar o desactivar el demonio de notificaciones, requiere reiniciar Noctalia shell.",
"settings-enabled-label": "Activar notificaciones",
"settings-location-description": "Dónde aparecen las notificaciones en la pantalla.",
"settings-markdown-description": "Renderizar el contenido de las notificaciones usando formato Markdown.",
"settings-markdown-label": "Habilitar Markdown",
"sounds-desc": "Configurar efectos de sonido y volumen de notificaciones.",
"sounds-enabled-description": "Activar efectos de sonido para notificaciones entrantes.",
"sounds-enabled-label": "Activar sonidos de notificación",
@@ -1488,21 +1584,18 @@
"animation-speed-description": "Ajustar la velocidad global de la animación.",
"animation-speed-label": "Velocidad de animación",
"animation-speed-reset": "Restablecer la velocidad de la animación",
"appearance-desc": "Personaliza elementos visuales como información sobre herramientas, bordes y sombras.",
"appearance-desc": "Personaliza elementos visuales como texto emergente, bordes y sombras.",
"box-border-description": "Muestra un contorno alrededor de las áreas de contenido.",
"box-border-label": "Contorno del contenedor",
"box-border-radius-description": "Ajusta la redondez de las esquinas de las secciones principales del diseño, como barras laterales, tarjetas y paneles de contenido.",
"box-border-radius-label": "Radio del contenedor",
"box-border-radius-reset": "Restablecer el radio del contenedor",
"control-border-radius-description": "Controla la curvatura de los elementos interactivos, incluyendo botones, interruptores y campos de texto.",
"control-border-radius-label": "Radio de entrada",
"control-border-radius-reset": "Restablecer el radio de entrada",
"desc": "Personaliza la apariencia, el ambiente y el comportamiento de la interfaz.",
"dim-desktop-description": "Atenuar el escritorio cuando los paneles o menús estén abiertos.",
"dim-desktop-label": "Atenuar escritorio",
"dimmer-opacity-description": "Define el nivel de opacidad para el atenuado del escritorio.",
"dimmer-opacity-label": "Opacidad del escritorio atenuado",
"dimmer-opacity-reset": "Restablecer la opacidad del escritorio atenuado",
"panel-background-opacity-description": "Establecer la opacidad del fondo para todos los paneles (barra, lanzador, ajustes, etc...).",
"panel-background-opacity-label": "Opacidad del fondo del panel",
"panels-attached-to-bar-description": "Los paneles se fijan a la barra y a los bordes de la pantalla, creando una apariencia integrada con elegantes esquinas invertidas.",
@@ -1511,16 +1604,18 @@
"panels-overlay-label": "Mantener paneles y barra en la parte superior",
"scaling-description": "Cambia el tamaño de la interfaz de usuario general, excluyendo la barra.",
"scaling-label": "Escalado de la interfaz",
"scaling-reset-scaling": "Restablecer el escalado de la interfaz",
"settings-panel-header": "Panel de Configuración",
"settings-panel-mode-description": "Elegir diseño de configuración (puede requerir reapertura).",
"settings-panel-mode-label": "Modo del panel de configuración",
"settings-panel-sidebar-card-style-description": "Envuelve la barra lateral de ajustes en un fondo relleno con esquinas redondeadas.",
"settings-panel-sidebar-card-style-label": "Estilo de Tarjeta de la Barra Lateral",
"shadows-description": "Habilita sombras paralelas debajo de las barras y los paneles.",
"shadows-direction-description": "Elige dónde se proyecta la sombra.",
"shadows-direction-label": "Dirección de la sombra",
"shadows-label": "Sombras paralelas",
"title": "Interfaz de usuario",
"tooltips-description": "Activar o desactivar los avisos emergentes en toda la interfaz.",
"tooltips-label": "Mostrar sugerencias"
"tooltips-label": "Mostrar textos emergentes"
},
"wallpaper": {
"automation-change-mode-alphabetical": "Alfabético",
@@ -1584,7 +1679,7 @@
"enter-ipc-identifier": "Introduce un identificador único para los comandos IPC",
"enter-path": "Introduce la ruta...",
"enter-text-to-collapse": "p. ej. 'no se está reproduciendo nada'. Usa /regex/ para patrones.",
"enter-tooltip": "Introduce tooltip",
"enter-tooltip": "Introduce texto emergente",
"enter-width-pixels": "Introduce el ancho en píxeles",
"keybind-recording": "Grabando atajo de teclado...",
"search": "Buscar...",
@@ -1762,6 +1857,7 @@
"collapse": "Colapsar barra lateral",
"copy-address": "Copiar dirección",
"delete-notification": "Eliminar notificación",
"dismiss-notification": "Descartar notificación",
"do-not-disturb-enabled": "No molestar",
"expand": "Expandir barra lateral",
"forget-network": "Olvidar red",
+132 -36
View File
@@ -8,6 +8,7 @@
"disable-dnd": "Désactiver le mode 'Ne pas déranger'",
"disable-wifi": "Désactiver le Wi-Fi",
"disconnect-vpn": "Se déconnecter de {name}",
"dock-settings": "Paramètres du dock",
"enable-bluetooth": "Activer le Bluetooth",
"enable-dnd": "Activer le mode 'Ne pas déranger'",
"enable-wifi": "Activer le Wi-Fi",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Afficher la sélection du profil d'alimentation dans le panneau batterie.",
"show-power-profile-label": "Afficher les contrôles de profil d'alimentation"
},
"brightness": {
"apply-all-description": "Changer la luminosité de tous les moniteurs lors de l'utilisation de la molette de défilement.",
"apply-all-label": "Appliquer les modifications de défilement à tous les moniteurs"
},
"clock": {
"clock-display-description": "Personnalisez l'affichage de votre horloge en ajoutant des jetons de la liste ci-dessous. Pour utiliser le format 12 heures, vous devez inclure le jeton 'AP'.",
"clock-display-label": "Affichage de l'horloge",
@@ -78,8 +83,8 @@
"tooltip-format-label": "Format de l'info-bulle",
"use-custom-font-description": "Remplacez la police par défaut par une police personnalisée pour l'horloge.",
"use-custom-font-label": "Utiliser une police personnalisée",
"use-monospaced-font-description": "Lorsque cette option est activée, l'horloge utilisera la police à chasse fixe.",
"use-monospaced-font-label": "Utiliser une police à chasse fixe",
"use-monospaced-font-description": "Lorsque cette option est activée, l'horloge utilisera la police monospace.",
"use-monospaced-font-label": "Utiliser une police monospace",
"vertical-bar-description": "Utilisez un espace pour séparer chaque partie sur une nouvelle ligne.",
"vertical-bar-label": "Barre verticale"
},
@@ -87,7 +92,7 @@
"browse-file": "Parcourir les fichiers",
"browse-library": "Parcourir la bibliothèque",
"color-selection-description": "Applique les couleurs du thème aux icônes.",
"enable-colorization-description": "Active la coloration pour l'icône du centre de contrôle, en appliquant les couleurs du thème.",
"enable-colorization-description": "Activer la colorisation pour l'icône, en appliquant les couleurs du thème.",
"icon-description": "Sélectionnez une icône de la bibliothèque ou un fichier personnalisé.",
"select-custom-icon": "Sélectionner une icône personnalisée",
"use-distro-logo-description": "Utiliser le logo de votre distribution au lieu d'une icône personnalisée.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Si le texte de sortie correspond à cette valeur, le bouton se repliera.",
"collapse-condition-label": "Condition deffondrement",
"color-selection-description": "Appliquer les couleurs du thème à l'icône et au texte.",
"default-tooltip": "Bouton personnalisé, configurer dans les paramètres",
"display-command-output-description": "Entrez une commande à exécuter à intervalle régulier. La première ligne de sa sortie sera affichée sous forme de texte.",
"display-command-output-label": "Afficher la sortie de la commande",
"display-command-output-stream-description": "Entrez une commande à exécuter en continu.",
"dynamic-text": "Texte dynamique",
"enable-colorization-description": "Activer la colorisation pour l'icône et le texte du bouton personnalisé, en appliquant les couleurs du thème.",
"enable-colorization-label": "Activer la colorisation",
"general-tooltip-text-description": "Texte personnalisé à afficher dans l'info-bulle du bouton.",
"general-tooltip-text-label": "Texte d'info-bulle personnalisé",
"hide-mode-always-expanded": "Toujours étendu",
"hide-mode-description": "Contrôle la visibilité du widget quand la commande n'a pas de sortie.",
"hide-mode-expand-with-output": "Étendre quand il y a une sortie",
@@ -128,16 +136,22 @@
"right-click-description": "Commande à exécuter quand le bouton est cliqué à droite.",
"right-click-label": "Clic droit",
"right-click-update-text": "Mettre à jour le texte affiché lors d'un clic droit",
"show-exec-tooltip-description": "Afficher les info-bulles avec les détails de la commande (clic gauche/droit/milieu, molette).",
"show-exec-tooltip-label": "Afficher les infobulles de commande",
"show-icon-description": "Bascule la visibilité de l'icône du widget.",
"show-icon-label": "Afficher l'icône",
"show-text-tooltip-description": "Afficher les info-bulles avec la sortie de la commande texte.",
"show-text-tooltip-label": "Afficher les info-bulles de texte dynamiques",
"text-stream-description": "Les lignes diffusées depuis la commande seront affichées sous forme de texte sur le bouton.",
"text-stream-label": "Flux",
"wheel-description": "Commande à exécuter lorsque la molette est utilisée.<br>Utilisez $delta pour le delta de la molette dans la commande.",
"wheel-down": "Molette bas",
"wheel-down-description": "Commande à exécuter lorsque la molette est défilée vers le bas.",
"wheel-down-label": "Commande molette bas",
"wheel-label": "Molette",
"wheel-mode-separate-description": "Activer des commandes séparées pour la molette haut et bas.",
"wheel-mode-separate-label": "Commandes de molette séparées",
"wheel-up": "Molette haut",
"wheel-up-description": "Commande à exécuter lorsque la molette est défilée vers le haut.",
"wheel-up-label": "Commande molette haut",
"wheel-update-text": "Mettre à jour le texte affiché au défilement"
@@ -223,10 +237,10 @@
"storage-usage-label": "Utilisation du stockage",
"swap-usage-description": "Afficher l'utilisation de la mémoire swap.",
"swap-usage-label": "Utilisation du swap",
"use-monospace-font-description": "Utilisez une police de caractères à chasse fixe pour une largeur de caractère uniforme.",
"use-monospace-font-label": "Police à chasse fixe",
"use-monospace-font-description": "Utilisez une police de caractères monospace pour une largeur de caractère uniforme.",
"use-monospace-font-label": "Police monospace",
"use-padding-description": "Remplit les valeurs de texte avec des espaces en début de ligne pour éviter le décalage de la mise en page.",
"use-padding-description-disabled-monospace-font": "Une police à chasse fixe est nécessaire pour cette fonctionnalité.",
"use-padding-description-disabled-monospace-font": "Une police monospace est nécessaire pour cette fonctionnalité.",
"use-padding-description-disabled-vertical": "La barre des tâches verticale ne prend pas en charge le remplissage de texte.",
"use-padding-label": "Rembourrage du Texte"
},
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Actions",
"active": "Actif",
"add": "Ajouter",
"appearance": "Apparence",
"apply": "Appliquer",
@@ -363,6 +378,7 @@
"available": "Disponible",
"back": "Retour",
"battery": "Batterie",
"behavior": "Comportement",
"bluetooth": "Bluetooth",
"brightness": "Luminosité",
"browse": "Parcourir",
@@ -395,6 +411,7 @@
"disconnected": "Déconnecté",
"disconnecting": "Déconnexion...",
"display-mode": "Mode d'affichage",
"documentation": "Documentation",
"download": "Télécharger",
"duration": "Durée",
"dysfunctional": "Dysfonctionnel",
@@ -411,7 +428,7 @@
"general": "Général",
"height": "Hauteur",
"hibernate": "Hiberner",
"history": "Histoire",
"history": "Historique",
"icon": "Icône",
"idle": "Inactif",
"info": "Info",
@@ -458,6 +475,7 @@
"primary": "Primaire",
"random": "Aléatoire",
"reboot": "Redémarrer",
"reboot-to-uefi": "Redémarrer en UEFI",
"record": "Démarrer l'enregistrement",
"refresh": "Actualiser",
"required": "(requis)",
@@ -470,6 +488,8 @@
"scanning": "Analyse en cours...",
"screen-corners": "Coins d'écran",
"search": "Rechercher",
"second": "{count} seconde",
"second-plural": "{count} secondes",
"secondary": "Secondaire",
"security": "Sécurité",
"select": "Sélectionner",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Cliquer pour réduire",
"click-to-expand": "Cliquez pour développer",
"description": "Vos notifications apparaîtront ici à mesure qu'elles arriveront.",
"no-notifications": "Aucune notification"
@@ -751,6 +772,9 @@
"visualizer-type-description": "Choisissez un type de visualisation pour la lecture de médias.",
"visualizer-type-label": "Type de visualisation",
"volumes-desc": "Ajustez les contrôles de volume et les niveaux audio.",
"volumes-feedback-sound-file-description": "Chemin du fichier son lu lors du changement de volume.",
"volumes-feedback-sound-file-label": "Fichier audio de retour du volume",
"volumes-feedback-sound-file-select-title": "Sélectionner le fichier audio de retour de volume",
"volumes-input-volume-description": "Niveau du volume d'entrée du microphone.",
"volumes-mute-input-description": "Couper l'entrée audio par défaut (microphone).",
"volumes-mute-input-label": "Couper l'entrée audio",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "Couleur de la capsule",
"appearance-capsule-opacity-description": "Définir le niveau d'opacité des arrière-plans des widgets quand la capsule est affichée.",
"appearance-capsule-opacity-label": "Opacité de la capsule",
"appearance-content-padding-description": "Ajustez l'espacement entre les bords de la barre et les widgets.",
"appearance-content-padding-label": "Espacement du contenu",
"appearance-density-description": "Ajustez le remplissage de la barre pour un aspect compact ou spacieux.",
"appearance-density-label": "Densité de la barre",
"appearance-desc": "Personnalisez l'apparence et la position de la barre.",
"appearance-display-mode-description": "Choisir quand la barre est visible.",
"appearance-floating-description": "Afficher la barre sous forme de 'pilule' flottante.",
"appearance-floating-label": "Barre flottante",
"appearance-font-scale-description": "Ajuster l'échelle de la taille de police pour le texte affiché dans la barre.",
"appearance-font-scale-label": "Échelle de police",
"appearance-frame-radius": "Rayon interne",
"appearance-frame-settings-description": "Ajuster l'épaisseur du cadre et le rayon interne",
"appearance-frame-settings-label": "Paramètres du cadre",
@@ -798,12 +826,16 @@
"appearance-position-label": "Position de la barre",
"appearance-show-capsule-description": "Afficher les arrière-plans des widgets.",
"appearance-show-capsule-label": "Afficher la capsule",
"appearance-show-on-workspace-switch-description": "Afficher la Bar brièvement et automatiquement lorsque l'espace de travail change.",
"appearance-show-on-workspace-switch-label": "Afficher la barre lors du changement d'espace de travail",
"appearance-show-outline-description": "Affiche une bordure visible autour de chaque widget.",
"appearance-show-outline-label": "Afficher les contours des widgets",
"appearance-type-description": "Choisissez le style de la barre : Simple, Flottante ou Encadrée.",
"appearance-type-label": "Type de barre",
"appearance-use-separate-opacity-description": "Activer l'utilisation d'une valeur d'opacité distincte pour l'arrière-plan de la barre.",
"appearance-use-separate-opacity-label": "Utiliser l'opacité des barres séparément",
"appearance-widget-spacing-description": "Ajustez l'espacement entre chaque widget dans la barre.",
"appearance-widget-spacing-label": "Espacement des widgets",
"monitor-configure-widgets": "Configurer les widgets",
"monitor-override-settings": "Remplacer les paramètres globaux",
"monitor-override-settings-description": "Utiliser des paramètres personnalisés pour ce moniteur.",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "Authentification requise",
"bluetooth-devices-unnamed": "Les appareils sans nom ne sont pas affichés.",
"bluetooth-discoverable": "Cet appareil est détectable en tant que <b> {hostName} </b> tant que cet onglet de paramètres est ouvert.",
"bluetooth-discoverable": "Cet appareil est détectable en tant que <b>{hostName}</b> tant que cet onglet de paramètres est ouvert.",
"bluetooth-rssi-polling-description": "Échantillonne périodiquement le RSSI des appareils connectés via bluetoothctl. Peut ne pas être disponible pour tous les appareils ; utilise des ressources minimales lorsqu'il est activé.",
"bluetooth-rssi-polling-interval-description": "Configurer la fréquence de mise à jour de la force du signal pour les appareils connectés.",
"bluetooth-rssi-polling-interval-label": "Intervalle d'interrogation",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "La commande à exécuter lorsque le bouton est cliqué.",
"shortcuts-custom-button-enable-on-state-logic-description": "Active une deuxième icône et un état 'chaud' basés sur une commande de vérification.",
"shortcuts-custom-button-enable-on-state-logic-label": "Activer la logique d'état activé",
"shortcuts-custom-button-general-tooltip-text-description": "Description générale de l'info-bulle du bouton.",
"shortcuts-custom-button-general-tooltip-text-label": "Texte de l'info-bulle générale",
"shortcuts-custom-button-icon-description": "Sélectionnez une icône de la bibliothèque.",
"shortcuts-custom-button-on-clicked-label": "Commande de clic gauche",
"shortcuts-custom-button-on-middle-clicked-label": "Commande de clic central",
"shortcuts-custom-button-on-right-clicked-label": "Commande de clic droit",
"shortcuts-custom-button-on-middle-clicked-description": "Commande à exécuter lors d'un clic central sur le bouton.",
"shortcuts-custom-button-on-state-command-description": "Commande à exécuter pour vérifier si le bouton doit être dans l'état 'activé'. Retourne 0 pour activé, non-zéro pour désactivé.",
"shortcuts-custom-button-on-state-command-label": "Commande de vérification de l'état activé",
"shortcuts-custom-button-on-state-icon-description": "L'icône du bouton lorsqu'il est dans l'état 'activé'.",
@@ -943,6 +973,7 @@
"clock-style-label": "Style d'horloge",
"clock-style-minimal": "Minimal",
"clock-width-description": "Largeur du widget horloge en pixels.",
"cpu-intensive-note": "Les widgets marqués d'un ! utilisent plus de CPU et devraient être activés avec prudence.",
"edit-mode-button-label": "Entrer en mode édition",
"edit-mode-controls-explanation": "Clic gauche et glisser-déposer : Déplacer ou redimensionner le widget.\nClic droit : Ouvrir les options du menu contextuel.",
"edit-mode-description": "Activer le mode édition pour déplacer et repositionner les widgets du bureau. Une fois activé, les widgets affichent un contour de glissement et peuvent être repositionnés.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "Afficher les boutons",
"media-player-show-visualizer-description": "Afficher la superposition de l'visualiseur audio.",
"media-player-visualizer-type-description": "Choisissez un type de visualisation pour l'arrière-plan du lecteur multimédia de bureau.",
"overview-enabled-description": "Afficher les widgets du bureau lorsque l'aperçu du compositeur est ouvert.",
"overview-enabled-label": "Afficher dans l'aperçu",
"system-stat-layout-bottom": "Bas",
"system-stat-layout-description": "Choisissez comment la légende est affichée par rapport au graphique.",
"system-stat-layout-label": "Disposition",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "Afficher le conteneur d'arrière-plan pour le widget météo."
},
"display": {
"monitors-backlight-device-auto-option": "Par défaut",
"monitors-backlight-device-description": "Sélectionnez un appareil de rétroéclairage pour cette sortie.",
"monitors-backlight-device-label": "Appareil de Rétroéclairage",
"monitors-brightness-step-description": "Ajustez l'incrément pour les changements de luminosité (molette de la souris et raccourcis clavier).",
"monitors-brightness-step-label": "Incrément de luminosité",
"monitors-brightness-unavailable-ddc-disabled": "Contrôle de la luminosité indisponible. Activez \"Prise en charge de la luminosité externe\" pour contrôler la luminosité de cet écran.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "Imposer une luminosité minimale (1%)",
"monitors-external-brightness-description": "Activer le support DDCUtil pour contrôler la luminosité des écrans externes via le protocole DDC/CI.",
"monitors-external-brightness-label": "Prise en charge de la luminosité externe",
"monitors-global-brightness-description": "Ajuster la luminosité de tous les moniteurs en même temps.",
"monitors-global-brightness-label": "Tous les moniteurs",
"monitors-title": "Paramètres par moniteur",
"night-light-auto-schedule-description": "Basé sur l'heure du coucher et du lever du soleil à <i>{location}</i> — recommandé.",
"night-light-auto-schedule-label": "Planification automatique",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "Exclusif",
"appearance-floating-distance-description": "Ajustez la distance de flottaison par rapport au bord de l'écran.",
"appearance-floating-distance-label": "Distance de flottaison du dock",
"appearance-frame-indicator-description": "Afficher un petit indicateur sur le cadre lorsque le dock est masqué.",
"appearance-frame-indicator-label": "Indicateur de dock encadré",
"appearance-group-apps-description": "Regrouper plusieurs fenêtres de la même app en une seule entrée du Dock.",
"appearance-group-apps-label": "Regrouper les mêmes applications",
"appearance-group-click-action-cycle": "Basculer entre les fenêtres",
"appearance-group-click-action-description": "Choisissez ce que fait le clic gauche pour les applications groupées.",
"appearance-group-click-action-label": "Action au clic d'application groupée",
"appearance-group-click-action-list": "Ouvrir la liste des fenêtres",
"appearance-group-context-menu-mode-description": "Choisissez comment le menu contextuel se comporte pour les applications groupées.",
"appearance-group-context-menu-mode-extended": "Étendu",
"appearance-group-context-menu-mode-label": "Mode de menu d'applications groupé",
"appearance-group-context-menu-mode-list": "Liste des fenêtres",
"appearance-group-indicator-style-description": "Choisissez comment les indicateurs d'exécution groupés affichent l'état de la fenêtre active.",
"appearance-group-indicator-style-dots": "Points",
"appearance-group-indicator-style-label": "Style d'indicateur groupé",
"appearance-group-indicator-style-number": "Nombre",
"appearance-hide-show-speed-description": "Ajustez la vitesse de l'animation d'affichage/masquage du dock.",
"appearance-hide-show-speed-label": "Vitesse d'affichage/masquage",
"appearance-icon-size-description": "Ajuster la taille globale du dock.",
"appearance-icon-size-label": "Taille du dock",
"appearance-inactive-indicators-description": "Afficher les pastilles d'indicateur pour toutes les applications, pas seulement celle qui est active.",
"appearance-inactive-indicators-label": "Indicateurs de fonctionnement",
"appearance-launcher-position-description": "Choisissez où l'icône du lanceur apparaît dans le dock.",
"appearance-launcher-position-end": "Fin",
"appearance-launcher-position-label": "Position du lanceur",
"appearance-launcher-position-start": "Démarrer",
"appearance-pinned-static-description": "Toujours pousser les icônes d'applications épinglées vers la gauche dans un ordre statique.",
"appearance-pinned-static-label": "Applications épinglées statiques",
"appearance-position-description": "Choisissez l'emplacement du Dock à l'écran.",
"appearance-position-label": "Position",
"appearance-show-launcher-icon-description": "Afficher l'icône du lanceur d'applications dans le dock.",
"appearance-show-launcher-icon-label": "Afficher le Lanceur d'applications",
"appearance-sit-on-frame-description": "Aligner le dock à l'intérieur de la bordure du cadre au lieu qu'il se superpose.",
"appearance-sit-on-frame-label": "Le dock est sur le cadre",
"appearance-type-description": "Choisissez entre une barre flottante en forme de pilule ou une barre statique attachée au bord.",
"appearance-type-floating": "Flottant",
"appearance-type-label": "Style du dock",
"appearance-type-static": "Statique",
"enabled-description": "Afficher ou masquer complètement le dock.",
"enabled-label": "Activer le dock",
"monitors-desc": "Afficher le dock sur des écrans spécifiques. Par défaut, il s'affiche sur tous les écrans si aucun n'est sélectionné.",
@@ -1051,13 +1117,12 @@
"fonts-default-scale-label": "Taille de police par défaut",
"fonts-default-search-placeholder": "Rechercher des polices...",
"fonts-desc": "Choisissez les polices utilisées dans toute l'interface.",
"fonts-monospace-description": "Police à chasse fixe utilisée pour l'affichage des chiffres et des statistiques.",
"fonts-monospace-label": "Police à chasse fixe",
"fonts-monospace-placeholder": "Sélectionner la police à chasse fixe...",
"fonts-monospace-scale-description": "Augmenter ou diminuer la taille du texte à chasse fixe.",
"fonts-monospace-scale-label": "Taille de police à chasse fixe",
"fonts-monospace-search-placeholder": "Rechercher des polices à chasse fixe...",
"fonts-reset-scaling": "Réinitialiser l'échelle",
"fonts-monospace-description": "Police monospace utilisée pour l'affichage des chiffres et des statistiques.",
"fonts-monospace-label": "Police monospace",
"fonts-monospace-placeholder": "Sélectionner la police monospace...",
"fonts-monospace-scale-description": "Augmenter ou diminuer la taille du texte monospace.",
"fonts-monospace-scale-label": "Taille de police monospace",
"fonts-monospace-search-placeholder": "Rechercher des polices monospace...",
"fonts-title": "Polices",
"keybinds-conflict-description": "La combinaison de touches est déjà attribuée à {action}.",
"keybinds-conflict-title": "Conflit de raccourcis clavier",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "Sélectionner une image d'avatar",
"profile-title": "Profil",
"profile-tooltip": "Photo de profil",
"reverse-scrolling-description": "Inverser le sens de défilement interprété.",
"reverse-scrolling-label": "Défilement inversé",
"screen-corners-desc": "Personnalisez l'arrondi des coins de l'écran et les effets visuels.",
"screen-corners-radius-description": "Ajustez l'arrondi des coins de l'écran.",
"screen-corners-radius-label": "Rayon des coins de l'écran",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "Fond d'écran changé",
"wallpaper-changed-placeholder": "ex : notify-send \"Fond d'écran\" \"Changé\""
},
"idle": {
"custom-add": "Ajouter une commande",
"custom-description": "Exécute une commande shell après une période d'inactivité.",
"custom-entry-command": "Commande",
"custom-entry-delete": "Supprimer",
"custom-entry-timeout": "Temps d'inactivité",
"custom-label": "Commandes d'Inactivité Personnalisées",
"enable-description": "Éteindre l'écran, verrouiller ou suspendre automatiquement après une période d'inactivité.",
"enable-label": "Activer la gestion de l'inactivité",
"fade-duration-description": "Secondes pour l'animation de fondu au noir avant que chaque action ne se déclenche. Tout mouvement de souris annule le fondu.",
"fade-duration-label": "Durée du fondu",
"lock-description": "Secondes d'inactivité avant l'activation de l'écran de verrouillage.",
"lock-label": "Verrouiller l'écran",
"screen-off-description": "Secondes d'inactivité avant que les moniteurs ne s'éteignent.",
"screen-off-label": "Éteindre l'écran",
"status-description": "Temps d'inactivité tel que rapporté par le Compositor.",
"status-label": "Temps d'Inactivité",
"suspend-description": "Secondes d'inactivité avant que le système ne se suspende.",
"tab-behavior": "Comportement",
"tab-custom": "Personnalisé",
"timeouts-description": "Réglez sur 0 pour désactiver une étape. Les délais d'attente sont mis en pause tant que Keep Awake est actif.",
"timeouts-label": "Délais d'Expiration",
"unavailable": "La surveillance native de l'inactivité n'est pas disponible sur ce Compositor."
},
"indicator": {
"default-value": "Par défaut : {value}",
"system-default": "Par défaut du système"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "Applique une superposition de teinte au fond d'écran de l'écran de verrouillage.",
"lock-screen-tint-strength-label": "Force de la teinte de l'écran de verrouillage",
"monitors-desc": "Afficher l'écran de verrouillage sur des moniteurs spécifiques. Par défaut, tous sont utilisés si aucun n'est choisi.",
"password-chars-description": "De jolies icônes utilisées pour masquer votre mot de passe.",
"password-chars-label": "Icônes de mot de passe aléatoires",
"show-hibernate-description": "Afficher loption 'hiberner' dans les commandes d'alimentation.",
"show-hibernate-label": "Afficher lhibernation",
"show-session-buttons-description": "Autoriser l'accès aux paramètres d'alimentation depuis l'écran de verrouillage.",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "Urgence faible",
"duration-normal-urgency-description": "Durée de visibilité des notifications de priorité normale.",
"duration-normal-urgency-label": "Urgence normale",
"duration-reset": "Réinitialiser la durée du délai d'attente",
"duration-respect-expire-description": "Utiliser le délai d'expiration défini dans la notification.",
"duration-respect-expire-label": "Respecter le délai d'expiration",
"duration-title": "Durée des notifications",
"history-clear-dismiss-description": "Effacer la notification de l'historique lorsqu'elle est ignorée.",
"history-clear-dismiss-label": "Effacer si ignorée",
"history-critical-urgency-description": "Enregistrer les notifications de priorité critique dans l'historique.",
"history-critical-urgency-label": "Enregistrer l'urgence critique dans l'historique",
"history-desc": "Contrôler quelles notifications sont enregistrées dans l'historique en fonction de leur niveau d'urgence.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "Activer ou désactiver le démon de notifications, nécessite un redémarrage de Noctalia shell.",
"settings-enabled-label": "Activer les notifications",
"settings-location-description": "Où les notifications apparaissent à l'écran.",
"settings-markdown-description": "Afficher le contenu des notifications en utilisant le formatage Markdown.",
"settings-markdown-label": "Activer Markdown",
"sounds-desc": "Configurer les effets sonores et le volume des notifications.",
"sounds-enabled-description": "Activer les effets sonores pour les notifications entrantes.",
"sounds-enabled-label": "Activer les sons de notification",
@@ -1361,23 +1457,23 @@
},
"plugins": {
"auto-update": "Mettre à jour les plugins automatiquement",
"auto-update-description": "Mettre à jour automatiquement tous les plugins au démarrage de la shell.",
"auto-update-description": "Mettre à jour automatiquement tous les plugins au démarrage du shell.",
"available-description": "Parcourir et installer des plugins à partir des sources configurées.",
"available-label": "Plugins disponibles",
"available-no-plugins-description": "Vérifiez les sources de vos plugins ou actualisez la liste.",
"available-no-plugins-label": "Aucun plugin disponible",
"check-for-updates": "Rechercher des mises à jour",
"checking-for-updates": "Vérification des mises à jour...",
"checking-for-updates": "Recherche de mises à jour...",
"collision-already-installed": "Ce plugin est déjà installé",
"collision-custom-version-exists": "Une version personnalisée de \"{source}\" est déjà installée",
"collision-official-version-exists": "La version officielle de cette extension est déjà installée",
"collision-official-version-exists": "La version officielle de ce plugin est déjà installée",
"development-disable": "Désactiver le mode développeur pour ce plugin",
"development-enable": "Activer le mode de développement pour ce plugin.",
"filter-downloaded": "Téléchargé",
"filter-not-downloaded": "Non téléchargé",
"filter-tags-description": "Filtrer les extensions par catégorie ou état de téléchargement.",
"filter-tags-description": "Filtrer les plugins par catégorie ou état de téléchargement.",
"filter-tags-label": "Mots-clés",
"hot-reload-description": "Recharger automatiquement les plugins lorsque leurs fichiers sont modifiés. Utile pour le développement de plugins.",
"hot-reload-description": "Recharger automatiquement les plugins lorsque leurs fichiers sont modifiéss. Utile pour le développement de plugins.",
"hot-reload-label": "Rechargement à chaud (mode développement)",
"hot-reloaded": "Plugin rechargé : {name}",
"install-error": "Échec de l'installation : {error}",
@@ -1385,14 +1481,14 @@
"install-success": "Installation de {plugin} réussie",
"installed-description": "Gérer et configurer tous les plugins installés localement.",
"installed-label": "Plugins installés",
"installed-no-plugins-description": "Installez les extensions depuis la section \"Disponible\".",
"installed-no-plugins-description": "Installez les plugins depuis la section \"Disponible\".",
"installed-no-plugins-label": "Aucun plugin installé",
"installing": "Installation de {plugin}...",
"open-plugin-page": "Ouvrir la page du plugin",
"open-plugins-tab": "Ouvrir les paramètres des plugins",
"plugin-settings-title": "Paramètres de {plugin}",
"refresh-refreshing": "Actualisation de la liste des plugins...",
"refresh-tooltip": "Actualiser les extensions disponibles",
"refresh-tooltip": "Actualiser les plugins disponibles",
"settings-error-not-loaded": "Plugin non chargé",
"settings-saved": "Paramètres du plugin enregistrés",
"settings-tooltip": "Paramètres du plugin",
@@ -1401,24 +1497,24 @@
"sources-add-dialog-description": "Ajouter un dépôt GitHub comme source de plugin.",
"sources-add-dialog-error": "Échec de l'ajout de la source du plugin",
"sources-add-dialog-name": "Nom du dépôt",
"sources-add-dialog-name-placeholder": "Mes extensions personnalisées",
"sources-add-dialog-name-placeholder": "Mes plugins personnalisés",
"sources-add-dialog-success": "Source du plugin ajoutée avec succès",
"sources-add-dialog-title": "Ajouter la source du plugin",
"sources-add-dialog-url": "URL du dépôt",
"sources-description": "Gérer les dépôts d'extensions.",
"sources-description": "Gérer les dépôts de plugins.",
"sources-placeholder": "Mon dépôt cool",
"sources-remove-tooltip": "Supprimer la source du plugin",
"title": "Modules d'extension",
"title": "Plugins",
"translations-reloaded": "Traductions rechargées : {name}",
"uninstall-dialog-description": "Êtes-vous sûr de vouloir désinstaller {plugin} ? Cette action supprimera toutes les données du plugin.",
"uninstall-dialog-title": "Désinstaller le plugin",
"uninstall-error": "Échec de la désinstallation : {error}",
"uninstall-success": "{plugin} a été désinstallé avec succès",
"uninstalling": "Désinstallation de {plugin}...",
"update-all": "Mettre à jour tout ({count})",
"update-all": "Tout mettre à jour ({count})",
"update-all-success": "Tous les plugins ont été mis à jour avec succès",
"update-available": "Nouvelle mise à jour de plugin disponible",
"update-available-plural": "Nouvelles mises à jour d'extensions disponibles ({count})",
"update-available-plural": "Mises à jour de plugins disponibles ({count})",
"update-error": "Échec de la mise à jour du plugin : {plugin} : {error}",
"update-pending": "v{current} → v{new} (nécessite Noctalia v{required})",
"update-success": "Mise à jour du plugin {plugin} vers la version {version}",
@@ -1493,16 +1589,13 @@
"box-border-label": "Contour du conteneur",
"box-border-radius-description": "Ajuste de l'arrondi des coins des principales sections de la mise en page, telles que les barres latérales, les cartes et les panneaux de contenu.",
"box-border-radius-label": "Rayon du conteneur",
"box-border-radius-reset": "Réinitialiser le rayon du conteneur",
"control-border-radius-description": "Contrôle la courbure des éléments interactifs, y compris les boutons, les bascules et les champs de texte.",
"control-border-radius-label": "Rayon d'entrée",
"control-border-radius-reset": "Réinitialiser le rayon d'entrée",
"desc": "Personnaliser l'apparence, l'ergonomie et le comportement de l'interface.",
"dim-desktop-description": "Atténuer le bureau lorsque des panneaux ou des menus sont ouverts.",
"dim-desktop-label": "Dim bureau",
"dimmer-opacity-description": "Définir le niveau d'opacité pour l'assombrissement du bureau.",
"dimmer-opacity-label": "Opacité du bureau atténué",
"dimmer-opacity-reset": "Réinitialiser l'opacité du bureau atténué",
"panel-background-opacity-description": "Définir l'opacité de l'arrière-plan pour tous les panneaux (barre, lanceur, paramètres, etc.).",
"panel-background-opacity-label": "Opacité de fond des panneaux",
"panels-attached-to-bar-description": "Les panneaux se verrouillent sur la barre et les bords de l'écran, créant un aspect homogène avec d'élégants coins inversés.",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "Garder les panneaux et la barre en haut",
"scaling-description": "Modifie la taille de l'interface utilisateur générale, à l'exception de la barre.",
"scaling-label": "Mise à l'échelle de l'interface",
"scaling-reset-scaling": "Réinitialiser l'échelle de l'interface",
"settings-panel-header": "Panneau des Paramètres",
"settings-panel-mode-description": "Choisir la disposition des paramètres (peut nécessiter une réouverture).",
"settings-panel-mode-label": "Mode du panneau des paramètres",
"settings-panel-sidebar-card-style-description": "Enveloppe la barre latérale des paramètres dans un arrière-plan rempli avec des coins arrondis.",
"settings-panel-sidebar-card-style-label": "Style de Carte de la Barre Latérale",
"shadows-description": "Active les ombres portées sous les barres et les panneaux.",
"shadows-direction-description": "Choisissez où l'ombre est projetée.",
"shadows-direction-label": "Direction de lombre",
@@ -1762,6 +1857,7 @@
"collapse": "Réduire la barre latérale",
"copy-address": "Copier l'adresse",
"delete-notification": "Supprimer la notification",
"dismiss-notification": "Ignorer la notification",
"do-not-disturb-enabled": "Ne pas déranger",
"expand": "Développer la barre latérale",
"forget-network": "Oublier le réseau",
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+108 -12
View File
@@ -8,6 +8,7 @@
"disable-dnd": "おやすみモードを無効化",
"disable-wifi": "Wi-Fi を無効化",
"disconnect-vpn": "{name} から切断",
"dock-settings": "ドック設定",
"enable-bluetooth": "Bluetooth を有効化",
"enable-dnd": "おやすみモードを有効化",
"enable-wifi": "Wi-Fi を有効化",
@@ -64,6 +65,10 @@
"show-power-profile-description": "バッテリーパネルに電源プロファイルの選択項目を表示します。",
"show-power-profile-label": "電源プロファイルコントロールを表示"
},
"brightness": {
"apply-all-description": "スクロールホイール使用時に、すべてのモニターの輝度を変更します。",
"apply-all-label": "スクロールの変更をすべてのモニターに適用"
},
"clock": {
"clock-display-description": "以下のトークンを使用して時計の表示をカスタマイズします。12時間表記にするには AP トークンを含める必要があります。",
"clock-display-label": "時計の表示形式",
@@ -87,7 +92,7 @@
"browse-file": "ファイルを参照",
"browse-library": "ライブラリを参照",
"color-selection-description": "アイコンに適用するテーマの色を選択します。",
"enable-colorization-description": "コントロールセンターのアイコンに、テーマカラーを適用します。",
"enable-colorization-description": "アイコンの色付けを有効にし、テーマの色を適用します。",
"icon-description": "ライブラリまたはカスタムファイルからアイコンを選択します。",
"select-custom-icon": "カスタムアイコンを選択",
"use-distro-logo-description": "カスタムアイコンの代わりに、ディストリビューションのロゴを使用します。",
@@ -97,12 +102,15 @@
"collapse-condition-description": "出力テキストがこの値と一致する場合、ボタンを折りたたみます。",
"collapse-condition-label": "折りたたみ条件",
"color-selection-description": "テーマカラーをアイコンとテキストに適用します。",
"default-tooltip": "カスタムボタン、設定で構成",
"display-command-output-description": "定期的に実行するコマンドを入力します。出力の最初の行がテキストとして表示されます。",
"display-command-output-label": "コマンド出力を表示",
"display-command-output-stream-description": "継続的に実行するコマンドを入力します。",
"dynamic-text": "動的テキスト",
"enable-colorization-description": "カスタムボタンのアイコンとテキストのカラーリングを有効にし、テーマカラーを適用します。",
"enable-colorization-label": "カラーリングを有効化",
"general-tooltip-text-description": "ボタンのツールチップに表示するカスタムテキスト。",
"general-tooltip-text-label": "カスタムツールチップテキスト",
"hide-mode-always-expanded": "常に展開",
"hide-mode-description": "コマンドの出力がない場合のウィジェットの表示を制御します。",
"hide-mode-expand-with-output": "出力がある時のみ展開",
@@ -128,16 +136,22 @@
"right-click-description": "ボタンを右クリックした際に実行するコマンド。",
"right-click-label": "右クリック",
"right-click-update-text": "右クリック時に表示テキストを更新",
"show-exec-tooltip-description": "コマンドの詳細を含むツールチップを表示 (左/右/中央クリック、ホイール)。",
"show-exec-tooltip-label": "コマンドのツールチップを表示",
"show-icon-description": "ウィジェットのアイコンの表示を切り替えます。",
"show-icon-label": "アイコンを表示",
"show-text-tooltip-description": "テキストコマンドの出力を含むツールチップを表示します。",
"show-text-tooltip-label": "動的なテキストツールチップを表示",
"text-stream-description": "コマンドからストリーミングされた行を、ボタン上のテキストとして表示します。",
"text-stream-label": "ストリーム",
"wheel-description": "スクロールホイール操作時に実行するコマンド。<br>コマンド内で $delta を使用して回転量を取得できます。",
"wheel-down": "下にスクロール",
"wheel-down-description": "スクロールホイールを下方向に回転させた際に実行するコマンド。",
"wheel-down-label": "ホイール下回転時のコマンド",
"wheel-label": "スクロールホイール",
"wheel-mode-separate-description": "ホイールの上回転と下回転で別々のコマンドを有効にします。",
"wheel-mode-separate-label": "ホイール操作を分離",
"wheel-up": "上にスクロール",
"wheel-up-description": "スクロールホイールを上方向に回転させた際に実行するコマンド。",
"wheel-up-label": "ホイール上回転時のコマンド",
"wheel-update-text": "スクロール時に表示テキストを更新"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "アクション",
"active": "アクティブ",
"add": "追加",
"appearance": "外観",
"apply": "適用",
@@ -363,6 +378,7 @@
"available": "利用可能",
"back": "戻る",
"battery": "バッテリー",
"behavior": "動作",
"bluetooth": "Bluetooth",
"brightness": "明るさ",
"browse": "閲覧",
@@ -395,6 +411,7 @@
"disconnected": "切断済み",
"disconnecting": "切断中...",
"display-mode": "表示モード",
"documentation": "ドキュメント",
"download": "ダウンロード",
"duration": "期間",
"dysfunctional": "機能不全",
@@ -458,6 +475,7 @@
"primary": "プライマリ",
"random": "ランダム",
"reboot": "再起動",
"reboot-to-uefi": "UEFIで再起動",
"record": "録画を開始",
"refresh": "更新",
"required": "(必須)",
@@ -470,6 +488,8 @@
"scanning": "スキャン中...",
"screen-corners": "画面の隅",
"search": "検索",
"second": "{count} 秒",
"second-plural": "{count} 秒",
"secondary": "セカンダリー",
"security": "セキュリティ",
"select": "選択",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "クリックで折りたたむ",
"click-to-expand": "クリックして展開",
"description": "通知が届くとここに表示されます。",
"no-notifications": "通知なし"
@@ -751,6 +772,9 @@
"visualizer-type-description": "メディア再生の可視化タイプを選択してください。",
"visualizer-type-label": "視覚化の種類",
"volumes-desc": "音量コントロールとレベルを調整します。",
"volumes-feedback-sound-file-description": "音量変更時に再生されるサウンドファイルのパス。",
"volumes-feedback-sound-file-label": "音量フィードバックのサウンドファイル",
"volumes-feedback-sound-file-select-title": "音量フィードバックのサウンドファイルを選択",
"volumes-input-volume-description": "マイクの音量レベル。",
"volumes-mute-input-description": "デフォルトの音声入力(マイク)をミュートします。",
"volumes-mute-input-label": "入力(マイク)をミュート",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "カプセルの色",
"appearance-capsule-opacity-description": "カプセル表示時のウィジェット背景の不透明度を設定します。",
"appearance-capsule-opacity-label": "カプセルの不透明度",
"appearance-content-padding-description": "バーの端とウィジェット間のパディングを調整します。",
"appearance-content-padding-label": "コンテンツパディング",
"appearance-density-description": "バーの余白を調整し、コンパクトまたはゆったりとした外観にします。",
"appearance-density-label": "バーの密度",
"appearance-desc": "バーの外観や位置をカスタマイズします。",
"appearance-display-mode-description": "バーの表示タイミングを選択してください。",
"appearance-floating-description": "バーを浮かせて、カプセル型で表示します。",
"appearance-floating-label": "フローティングバー",
"appearance-font-scale-description": "バーに表示されるテキストのフォントサイズスケールを調整します。",
"appearance-font-scale-label": "フォントスケール",
"appearance-frame-radius": "内側の半径",
"appearance-frame-settings-description": "フレームの太さと内側の半径を調整します",
"appearance-frame-settings-label": "フレーム設定",
@@ -798,12 +826,16 @@
"appearance-position-label": "バーの位置",
"appearance-show-capsule-description": "ウィジェットの背景を表示します。",
"appearance-show-capsule-label": "カプセルを表示",
"appearance-show-on-workspace-switch-description": "ワークスペースが変更されたときに、Barを自動的に短時間表示します。",
"appearance-show-on-workspace-switch-label": "ワークスペース切り替え時にバーを表示",
"appearance-show-outline-description": "すべてのウィジェットの周囲に枠線を表示します。",
"appearance-show-outline-label": "ウィジェットの枠線を表示",
"appearance-type-description": "バーのスタイルを選択:シンプル、フローティング、またはフレーム。",
"appearance-type-label": "バーの種類",
"appearance-use-separate-opacity-description": "バーの背景に別の不透明度の値を使用できるようにする。",
"appearance-use-separate-opacity-label": "バーの不透明度を個別に設定",
"appearance-widget-spacing-description": "バー内の各ウィジェット間の間隔を調整します。",
"appearance-widget-spacing-label": "ウィジェットの間隔",
"monitor-configure-widgets": "ウィジェットを設定",
"monitor-override-settings": "グローバル設定を上書き",
"monitor-override-settings-description": "このモニターにカスタム設定を使用する。",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "認証が必要です",
"bluetooth-devices-unnamed": "名前のないデバイスは表示されません。",
"bluetooth-discoverable": "このデバイスは、この設定タブが開いている間、<b> {hostName} </b> として検出可能です。",
"bluetooth-discoverable": "このデバイスは、この設定タブが開いている間、<b>{hostName}</b> として検出可能です。",
"bluetooth-rssi-polling-description": "bluetoothctl を介して接続されたデバイスの RSSI を定期的にサンプリングします。すべてのデバイスで利用できるとは限りません。有効にすると最小限のリソースを使用します。",
"bluetooth-rssi-polling-interval-description": "接続されたデバイスの信号強度を更新する頻度を設定します。",
"bluetooth-rssi-polling-interval-label": "ポーリング間隔",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "ボタンをクリックした際に実行するコマンド。",
"shortcuts-custom-button-enable-on-state-logic-description": "チェックコマンドに基づいて、別のアイコンや「ON」状態を有効にします。",
"shortcuts-custom-button-enable-on-state-logic-label": "ON 状態の判定ロジックを有効化",
"shortcuts-custom-button-general-tooltip-text-description": "ボタンのツールチップに表示する説明文。",
"shortcuts-custom-button-general-tooltip-text-label": "ツールチップのテキスト",
"shortcuts-custom-button-icon-description": "ライブラリからアイコンを選択してください。",
"shortcuts-custom-button-on-clicked-label": "左クリック時のコマンド",
"shortcuts-custom-button-on-middle-clicked-label": "中クリック時のコマンド",
"shortcuts-custom-button-on-right-clicked-label": "右クリック時のコマンド",
"shortcuts-custom-button-on-middle-clicked-description": "ボタンが中央クリックされたときに実行するコマンド",
"shortcuts-custom-button-on-state-command-description": "ボタンを「ON」状態にするか判定するコマンド。終了コード 0 でON、それ以外でOFFとなります。",
"shortcuts-custom-button-on-state-command-label": "ON 状態の判定コマンド",
"shortcuts-custom-button-on-state-icon-description": "「ON」状態のときに表示するアイコン。",
@@ -943,6 +973,7 @@
"clock-style-label": "時計のスタイル",
"clock-style-minimal": "ミニマル",
"clock-width-description": "時計ウィジェットの幅をピクセル単位で設定します。",
"cpu-intensive-note": "! が付いているWidgetはより多くのCPUを使用するため、注意して有効にしてください。",
"edit-mode-button-label": "編集モードに入る",
"edit-mode-controls-explanation": "左クリックでドラッグ:ウィジェットの移動またはサイズ変更。\n右クリック:コンテキストメニューオプションを開く。",
"edit-mode-description": "編集モードを有効にして、デスクトップウィジェットの移動や配置変更を行います。有効にするとウィジェットに枠線が表示され、位置を変更できるようになります。",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "ボタンを表示",
"media-player-show-visualizer-description": "オーディオビジュアライザーのオーバーレイを表示する。",
"media-player-visualizer-type-description": "デスクトップメディアプレーヤーの背景に使用するビジュアライザーの種類を選択します。",
"overview-enabled-description": "コンポジターの概要が開いている間、デスクトップウィジェットを表示する。",
"overview-enabled-label": "概要に表示",
"system-stat-layout-bottom": "下",
"system-stat-layout-description": "凡例がグラフに対してどのように表示されるかを選択します。",
"system-stat-layout-label": "レイアウト",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "天気ウィジェットの背景コンテナを表示します。"
},
"display": {
"monitors-backlight-device-auto-option": "デフォルト",
"monitors-backlight-device-description": "この出力のバックライトデバイスを選択してください。",
"monitors-backlight-device-label": "バックライトデバイス",
"monitors-brightness-step-description": "明るさの変化量(スクロールホイールやショートカットキー)を調整します。",
"monitors-brightness-step-label": "明るさの調整ステップ",
"monitors-brightness-unavailable-ddc-disabled": "明るさ調整を利用できません。このディスプレイを操作するには「外部ディスプレイの明るさ制御」を有効にしてください。",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "最低輝度を確保 (1%)",
"monitors-external-brightness-description": "DDC/CI プロトコルを使用して外部ディスプレイの明るさを制御するため、DDCUtil を有効にします。",
"monitors-external-brightness-label": "外部ディスプレイの明るさ制御",
"monitors-global-brightness-description": "すべてのモニターの明るさを一度に調整します。",
"monitors-global-brightness-label": "すべてのモニター",
"monitors-title": "ディスプレイごとの設定",
"night-light-auto-schedule-description": "<i>{location}</i> の日の出・日の入り時刻に合わせます(推奨)。",
"night-light-auto-schedule-label": "自動スケジュール",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "領域を確保",
"appearance-floating-distance-description": "画面端からドックまでの距離を設定します。",
"appearance-floating-distance-label": "画面端からの距離",
"appearance-frame-indicator-description": "Dockが非表示のとき、フレームに小さなインジケーターを表示する。",
"appearance-frame-indicator-label": "フレーム付きドックインジケーター",
"appearance-group-apps-description": "同じアプリの複数のウィンドウを1つのDockエントリにグループ化します。",
"appearance-group-apps-label": "同じアプリをグループ化",
"appearance-group-click-action-cycle": "ウィンドウを切り替える",
"appearance-group-click-action-description": "グループ化されたアプリの左クリック動作を選択します。",
"appearance-group-click-action-label": "グループ化されたアプリのクリック時の動作",
"appearance-group-click-action-list": "ウィンドウリストを開く",
"appearance-group-context-menu-mode-description": "グループ化されたアプリのコンテキストメニューの動作を選択してください。",
"appearance-group-context-menu-mode-extended": "拡張",
"appearance-group-context-menu-mode-label": "グループ化されたアプリメニューモード",
"appearance-group-context-menu-mode-list": "ウィンドウリスト",
"appearance-group-indicator-style-description": "グループ化された実行中のインジケーターが、フォーカスされたウィンドウの状態をどのように表示するかを選択します。",
"appearance-group-indicator-style-dots": "ドット",
"appearance-group-indicator-style-label": "グループ化されたインジケータースタイル",
"appearance-group-indicator-style-number": "数値",
"appearance-hide-show-speed-description": "ドックの表示・非表示アニメーションの速度を調整します。",
"appearance-hide-show-speed-label": "表示・非表示の速度",
"appearance-icon-size-description": "ドック全体のサイズを調整します。",
"appearance-icon-size-label": "ドックのサイズ",
"appearance-inactive-indicators-description": "現在アクティブなアプリだけでなく、すべてのアプリにインジケーターを表示します。",
"appearance-inactive-indicators-label": "実行インジケーター",
"appearance-launcher-position-description": "ランチャーアイコンをドックのどこに表示するかを選択します。",
"appearance-launcher-position-end": "終了",
"appearance-launcher-position-label": "ランチャーの位置",
"appearance-launcher-position-start": "開始",
"appearance-pinned-static-description": "ピン留めされたアプリアイコンを常に左側に寄せて固定します。",
"appearance-pinned-static-label": "ピン留めアプリの固定配置",
"appearance-position-description": "ドックを画面上のどこに表示するかを選択してください。",
"appearance-position-label": "位置",
"appearance-show-launcher-icon-description": "ドックにアプリケーションランチャーアイコンを表示する。",
"appearance-show-launcher-icon-label": "アプリランチャーを表示",
"appearance-sit-on-frame-description": "ドックをフレームの境界の内側に配置し、上部に重ならないようにします。",
"appearance-sit-on-frame-label": "ドックはフレームに配置",
"appearance-type-description": "浮動するピル型、または端に固定された静的バーのどちらかを選択してください。",
"appearance-type-floating": "フローティング",
"appearance-type-label": "ドックスタイル",
"appearance-type-static": "静的",
"enabled-description": "ドックを完全に表示または非表示にします。",
"enabled-label": "ドックの有効化",
"monitors-desc": "ドックを表示するディスプレイを選択します。未選択の場合は全てに表示されます。",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "等幅テキストのサイズを拡大・縮小します。",
"fonts-monospace-scale-label": "等幅フォントのサイズ",
"fonts-monospace-search-placeholder": "等幅フォントを検索...",
"fonts-reset-scaling": "サイズ設定をリセット",
"fonts-title": "フォント",
"keybinds-conflict-description": "このキーの組み合わせはすでに{action}に割り当てられています。",
"keybinds-conflict-title": "キーバインドの競合",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "アバター画像を選択",
"profile-title": "プロフィール",
"profile-tooltip": "プロフィール写真",
"reverse-scrolling-description": "解釈されたスクロール方向を反転。",
"reverse-scrolling-label": "スクロール方向を反転",
"screen-corners-desc": "画面の角の丸みや視覚効果をカスタマイズします。",
"screen-corners-radius-description": "画面の角の丸みを調整します。",
"screen-corners-radius-label": "角の丸み",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "壁紙変更時",
"wallpaper-changed-placeholder": "例:notify-send \"Wallpaper\" \"Changed\""
},
"idle": {
"custom-add": "コマンドを追加",
"custom-description": "一定期間の非アクティブ状態の後、シェルコマンドを実行します。",
"custom-entry-command": "コマンド",
"custom-entry-delete": "削除",
"custom-entry-timeout": "非アクティブ時間",
"custom-label": "カスタムアイドルコマンド",
"enable-description": "一定時間操作がない場合、自動的に画面をオフにする、ロックする、またはサスペンドする。",
"enable-label": "アイドル管理を有効にする",
"fade-duration-description": "各アクションが実行される前の、画面が暗転するアニメーションの秒数。マウスを動かすとフェードはキャンセルされます。",
"fade-duration-label": "フェード時間",
"lock-description": "ロック画面がアクティブになるまでの非アクティブ秒数。",
"lock-label": "画面をロック",
"screen-off-description": "モニターがオフになるまでの非アクティブな秒数。",
"screen-off-label": "画面をオフにする",
"status-description": "Compositorが報告したアイドル時間。",
"status-label": "アイドル時間",
"suspend-description": "システムがサスペンドするまでの非アクティブな時間(秒)。",
"tab-behavior": "動作",
"tab-custom": "カスタム",
"timeouts-description": "ステージを無効にするには0に設定します。Keep Awakeがアクティブな間、タイムアウトは一時停止されます。",
"timeouts-label": "タイムアウト",
"unavailable": "このCompositorでは、ネイティブのアイドル監視は利用できません。"
},
"indicator": {
"default-value": "デフォルト:{value}",
"system-default": "システムのデフォルト"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "ロック画面の壁紙に色合いのオーバーレイを適用します。",
"lock-screen-tint-strength-label": "ロック画面の着色強度",
"monitors-desc": "ロック画面を特定のモニターに表示します。何も選択されていない場合、デフォルトですべてに表示されます。",
"password-chars-description": "パスワードを隠すためのかわいいアイコン。",
"password-chars-label": "ランダムなパスワードアイコン",
"show-hibernate-description": "電源操作に「ハイバネート(休止状態)」のオプションを表示します。",
"show-hibernate-label": "ハイバネートを表示",
"show-session-buttons-description": "ロック画面から電源操作を行えるようにします。",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "緊急度:低",
"duration-normal-urgency-description": "緊急度「通常」の通知が表示され続ける時間。",
"duration-normal-urgency-label": "緊急度:通常",
"duration-reset": "表示時間をリセット",
"duration-respect-expire-description": "通知自体に設定された有効期限(タイムアウト)を使用します。",
"duration-respect-expire-label": "通知指定の期限に従う",
"duration-title": "通知の表示時間",
"history-clear-dismiss-description": "通知を閉じるときに履歴から削除する。",
"history-clear-dismiss-label": "却下時にクリア",
"history-critical-urgency-description": "緊急優先度の通知を履歴に保存します。",
"history-critical-urgency-label": "緊急度:重大を履歴に保存",
"history-desc": "緊急度レベルに基づいて、履歴に保存する通知を制御します。",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "通知デーモンを有効化・無効化します(Noctalia shellの再起動が必要です)。",
"settings-enabled-label": "通知を有効化",
"settings-location-description": "画面上の通知の表示位置。",
"settings-markdown-description": "Markdown形式を使用して通知コンテンツを表示します。",
"settings-markdown-label": "Markdown を有効にする",
"sounds-desc": "通知音の効果と音量を設定します。",
"sounds-enabled-description": "通知受信時のの効果音を有効にします。",
"sounds-enabled-label": "通知音を有効化",
@@ -1493,16 +1589,13 @@
"box-border-label": "コンテナの輪郭",
"box-border-radius-description": "サイドバー、カード、コンテンツパネルなど、主要なレイアウト部分の角の丸みを調整します。",
"box-border-radius-label": "コンテナの角の丸み",
"box-border-radius-reset": "コンテナの角の丸みをリセット",
"control-border-radius-description": "ボタン、トグル、テキストフィールドなど、操作可能な要素の角の丸みを制御します。",
"control-border-radius-label": "入力要素の角の丸み",
"control-border-radius-reset": "入力要素の角の丸みをリセット",
"desc": "インターフェースの外観や操作感、挙動をカスタマイズします。",
"dim-desktop-description": "パネルやメニューが開いている間、デスクトップを暗くします。",
"dim-desktop-label": "デスクトップを暗くする",
"dimmer-opacity-description": "デスクトップを暗くした際の不透明度を設定します。",
"dimmer-opacity-label": "デスクトップを暗くした際の不透明度",
"dimmer-opacity-reset": "デスクトップを暗くした際の不透明度をリセット",
"panel-background-opacity-description": "すべてのパネル(バー、ランチャー、設定など)の背景の不透明度を設定します。",
"panel-background-opacity-label": "パネル背景の不透明度",
"panels-attached-to-bar-description": "パネルをバーや画面の端に固定します。スタイリッシュな逆アール(角の装飾)により、シームレスな外観にします。",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "パネルとバーを最前面に保持",
"scaling-description": "バーを除く、ユーザーインターフェース全体のサイズを変更します。",
"scaling-label": "インターフェースのスケール調整",
"scaling-reset-scaling": "インターフェースのスケールをリセット",
"settings-panel-header": "設定パネル",
"settings-panel-mode-description": "設定画面の表示形式を選択します (再起動が必要な場合があります)。",
"settings-panel-mode-label": "設定パネルの表示モード",
"settings-panel-sidebar-card-style-description": "設定サイドバーを、角が丸い塗りつぶされた背景で囲みます。",
"settings-panel-sidebar-card-style-label": "サイドバーのカードスタイル",
"shadows-description": "バーやパネルの下にドロップシャドウ(影)を表示します。",
"shadows-direction-description": "影を落とす場所を選択してください。",
"shadows-direction-label": "影の方向",
@@ -1762,6 +1857,7 @@
"collapse": "サイドバーを折りたたむ",
"copy-address": "アドレスをコピー",
"delete-notification": "通知を削除",
"dismiss-notification": "通知を閉じる",
"do-not-disturb-enabled": "おやすみモード",
"expand": "サイドバーを展開",
"forget-network": "ネットワーク設定を削除",
+111 -15
View File
@@ -8,6 +8,7 @@
"disable-dnd": "방해 금지 모드 끄기",
"disable-wifi": "Wi-Fi 비활성화",
"disconnect-vpn": "{name} 연결 해제",
"dock-settings": "독 설정",
"enable-bluetooth": "블루투스 활성화",
"enable-dnd": "방해 금지 모드 켜기",
"enable-wifi": "Wi-Fi 활성화",
@@ -64,6 +65,10 @@
"show-power-profile-description": "배터리 패널 내부에 전원 프로필 선택 항목을 표시합니다.",
"show-power-profile-label": "전원 프로필 제어 표시"
},
"brightness": {
"apply-all-description": "스크롤 휠을 사용할 때 모든 모니터의 밝기를 변경합니다.",
"apply-all-label": "스크롤 변경 사항을 모든 모니터에 적용"
},
"clock": {
"clock-display-description": "아래 목록에서 토큰을 추가하여 시계 표시를 사용자 지정하세요. 12시간 형식을 사용하려면 'AP' 토큰을 포함해야 합니다.",
"clock-display-label": "시계 표시",
@@ -87,7 +92,7 @@
"browse-file": "파일 찾아보기",
"browse-library": "라이브러리 찾아보기",
"color-selection-description": "아이콘에 테마 색상을 적용합니다.",
"enable-colorization-description": "제어 센터 아이콘 색상화를 활성화하 테마 색상을 적용합니다.",
"enable-colorization-description": "아이콘 색상화를 활성화하 테마 색상을 적용합니다.",
"icon-description": "라이브러리 또는 사용자 지정 파일에서 아이콘을 선택합니다.",
"select-custom-icon": "사용자 지정 아이콘 선택",
"use-distro-logo-description": "사용자 지정 아이콘 대신 배포판 로고를 사용합니다.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "출력 텍스트가 이 값과 일치하면 버튼이 접힙니다.",
"collapse-condition-label": "접히는 조건",
"color-selection-description": "아이콘과 텍스트에 테마 색상을 적용합니다.",
"default-tooltip": "사용자 지정 버튼, 설정에서 구성",
"display-command-output-description": "정기적인 간격으로 실행할 명령을 입력합니다. 출력의 첫 번째 줄이 텍스트로 표시됩니다.",
"display-command-output-label": "명령 출력 표시",
"display-command-output-stream-description": "지속적으로 실행할 명령을 입력합니다.",
"dynamic-text": "동적 텍스트",
"enable-colorization-description": "사용자 지정 버튼 아이콘과 텍스트의 색상화를 활성화하여 테마 색상을 적용합니다.",
"enable-colorization-label": "색상화 활성화",
"general-tooltip-text-description": "버튼의 툴팁에 표시할 사용자 지정 텍스트.",
"general-tooltip-text-label": "사용자 지정 도구 설명 텍스트",
"hide-mode-always-expanded": "항상 펼침",
"hide-mode-description": "명령에 출력이 없을 때 위젯의 가시성을 제어합니다.",
"hide-mode-expand-with-output": "출력이 있을 때 펼침",
@@ -128,16 +136,22 @@
"right-click-description": "버튼을 오른쪽 클릭했을 때 실행할 명령입니다.",
"right-click-label": "오른쪽 클릭",
"right-click-update-text": "오른쪽 클릭 시 표시된 텍스트 업데이트",
"show-exec-tooltip-description": "명령 세부 정보가 포함된 툴팁 표시 (왼쪽/오른쪽/가운데 클릭, 휠).",
"show-exec-tooltip-label": "명령어 도구 설명 표시",
"show-icon-description": "위젯 아이콘의 가시성을 전환합니다.",
"show-icon-label": "아이콘 표시",
"show-text-tooltip-description": "텍스트 명령어의 출력으로 툴팁을 표시합니다.",
"show-text-tooltip-label": "동적 텍스트 툴팁 표시",
"text-stream-description": "명령에서 스트리밍된 줄이 버튼에 텍스트로 표시됩니다.",
"text-stream-label": "스트림",
"wheel-description": "스크롤 휠을 사용했을 때 실행할 명령입니다.<br>명령에서 스크롤 휠 델타 값으로 $delta를 사용하세요.",
"wheel-down": "스크롤 휠 아래",
"wheel-down-description": "스크롤 휠을 아래로 내렸을 때 실행할 명령입니다.",
"wheel-down-label": "휠 다운 명령",
"wheel-label": "스크롤 휠",
"wheel-mode-separate-description": "휠 업과 다운에 대해 별도의 명령을 활성화합니다.",
"wheel-mode-separate-label": "별도 휠 명령",
"wheel-up": "스크롤 휠 위",
"wheel-up-description": "스크롤 휠을 위로 올렸을 때 실행할 명령입니다.",
"wheel-up-label": "휠 업 명령",
"wheel-update-text": "스크롤 시 표시된 텍스트 업데이트"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "작업",
"active": "활성",
"add": "추가",
"appearance": "모양",
"apply": "적용",
@@ -363,6 +378,7 @@
"available": "사용 가능",
"back": "뒤로",
"battery": "배터리",
"behavior": "동작",
"bluetooth": "블루투스",
"brightness": "밝기",
"browse": "찾아보기",
@@ -395,6 +411,7 @@
"disconnected": "연결 끊김",
"disconnecting": "연결 해제 중...",
"display-mode": "디스플레이 모드",
"documentation": "문서",
"download": "다운로드",
"duration": "지속 시간",
"dysfunctional": "기능 장애",
@@ -458,6 +475,7 @@
"primary": "첫번째",
"random": "랜덤",
"reboot": "재부팅",
"reboot-to-uefi": "UEFI로 재부팅",
"record": "녹화 시작",
"refresh": "새로고침",
"required": "(필수)",
@@ -470,6 +488,8 @@
"scanning": "검색 중...",
"screen-corners": "화면 모서리",
"search": "검색",
"second": "{count} 초",
"second-plural": "{count} 초",
"secondary": "두번째",
"security": "보안",
"select": "선택",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "클릭하여 접기",
"click-to-expand": "클릭하여 펼치기",
"description": "알림이 도착하면 여기에 표시됩니다.",
"no-notifications": "알림 없음"
@@ -751,6 +772,9 @@
"visualizer-type-description": "미디어 재생 시 사용할 비주얼라이저 유형을 선택하세요.",
"visualizer-type-label": "비주얼라이저 유형",
"volumes-desc": "볼륨 제어 및 오디오 레벨을 조정합니다.",
"volumes-feedback-sound-file-description": "볼륨 변경 시 재생되는 사운드 파일 경로.",
"volumes-feedback-sound-file-label": "볼륨 피드백 사운드 파일",
"volumes-feedback-sound-file-select-title": "볼륨 피드백 사운드 파일 선택",
"volumes-input-volume-description": "마이크 입력 볼륨 레벨입니다.",
"volumes-mute-input-description": "기본 오디오 입력(마이크)을 음소거합니다.",
"volumes-mute-input-label": "오디오 입력 음소거",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "캡슐 색상",
"appearance-capsule-opacity-description": "캡슐이 표시될 때 위젯 배경의 불투명도 수준을 설정합니다.",
"appearance-capsule-opacity-label": "캡슐 불투명도",
"appearance-content-padding-description": "바 가장자리와 위젯 사이의 패딩을 조정합니다.",
"appearance-content-padding-label": "콘텐츠 패딩",
"appearance-density-description": "컴팩트하거나 넓은 모양을 위해 바의 패딩을 조정합니다.",
"appearance-density-label": "바 밀도",
"appearance-desc": "바의 모양과 위치를 사용자 지정합니다.",
"appearance-display-mode-description": "바가 언제 표시될지 선택하세요.",
"appearance-floating-description": "바를 플로팅 '알약' 형태로 표시합니다.",
"appearance-floating-label": "플로팅 바",
"appearance-font-scale-description": "바에 표시되는 텍스트의 글꼴 크기 배율을 조정합니다.",
"appearance-font-scale-label": "글꼴 배율",
"appearance-frame-radius": "내부 반경",
"appearance-frame-settings-description": "프레임 두께 및 내부 모서리 반경 조정",
"appearance-frame-settings-label": "프레임 설정",
@@ -798,12 +826,16 @@
"appearance-position-label": "바 위치",
"appearance-show-capsule-description": "위젯 배경을 표시합니다.",
"appearance-show-capsule-label": "캡슐 표시",
"appearance-show-on-workspace-switch-description": "워크스페이스가 변경될 때 Bar를 자동으로 잠시 보여줍니다.",
"appearance-show-on-workspace-switch-label": "작업 공간 전환 시 바 표시",
"appearance-show-outline-description": "모든 위젯 주위에 보이는 테두리를 표시합니다.",
"appearance-show-outline-label": "위젯 윤곽선 표시",
"appearance-type-description": "바의 스타일을 선택하세요: 심플, 플로팅, 프레임.",
"appearance-type-label": "바 유형",
"appearance-use-separate-opacity-description": "바 배경에 대해 별도의 불투명도 값을 사용하려면 활성화하세요.",
"appearance-use-separate-opacity-label": "별도 바 불투명도 사용",
"appearance-widget-spacing-description": "바의 각 위젯 사이 간격을 조정합니다.",
"appearance-widget-spacing-label": "위젯 간격",
"monitor-configure-widgets": "위젯 구성",
"monitor-override-settings": "전역 설정 재정의",
"monitor-override-settings-description": "이 모니터에 사용자 지정 설정을 사용합니다.",
@@ -881,14 +913,14 @@
"connections": {
"authentication-required": "인증 필요",
"bluetooth-devices-unnamed": "이름 없는 장치는 표시되지 않습니다.",
"bluetooth-discoverable": "이 장치는 이 설정 탭이 열려 있는 동안 <b> {hostName} </b>으로 검색될 수 있습니다.",
"bluetooth-discoverable": "이 장치는 이 설정 탭이 열려 있는 동안 <b>{hostName}</b>으로 검색될 수 있습니다.",
"bluetooth-rssi-polling-description": "bluetoothctl을 통해 연결된 장치의 RSSI를 주기적으로 샘플링합니다. 모든 장치에서 사용 가능하지 않을 수 있으며, 활성화 시 최소한의 리소스를 사용합니다.",
"bluetooth-rssi-polling-interval-description": "연결된 장치의 신호 강도를 얼마나 자주 업데이트할지 구성합니다.",
"bluetooth-rssi-polling-interval-label": "폴링 간격",
"bluetooth-rssi-polling-label": "Bluetooth 신호 폴링",
"disable-discoverability-description": "주변 Bluetooth 장치에서 장치를 숨깁니다.",
"bluetooth-rssi-polling-label": "블루투스 신호 폴링",
"disable-discoverability-description": "주변 블루투스 장치에서 장치를 숨깁니다.",
"disable-discoverability-label": "장치 가시성 비활성화",
"hide-unnamed-devices-description": "Bluetooth 주소로만 표시되는 장치를 숨깁니다.",
"hide-unnamed-devices-description": "블루투스 주소로만 표시되는 장치를 숨깁니다.",
"hide-unnamed-devices-label": "이름 없는 장치 숨기기",
"pin-instructions": "기기에 표시된 PIN 코드를 입력해주세요.",
"title": "연결"
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "버튼을 클릭했을 때 실행할 명령입니다.",
"shortcuts-custom-button-enable-on-state-logic-description": "검사 명령에 따라 두 번째 아이콘과 '켜짐(hot)' 상태를 활성화합니다.",
"shortcuts-custom-button-enable-on-state-logic-label": "켜짐 상태 로직 활성화",
"shortcuts-custom-button-general-tooltip-text-description": "버튼 툴팁에 대한 일반 설명입니다.",
"shortcuts-custom-button-general-tooltip-text-label": "일반 툴팁 텍스트",
"shortcuts-custom-button-icon-description": "라이브러리에서 아이콘을 선택하세요.",
"shortcuts-custom-button-on-clicked-label": "왼쪽 클릭 명령",
"shortcuts-custom-button-on-middle-clicked-label": "가운데 클릭 명령",
"shortcuts-custom-button-on-right-clicked-label": "오른쪽 클릭 명령",
"shortcuts-custom-button-on-middle-clicked-description": "버튼을 가운데 클릭했을 때 실행할 명령.",
"shortcuts-custom-button-on-state-command-description": "버튼이 '켜짐' 상태여야 하는지 확인하기 위해 실행할 명령입니다. 켜짐일 경우 0, 꺼짐일 경우 0이 아닌 값을 반환합니다.",
"shortcuts-custom-button-on-state-command-label": "켜짐 상태 확인 명령",
"shortcuts-custom-button-on-state-icon-description": "버튼이 '켜짐' 상태일 때의 아이콘입니다.",
@@ -943,6 +973,7 @@
"clock-style-label": "시계 스타일",
"clock-style-minimal": "미니멀",
"clock-width-description": "시계 위젯의 너비(픽셀 단위).",
"cpu-intensive-note": "! 표시된 위젯은 더 많은 CPU를 사용하므로 신중하게 활성화해야 합니다.",
"edit-mode-button-label": "편집 모드 진입",
"edit-mode-controls-explanation": "왼쪽 클릭 및 드래그: 위젯 이동 또는 크기 조정.\n오른쪽 클릭: 컨텍스트 메뉴 옵션 열기.",
"edit-mode-description": "바탕 화면 위젯을 이동하고 재배치하려면 편집 모드를 활성화하세요. 활성화되면 위젯에 드래그 윤곽선이 표시되며 재배치할 수 있습니다.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "버튼 표시",
"media-player-show-visualizer-description": "오디오 비주얼라이저 오버레이를 표시합니다.",
"media-player-visualizer-type-description": "비주얼라이저 유형을 선택하세요.",
"overview-enabled-description": "컴포지터 개요가 열려 있는 동안 데스크톱 위젯을 표시합니다.",
"overview-enabled-label": "개요에 표시",
"system-stat-layout-bottom": "아래",
"system-stat-layout-description": "범례가 그래프에 상대적으로 어떻게 표시되는지 선택합니다.",
"system-stat-layout-label": "레이아웃",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "날씨 위젯의 배경 컨테이너를 표시합니다."
},
"display": {
"monitors-backlight-device-auto-option": "기본값",
"monitors-backlight-device-description": "이 출력에 대한 백라이트 장치를 선택하세요.",
"monitors-backlight-device-label": "백라이트 장치",
"monitors-brightness-step-description": "밝기 변경(스크롤 휠 및 키보드 단축키)의 단계 크기를 조정합니다.",
"monitors-brightness-step-label": "밝기 단계 크기",
"monitors-brightness-unavailable-ddc-disabled": "밝기 제어를 사용할 수 없습니다. 이 디스플레이의 밝기를 제어하려면 \"외부 밝기 지원\"을 활성화하세요.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "최소 밝기 강제 (1%)",
"monitors-external-brightness-description": "DDC/CI 프로토콜을 통해 외부 디스플레이의 밝기를 제어하기 위한 DDCUtil 지원을 활성화합니다.",
"monitors-external-brightness-label": "외부 밝기 지원",
"monitors-global-brightness-description": "모든 모니터의 밝기를 한 번에 조정합니다.",
"monitors-global-brightness-label": "모든 모니터",
"monitors-title": "모니터별 설정",
"night-light-auto-schedule-description": "<i>{location}</i>의 일몰 및 일출 시간을 기준으로 함 — 권장됨.",
"night-light-auto-schedule-label": "자동 일정",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "독점",
"appearance-floating-distance-description": "독과 화면 가장자리 사이의 거리를 설정합니다.",
"appearance-floating-distance-label": "독 플로팅 거리",
"appearance-frame-indicator-description": "Dock이 숨겨져 있을 때 프레임에 작은 표시기를 표시합니다.",
"appearance-frame-indicator-label": "프레임 독 표시기",
"appearance-group-apps-description": "동일한 앱의 여러 창을 하나의 Dock 항목으로 그룹화합니다.",
"appearance-group-apps-label": "동일한 앱 그룹화",
"appearance-group-click-action-cycle": "창 전환",
"appearance-group-click-action-description": "그룹화된 앱에 대해 왼쪽 클릭 시 어떤 동작을 할지 선택하세요.",
"appearance-group-click-action-label": "그룹화된 앱 클릭 동작",
"appearance-group-click-action-list": "창 목록 열기",
"appearance-group-context-menu-mode-description": "그룹화된 앱의 상황에 맞는 메뉴가 어떻게 동작할지 선택하세요.",
"appearance-group-context-menu-mode-extended": "확장됨",
"appearance-group-context-menu-mode-label": "그룹화된 앱 메뉴 모드",
"appearance-group-context-menu-mode-list": "창 목록",
"appearance-group-indicator-style-description": "그룹화된 실행 중인 표시기가 포커스된 창 상태를 표시하는 방식을 선택합니다.",
"appearance-group-indicator-style-dots": "점",
"appearance-group-indicator-style-label": "그룹화된 표시기 스타일",
"appearance-group-indicator-style-number": "숫자",
"appearance-hide-show-speed-description": "독 숨기기/보이기 애니메이션 속도를 조정합니다.",
"appearance-hide-show-speed-label": "숨기기/보이기 속도",
"appearance-icon-size-description": "독의 전체 크기를 조정합니다.",
"appearance-icon-size-label": "독 크기",
"appearance-inactive-indicators-description": "현재 활성 앱뿐만 아니라 모든 앱에 대해 표시기 알약을 표시합니다.",
"appearance-inactive-indicators-label": "실행 중 표시기",
"appearance-launcher-position-description": "독에서 런처 아이콘이 나타날 위치를 선택하세요.",
"appearance-launcher-position-end": "끝",
"appearance-launcher-position-label": "런처 위치",
"appearance-launcher-position-start": "시작",
"appearance-pinned-static-description": "고정된 앱 아이콘을 항상 왼쪽에 정적인 순서로 배치합니다.",
"appearance-pinned-static-label": "정적 고정 앱",
"appearance-position-description": "화면에서 독이 나타날 위치를 선택하세요.",
"appearance-position-label": "위치",
"appearance-show-launcher-icon-description": "독에 애플리케이션 런처 아이콘을 표시합니다.",
"appearance-show-launcher-icon-label": "앱 런처 표시",
"appearance-sit-on-frame-description": "독을 프레임 테두리 내부에 정렬하고, 위에 놓이지 않도록 합니다.",
"appearance-sit-on-frame-label": "독은 프레임에 위치",
"appearance-type-description": "플로팅 필 형태 또는 가장자리에 고정된 고정 바 중에서 선택하세요.",
"appearance-type-floating": "플로팅",
"appearance-type-label": "독 스타일",
"appearance-type-static": "정적",
"enabled-description": "독을 완전히 표시하거나 숨깁니다.",
"enabled-label": "독 활성화",
"monitors-desc": "특정 모니터에 독을 표시합니다. 선택하지 않으면 모든 모니터에 표시됩니다.",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "고정폭 텍스트의 크기를 늘리거나 줄입니다.",
"fonts-monospace-scale-label": "고정폭 글꼴 크기",
"fonts-monospace-search-placeholder": "고정폭 글꼴 검색...",
"fonts-reset-scaling": "크기 초기화",
"fonts-title": "글꼴",
"keybinds-conflict-description": "이 키 조합은 이미 {action}에 할당되어 있습니다.",
"keybinds-conflict-title": "키 바인딩 충돌",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "아바타 이미지 선택",
"profile-title": "프로필",
"profile-tooltip": "프로필 사진",
"reverse-scrolling-description": "해석된 스크롤 방향 반전.",
"reverse-scrolling-label": "스크롤 반전",
"screen-corners-desc": "화면 모서리 라운딩 및 시각 효과를 사용자 지정합니다.",
"screen-corners-radius-description": "화면의 둥근 모서리를 조정합니다.",
"screen-corners-radius-label": "화면 모서리 반경",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "배경화면 변경됨",
"wallpaper-changed-placeholder": "예: notify-send \"배경화면\" \"변경됨\""
},
"idle": {
"custom-add": "명령 추가",
"custom-description": "일정 시간 비활성 상태 후 셸 명령을 실행합니다.",
"custom-entry-command": "명령",
"custom-entry-delete": "삭제",
"custom-entry-timeout": "비활성 시간",
"custom-label": "사용자 지정 유휴 명령",
"enable-description": "일정 시간 비활성 상태 후 자동으로 화면을 끄거나, 잠그거나, 절전 모드로 전환합니다.",
"enable-label": "유휴 관리 활성화",
"fade-duration-description": "각 동작이 실행되기 전 화면이 검게 페이드되는 애니메이션 시간(초). 마우스 움직임이 있으면 페이드가 취소됩니다.",
"fade-duration-label": "페이드 지속 시간",
"lock-description": "잠금 화면이 활성화되기 전 비활성 시간(초).",
"lock-label": "화면 잠금",
"screen-off-description": "모니터가 꺼지기 전 비활성 시간(초).",
"screen-off-label": "화면 끄기",
"status-description": "Compositor가 보고한 유휴 시간.",
"status-label": "유휴 시간",
"suspend-description": "시스템이 일시 중단되기 전 비활성 시간(초).",
"tab-behavior": "동작",
"tab-custom": "사용자 지정",
"timeouts-description": "단계를 비활성화하려면 0으로 설정하세요. Keep Awake가 활성화된 동안 시간 초과는 일시 중지됩니다.",
"timeouts-label": "시간 초과",
"unavailable": "이 Compositor에서는 네이티브 유휴 모니터링을 사용할 수 없습니다."
},
"indicator": {
"default-value": "기본값: {value}",
"system-default": "시스템 기본값"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "잠금 화면 배경화면에 색조 오버레이를 적용합니다.",
"lock-screen-tint-strength-label": "잠금 화면 틴트 강도",
"monitors-desc": "특정 모니터에 잠금 화면을 표시합니다. 아무것도 선택하지 않으면 기본적으로 모두에 표시됩니다.",
"password-chars-description": "비밀번호를 숨기는 데 사용되는 귀여운 아이콘.",
"password-chars-label": "무작위 비밀번호 아이콘",
"show-hibernate-description": "전원 제어에 '최대 절전' 옵션을 표시합니다.",
"show-hibernate-label": "최대 절전 표시",
"show-session-buttons-description": "잠금 화면에서 전원 설정에 대한 액세스를 허용합니다.",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "중요도 낮음",
"duration-normal-urgency-description": "보통 레벨의 알림이 표시되는 시간입니다.",
"duration-normal-urgency-label": "중요도 보통",
"duration-reset": "시간 제한 초기화",
"duration-respect-expire-description": "알림에 설정된 만료 시간을 사용합니다.",
"duration-respect-expire-label": "만료 시간 준수",
"duration-title": "알림 지속 시간",
"history-clear-dismiss-description": "알림을 닫을 때 기록에서 지웁니다.",
"history-clear-dismiss-label": "해제 시 지우기",
"history-critical-urgency-description": "긴급 레벨의 알림을 기록에 저장합니다.",
"history-critical-urgency-label": "중요도 긴급 기록 저장",
"history-desc": "레벨 수준에 따라 기록에 저장할 알림을 제어합니다.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "알림 데몬을 활성화하거나 비활성화합니다. Noctalia 셸을 다시 시작해야 합니다.",
"settings-enabled-label": "알림 활성화",
"settings-location-description": "화면상에 알림이 나타나는 위치입니다.",
"settings-markdown-description": "Markdown 서식을 사용하여 알림 내용을 렌더링합니다.",
"settings-markdown-label": "Markdown 활성화",
"sounds-desc": "알림 소리 효과 및 볼륨을 구성합니다.",
"sounds-enabled-description": "수신 알림에 대한 소리 효과를 활성화합니다.",
"sounds-enabled-label": "알림 소리 활성화",
@@ -1493,16 +1589,13 @@
"box-border-label": "컨테이너 윤곽선",
"box-border-radius-description": "사이드바, 카드, 콘텐츠 패널과 같은 주요 레이아웃 섹션의 모서리 둥글기를 조정합니다.",
"box-border-radius-label": "컨테이너 반경",
"box-border-radius-reset": "컨테이너 반경 초기화",
"control-border-radius-description": "버튼, 토글, 텍스트 필드를 포함한 대화형 요소의 굴곡을 제어합니다.",
"control-border-radius-label": "입력 반경",
"control-border-radius-reset": "입력 반경 초기화",
"desc": "인터페이스의 모양, 느낌 및 동작을 사용자 지정합니다.",
"dim-desktop-description": "패널이나 메뉴가 열려 있을 때 바탕 화면을 어둡게 합니다.",
"dim-desktop-label": "바탕 화면 어둡게 하기",
"dimmer-opacity-description": "바탕 화면 어둡게 하기의 불투명도 수준을 설정합니다.",
"dimmer-opacity-label": "어두운 바탕 화면 불투명도",
"dimmer-opacity-reset": "어두운 바탕 화면 불투명도 초기화",
"panel-background-opacity-description": "모든 패널(바, 런처, 설정 등...)의 배경 불투명도를 설정합니다.",
"panel-background-opacity-label": "패널 배경 불투명도",
"panels-attached-to-bar-description": "패널이 바와 화면 가장자리에 고정되어 세련된 반전 모서리로 매끄러운 모양을 만듭니다.",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "패널과 바를 항상 위에 유지",
"scaling-description": "바를 제외한 일반 사용자 인터페이스의 크기를 변경합니다.",
"scaling-label": "인터페이스 배율",
"scaling-reset-scaling": "인터페이스 배율 초기화",
"settings-panel-header": "설정 패널",
"settings-panel-mode-description": "설정 레이아웃을 선택하세요 (다시 열어야 할 수 있음).",
"settings-panel-mode-label": "설정 패널 모드",
"settings-panel-sidebar-card-style-description": "설정 사이드바를 둥근 모서리가 있는 채워진 배경으로 감쌉니다.",
"settings-panel-sidebar-card-style-label": "사이드바 카드 스타일",
"shadows-description": "바와 패널 아래에 그림자를 활성화합니다.",
"shadows-direction-description": "그림자가 드리워질 위치를 선택하세요.",
"shadows-direction-label": "그림자 방향",
@@ -1762,6 +1857,7 @@
"collapse": "사이드바 접기",
"copy-address": "주소 복사",
"delete-notification": "알림 삭제",
"dismiss-notification": "알림 닫기",
"do-not-disturb-enabled": "방해 금지 모드",
"expand": "사이드바 펼치기",
"forget-network": "네트워크 지우기",
-10
View File
@@ -851,11 +851,7 @@
"shortcuts-custom-button-command-description": "Fermana ku dema ku bişkok tê tikandin were meşandin.",
"shortcuts-custom-button-enable-on-state-logic-description": "Çalak bike îkonek duyem û rewşa 'germ' li ser bingeha fermana kontrolê.",
"shortcuts-custom-button-enable-on-state-logic-label": "Mantiqa rewşa-li-ser çalak bike",
"shortcuts-custom-button-general-tooltip-text-description": "Danasîna giştî ji bo sernavê bişkokê.",
"shortcuts-custom-button-general-tooltip-text-label": "Teksta şiroveya giştî",
"shortcuts-custom-button-on-clicked-label": "Fermana klîka çepê",
"shortcuts-custom-button-on-middle-clicked-label": "Fermana klîka navîn",
"shortcuts-custom-button-on-right-clicked-label": "Fermana rast-klîk",
"shortcuts-custom-button-on-state-command-description": "Fermana ku bê meşandin ji bo kontrolkirina ka divê bişkok di rewşa 'vekirî' de be. Ji bo vekirî 0, ji bo girtî ne-sifir vedigerîne.",
"shortcuts-custom-button-on-state-command-label": "Fermana kontrola rewşa li ser",
"shortcuts-custom-button-on-state-icon-description": "Îkona ji bo bişkokê dema ku di rewşa 'vekirî' de ye.",
@@ -1008,7 +1004,6 @@
"fonts-monospace-scale-description": "Mezinahiya nivîsa monospace mezin an biçûk bike.",
"fonts-monospace-scale-label": "Mezinahiya cûernivîsa monospace",
"fonts-monospace-search-placeholder": "Lêgerîn li fonta monospace...",
"fonts-reset-scaling": "Vekirina pîvanê",
"fonts-title": "Cûrenivîs",
"keybinds-down": "Bilivîne jêr",
"keybinds-left": "Bilivîne çep",
@@ -1192,7 +1187,6 @@
"duration-low-urgency-label": "Lezgînî kêm",
"duration-normal-urgency-description": "Notîfîkasyonên pêşîniya normal çiqas dirêj xuya dimînin.",
"duration-normal-urgency-label": "Lezgînahiya normal",
"duration-reset": "Demjimêra dema derbasbûnê ji nû ve saz bike",
"duration-respect-expire-description": "Dem wextê qedandinê yê ku di agahdariyê de hatiye danîn bikar bîne.",
"duration-respect-expire-label": "Dem bihurmet demdirêj qedandin",
"duration-title": "Dirêjahiya agahdariyê",
@@ -1402,16 +1396,13 @@
"box-border-label": "Çarçoweya konteynerê",
"box-border-radius-description": "Goşeya dorfirehiya beşên sereke yên layoutê, wekî barên kêlekê, kart, û panelên naverokê, eyar dike.",
"box-border-radius-label": "Radiusa konteynirê",
"box-border-radius-reset": "Vegerandina radiusa konteynerê",
"control-border-radius-description": "Kontrola çemandina hêmanên înteraktîv, di nav de bişkok, guhêrbarok û qadên nivîsê.",
"control-border-radius-label": "Tîrêjê têketinê",
"control-border-radius-reset": "Dîsa çapemeniya têketinê saz bike",
"desc": "Xuyakirina xuyabûn, hest, û reftarên navrûyê.",
"dim-desktop-description": "Dema panel an menü vebin, sermaseyê tarî bike.",
"dim-desktop-label": "Dim sermaseyê",
"dimmer-opacity-description": "Ayarê asta zelalbûna ji bo tarîkirina sermaseyê bike.",
"dimmer-opacity-label": "Şefafiya sermaseyê sermaseyê kêmkirî",
"dimmer-opacity-reset": "Vekirina zelalbûna sermaseya tarîkirî",
"panel-background-opacity-description": "Zelalbûna paşrûyê ji bo hemû destgehan (darik, destpêker, sazkarî, hwd...) saz bike.",
"panel-background-opacity-label": "Zelaliya paşrûyê destgehê",
"panels-attached-to-bar-description": "Panelên bi qiraxên bar û ekranê ve têne kilît kirin, bi goşeyên berevajîkirî yên şêwekar xuyangek bêkêmasî diafirînin.",
@@ -1420,7 +1411,6 @@
"panels-overlay-label": "Destgeh & darikê li jor bihêle",
"scaling-description": "Guhertina mezinahiya navrûya giştî ya bikarhêner, ji bilî bar.",
"scaling-label": "Pîvana navrûyê",
"scaling-reset-scaling": "Pîvana navrûyê ji nû ve saz bike",
"settings-panel-mode-description": "Hilbijêre şêweyê mîhengan (dibe ku ji nû ve vekirinê hewce bike).",
"settings-panel-mode-label": "Awaya destgeha sazkariyan",
"shadows-description": "Dîsa siya di bin bar û panelan de çalak dike.",
+108 -12
View File
@@ -8,6 +8,7 @@
"disable-dnd": "'Niet storen' uitschakelen",
"disable-wifi": "Wi-Fi uitschakelen",
"disconnect-vpn": "Verbinding met {name} verbreken",
"dock-settings": "Dock-instellingen",
"enable-bluetooth": "Bluetooth inschakelen",
"enable-dnd": "'Niet storen' inschakelen",
"enable-wifi": "Wi-Fi inschakelen",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Toon de keuze van het stroomprofiel in het accupaneel.",
"show-power-profile-label": "Stroomprofielbediening tonen"
},
"brightness": {
"apply-all-description": "Helderheid voor alle monitoren wijzigen bij gebruik van het scrollwiel.",
"apply-all-label": "Schuifwijzigingen toepassen op alle monitoren"
},
"clock": {
"clock-display-description": "Pas de weergave van je klok aan door tokens uit onderstaande lijst toe te voegen. Om de 12-uursnotatie te gebruiken, moet je de 'AP'-token opnemen.",
"clock-display-label": "Klokweergave",
@@ -87,7 +92,7 @@
"browse-file": "Bestand kiezen",
"browse-library": "Bibliotheek doorbladeren",
"color-selection-description": "Themakleuren toepassen op pictogrammen.",
"enable-colorization-description": "Schakel kleuring in voor het pictogram van het controlecentrum, waarbij themakleuren worden toegepast.",
"enable-colorization-description": "Schakel kleurtoepassing voor pictogram in, themakleuren toepassend.",
"icon-description": "Selecteer een pictogram uit de bibliotheek of een aangepast bestand.",
"select-custom-icon": "Aangepast pictogram selecteren",
"use-distro-logo-description": "Gebruik het logo van je distributie in plaats van een aangepast pictogram.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Als de uitvoer overeenkomt met deze waarde, wordt de knop samengevouwen.",
"collapse-condition-label": "Inklapvoorwaarde",
"color-selection-description": "Pas themakleuren toe op pictogram en tekst.",
"default-tooltip": "Aangepaste knop, configureren in instellingen",
"display-command-output-description": "Voer een commando in dat regelmatig wordt uitgevoerd. De eerste regel van de uitvoer wordt als tekst weergegeven.",
"display-command-output-label": "Commando-uitvoer weergeven",
"display-command-output-stream-description": "Voer een commando in dat continu wordt uitgevoerd.",
"dynamic-text": "Dynamische tekst",
"enable-colorization-description": "Kleurtoepassing inschakelen voor het aangepaste knoppictogram en de tekst, waarbij themakleuren worden toegepast.",
"enable-colorization-label": "Kleurtoepassing inschakelen",
"general-tooltip-text-description": "Aangepaste tekst om weer te geven in de tooltip van de knop.",
"general-tooltip-text-label": "Aangepaste tooltiptekst",
"hide-mode-always-expanded": "Altijd uitgeklapt",
"hide-mode-description": "Bepaalt de zichtbaarheid van de widget wanneer het commando geen uitvoer heeft.",
"hide-mode-expand-with-output": "Uitklappen wanneer er uitvoer is",
@@ -128,16 +136,22 @@
"right-click-description": "Commando dat wordt uitgevoerd wanneer met de rechtermuisknop op de knop wordt geklikt.",
"right-click-label": "Rechtermuisklik",
"right-click-update-text": "Tekst bijwerken die wordt weergegeven bij rechtsklikken",
"show-exec-tooltip-description": "Tooltips met commando details weergeven (linker-/rechter-/middenklik, scrollwiel).",
"show-exec-tooltip-label": "Opdracht-tooltips weergeven",
"show-icon-description": "Schakelt de zichtbaarheid van het widgetpictogram.",
"show-icon-label": "Pictogram weergeven",
"show-text-tooltip-description": "Toon tooltips met de uitvoer van het tekstcommando.",
"show-text-tooltip-label": "Dynamische teksttooltips weergeven",
"text-stream-description": "Gestreamde regels uit het commando worden als tekst op de knop weergegeven.",
"text-stream-label": "Stream",
"wheel-description": "Commando om uit te voeren wanneer het scrollwiel wordt gebruikt.<br>Gebruik $delta voor de scrollwiel-delta in het commando.",
"wheel-down": "Scrollwiel omlaag",
"wheel-down-description": "Commando om uit te voeren wanneer het scrollwiel omlaag wordt bewogen.",
"wheel-down-label": "Scrollwiel omlaag commando",
"wheel-label": "Scrollwiel",
"wheel-mode-separate-description": "Afzonderlijke commando's inschakelen voor scrollwiel omhoog en omlaag.",
"wheel-mode-separate-label": "Afzonderlijke scrollwielcommando's",
"wheel-up": "Scrollwiel omhoog",
"wheel-up-description": "Commando om uit te voeren wanneer het scrollwiel omhoog wordt bewogen.",
"wheel-up-label": "Scrollwiel omhoog commando",
"wheel-update-text": "Weergegeven tekst bij scrollen bijwerken"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Acties",
"active": "Actief",
"add": "Toevoegen",
"appearance": "Uiterlijk",
"apply": "Toepassen",
@@ -363,6 +378,7 @@
"available": "Beschikbaar",
"back": "Terug",
"battery": "Accu",
"behavior": "Gedrag",
"bluetooth": "Bluetooth",
"brightness": "Helderheid",
"browse": "Bladeren",
@@ -395,6 +411,7 @@
"disconnected": "Verbinding verbroken",
"disconnecting": "Verbinding verbroken...",
"display-mode": "Weergavemodus",
"documentation": "Documentatie",
"download": "Downloaden",
"duration": "Duur",
"dysfunctional": "Dysfunctioneel",
@@ -458,6 +475,7 @@
"primary": "Primair",
"random": "Willekeurig",
"reboot": "Herstarten",
"reboot-to-uefi": "Herstarten naar UEFI",
"record": "Opname starten",
"refresh": "Vernieuwen",
"required": "(vereist)",
@@ -470,6 +488,8 @@
"scanning": "Scannen...",
"screen-corners": "Schermhoeken",
"search": "Zoeken",
"second": "{count} seconde",
"second-plural": "{count} seconden",
"secondary": "Secundair",
"security": "Beveiliging",
"select": "Selecteer",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Klikken om in te klappen",
"click-to-expand": "Klik om uit te vouwen",
"description": "Je meldingen verschijnen hier zodra ze binnenkomen.",
"no-notifications": "Geen meldingen"
@@ -751,6 +772,9 @@
"visualizer-type-description": "Kies een visualisatietype voor mediaweergave.",
"visualizer-type-label": "Visualisatietype",
"volumes-desc": "Pas volumeregelaars en audioniveaus aan.",
"volumes-feedback-sound-file-description": "Pad naar het geluidsbestand dat wordt afgespeeld bij het wijzigen van het volume.",
"volumes-feedback-sound-file-label": "Geluidsbestand voor volumefeedback",
"volumes-feedback-sound-file-select-title": "Selecteer volumefeedback-geluidsbestand",
"volumes-input-volume-description": "Volumeniveau van microfooninvoer.",
"volumes-mute-input-description": "Dempt de standaard audio-invoer (microfoon).",
"volumes-mute-input-label": "Audio-invoer dempen",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "Capsulekleur",
"appearance-capsule-opacity-description": "Stel het doorzichtigheidsniveau in voor widget-achtergronden wanneer capsule wordt getoond.",
"appearance-capsule-opacity-label": "Capsule-doorzichtigheid",
"appearance-content-padding-description": "Pas de opvulling tussen de baranden en widgets aan.",
"appearance-content-padding-label": "Inhoudopvulling",
"appearance-density-description": "Pas de opvulling van de balk aan voor een compacte of ruime uitstraling.",
"appearance-density-label": "Balkdichtheid",
"appearance-desc": "Pas de uitstraling en positie van de balk aan.",
"appearance-display-mode-description": "Kies wanneer de balk zichtbaar is.",
"appearance-floating-description": "Toon de balk weer als een zwevende 'pil'.",
"appearance-floating-label": "Zwevende balk",
"appearance-font-scale-description": "De schaal van de lettergrootte aanpassen voor tekst die in de balk wordt weergegeven.",
"appearance-font-scale-label": "Lettertypeschaal",
"appearance-frame-radius": "Binnenradius",
"appearance-frame-settings-description": "Pas de kaderdikte en binnenste hoekradius aan",
"appearance-frame-settings-label": "Kaderinstellingen",
@@ -798,12 +826,16 @@
"appearance-position-label": "Positie van de balk",
"appearance-show-capsule-description": "Widget-achtergronden tonen.",
"appearance-show-capsule-label": "Capsules tonen",
"appearance-show-on-workspace-switch-description": "De Bar automatisch kort tonen wanneer de Workspace verandert.",
"appearance-show-on-workspace-switch-label": "Balk tonen bij werkruimtewissel",
"appearance-show-outline-description": "Toon een zichtbare rand rondom elke widget.",
"appearance-show-outline-label": "Toon widget-omtrekken",
"appearance-type-description": "Kies de stijl van de balk: Eenvoudig, Zwevend of Omkaderd.",
"appearance-type-label": "Balktype",
"appearance-use-separate-opacity-description": "Maak het mogelijk om een aparte dekkingswaarde te gebruiken voor de achtergrond van de balk.",
"appearance-use-separate-opacity-label": "Gebruik afzonderlijke balkdekking",
"appearance-widget-spacing-description": "Pas de afstand tussen elke widget in de balk aan.",
"appearance-widget-spacing-label": "Widgetafstand",
"monitor-configure-widgets": "Widgets configureren",
"monitor-override-settings": "Globale instellingen overschrijven",
"monitor-override-settings-description": "Gebruik aangepaste instellingen voor deze monitor.",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "Authenticatie vereist",
"bluetooth-devices-unnamed": "Naamloze apparaten worden niet getoond.",
"bluetooth-discoverable": "Dit apparaat is vindbaar als <b> {hostName} </b> zolang dit instellingen-tabblad geopend is.",
"bluetooth-discoverable": "Dit apparaat is vindbaar als <b>{hostName}</b> zolang dit instellingen-tabblad geopend is.",
"bluetooth-rssi-polling-description": "Periodiek RSSI van verbonden apparaten via bluetoothctl samplen. Mogelijk niet beschikbaar voor alle apparaten; gebruikt minimale middelen wanneer ingeschakeld.",
"bluetooth-rssi-polling-interval-description": "Configureer hoe vaak de signaalsterkte voor verbonden apparaten moet worden bijgewerkt.",
"bluetooth-rssi-polling-interval-label": "Polling-interval",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "Het commando dat wordt uitgevoerd wanneer op de knop wordt geklikt.",
"shortcuts-custom-button-enable-on-state-logic-description": "Schakel een tweede pictogram en aan-status in op basis van een controlecommando.",
"shortcuts-custom-button-enable-on-state-logic-label": "Logica voor aan-status inschakelen",
"shortcuts-custom-button-general-tooltip-text-description": "Algemene beschrijving voor de tooltip van de knop.",
"shortcuts-custom-button-general-tooltip-text-label": "Algemene tooltiptekst",
"shortcuts-custom-button-icon-description": "Selecteer een pictogram uit de bibliotheek.",
"shortcuts-custom-button-on-clicked-label": "Commando bij linkermuisklik",
"shortcuts-custom-button-on-middle-clicked-label": "Commando bij middelste muisklik",
"shortcuts-custom-button-on-right-clicked-label": "Commando bij rechtermuisklik",
"shortcuts-custom-button-on-middle-clicked-description": "Commando dat wordt uitgevoerd wanneer de knop met de middelste muisknop wordt geklikt.",
"shortcuts-custom-button-on-state-command-description": "Commando dat wordt uitgevoerd om te controleren of de knop in de aan-status moet staan. Geeft 0 terug voor aan, een andere waarde voor uit.",
"shortcuts-custom-button-on-state-command-label": "Controlecommando voor aan-status",
"shortcuts-custom-button-on-state-icon-description": "Het pictogram voor de knop wanneer deze in de aan-status staat.",
@@ -943,6 +973,7 @@
"clock-style-label": "Klokstijl",
"clock-style-minimal": "Minimaal",
"clock-width-description": "Breedte van de klokwidget in pixels.",
"cpu-intensive-note": "Widgets gemarkeerd met ! gebruiken meer CPU en moeten bewust ingeschakeld worden.",
"edit-mode-button-label": "Ga naar de bewerkingsmodus",
"edit-mode-controls-explanation": "Linksklikken en slepen: Widget verplaatsen of het formaat wijzigen.\nRechtermuisknop: Het contextmenu openen.",
"edit-mode-description": "Schakel de bewerkingsmodus in om desktopwidgets te verplaatsen en te herpositioneren. In de ingeschakelde modus tonen widgets een sleepomtrek en kunnen ze worden verplaatst.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "Knoppen weergeven",
"media-player-show-visualizer-description": "Toon de audio-visualisatie overlay.",
"media-player-visualizer-type-description": "Kies een visualisatietype voor de achtergrond van de desktop mediaplayer.",
"overview-enabled-description": "Toon desktopwidgets terwijl het compositor-overzicht geopend is.",
"overview-enabled-label": "Tonen in overzicht",
"system-stat-layout-bottom": "Onder",
"system-stat-layout-description": "Kies hoe de legenda wordt weergegeven ten opzichte van de grafiek.",
"system-stat-layout-label": "Indeling",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "Toon de achtergrondcontainer voor de weerwidget."
},
"display": {
"monitors-backlight-device-auto-option": "Standaard",
"monitors-backlight-device-description": "Selecteer een achtergrondverlichtingsapparaat voor deze uitvoer.",
"monitors-backlight-device-label": "Achtergrondverlichting Apparaat",
"monitors-brightness-step-description": "Pas de stapgrootte voor helderheidswijzigingen aan (scrollwiel en sneltoetsen).",
"monitors-brightness-step-label": "Stapgrootte helderheid",
"monitors-brightness-unavailable-ddc-disabled": "Helderheidsregeling niet beschikbaar. Schakel \"Ondersteuning voor externe helderheid\" in om de helderheid van dit scherm te regelen.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "Minimale helderheid afdwingen (1%)",
"monitors-external-brightness-description": "Schakel DDCUtil-ondersteuning in om de helderheid op externe schermen te regelen via het DDC/CI-protocol.",
"monitors-external-brightness-label": "Ondersteuning voor externe helderheid",
"monitors-global-brightness-description": "Pas de helderheid van alle monitoren tegelijk aan.",
"monitors-global-brightness-label": "Alle monitoren",
"monitors-title": "Instellingen per monitor",
"night-light-auto-schedule-description": "Gebaseerd op de zonsopgang- en zonsondergangtijd in <i>{location}</i> — aanbevolen.",
"night-light-auto-schedule-label": "Automatische planning",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "Exclusief",
"appearance-floating-distance-description": "Stel de afstand in tussen de dock en de rand van het scherm.",
"appearance-floating-distance-label": "Afstand zwevende dock",
"appearance-frame-indicator-description": "Toon een kleine indicator op het frame wanneer het dock verborgen is.",
"appearance-frame-indicator-label": "Ingelijste dock-indicator",
"appearance-group-apps-description": "Groepeer meerdere vensters van dezelfde app in één Dock-item.",
"appearance-group-apps-label": "Dezelfde apps groeperen",
"appearance-group-click-action-cycle": "Vensters wisselen",
"appearance-group-click-action-description": "Kies wat de linkermuisklik doet voor gegroepeerde apps.",
"appearance-group-click-action-label": "Actie bij klik op gegroepeerde app",
"appearance-group-click-action-list": "Vensterlijst openen",
"appearance-group-context-menu-mode-description": "Kies hoe het contextmenu zich gedraagt voor gegroepeerde apps.",
"appearance-group-context-menu-mode-extended": "Uitgebreid",
"appearance-group-context-menu-mode-label": "Gegroepeerde app-menumodus",
"appearance-group-context-menu-mode-list": "Vensterlijst",
"appearance-group-indicator-style-description": "Kies hoe gegroepeerde actieve indicatoren de status van het gefocuste venster weergeven.",
"appearance-group-indicator-style-dots": "Punten",
"appearance-group-indicator-style-label": "Gegroepeerde indicatorstijl",
"appearance-group-indicator-style-number": "Nummer",
"appearance-hide-show-speed-description": "Pas de snelheid van de verberg/weergeef animatie van de dock aan.",
"appearance-hide-show-speed-label": "Verberg/weergeef snelheid",
"appearance-icon-size-description": "Pas de algehele grootte van de dock aan.",
"appearance-icon-size-label": "Grootte van de dock",
"appearance-inactive-indicators-description": "Toon indicatorpillen voor alle apps, niet alleen de actieve.",
"appearance-inactive-indicators-label": "Lopende indicatoren",
"appearance-launcher-position-description": "Kies waar het starter-icoon in het dock verschijnt.",
"appearance-launcher-position-end": "Einde",
"appearance-launcher-position-label": "Positie van de starter",
"appearance-launcher-position-start": "Start",
"appearance-pinned-static-description": "Zet vastgemaakte app-pictogrammen altijd in statische volgorde aan de linkerkant.",
"appearance-pinned-static-label": "Statische vastgezette apps",
"appearance-position-description": "Kies waar het dock op het scherm verschijnt.",
"appearance-position-label": "Positie",
"appearance-show-launcher-icon-description": "Toon het pictogram van de applicatiestarter in het dock.",
"appearance-show-launcher-icon-label": "Toon app-starter",
"appearance-sit-on-frame-description": "Lijn het dock uit binnen de kadergrens, in plaats van erbovenop te liggen.",
"appearance-sit-on-frame-label": "Dock zit op het frame",
"appearance-type-description": "Kies tussen een zwevende pilvorm of een statische balk die aan de rand is bevestigd.",
"appearance-type-floating": "Zwevend",
"appearance-type-label": "Dockstijl",
"appearance-type-static": "Statisch",
"enabled-description": "Dock geheel tonen of verbergen.",
"enabled-label": "Dock inschakelen",
"monitors-desc": "Dock op specifieke monitoren weergeven. Standaard op alle als er geen zijn gekozen.",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "Vergroot of verklein de grootte van monospace-tekst.",
"fonts-monospace-scale-label": "Grootte monospace-lettertype",
"fonts-monospace-search-placeholder": "Monospace-lettertype zoeken...",
"fonts-reset-scaling": "Schaling resetten",
"fonts-title": "Lettertypes",
"keybinds-conflict-description": "De toetscombinatie is al toegewezen aan {action}.",
"keybinds-conflict-title": "Toetsencombinatieconflict",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "Avatarafbeelding selecteren",
"profile-title": "Profiel",
"profile-tooltip": "Profielfoto",
"reverse-scrolling-description": "Geïnterpreteerde schuifrichting omkeren.",
"reverse-scrolling-label": "Scrollen omkeren",
"screen-corners-desc": "Pas afronding en visuele effecten van schermhoeken aan.",
"screen-corners-radius-description": "Pas de afronding van de schermhoeken aan.",
"screen-corners-radius-label": "Straal schermhoeken",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "Achtergrond gewijzigd",
"wallpaper-changed-placeholder": "bijv. notify-send \"Achtergrond\" \"Gewijzigd\""
},
"idle": {
"custom-add": "Commando toevoegen",
"custom-description": "Voer een shell-commando uit na een periode van inactiviteit.",
"custom-entry-command": "Commando",
"custom-entry-delete": "Verwijderen",
"custom-entry-timeout": "Inactiviteitstijd",
"custom-label": "Aangepaste Inactiviteitscommando's",
"enable-description": "Schakel het scherm automatisch uit, vergrendel of zet in slaapstand na een periode van inactiviteit.",
"enable-label": "Inactiviteitsbeheer inschakelen",
"fade-duration-description": "Seconden voor de fade-to-black animatie voordat elke actie wordt geactiveerd. Elke muisbeweging annuleert de fade.",
"fade-duration-label": "Vervagingsduur",
"lock-description": "Seconden van inactiviteit voordat het vergrendelscherm wordt geactiveerd.",
"lock-label": "Scherm vergrendelen",
"screen-off-description": "Seconden van inactiviteit voordat monitoren worden uitgeschakeld.",
"screen-off-label": "Scherm uitschakelen",
"status-description": "Inactiviteitstijd zoals gerapporteerd door de Compositor.",
"status-label": "Inactiviteitstijd",
"suspend-description": "Seconden van inactiviteit voordat het systeem in slaapstand gaat.",
"tab-behavior": "Gedrag",
"tab-custom": "Aangepast",
"timeouts-description": "Stel in op 0 om een fase uit te schakelen. Time-outs worden gepauzeerd zolang Keep Awake actief is.",
"timeouts-label": "Time-outs",
"unavailable": "Native inactiviteitsmonitoring is niet beschikbaar op deze Compositor."
},
"indicator": {
"default-value": "Standaard: {value}",
"system-default": "Systeemstandaard"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "Past een getinte overlay toe op de achtergrond van het vergrendelscherm.",
"lock-screen-tint-strength-label": "Sterkte van de vergrendelschermtint",
"monitors-desc": "Vergrendelscherm tonen op specifieke monitoren. Standaard op alle, indien er geen zijn gekozen.",
"password-chars-description": "Leuke pictogrammen om je wachtwoord te verbergen.",
"password-chars-label": "Willekeurige wachtwoordpictogrammen",
"show-hibernate-description": "De optie 'sluimerstand' tonen in de energieopties.",
"show-hibernate-label": "Sluimerstand tonen",
"show-session-buttons-description": "Toegang tot energie-instellingen toestaan vanaf het vergrendelscherm.",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "Lage urgentie",
"duration-normal-urgency-description": "Hoe lang meldingen met normale prioriteit zichtbaar blijven.",
"duration-normal-urgency-label": "Normale urgentie",
"duration-reset": "Timeoutduur resetten",
"duration-respect-expire-description": "Gebruik de vervaltijd die in de melding is ingesteld.",
"duration-respect-expire-label": "Vervaltijd respecteren",
"duration-title": "Duur van meldingen",
"history-clear-dismiss-description": "Melding uit de geschiedenis wissen wanneer deze wordt gesloten.",
"history-clear-dismiss-label": "Wissen bij sluiten",
"history-critical-urgency-description": "Meldingen met kritieke prioriteit opslaan in de geschiedenis.",
"history-critical-urgency-label": "Kritieke urgentie opslaan in geschiedenis",
"history-desc": "Bepalen welke meldingen worden opgeslagen in de geschiedenis op basis van hun urgentieniveau.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "Schakel de meldingsdaemon in of uit, vereist een herstart van Noctalia shell.",
"settings-enabled-label": "Meldingen inschakelen",
"settings-location-description": "Waar meldingen op het scherm verschijnen.",
"settings-markdown-description": "Meldingsinhoud weergeven met Markdown-opmaak.",
"settings-markdown-label": "Markdown inschakelen",
"sounds-desc": "Configureer meldingsgeluidseffecten en volume.",
"sounds-enabled-description": "Schakel geluidseffecten in voor inkomende meldingen.",
"sounds-enabled-label": "Meldingsgeluiden inschakelen",
@@ -1493,16 +1589,13 @@
"box-border-label": "Containeromtrek",
"box-border-radius-description": "Past de hoekronding aan van belangrijke lay-outsecties, zoals zijbalken, kaarten en inhoudspanelen.",
"box-border-radius-label": "Hoekradius",
"box-border-radius-reset": "Containerstraal resetten",
"control-border-radius-description": "Regelt de kromming van interactieve elementen, waaronder knoppen, schakelaars en tekstvelden.",
"control-border-radius-label": "Voer straal in",
"control-border-radius-reset": "Reset invoerradius",
"desc": "Pas de look, feel en het gedrag van de interface aan.",
"dim-desktop-description": "Dim de desktop wanneer panelen of menu's geopend zijn.",
"dim-desktop-label": "Desktop dimmen",
"dimmer-opacity-description": "Stel het opaciteitsniveau in voor het dimmen van het bureaublad.",
"dimmer-opacity-label": "Doorzichtigheid van gedimde desktop",
"dimmer-opacity-reset": "Doorzichtigheid van gedimde desktop resetten",
"panel-background-opacity-description": "Stel de achtergronddoorzichtigheid in voor alle panelen (balk, launcher, instellingen, enz...).",
"panel-background-opacity-label": "Paneel achtergronddoorzichtigheid",
"panels-attached-to-bar-description": "Panelen vergrendelen aan de balk en schermranden, voor een naadloze look met stijlvolle omgekeerde hoeken.",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "Panelen & balk bovenop houden",
"scaling-description": "Wijzigt de grootte van de algemene gebruikersinterface, exclusief de balk.",
"scaling-label": "Interfaceschaling",
"scaling-reset-scaling": "Interfaceschaling resetten",
"settings-panel-header": "Instellingenpaneel",
"settings-panel-mode-description": "Kies lay-out voor instellingen (mogelijk opnieuw openen vereist).",
"settings-panel-mode-label": "Instellingenpaneelmodus",
"settings-panel-sidebar-card-style-description": "Omhult de instellingen zijbalk met een gevulde achtergrond en afgeronde hoeken.",
"settings-panel-sidebar-card-style-label": "Zijbalk kaartstijl",
"shadows-description": "Schakelt slagschaduwen onder balken en panelen in.",
"shadows-direction-description": "Kies waar de schaduw wordt geworpen.",
"shadows-direction-label": "Richting van schaduw",
@@ -1762,6 +1857,7 @@
"collapse": "Zijbalk inklappen",
"copy-address": "Adres kopiëren",
"delete-notification": "Melding verwijderen",
"dismiss-notification": "Melding sluiten",
"do-not-disturb-enabled": "Niet storen",
"expand": "Zijbalk uitklappen",
"forget-network": "Netwerk vergeten",
+76 -4
View File
@@ -8,6 +8,7 @@
"disable-dnd": "Slå av \"Ikkje skjepla\"",
"disable-wifi": "Slå av trådlaust net",
"disconnect-vpn": "Enda samband med {name}",
"dock-settings": "Festeinnstillingar",
"enable-bluetooth": "Slå på Blåtann",
"enable-dnd": "Slå på \"Ikkje skjepla\"",
"enable-wifi": "Slå på trådlaust net",
@@ -32,8 +33,8 @@
"bar": {
"active-window": {
"colorize-icons-description": "Lita den verksame ruta med hamlitene.",
"hide-mode-description": "Stjornar kor nøytelen ter seg når det ikkje er ei verksam ruta.",
"scrolling-mode-description": "Stjorna når lange rutenomn kann bledja.",
"hide-mode-description": "Stjorna kor nøytelen ter seg når det ikkje er ei verksam ruta.",
"scrolling-mode-description": "Stjorna når lange rutenomn kann bledjast.",
"show-app-icon-description": "Syn nøytendefråmerke attmed rutenamn.",
"show-app-icon-label": "Syn nøytendefråmerke"
},
@@ -64,6 +65,10 @@
"show-power-profile-description": "Syn veljaren for straumhått i batterifjøli.",
"show-power-profile-label": "Syn straumhåttstoli"
},
"brightness": {
"apply-all-description": "Brigd på ljosstyrke på kvar skjerm når ein nyttar bladhjulet.",
"apply-all-label": "Gjev bladbrigde åt kvar skjerm"
},
"clock": {
"clock-display-description": "Legg til merke frå skråi her for å måta til klokka. 'AP'-merket lyt vera med um klokka berre skal hava 12 timar.",
"clock-display-label": "Klokkesyning",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Knappen løynest um utskrifti er lik dette.",
"collapse-condition-label": "Løyningsvilkor",
"color-selection-description": "Lita fråmerket og teksti med hamlitene.",
"default-tooltip": "Sjølvgjord knapp, stjorna i innstillingane",
"display-command-output-description": "Skriv inn eit styrebod som skal køyra jamlege. Syner fyrste utskriftsradi som tekst.",
"display-command-output-label": "Syn utskrift frå styrebod",
"display-command-output-stream-description": "Skriv inn styrebod som skal køyra heile tidi.",
"dynamic-text": "Kvikskrift",
"enable-colorization-description": "Lita fråmerket og teksti på den sjølvgjorde knappen med hamlitene.",
"enable-colorization-label": "Lita",
"general-tooltip-text-description": "Sjølvvald tekst å syna i hjelpeteksti åt knappen.",
"general-tooltip-text-label": "Sjølvvald hjelpetekst",
"hide-mode-always-expanded": "Stødt vidka",
"hide-mode-description": "Stjornar um nøytelen er til å sjå når styrebodet ikkje kjem med utskrift.",
"hide-mode-expand-with-output": "Vidka ved utskrift",
@@ -128,16 +136,22 @@
"right-click-description": "Styrebod som køyrer ved høgretrykk.",
"right-click-label": "Høgretrykk",
"right-click-update-text": "Før upp ny tekst ved midtrykk",
"show-exec-tooltip-description": "Syn hjelpetekst med styrebodsupplysningar (vinstre/høgre/midtrykk, hjul).",
"show-exec-tooltip-label": "Syn hjelpetekst med styrebod",
"show-icon-description": "Skifter um nøytelfråmerket er synlegt eller ikkje.",
"show-icon-label": "Syn fråmerke",
"show-text-tooltip-description": "Syn hjelpetekst med utskrifti or styrebodet.",
"show-text-tooltip-label": "Syn kvikskrift hjelpeskrift",
"text-stream-description": "Strøymde utfallssegner frå styrebodet syner seg som tekst på knappen.",
"text-stream-label": "Strøym",
"wheel-description": "Styrebod som køyrer når ein bled hjulet på musi.<br>Nytta $delta i styrebodet for hjulsbrigdi.",
"wheel-down": "Bled nedetter",
"wheel-down-description": "Styrebod som køyrer når hjulet er bladt nedetter.",
"wheel-down-label": "Styrebod - nedetter",
"wheel-label": "Bladhjul",
"wheel-mode-separate-description": "Hav ulike styrebod når ein bled uppetter og nedetter.",
"wheel-mode-separate-label": "Skilde hjulstyrebod",
"wheel-up": "Bled uppetter",
"wheel-up-description": "Styrebod som køyrer når hjulet er bladt uppetter.",
"wheel-up-label": "Styrebod - uppetter",
"wheel-update-text": "Før upp ny tekst med bledjing"
@@ -158,12 +172,70 @@
"media-mini": {
"compact-mode-description": "Få spelnøytelsfjøli til å roma mindre.",
"compact-mode-label": "Klemb spelnøytelen",
"hide-mode-description": "Stjorn framferdi åt nøytelen når ingen ting spelar av.",
"hide-mode-description": "Stjorna framferdi åt nøytelen når ingen ting spelar av.",
"max-width-description": "Fastset kor mykje nøytelen kan lengjast vassbeint. Nøytelen dreg seg i hop for å røma stuttare innhald.",
"no-active-player": "Ingi verksame spelarar"
"no-active-player": "Ingi verksame spelarar",
"panel-section-description": "Stjorna skapnaden og framferdi åt spelnøytelsfjøli.",
"panel-section-label": "Spelnøytelsfjøl",
"scrolling-mode-description": "Stjorna når lange spelnomn kann bledjast.",
"scrolling-mode-label": "Bladluna",
"show-album-art-description": "Syn platekunsten til spelet som spelar av no.",
"show-album-art-label": "Syn platekunst",
"show-artist-first-description": "Syn spelmann - spel helder en spel - spelmann",
"show-artist-first-label": "Syn spelmann fyrst",
"show-progress-ring-description": "Syn ein ringvorden framgangsvisar.",
"show-progress-ring-label": "Syn framgangsvisar",
"show-visualizer-description": "Syn ljodframsyning når eitkvart spelar av.",
"show-visualizer-label": "Syn framsyning",
"use-fixed-width-description": "Nøytelen ruvar so mykje råd er helder en å høva seg til innhald, når dette er på.",
"use-fixed-width-label": "Nytta fast breidd",
"visualizer-type-description": "Vel eit slag for ljodframsyningi.",
"visualizer-type-label": "Framsyningsslag"
},
"notification-history": {
"hide-widget-when-zero-description": "Løyn varselteikn når det ikkje er varsel.",
"hide-widget-when-zero-label": "Løyn teikn når inkje varsel",
"hide-widget-when-zero-unread-description": "Løyn varselteikn når det ikkje er ulesne varsel.",
"hide-widget-when-zero-unread-label": "Løyn teikn når inkje ulesne varsel",
"show-unread-badge-description": "Syn eit merke med kor mange ulesne varsel det er.",
"show-unread-badge-label": "Syn \"ulesne\"-merke",
"unread-badge-color-description": "Kjos lit for merket som syner kor mange ulesne varsel det er.",
"unread-badge-color-label": "\"Ulesne\"-merkelit"
},
"section-editor": {
"placeholder": "Kjos ein nøytel å leggja til ...",
"search-placeholder": "Leita etter nøytel ..."
},
"spacer": {
"width-description": "Rombreidd i molar."
},
"system-monitor": {
"compact-mode-description": "Syn upplysningar som suleteikningar helder en skrift. Stoggar brigde i uppsettet.",
"compact-mode-label": "Klemb nøytelen",
"cpu-frequency-description": "Syn midverksnarleik i GHz.",
"cpu-frequency-label": "Syn midverksøkning",
"cpu-temperature-description": "Syn hitemælingar for midverket um råd.",
"cpu-temperature-label": "Midverkhite",
"cpu-usage-description": "Syn midverkbruk som hundradpart.",
"cpu-usage-label": "Midverkbruk"
}
},
"common": {
"brightness": "Ljosstyrke",
"select-color-description": "Lita med hamlitene for tyngd."
},
"options": {
"bar": {
"density-compact": "Klembd"
},
"launcher-density": {
"compact": "Klembd"
},
"notification-density": {
"compact": "Klembd"
}
},
"system": {
"welcome-back": "Velkomen attende,"
}
}
+98 -49
View File
@@ -64,6 +64,10 @@
"show-power-profile-description": "Viser veljaren for energiprofil i batterifanen.",
"show-power-profile-label": "Vis kontrollane for energiprofil"
},
"brightness": {
"apply-all-description": "Endra på ljosstyrken for alle skjermar når ein brukar rullehjulet. ",
"apply-all-label": "Gjev rulleendringar til alle skjermar"
},
"clock": {
"clock-display-description": "Måtar klokkevisninga ved å leggja til merke frå lista. For å bruka 12-timeformat må du ha med 'AP'-merket.",
"clock-display-label": "Klokkevisar",
@@ -97,12 +101,15 @@
"collapse-condition-description": "Dersom utskrifta er lik dette, skyler knappen seg.",
"collapse-condition-label": "Skylevilkår",
"color-selection-description": "Gjev ikon og tekst temafargane.",
"default-tooltip": "Eigendefinert knapp, styr i innstillingane",
"display-command-output-description": "Gjev kommando for å køyra regelrett. Fyrste utskriftslinja vert vist som tekst.",
"display-command-output-label": "Vis kommando utskrift",
"display-command-output-stream-description": "Gjev kommando for å køyra heile tida.",
"dynamic-text": "Dynamisk tekst",
"enable-colorization-description": "Gjev temafargane til ikonet og teksten på den eigendefinerte knappen.",
"enable-colorization-label": "Slå på fargelegging",
"general-tooltip-text-description": "Eigendefinert tekst som skal visast i hjelpeteksta for knappen.",
"general-tooltip-text-label": "Eigendefinert hjelpetekst",
"hide-mode-always-expanded": "Alltid utvida",
"hide-mode-description": "Styrer om miniprogrammet skal visast når kommandoen ikkje har utskrift.",
"hide-mode-expand-with-output": "Utvida med utskrift",
@@ -128,8 +135,12 @@
"right-click-description": "Kommando som køyrer når knappen er høgreklikka.",
"right-click-label": "Høgreklikk",
"right-click-update-text": "Oppdater tekst som viser seg med høgreklikk",
"show-exec-tooltip-description": "Vis hjelpetekst med kommandodetaljar (venstre/høgre/midtklikk, hjul).",
"show-exec-tooltip-label": "Syn kommandohjelpetekst",
"show-icon-description": "Gjer miniprogramsikonet synleg eller ikkje.",
"show-icon-label": "Vis ikon",
"show-text-tooltip-description": "Vis hjelpetekst med utskrifta frå tekstkommandoen.",
"show-text-tooltip-label": "Vis dynamisk hjelpetekst",
"text-stream-description": "Strøymde linjer frå kommandoen viser seg som tekst på knappen.",
"text-stream-label": "Strøym",
"wheel-description": "Kommando som køyrer når ein brukar rullehjulet.<br>Bruk $delta for rullehjulsdeltaen i kommandoen.",
@@ -452,12 +463,13 @@
"pause": "Pause",
"pin": "Fest",
"play": "Spel",
"polling": "Avlesing",
"polling": "Spørjing",
"position": "Posisjon",
"previous": "Førre",
"primary": "Primær",
"random": "Tilfelleleg",
"reboot": "Start å nyo",
"reboot-to-uefi": "Start å nyo til UEFI Fastvare",
"record": "Start opptak",
"refresh": "Lasta inn å nyo",
"required": "(krevst)",
@@ -597,6 +609,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Klikk for å gøyma",
"click-to-expand": "Klikk for å utvida",
"description": "Varsla dine kjem opp her når dei kjem inn.",
"no-notifications": "Ingen varsel"
@@ -881,7 +894,17 @@
"connections": {
"authentication-required": "Krev autentisering",
"bluetooth-devices-unnamed": "Einingar utan namn er ikkje viste.",
"bluetooth-discoverable": "Ein kan finna eininga som <b> {hostName} </b> medan denne innstillingsfana er open."
"bluetooth-discoverable": "Ein kan finna eininga som <b>{hostName}</b> medan denne innstillingsfana er open.",
"bluetooth-rssi-polling-description": "Prøv RSSI jamt for å finna kopla einingar med bluetoothctl. Kanskje ikkje tilgjengeleg for alle einingar; brukar minimale ressursar når på.",
"bluetooth-rssi-polling-interval-description": "Styr kor ofte dekningsstyrke skal oppdaterast for tilkopla einingar.",
"bluetooth-rssi-polling-interval-label": "Spørjingsintervall",
"bluetooth-rssi-polling-label": "Bluetooth-dekningsspørjing",
"disable-discoverability-description": "Gøym eininga di frå nære Bluetooth-eininga.",
"disable-discoverability-label": "Gjer eininga usynleg",
"hide-unnamed-devices-description": "Gøym einingar som syner seg berre som Bluetooth-adresser.",
"hide-unnamed-devices-label": "Gøym einingar utan namn",
"pin-instructions": "Skriv inn PIN-koden som eininga gjev deg.",
"title": "Koplingar"
},
"control-center": {
"cards-desc": "Vel kva for kontrollar skal visast i kontrollsenteret og rekkjefylgda.",
@@ -890,11 +913,9 @@
"shortcuts-custom-button-command-description": "Kommandoen som køyrer når du klikkar på knappen.",
"shortcuts-custom-button-enable-on-state-logic-description": "Slå på eit anna ikon og \"varmt\" status frå ein sjekkekommando.",
"shortcuts-custom-button-enable-on-state-logic-label": "Slå på \"på-stode\"-logikk",
"shortcuts-custom-button-general-tooltip-text-description": "Ålmenn skildring for hjelpeteksten på knappen.",
"shortcuts-custom-button-general-tooltip-text-label": "Ålmenn hjelpetekst",
"shortcuts-custom-button-icon-description": "Vel eit ikon frå biblioteket.",
"shortcuts-custom-button-on-clicked-label": "Kommando på venstreklikk",
"shortcuts-custom-button-on-middle-clicked-label": "Kommando midtklikk",
"shortcuts-custom-button-on-right-clicked-label": "Kommando på høgreklikk",
"shortcuts-custom-button-on-middle-clicked-description": "Kommando som køyrer når knappen er midtklikka.",
"shortcuts-custom-button-on-state-command-description": "Kommando som køyrer for å sjå om knappen er i \"på\"-stoda.",
"shortcuts-custom-button-on-state-command-label": "På-stode sjekkekommando",
"shortcuts-custom-button-on-state-icon-description": "Ikonet for knappen når han er i \"på\"-stoda.",
@@ -978,6 +999,8 @@
"monitors-enforce-minimum-label": "Set minimum ljosstyrke til 1%",
"monitors-external-brightness-description": "Slår på støtte for DDCUtil for å styra ljosstyrke på eksterne skjermar med DDC/CI-protokol.",
"monitors-external-brightness-label": "Ekstern ljosstyrkestøtte",
"monitors-global-brightness-description": "Endra på ljosstyrke for alle skjermar samstundes. ",
"monitors-global-brightness-label": "Alle skjermar",
"monitors-title": "Innstillingar for kvar skjerm for seg",
"night-light-auto-schedule-description": "Utifrå solglad og solrenning der du er (<i>{location}</i>) — råd.",
"night-light-auto-schedule-label": "Automatisk timeplan",
@@ -1014,6 +1037,8 @@
"appearance-display-exclusive": "Uthaldande",
"appearance-floating-distance-description": "Set avstanden mellom festepunktet og skjermranda.",
"appearance-floating-distance-label": "Festepunkt flyteavstand",
"appearance-frame-indicator-description": "Syn ein framgangsvisar på ramma når festepunktet er gøymt.",
"appearance-frame-indicator-label": "Festepunktvisar på ramma",
"appearance-hide-show-speed-description": "Endrar på kor fort festepunktet viser og gøymer seg.",
"appearance-hide-show-speed-label": "Vis/gøym fart",
"appearance-icon-size-description": "Endra på kor stor festepunktet er.",
@@ -1024,6 +1049,12 @@
"appearance-pinned-static-label": "Statiske feste appar",
"appearance-position-description": "Vel kvar festepunktet står på skjermen.",
"appearance-position-label": "Stad",
"appearance-sit-on-frame-description": "Set festepunktet i ramma heller enn å ha det på toppen.",
"appearance-sit-on-frame-label": "Festepunktet sit på ramma",
"appearance-type-description": "Vel mellom flytande pille eller statisk oppgåveline fest til randa.",
"appearance-type-floating": "Flytande",
"appearance-type-label": "Festepunktstil",
"appearance-type-static": "Statisk",
"enabled-description": "Viser eller gøymer festepunktet heilt.",
"enabled-label": "Slå på festepunkt",
"monitors-desc": "Viser festepunktet på visse skjermar. Dersom du ikkje vel noko, viser det seg på alle.",
@@ -1047,13 +1078,17 @@
"fonts-monospace-scale-description": "Aukar eller minkar kor stor fastbreiddeskrifta er.",
"fonts-monospace-scale-label": "Fastbreiddeskriftstorleik",
"fonts-monospace-search-placeholder": "Leit etter fastbreiddeskrift...",
"fonts-reset-scaling": "Nullstill skalering",
"fonts-title": "Skrifttypar",
"keybinds-conflict-description": "Tastkombinasjonen er alt gjeven til {action}.",
"keybinds-conflict-title": "Beinknapp-konflikt",
"keybinds-description": "Styr navigasjonsknappar for panel og programveljaren.",
"keybinds-down": "Flytt nedover",
"keybinds-enter": "Stadfest / Hende",
"keybinds-escape": "Steng / Attende",
"keybinds-left": "Flytt til venstre",
"keybinds-modifier-description": "Beinknappar må ha styringstast (Ctrl eller Alt).",
"keybinds-modifier-title": "Krev styringstast",
"keybinds-remove": "Fjern",
"keybinds-right": "Flytt til høgre",
"keybinds-title": "Navigasjonsknappar",
"keybinds-up": "Flytt oppover",
@@ -1068,6 +1103,8 @@
"profile-select-avatar": "Vel brukarbilete",
"profile-title": "Profil",
"profile-tooltip": "Brukarbilete",
"reverse-scrolling-description": "Snu om den tolka rulleretninga.",
"reverse-scrolling-label": "Omsnudd rulling",
"screen-corners-desc": "Måta til avrunding på skjermhyrna og synlege effektar.",
"screen-corners-radius-description": "Endra på dei avrunda hyrna på skjermen.",
"screen-corners-radius-label": "Skjermhyrneradius",
@@ -1145,6 +1182,8 @@
"settings-density-description": "Endra på kor store applikasjonsikon er, og kor tette dei er i veljaren.",
"settings-density-label": "Tettleik",
"settings-desc": "Vel korleis programveljaren ser ut og kva det gjer.",
"settings-enable-session-search-description": "Vis øktshandlingar (lås, slå av, start å nyo, osb.) ved søk i veljaren.",
"settings-enable-session-search-label": "Slå på øktssøk",
"settings-enable-settings-search-description": "Viser innstillingar når ein leitar i programveljaren.",
"settings-enable-settings-search-label": "Søk i innstillingar",
"settings-enable-windows-search-description": "Søk og fokuser aktive vindauge.",
@@ -1252,10 +1291,11 @@
"duration-low-urgency-label": "Mindre viktig",
"duration-normal-urgency-description": "Kor lenge vanlege varsel er synlege.",
"duration-normal-urgency-label": "Vanleg",
"duration-reset": "Lengd på nullstillingsavbrot",
"duration-respect-expire-description": "Bruk tidsavbrotet fastsett i varselet.",
"duration-respect-expire-label": "Vyrd tidsavbrot",
"duration-title": "Varsellengd",
"history-clear-dismiss-description": "Slett varsel frå historikk når avvist.",
"history-clear-dismiss-label": "Slett når avvist",
"history-critical-urgency-description": "Lagrar kritiske varsel i historikken.",
"history-critical-urgency-label": "Lagra kritiske varsel i historikken",
"history-desc": "Styrer kva for varsel vert lagra i historikken utifrå kor viktige dei er.",
@@ -1266,11 +1306,15 @@
"monitors-desc": "Viser varsel på visse skjermar. Dersom du ikkje vel noko, viser varsel seg på alle.",
"settings-always-on-top-description": "Viser varsel over fullskjermsvindaugo og andre lag.",
"settings-background-opacity-description": "Endrar på kor ugjennomsynlege varselbakgrunnar er.",
"settings-density-description": "Vel varselkorttettleik",
"settings-density-label": "Tettleik",
"settings-desc": "Styrer korleis varsel ser ut og ter seg.",
"settings-do-not-disturb-description": "Slår av varselpoppopp når dette er på.",
"settings-enabled-description": "Slår på eller av varseldaemonen, krev at du startar Noctaliaskal å nyo.",
"settings-enabled-label": "Slå på varsel",
"settings-location-description": "Der varsel står opp på skjermen.",
"settings-markdown-description": "Gjev att innhaldet i varselet med Markdown-formattering.",
"settings-markdown-label": "Slå på Markdown",
"sounds-desc": "Styrer varselljod og ljodstyrke.",
"sounds-enabled-description": "Slår på ljodeffektar for innkomande varsel.",
"sounds-enabled-label": "Slå på varselljod",
@@ -1341,64 +1385,66 @@
"types-volume-label": "Utdata-ljodstyrke"
},
"plugins": {
"auto-update": "Oppdater plugins automatisk",
"auto-update-description": "Oppdaterer alle plugins automatisk når skalet byrjar.",
"available-description": "Leit etter og installer plugins frå tilmåta kjelder.",
"available-label": "Tilgjengelege plugins",
"available-no-plugins-description": "Sjekk pluginkjeldene dine eller lasta inn lista å nyo.",
"available-no-plugins-label": "Ingen tilgjengelege plugins",
"auto-update": "Oppdater tillegg automatisk",
"auto-update-description": "Oppdaterer alle tillegga automatisk når skalet byrjar.",
"available-description": "Leit etter og installer tillegg frå tilmåta kjelder.",
"available-label": "Tilgjengelege tillegg",
"available-no-plugins-description": "Sjekk tilleggkjeldene dine eller lasta inn lista å nyo.",
"available-no-plugins-label": "Ingen tilgjengelege tillegg",
"check-for-updates": "Leit etter oppdateringar",
"checking-for-updates": "Leitar etter oppdateringar...",
"collision-already-installed": "Dette plugin er alt installert",
"collision-already-installed": "Dette tillegget er alt installert",
"collision-custom-version-exists": "Ein annan versjon frå \"{source}\" er alt installert",
"collision-official-version-exists": "Den ofisielle versjonen av dette plugin er alt installert",
"collision-official-version-exists": "Den ofisielle versjonen av dette tillegget er alt installert",
"development-disable": "Slå av utviklingsmodus for tillegget",
"development-enable": "Slå på utviklingsmodus for tillegget",
"filter-downloaded": "Nedlasta",
"filter-not-downloaded": "Ikkje nedlasta",
"filter-tags-description": "Filtrer plugins med kategori eller status på nedlasting.",
"filter-tags-description": "Filtrer tillegg med kategori eller status på nedlasting.",
"filter-tags-label": "Taggar",
"hot-reload-description": "Last inn plugins å nyo automatisk når filene er endra. Nyttig for plugin-utvikling.",
"hot-reload-description": "Last inn tillegg å nyo automatisk når filene er endra. Nyttig for tilleggutvikling.",
"hot-reload-label": "Innlasting på farta (utviklingsmodus)",
"hot-reloaded": "Lasta inn plugin å nyo: {name}",
"hot-reloaded": "Lasta inn tillegg å nyo: {name}",
"install-error": "Kunne ikkje installera: {error}",
"install-incompatible": "{plugin} krev Noctalia v{version} eller nyare",
"install-success": "Installerte {plugin}",
"installed-description": "Handsama og styr alle lokalinstallerte plugins.",
"installed-label": "Installerte plugins",
"installed-no-plugins-description": "Installer plugins frå \"Tilgjengelege\"-fana.",
"installed-no-plugins-label": "Ingen installerte plugins",
"installed-description": "Handsama og styr alle lokalinstallerte tillegg.",
"installed-label": "Installerte tillegg",
"installed-no-plugins-description": "Installer tillegg frå \"Tilgjengelege\"-fana.",
"installed-no-plugins-label": "Ingen installerte tillegg",
"installing": "Installerer {plugin}...",
"open-plugin-page": "Opna pluginsida",
"open-plugins-tab": "Opna plugin-innstillingar",
"open-plugin-page": "Opna tilleggsida",
"open-plugins-tab": "Opna tillegginnstillingar",
"plugin-settings-title": "{plugin}-innstillingar",
"refresh-refreshing": "Lastar inn plugins-lista å nyo...",
"refresh-tooltip": "Last inn tilgjengelege plugins å nyo",
"settings-error-not-loaded": "Plugin ikkje lasta inn",
"settings-saved": "Plugin-innstillingar lagra",
"settings-tooltip": "Plugin-innstillingar",
"refresh-refreshing": "Lastar inn tilleggslista å nyo...",
"refresh-tooltip": "Last inn tilgjengelege tillegg å nyo",
"settings-error-not-loaded": "Tillegg ikkje lasta inn",
"settings-saved": "Tillegginnstillingar lagra",
"settings-tooltip": "Tillegginnstillingar",
"source-custom": "Eigendefinert kjelde",
"sources-add-custom": "Legg til eigendefinert lager",
"sources-add-dialog-description": "Legg til eit GitHub-lager som plugin-kjelde.",
"sources-add-dialog-error": "Kunne ikkje leggja til plugin-kjelde",
"sources-add-dialog-description": "Legg til eit GitHub-lager som tilleggkjelde.",
"sources-add-dialog-error": "Kunne ikkje leggja til tilleggkjelde",
"sources-add-dialog-name": "Lagernamn",
"sources-add-dialog-name-placeholder": "Mine eigne plugins",
"sources-add-dialog-success": "La til plugin-kjelde",
"sources-add-dialog-title": "Legg til plugin-kjelde",
"sources-add-dialog-name-placeholder": "Mine eigne tillegg",
"sources-add-dialog-success": "La til tilleggkjelde",
"sources-add-dialog-title": "Legg til tilleggkjelde",
"sources-add-dialog-url": "Lageradresse",
"sources-description": "Handsama pluginlager",
"sources-description": "Handsama tillegglager",
"sources-placeholder": "Det tøffe lageret mitt",
"sources-remove-tooltip": "Slett plugin-kjelde",
"title": "Plugins",
"sources-remove-tooltip": "Slett tilleggkjelde",
"title": "Tillegg",
"translations-reloaded": "Lasta inn omsetjingar å nyo for {name}",
"uninstall-dialog-description": "Er du viss på at du vil desinstallera {plugin}? Dette slettar alt av plugin-data.",
"uninstall-dialog-title": "Desinstaller plugin",
"uninstall-dialog-description": "Er du viss på at du vil desinstallera {plugin}? Dette slettar alt av tilleggdata.",
"uninstall-dialog-title": "Desinstaller tillegg",
"uninstall-error": "Kunne ikkje desinstallera: {error}",
"uninstall-success": "Desinstallerte {plugin}",
"uninstalling": "Desinstallerer {plugin}...",
"update-all": "Oppdater alle ({count})",
"update-all-success": "Klarte å oppdatere alle plugins",
"update-available": "Ny plugin-oppdatering tilgjengeleg",
"update-available-plural": "Plugin-oppdateringar tilgjengelege ({count})",
"update-error": "Kunne ikkje oppdatera plugin: {plugin}: {error}",
"update-all-success": "Klarte å oppdatere alle tillegga",
"update-available": "Ny tilleggoppdatering tilgjengeleg",
"update-available-plural": "Tilleggoppdateringar tilgjengelege ({count})",
"update-error": "Kunne ikkje oppdatera tillegg: {plugin}: {error}",
"update-pending": "v{current} → v{new} (krev Noctalia v{required})",
"update-success": "Oppdaterte {plugin} til v{version}",
"update-version": "v{current} → v{new}",
@@ -1432,7 +1478,9 @@
"large-buttons-style-label": "Stil med store knappar",
"position-description": "Vel kvar øktsmenyen opnar seg på skjermen når du opnar han.",
"show-header-description": "Viser tittel og stengeknapp øvst på øktsmenyen.",
"show-header-label": "Vis topptekst"
"show-header-label": "Vis topptekst",
"show-keybinds-description": "Syn knappefjøltips på øktval",
"show-keybinds-label": "Syn beinknappar"
},
"system-monitor": {
"critical-color-label": "Kritisk farge",
@@ -1470,16 +1518,13 @@
"box-border-label": "Ilåtgrense",
"box-border-radius-description": "Styrer kor avrunda hyrna er på viktige oppsettsområde, til dømes på stolpar, kort og innhaldspanel.",
"box-border-radius-label": "Ilåtradius",
"box-border-radius-reset": "Nullstill ilåtradius",
"control-border-radius-description": "Styrer kor bøygde interaktiv delar er, til dømes knappar, brytarar og tekstfelt.",
"control-border-radius-label": "Inndataradius",
"control-border-radius-reset": "Nullstill inndataradius",
"desc": "Måta til korleis grensesnittet ser ut og ter seg.",
"dim-desktop-description": "Mørknar skrivebordet når panel eller menyar er opne.",
"dim-desktop-label": "Mørkna skrivebord",
"dimmer-opacity-description": "Set kor mørkt det vert når skrivebordet mørknar.",
"dimmer-opacity-label": "Skrivebordsmørker",
"dimmer-opacity-reset": "Set att skrivebordsmørker",
"panel-background-opacity-description": "Set kor ugjennomsynleg bakgrunnen er for alle panel (oppgåvelina, programveljar, innstillingar osb.).",
"panel-background-opacity-label": "Ugjennomsynlege panelbakgrunnar",
"panels-attached-to-bar-description": "Panel låser seg til oppgåvelina og skjermrendene, som gjev ein stilig utsjånad med innbøygde hyrne.",
@@ -1488,7 +1533,6 @@
"panels-overlay-label": "Haldt panel og oppgåvelina øvst",
"scaling-description": "Endrar kor stor brukargrensesnittet er, sett bort ifrå oppgåvelina.",
"scaling-label": "Grensesnittskalering",
"scaling-reset-scaling": "Nullstill grensesnittskalering",
"settings-panel-mode-description": "Vel oppsett for innstillingar (kan krevja at du må opna dei på nytt).",
"settings-panel-mode-label": "Oppsett for innstillingar",
"shadows-description": "Slår på skuggar under liner og panel.",
@@ -1515,6 +1559,8 @@
"look-feel-fill-color-description": "Vel fyllfarge som kan visast bak bakgrunnsbiletet.",
"look-feel-fill-mode-description": "Vel korleis biletet skal skalerast for å høva skjermoppløysinga di.",
"look-feel-fill-mode-label": "Fyllmodus",
"look-feel-skip-startup-transition-description": "Hopp over bakgrunnsanimasjonen når skalet byrjar.",
"look-feel-skip-startup-transition-label": "Hopp over startanimasjon",
"look-feel-title": "Utsjånad",
"look-feel-transition-duration-description": "Kor lenge endringsanimasjonane tek i sekund.",
"look-feel-transition-duration-label": "Endringstid",
@@ -1737,6 +1783,7 @@
"collapse": "Gøym sidestolpen",
"copy-address": "Kopier adresse",
"delete-notification": "Slett varsel",
"dismiss-notification": "Avvis varsel",
"do-not-disturb-enabled": "Ikkje forstyrr",
"expand": "Brett ut sidestolpen",
"forget-network": "Gløym nettverk",
@@ -1807,6 +1854,8 @@
"categories-anime": "Anime",
"categories-label": "Kategoriar",
"categories-people": "Folk",
"color-extraction-disabled": "Tak fargane frå bakgrunnsbiletet",
"color-extraction-enabled": "Bruk føredefinerte fargeskalaar",
"order-asc": "Oppover",
"order-desc": "Nedover",
"order-label": "Rekkjefylgd",
+109 -13
View File
@@ -8,6 +8,7 @@
"disable-dnd": "Wyłącz 'Nie przeszkadzać'",
"disable-wifi": "Wyłącz Wi-Fi",
"disconnect-vpn": "Odłącz {name}",
"dock-settings": "Ustawienia docka",
"enable-bluetooth": "Włącz Bluetooth",
"enable-dnd": "Włącz 'Nie przeszkadzać'",
"enable-wifi": "Włącz Wi-Fi",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Wyświetl wybór profilu zasilania w panelu baterii.",
"show-power-profile-label": "Pokaż kontrolki profilu zasilania"
},
"brightness": {
"apply-all-description": "Zmień jasność dla wszystkich monitorów podczas używania kółka przewijania.",
"apply-all-label": "Zastosuj zmiany przewijania do wszystkich monitorów"
},
"clock": {
"clock-display-description": "Dostosuj wyświetlanie zegara, dodając tokeny z poniższej listy. Aby użyć formatu 12-godzinnego, musisz dołączyć token 'AP'.",
"clock-display-label": "Wyświetlanie zegara",
@@ -87,7 +92,7 @@
"browse-file": "Przeglądaj pliki",
"browse-library": "Przeglądaj bibliotekę",
"color-selection-description": "Zastosuj kolory motywu do ikon.",
"enable-colorization-description": "Włącz koloryzację ikony centrum sterowania, stosując kolory motywu.",
"enable-colorization-description": "Włącz koloryzację ikony, stosując kolory motywu.",
"icon-description": "Wybierz ikonę z biblioteki lub niestandardowy plik.",
"select-custom-icon": "Wybierz własną ikonę",
"use-distro-logo-description": "Użyj logo twojej dystrybucji zamiast niestandardowej ikony.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Jeśli tekst wyjściowy pasuje do tej wartości, przycisk zostanie zwinięty.",
"collapse-condition-label": "Warunek zwinięcia",
"color-selection-description": "Zastosuj kolory motywu do ikony i tekstu.",
"default-tooltip": "Przycisk niestandardowy, konfiguruj w ustawieniach",
"display-command-output-description": "Wpisz polecenie do uruchamiania w regularnych odstępach czasu. Pierwsza linia wyniku zostanie wyświetlona jako tekst.",
"display-command-output-label": "Wyświetl wynik polecenia",
"display-command-output-stream-description": "Wpisz polecenie do uruchamiania w trybie ciągłym.",
"dynamic-text": "Dynamiczny tekst",
"enable-colorization-description": "Włącz kolorowanie ikony i tekstu niestandardowego przycisku, stosując kolory motywu.",
"enable-colorization-label": "Włącz kolorowanie",
"general-tooltip-text-description": "Niestandardowy tekst do wyświetlenia w dymku przycisku.",
"general-tooltip-text-label": "Niestandardowy tekst podpowiedzi",
"hide-mode-always-expanded": "Zawsze rozwinięty",
"hide-mode-description": "Kontroluje widoczność widżetu, gdy polecenie nie zwraca wyniku.",
"hide-mode-expand-with-output": "Rozwiń, gdy jest wynik",
@@ -128,16 +136,22 @@
"right-click-description": "Polecenie do wykonania po kliknięciu prawym przyciskiem myszy.",
"right-click-label": "Prawy przycisk",
"right-click-update-text": "Aktualizuj tekst po kliknięciu prawym przyciskiem",
"show-exec-tooltip-description": "Pokaż podpowiedzi ze szczegółami poleceń (lewy/prawy/środkowy klik, kółko).",
"show-exec-tooltip-label": "Pokaż podpowiedzi poleceń",
"show-icon-description": "Przełącza widoczność ikony widżetu.",
"show-icon-label": "Pokaż ikonę",
"show-text-tooltip-description": "Pokaż dymki z podpowiedzią z wyjściem polecenia tekstowego.",
"show-text-tooltip-label": "Pokaż dynamiczne etykietki tekstowe",
"text-stream-description": "Linie przesyłane strumieniowo z polecenia będą wyświetlane jako tekst na przycisku.",
"text-stream-label": "Strumień",
"wheel-description": "Polecenie do wykonania przy użyciu kółka myszy.<br>Użyj $delta dla wartości przesunięcia kółka w poleceniu.",
"wheel-down": "Rolka w dół",
"wheel-down-description": "Polecenie do wykonania przy przewijaniu kółkiem w dół.",
"wheel-down-label": "Polecenie kółka w dół",
"wheel-label": "Kółko myszy",
"wheel-mode-separate-description": "Włącz oddzielne polecenia dla przewijania w górę i w dół.",
"wheel-mode-separate-label": "Oddzielne polecenia kółka",
"wheel-up": "Rolka w górę",
"wheel-up-description": "Polecenie do wykonania przy przewijaniu kółkiem w górę.",
"wheel-up-label": "Polecenie kółka w górę",
"wheel-update-text": "Aktualizuj tekst po użyciu kółka"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Akcje",
"active": "Aktywny",
"add": "Dodaj",
"appearance": "Wygląd",
"apply": "Zastosuj",
@@ -363,6 +378,7 @@
"available": "Dostępne",
"back": "Powrót",
"battery": "Bateria",
"behavior": "Zachowanie",
"bluetooth": "Bluetooth",
"brightness": "Jasność",
"browse": "Przeglądaj",
@@ -395,6 +411,7 @@
"disconnected": "Rozłączone",
"disconnecting": "Rozłączanie...",
"display-mode": "Tryb wyświetlania",
"documentation": "Dokumentacja",
"download": "Pobierz",
"duration": "Czas trwania",
"dysfunctional": "Dysfunkcyjny",
@@ -457,7 +474,8 @@
"previous": "Poprzedni",
"primary": "Podstawowy",
"random": "Losowy",
"reboot": "Restart",
"reboot": "Uruchom ponownie",
"reboot-to-uefi": "Uruchom ponownie do UEFI",
"record": "Rozpocznij nagrywanie",
"refresh": "Odśwież",
"required": "(wymagane)",
@@ -470,6 +488,8 @@
"scanning": "Skanowanie...",
"screen-corners": "Narożniki ekranu",
"search": "Szukaj",
"second": "{count} sekunda",
"second-plural": "{count} sekund",
"secondary": "Dodatkowy",
"security": "Bezpieczeństwo",
"select": "Wybierz",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Kliknij, aby zwinąć",
"click-to-expand": "Kliknij, aby rozwinąć",
"description": "Twoje powiadomienia pojawią się tutaj, gdy nadejdą.",
"no-notifications": "Brak powiadomień"
@@ -751,6 +772,9 @@
"visualizer-type-description": "Wybierz typ wizualizacji odtwarzania multimediów.",
"visualizer-type-label": "Typ wizualizacji",
"volumes-desc": "Dostosuj głośność i poziomy dźwięku.",
"volumes-feedback-sound-file-description": "Ścieżka do pliku dźwiękowego odtwarzanego podczas zmiany głośności.",
"volumes-feedback-sound-file-label": "Plik dźwiękowy informacji zwrotnej głośności",
"volumes-feedback-sound-file-select-title": "Wybierz plik dźwiękowy informacji zwrotnej o głośności",
"volumes-input-volume-description": "Poziom głośności wejścia mikrofonu.",
"volumes-mute-input-description": "Wycisz domyślne wejście audio (mikrofon).",
"volumes-mute-input-label": "Wycisz wejście audio",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "Kolor kapsuły",
"appearance-capsule-opacity-description": "Ustaw poziom przezroczystości tła widżetów, gdy kapsuła jest widoczna.",
"appearance-capsule-opacity-label": "Przezroczystość kapsuły",
"appearance-content-padding-description": "Dostosuj odstęp między krawędziami paska a widżetami.",
"appearance-content-padding-label": "Odstęp treści",
"appearance-density-description": "Dostosuj odstępy paska dla kompaktowego lub przestronnego wyglądu.",
"appearance-density-label": "Zagęszczenie paska",
"appearance-desc": "Dostosuj wygląd i pozycję paska.",
"appearance-display-mode-description": "Wybierz, kiedy pasek jest widoczny.",
"appearance-floating-description": "Wyświetl pasek jako pływającą 'pigułkę'.",
"appearance-floating-label": "Pływający pasek",
"appearance-font-scale-description": "Dostosuj skalę rozmiaru czcionki dla tekstu wyświetlanego na pasku.",
"appearance-font-scale-label": "Skala czcionki",
"appearance-frame-radius": "Promień wewnętrzny",
"appearance-frame-settings-description": "Dostosuj grubość ramki i wewnętrzny promień narożników",
"appearance-frame-settings-label": "Ustawienia ramki",
@@ -798,12 +826,16 @@
"appearance-position-label": "Pozycja paska",
"appearance-show-capsule-description": "Pokaż tła widżetów.",
"appearance-show-capsule-label": "Pokaż kapsułę",
"appearance-show-on-workspace-switch-description": "Automatycznie krótko wyświetlaj Bar, gdy zmieni się obszar roboczy.",
"appearance-show-on-workspace-switch-label": "Pokaż pasek przy zmianie obszaru roboczego",
"appearance-show-outline-description": "Wyświetla widoczne obramowanie wokół każdego widżetu.",
"appearance-show-outline-label": "Pokaż obramowanie widżetów",
"appearance-type-description": "Wybierz styl paska: Prosty, Pływający lub Obramowany.",
"appearance-type-label": "Typ paska",
"appearance-use-separate-opacity-description": "Umożliwia użycie oddzielnej wartości krycia dla tła paska.",
"appearance-use-separate-opacity-label": "Użyj osobnej przezroczystości słupków",
"appearance-widget-spacing-description": "Dostosuj odstępy między każdym widżetem na pasku.",
"appearance-widget-spacing-label": "Odstępy między widżetami",
"monitor-configure-widgets": "Skonfiguruj widżety",
"monitor-override-settings": "Zastąp ustawienia globalne",
"monitor-override-settings-description": "Użyj niestandardowych ustawień dla tego monitora.",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "Wymagana autentykacja",
"bluetooth-devices-unnamed": "Nienazwane urządzenia nie są wyświetlane.",
"bluetooth-discoverable": "To urządzenie jest wykrywalne jako <b> {hostName} </b>, dopóki ta zakładka ustawień jest otwarta.",
"bluetooth-discoverable": "To urządzenie jest wykrywalne jako <b>{hostName}</b>, dopóki ta zakładka ustawień jest otwarta.",
"bluetooth-rssi-polling-description": "Okresowo próbkuje RSSI dla podłączonych urządzeń za pośrednictwem bluetoothctl. Może nie być dostępne dla wszystkich urządzeń; zużywa minimalne zasoby po włączeniu.",
"bluetooth-rssi-polling-interval-description": "Skonfiguruj, jak często aktualizować siłę sygnału dla podłączonych urządzeń.",
"bluetooth-rssi-polling-interval-label": "Interwał odpytywania",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "Polecenie do wykonania po kliknięciu przycisku.",
"shortcuts-custom-button-enable-on-state-logic-description": "Włącz drugą ikonę i stan 'aktywny' na podstawie polecenia sprawdzającego.",
"shortcuts-custom-button-enable-on-state-logic-label": "Włącz logikę stanu 'on'",
"shortcuts-custom-button-general-tooltip-text-description": "Ogólny opis dla podpowiedzi przycisku.",
"shortcuts-custom-button-general-tooltip-text-label": "Ogólny tekst podpowiedzi",
"shortcuts-custom-button-icon-description": "Wybierz ikonę z biblioteki.",
"shortcuts-custom-button-on-clicked-label": "Polecenie lewego kliknięcia",
"shortcuts-custom-button-on-middle-clicked-label": "Polecenie środkowego kliknięcia",
"shortcuts-custom-button-on-right-clicked-label": "Polecenie prawego kliknięcia",
"shortcuts-custom-button-on-middle-clicked-description": "Polecenie do wykonania po kliknięciu środkowym przyciskiem myszy.",
"shortcuts-custom-button-on-state-command-description": "Polecenie sprawdzające, czy przycisk powinien być w stanie 'on'. Zwraca 0 dla on, inne dla off.",
"shortcuts-custom-button-on-state-command-label": "Polecenie sprawdzające stan 'on'",
"shortcuts-custom-button-on-state-icon-description": "Ikona przycisku, gdy jest on w stanie 'on'.",
@@ -943,6 +973,7 @@
"clock-style-label": "Styl zegara",
"clock-style-minimal": "Minimalistyczny",
"clock-width-description": "Szerokość widżetu zegara w pikselach.",
"cpu-intensive-note": "Widgety oznaczone ! zużywają więcej CPU i powinny być włączane z rozwagą.",
"edit-mode-button-label": "Wejdź w tryb edycji",
"edit-mode-controls-explanation": "Lewy przycisk myszy: Przesuń widżet.\nPrawy przycisk myszy: Zmień rozmiar widżetu.",
"edit-mode-description": "Włącz tryb edycji, aby przesuwać i zmieniać pozycję widżetów pulpitu. Gdy włączone, widżety pokazują ramkę przeciągania.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "Pokaż przyciski",
"media-player-show-visualizer-description": "Pokaż nakładkę wizualizatora audio.",
"media-player-visualizer-type-description": "Wybierz typ wizualizacji dla tła odtwarzacza pulpitu.",
"overview-enabled-description": "Pokaż widżety pulpitu, gdy przegląd kompozytora jest otwarty.",
"overview-enabled-label": "Pokaż w przeglądzie",
"system-stat-layout-bottom": "Dół",
"system-stat-layout-description": "Wybierz, jak legenda jest wyświetlana względem wykresu.",
"system-stat-layout-label": "Układ",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "Pokaż tło dla widżetu pogody."
},
"display": {
"monitors-backlight-device-auto-option": "Domyślny",
"monitors-backlight-device-description": "Wybierz urządzenie podświetlenia dla tego wyjścia.",
"monitors-backlight-device-label": "Urządzenie Podświetlenia",
"monitors-brightness-step-description": "Dostosuj skok zmiany jasności (kółko myszy i skróty klawiszowe).",
"monitors-brightness-step-label": "Skok jasności",
"monitors-brightness-unavailable-ddc-disabled": "Sterowanie jasnością niedostępne. Włącz \"Obsługa zewnętrznej jasności\", aby sterować jasnością tego ekranu.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "Wymuś minimalną jasność (1%)",
"monitors-external-brightness-description": "Włącz obsługę DDCUtil dla sterowania jasnością zewnętrznych monitorów przez protokół DDC/CI.",
"monitors-external-brightness-label": "Obsługa zewnętrznej jasności",
"monitors-global-brightness-description": "Dostosuj jasność wszystkich monitorów jednocześnie.",
"monitors-global-brightness-label": "Wszystkie monitory",
"monitors-title": "Ustawienia per-monitor",
"night-light-auto-schedule-description": "Oparte na czasie zachodu i wschodu słońca w <i>{location}</i> — zalecane.",
"night-light-auto-schedule-label": "Automatyczny harmonogram",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "Ekskluzywny",
"appearance-floating-distance-description": "Ustaw odległość między dokiem a krawędzią ekranu.",
"appearance-floating-distance-label": "Odległość pływania doku",
"appearance-frame-indicator-description": "Pokaż mały wskaźnik na ramce, gdy dock jest ukryty.",
"appearance-frame-indicator-label": "Wskaźnik docka w ramce",
"appearance-group-apps-description": "Grupuj wiele okien z tej samej aplikacji w jeden wpis Docka.",
"appearance-group-apps-label": "Grupuj te same aplikacje",
"appearance-group-click-action-cycle": "Przełączaj okna",
"appearance-group-click-action-description": "Wybierz, co robi lewe kliknięcie dla zgrupowanych aplikacji.",
"appearance-group-click-action-label": "Akcja kliknięcia zgrupowanej aplikacji",
"appearance-group-click-action-list": "Otwórz listę okien",
"appearance-group-context-menu-mode-description": "Wybierz, jak zachowuje się menu kontekstowe dla zgrupowanych aplikacji.",
"appearance-group-context-menu-mode-extended": "Rozszerzony",
"appearance-group-context-menu-mode-label": "Tryb pogrupowanego menu aplikacji",
"appearance-group-context-menu-mode-list": "Lista okien",
"appearance-group-indicator-style-description": "Wybierz, jak zgrupowane wskaźniki uruchomionych aplikacji wyświetlają stan aktywnego okna.",
"appearance-group-indicator-style-dots": "Kropki",
"appearance-group-indicator-style-label": "Styl zgrupowanego wskaźnika",
"appearance-group-indicator-style-number": "Numer",
"appearance-hide-show-speed-description": "Dostosuj prędkość animacji ukrywania/pokazywania doku.",
"appearance-hide-show-speed-label": "Prędkość ukrywania/pokazywania",
"appearance-icon-size-description": "Dostosuj ogólny rozmiar doku.",
"appearance-icon-size-label": "Rozmiar doku",
"appearance-inactive-indicators-description": "Wyświetlaj wskaźniki dla wszystkich uruchomionych aplikacji, nie tylko dla aktywnej.",
"appearance-inactive-indicators-label": "Wskaźniki uruchomionych",
"appearance-launcher-position-description": "Wybierz, gdzie ikona programu uruchamiającego pojawi się w docku.",
"appearance-launcher-position-end": "Koniec",
"appearance-launcher-position-label": "Pozycja uruchamiacza",
"appearance-launcher-position-start": "Start",
"appearance-pinned-static-description": "Zawsze spychaj przypięte aplikacje na lewo w stałej kolejności.",
"appearance-pinned-static-label": "Statyczne przypięte aplikacje",
"appearance-position-description": "Wybierz, gdzie dok ma się pojawiać na ekranie.",
"appearance-position-label": "Pozycja",
"appearance-show-launcher-icon-description": "Pokaż ikonę programu uruchamiającego aplikacje w docku.",
"appearance-show-launcher-icon-label": "Pokaż launcher aplikacji",
"appearance-sit-on-frame-description": "Wyrównaj dock wewnątrz ramki, zamiast umieszczać go na wierzchu.",
"appearance-sit-on-frame-label": "Dock znajduje się na ramce",
"appearance-type-description": "Wybierz pomiędzy pływającą pigułką a statycznym paskiem przymocowanym do krawędzi.",
"appearance-type-floating": "Pływający",
"appearance-type-label": "Styl docka",
"appearance-type-static": "Statyczny",
"enabled-description": "Pokaż lub całkowicie ukryj dok.",
"enabled-label": "Włącz dok",
"monitors-desc": "Pokaż dok na konkretnych monitorach. Domyślnie na wszystkich, jeśli żaden nie zostanie wybrany.",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "Zwiększ lub zmniejsz rozmiar tekstu o stałej szerokości.",
"fonts-monospace-scale-label": "Rozmiar czcionki monospace",
"fonts-monospace-search-placeholder": "Szukaj czcionki monospace...",
"fonts-reset-scaling": "Resetuj skalowanie",
"fonts-title": "Czcionki",
"keybinds-conflict-description": "Kombinacja klawiszy jest już przypisana do {action}.",
"keybinds-conflict-title": "Konflikt skrótów klawiszowych",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "Wybierz obraz awatara",
"profile-title": "Profil",
"profile-tooltip": "Zdjęcie profilowe",
"reverse-scrolling-description": "Odwróć zinterpretowany kierunek przewijania.",
"reverse-scrolling-label": "Odwróć przewijanie",
"screen-corners-desc": "Dostosuj zaokrąglenia krawędzi ekranu i efekty wizualne.",
"screen-corners-radius-description": "Dostosuj zaokrąglenie narożników ekranu.",
"screen-corners-radius-label": "Promień narożników ekranu",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "Zmiana tapety",
"wallpaper-changed-placeholder": "np. notify-send \"Tapeta\" \"Zmieniona\""
},
"idle": {
"custom-add": "Dodaj polecenie",
"custom-description": "Uruchom polecenie shella po okresie bezczynności.",
"custom-entry-command": "Polecenie",
"custom-entry-delete": "Usuń",
"custom-entry-timeout": "Czas bezczynności",
"custom-label": "Niestandardowe Polecenia Bezczynności",
"enable-description": "Automatycznie wyłącz ekran, zablokuj lub uśpij po okresie bezczynności.",
"enable-label": "Włącz zarządzanie bezczynnością",
"fade-duration-description": "Sekundy animacji wygaszania do czerni przed uruchomieniem każdej akcji. Każdy ruch myszy anuluje wygaszanie.",
"fade-duration-label": "Czas trwania zanikania",
"lock-description": "Sekundy bezczynności przed aktywacją ekranu blokady.",
"lock-label": "Zablokuj ekran",
"screen-off-description": "Sekundy bezczynności, zanim monitory zostaną wyłączone.",
"screen-off-label": "Wyłącz ekran",
"status-description": "Czas bezczynności zgłoszony przez Compositor.",
"status-label": "Czas Bezczynności",
"suspend-description": "Sekundy bezczynności przed wstrzymaniem systemu.",
"tab-behavior": "Zachowanie",
"tab-custom": "Niestandardowy",
"timeouts-description": "Ustaw na 0, aby wyłączyć etap. Limity czasu są wstrzymane, gdy Keep Awake jest aktywny.",
"timeouts-label": "Limity Czasu",
"unavailable": "Natywne monitorowanie bezczynności nie jest dostępne na tym Compositorze."
},
"indicator": {
"default-value": "Domyślnie: {value}",
"system-default": "Domyślne ustawienia systemowe"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "Stosuje nakładkę z odcieniem do tapety ekranu blokady.",
"lock-screen-tint-strength-label": "Siła zabarwienia ekranu blokady",
"monitors-desc": "Pokaż ekran blokady na określonych monitorach. Domyślnie na wszystkich, jeśli żadne nie zostaną wybrane.",
"password-chars-description": "Urocze ikony używane do ukrywania hasła.",
"password-chars-label": "Losowe ikony haseł",
"show-hibernate-description": "Pokaż opcję 'hibernacja' w kontrolkach zasilania.",
"show-hibernate-label": "Pokaż hibernację",
"show-session-buttons-description": "Zezwalaj na dostęp do ustawień zasilania z poziomu ekranu blokady.",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "Pilność niska",
"duration-normal-urgency-description": "Jak długo widoczne są powiadomienia o priorytecie normalnym.",
"duration-normal-urgency-label": "Pilność normalna",
"duration-reset": "Resetuj czas wygasania",
"duration-respect-expire-description": "Używaj czasu wygasania ustawionego w samym powiadomieniu.",
"duration-respect-expire-label": "Respektuj czas wygasania (expire timeout)",
"duration-title": "Czas trwania powiadomienia",
"history-clear-dismiss-description": "Wyczyść powiadomienie z historii po odrzuceniu.",
"history-clear-dismiss-label": "Wyczyść po odrzuceniu",
"history-critical-urgency-description": "Zapisuj powiadomienia o krytycznym priorytecie w historii.",
"history-critical-urgency-label": "Zachowaj krytyczną pilność dla historii",
"history-desc": "Kontroluj, które powiadomienia są zapisywane w historii na podstawie ich poziomu ważności.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "Włącz lub wyłącz demona powiadomień (wymaga restartu Noctalia).",
"settings-enabled-label": "Włącz powiadomienia",
"settings-location-description": "Miejsce na ekranie, w którym pojawiają się powiadomienia.",
"settings-markdown-description": "Renderuj treść powiadomień, używając formatowania Markdown.",
"settings-markdown-label": "Włącz Markdown",
"sounds-desc": "Konfiguruj efekty dźwiękowe i głośność powiadomień.",
"sounds-enabled-description": "Włącz efekty dźwiękowe dla przychodzących powiadomień.",
"sounds-enabled-label": "Włącz dźwięki powiadomień",
@@ -1493,16 +1589,13 @@
"box-border-label": "Obrys kontenera",
"box-border-radius-description": "Dostosowuje zaokrąglenie narożników głównych sekcji układu, takich jak paski boczne, karty i panele treści.",
"box-border-radius-label": "Promień kontenerów",
"box-border-radius-reset": "Resetuj promień kontenerów",
"control-border-radius-description": "Kontroluje zaokrąglenie elementów interaktywnych, w tym przycisków, przełączników i pól tekstowych.",
"control-border-radius-label": "Promień wejść",
"control-border-radius-reset": "Resetuj promień wejść",
"desc": "Dostosuj wygląd i zachowanie interfejsu.",
"dim-desktop-description": "Przyciemniaj pulpit, gdy panele lub menu są otwarte.",
"dim-desktop-label": "Przyciemniaj pulpit",
"dimmer-opacity-description": "Ustaw poziom przezroczystości przyciemnienia pulpitu.",
"dimmer-opacity-label": "Przezroczystość przyciemnienia",
"dimmer-opacity-reset": "Resetuj przezroczystość przyciemnienia",
"panel-background-opacity-description": "Ustaw przezroczystość tła dla wszystkich paneli (pasek, launcher, ustawienia itp.).",
"panel-background-opacity-label": "Przezroczystość tła paneli",
"panels-attached-to-bar-description": "Panele przypinają się do paska i krawędzi ekranu, tworząc spójny wygląd ze stylowymi odwróconymi narożnikami.",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "Trzymaj panele i pasek na wierzchu",
"scaling-description": "Zmienia rozmiar ogólnego interfejsu użytkownika, z wyłączeniem paska.",
"scaling-label": "Skalowanie interfejsu",
"scaling-reset-scaling": "Resetuj skalowanie interfejsu",
"settings-panel-header": "Panel Ustawień",
"settings-panel-mode-description": "Wybierz układ ustawień (może wymagać ponownego otwarcia).",
"settings-panel-mode-label": "Tryb panelu ustawień",
"settings-panel-sidebar-card-style-description": "Otacza pasek boczny ustawień wypełnionym tłem z zaokrąglonymi rogami.",
"settings-panel-sidebar-card-style-label": "Styl kart paska bocznego",
"shadows-description": "Włącza cienie pod paskami i panelami.",
"shadows-direction-description": "Wybierz, gdzie rzucany jest cień.",
"shadows-direction-label": "Kierunek cienia",
@@ -1762,6 +1857,7 @@
"collapse": "Zwiń pasek boczny",
"copy-address": "Kopiuj adres",
"delete-notification": "Usuń powiadomienie",
"dismiss-notification": "Odrzuć powiadomienie",
"do-not-disturb-enabled": "Nie przeszkadzać",
"expand": "Rozwiń pasek boczny",
"forget-network": "Zapomnij sieć",
+108 -12
View File
@@ -8,6 +8,7 @@
"disable-dnd": "Desativar 'Não perturbe'",
"disable-wifi": "Desativar Wi-Fi",
"disconnect-vpn": "Desconectar {name}",
"dock-settings": "Definições do dock",
"enable-bluetooth": "Ativar Bluetooth",
"enable-dnd": "Ativar 'Não perturbe''",
"enable-wifi": "Ativar Wi-Fi",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Exibir a seleção de perfil de energia no painel da bateria.",
"show-power-profile-label": "Mostrar controles de perfil de energia"
},
"brightness": {
"apply-all-description": "Alterar o brilho de todos os monitores ao usar a roda de rolagem.",
"apply-all-label": "Aplicar alterações de rolagem a todos os monitores"
},
"clock": {
"clock-display-description": "Personalize a exibição do seu relógio adicionando tokens da lista abaixo. Para usar o formato de 12 horas, você deve incluir o token 'AP'.",
"clock-display-label": "Exibição do relógio",
@@ -87,7 +92,7 @@
"browse-file": "Navegar por arquivo",
"browse-library": "Navegar na biblioteca",
"color-selection-description": "Aplica as cores do tema aos ícones.",
"enable-colorization-description": "Ativa a colorização para o ícone do centro de controlo, aplicando as cores do tema.",
"enable-colorization-description": "Ativar colorização para o ícone, aplicando as cores do tema.",
"icon-description": "Selecione um ícone da biblioteca ou um arquivo personalizado.",
"select-custom-icon": "Selecione um ícone personalizado",
"use-distro-logo-description": "Usar o logo da sua distribuição em vez de um ícone personalizado.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Se o texto de saída corresponder a este valor, o botão será recolhido.",
"collapse-condition-label": "Condição de recolhimento",
"color-selection-description": "Aplicar cores do tema ao ícone e ao texto.",
"default-tooltip": "Botão personalizado, configurar nas configurações",
"display-command-output-description": "Digite um comando para ser executado em um intervalo regular. A primeira linha da sua saída será exibida como texto.",
"display-command-output-label": "Exibir saída de comando",
"display-command-output-stream-description": "Insira um comando para executar continuamente.",
"dynamic-text": "Texto dinâmico",
"enable-colorization-description": "Ativar colorização para o ícone e texto do botão personalizado, aplicando as cores do tema.",
"enable-colorization-label": "Ativar colorização",
"general-tooltip-text-description": "Texto personalizado para exibir na dica de ferramenta do botão.",
"general-tooltip-text-label": "Texto de dica de ferramenta personalizado",
"hide-mode-always-expanded": "Sempre expandido",
"hide-mode-description": "Controla a visibilidade do widget quando o comando não tem saída.",
"hide-mode-expand-with-output": "Expandir quando tem saída",
@@ -128,16 +136,22 @@
"right-click-description": "Comando a executar quando o botão é clicado com o botão direito.",
"right-click-label": "Clique direito",
"right-click-update-text": "Atualizar o texto exibido ao clicar com o botão direito",
"show-exec-tooltip-description": "Mostrar tooltips com detalhes do comando (clique esquerdo/direito/meio, roda).",
"show-exec-tooltip-label": "Mostrar dicas de ferramentas de comando",
"show-icon-description": "Alterna a visibilidade do ícone do widget.",
"show-icon-label": "Mostrar ícone",
"show-text-tooltip-description": "Mostrar dicas de ferramentas com a saída do comando de texto.",
"show-text-tooltip-label": "Mostrar dicas de texto dinâmicas",
"text-stream-description": "As linhas transmitidas do comando serão exibidas como texto no botão.",
"text-stream-label": "Transmissão",
"wheel-description": "Comando a executar quando a roda de rolagem é usada.<br>Use $delta para o delta da roda de rolagem no comando.",
"wheel-down": "Roda baixo",
"wheel-down-description": "Comando a executar quando a roda de rolagem é rolada para baixo.",
"wheel-down-label": "Comando de roda para baixo",
"wheel-label": "Roda de rolagem",
"wheel-mode-separate-description": "Ativar comandos separados para roda para cima e para baixo.",
"wheel-mode-separate-label": "Comandos de roda separados",
"wheel-up": "Roda cima",
"wheel-up-description": "Comando a executar quando a roda de rolagem é rolada para cima.",
"wheel-up-label": "Comando de roda para cima",
"wheel-update-text": "Atualizar texto exibido ao rolar"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Ações",
"active": "Ativo",
"add": "Adicionar",
"appearance": "Aparência",
"apply": "Aplicar",
@@ -363,6 +378,7 @@
"available": "Disponível",
"back": "Voltar",
"battery": "Bateria",
"behavior": "Comportamento",
"bluetooth": "Bluetooth",
"brightness": "Brilho",
"browse": "Navegar",
@@ -395,6 +411,7 @@
"disconnected": "Desconectado(a)",
"disconnecting": "Desconectando...",
"display-mode": "Modo de exibição",
"documentation": "Documentação",
"download": "Baixar",
"duration": "Duração",
"dysfunctional": "Disfuncional",
@@ -458,6 +475,7 @@
"primary": "Primário",
"random": "Aleatório",
"reboot": "Reiniciar",
"reboot-to-uefi": "Reiniciar para UEFI",
"record": "Iniciar gravação",
"refresh": "Atualizar",
"required": "(obrigatório)",
@@ -470,6 +488,8 @@
"scanning": "A digitalização está em andamento...",
"screen-corners": "Cantos da tela",
"search": "Pesquisar",
"second": "{count} segundo",
"second-plural": "{count} segundos",
"secondary": "Secundário",
"security": "Segurança",
"select": "Selecionar",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Clique para recolher",
"click-to-expand": "Clique para expandir",
"description": "Suas notificações aparecerão aqui assim que chegarem.",
"no-notifications": "Nenhuma notificação"
@@ -751,6 +772,9 @@
"visualizer-type-description": "Escolha um tipo de visualização para reprodução de mídia.",
"visualizer-type-label": "Tipo de visualização",
"volumes-desc": "Ajuste os controles de volume e os níveis de áudio.",
"volumes-feedback-sound-file-description": "Caminho para o arquivo de som reproduzido ao mudar o volume.",
"volumes-feedback-sound-file-label": "Arquivo de som de feedback de volume",
"volumes-feedback-sound-file-select-title": "Selecionar arquivo de som de feedback de volume",
"volumes-input-volume-description": "Nível de volume de entrada do microfone.",
"volumes-mute-input-description": "Silencia a entrada de áudio padrão (microfone).",
"volumes-mute-input-label": "Silenciar entrada de áudio",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "Cor da cápsula",
"appearance-capsule-opacity-description": "Define o nível de opacidade para fundos dos widgets quando a cápsula é mostrada.",
"appearance-capsule-opacity-label": "Opacidade da cápsula",
"appearance-content-padding-description": "Ajusta o espaçamento entre as bordas da barra e os widgets.",
"appearance-content-padding-label": "Espaçamento do conteúdo",
"appearance-density-description": "Ajuste o preenchimento da barra para um visual compacto ou espaçoso.",
"appearance-density-label": "Densidade da barra",
"appearance-desc": "Personalize a aparência e a posição da barra.",
"appearance-display-mode-description": "Escolha quando a barra está visível.",
"appearance-floating-description": "Exibe a barra como uma 'pílula' flutuante.",
"appearance-floating-label": "Barra flutuante",
"appearance-font-scale-description": "Ajustar a escala do tamanho da fonte para o texto exibido na barra.",
"appearance-font-scale-label": "Escala da fonte",
"appearance-frame-radius": "Raio Interno",
"appearance-frame-settings-description": "Ajuste a espessura da moldura e o raio interno",
"appearance-frame-settings-label": "Configurações da Moldura",
@@ -798,12 +826,16 @@
"appearance-position-label": "Posição da barra",
"appearance-show-capsule-description": "Mostra o fundo dos widgets.",
"appearance-show-capsule-label": "Mostrar cápsula",
"appearance-show-on-workspace-switch-description": "Mostrar a Bar automaticamente por um breve período quando o espaço de trabalho mudar.",
"appearance-show-on-workspace-switch-label": "Mostrar barra ao mudar de área de trabalho",
"appearance-show-outline-description": "Exibe uma borda visível ao redor de cada widget.",
"appearance-show-outline-label": "Mostrar contornos do widget",
"appearance-type-description": "Escolha o estilo da barra: Simples, Flutuante ou Emoldurada.",
"appearance-type-label": "Tipo de barra",
"appearance-use-separate-opacity-description": "Permitir usar um valor de opacidade separado para o fundo da barra.",
"appearance-use-separate-opacity-label": "Usar opacidade separada para as barras",
"appearance-widget-spacing-description": "Ajusta o espaçamento entre cada widget na barra.",
"appearance-widget-spacing-label": "Espaçamento de widgets",
"monitor-configure-widgets": "Configurar widgets",
"monitor-override-settings": "Substituir configurações globais",
"monitor-override-settings-description": "Usar definições personalizadas para este monitor.",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "Autenticação necessária",
"bluetooth-devices-unnamed": "Dispositivos sem nome não são exibidos.",
"bluetooth-discoverable": "Este dispositivo é detectável como <b> {hostName} </b> enquanto esta aba de configurações estiver aberta.",
"bluetooth-discoverable": "Este dispositivo é detectável como <b>{hostName}</b> enquanto esta aba de configurações estiver aberta.",
"bluetooth-rssi-polling-description": "Amostra periodicamente o RSSI de dispositivos conectados via bluetoothctl. Pode não estar disponível para todos os dispositivos; usa recursos mínimos quando ativado.",
"bluetooth-rssi-polling-interval-description": "Configurar com que frequência atualizar a intensidade do sinal para dispositivos conectados.",
"bluetooth-rssi-polling-interval-label": "Intervalo de sondagem",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "O comando a ser executado quando o botão é clicado.",
"shortcuts-custom-button-enable-on-state-logic-description": "Ativa um segundo ícone e um estado 'quente' com base em um comando de verificação.",
"shortcuts-custom-button-enable-on-state-logic-label": "Ativar lógica de estado ativado",
"shortcuts-custom-button-general-tooltip-text-description": "Descrição geral para a dica de ferramenta do botão.",
"shortcuts-custom-button-general-tooltip-text-label": "Texto geral da dica de ferramenta",
"shortcuts-custom-button-icon-description": "Selecione um ícone da biblioteca.",
"shortcuts-custom-button-on-clicked-label": "Comando de clique esquerdo",
"shortcuts-custom-button-on-middle-clicked-label": "Comando de clique do meio",
"shortcuts-custom-button-on-right-clicked-label": "Comando de clique direito",
"shortcuts-custom-button-on-middle-clicked-description": "Comando a executar quando o botão for clicado com o botão do meio.",
"shortcuts-custom-button-on-state-command-description": "Comando a ser executado para verificar se o botão deve estar no estado 'ligado'. Retorna 0 para ligado, diferente de zero para desligado.",
"shortcuts-custom-button-on-state-command-label": "Comando de verificação de estado ativado",
"shortcuts-custom-button-on-state-icon-description": "O ícone para o botão quando ele está no estado 'ligado'.",
@@ -943,6 +973,7 @@
"clock-style-label": "Estilo do relógio",
"clock-style-minimal": "Minimal",
"clock-width-description": "Largura do widget do relógio em pixels.",
"cpu-intensive-note": "Os widgets marcados com ! usam mais CPU e devem ser ativados com atenção.",
"edit-mode-button-label": "Entrar no modo de edição",
"edit-mode-controls-explanation": "Clique esquerdo e arraste: Mover ou redimensionar o widget.\nClique direito: Abrir as opções do menu de contexto.",
"edit-mode-description": "Ative o modo de edição para mover e reposicionar widgets da área de trabalho. Quando ativado, os widgets exibem um contorno de arrastar e podem ser reposicionados.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "Mostrar botões",
"media-player-show-visualizer-description": "Mostrar a sobreposição do visualizador de áudio.",
"media-player-visualizer-type-description": "Escolha um tipo de visualização para o fundo do reprodutor de mídia na área de trabalho.",
"overview-enabled-description": "Mostrar widgets da área de trabalho enquanto a visão geral do compositor estiver aberta.",
"overview-enabled-label": "Mostrar na visão geral",
"system-stat-layout-bottom": "Inferior",
"system-stat-layout-description": "Escolha como a legenda é exibida em relação ao gráfico.",
"system-stat-layout-label": "Layout",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "Mostrar o contêiner de fundo para o widget de clima."
},
"display": {
"monitors-backlight-device-auto-option": "Padrão",
"monitors-backlight-device-description": "Selecione um dispositivo de retroiluminação para esta saída.",
"monitors-backlight-device-label": "Dispositivo de Retroiluminação",
"monitors-brightness-step-description": "Ajuste o tamanho do passo para alterações de brilho (roda do mouse e atalhos de teclado).",
"monitors-brightness-step-label": "Tamanho do passo do brilho",
"monitors-brightness-unavailable-ddc-disabled": "Controle de brilho indisponível. Ative \"Suporte de brilho externo\" para controlar o brilho desta tela.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "Forçar brilho mínimo (1%)",
"monitors-external-brightness-description": "Ativar suporte DDCUtil para controlar o brilho em monitores externos através do protocolo DDC/CI.",
"monitors-external-brightness-label": "Suporte de brilho externo",
"monitors-global-brightness-description": "Ajustar o brilho de todos os monitores de uma vez.",
"monitors-global-brightness-label": "Todos os monitores",
"monitors-title": "Configurações por monitor",
"night-light-auto-schedule-description": "Baseado no horário do pôr do sol e do nascer do sol em <i>{location}</i> — recomendado.",
"night-light-auto-schedule-label": "Agendamento automático",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "Exclusivo",
"appearance-floating-distance-description": "Ajuste a distância de flutuação da borda da tela.",
"appearance-floating-distance-label": "Distância de flutuação da dock",
"appearance-frame-indicator-description": "Mostrar um pequeno indicador na moldura quando o dock estiver oculto.",
"appearance-frame-indicator-label": "Indicador de doca emoldurado",
"appearance-group-apps-description": "Agrupar várias janelas da mesma app em uma única entrada do Dock.",
"appearance-group-apps-label": "Agrupar aplicativos semelhantes",
"appearance-group-click-action-cycle": "Alternar janelas",
"appearance-group-click-action-description": "Escolha o que o clique esquerdo faz para aplicações agrupadas.",
"appearance-group-click-action-label": "Ação ao clicar em aplicação agrupada",
"appearance-group-click-action-list": "Abrir lista de janelas",
"appearance-group-context-menu-mode-description": "Escolha como o menu de contexto se comporta para aplicativos agrupados.",
"appearance-group-context-menu-mode-extended": "Estendido",
"appearance-group-context-menu-mode-label": "Modo de menu de aplicativos agrupado",
"appearance-group-context-menu-mode-list": "Lista de janelas",
"appearance-group-indicator-style-description": "Escolha como os indicadores de execução agrupados exibem o estado da janela focada.",
"appearance-group-indicator-style-dots": "Pontos",
"appearance-group-indicator-style-label": "Estilo de indicador agrupado",
"appearance-group-indicator-style-number": "Número",
"appearance-hide-show-speed-description": "Ajuste a velocidade da animação de ocultar/mostrar da dock.",
"appearance-hide-show-speed-label": "Velocidade de ocultar/mostrar",
"appearance-icon-size-description": "Ajustar o tamanho geral do dock.",
"appearance-icon-size-label": "Tamanho do dock",
"appearance-inactive-indicators-description": "Exibir indicadores de pílula para todos os aplicativos, não apenas para o aplicativo ativo no momento.",
"appearance-inactive-indicators-label": "Indicadores de execução",
"appearance-launcher-position-description": "Escolha onde o ícone do lançador aparece no dock.",
"appearance-launcher-position-end": "Fim",
"appearance-launcher-position-label": "Posição do lançador",
"appearance-launcher-position-start": "Iniciar",
"appearance-pinned-static-description": "Sempre posicione os ícones de aplicativos fixados à esquerda em ordem estática.",
"appearance-pinned-static-label": "Aplicativos fixados estaticamente",
"appearance-position-description": "Escolha onde o dock aparece na tela.",
"appearance-position-label": "Posição",
"appearance-show-launcher-icon-description": "Mostrar o ícone do lançador de aplicativos na dock.",
"appearance-show-launcher-icon-label": "Mostrar lançador de aplicações",
"appearance-sit-on-frame-description": "Alinhe o dock dentro da borda do quadro em vez de ficar por cima.",
"appearance-sit-on-frame-label": "O dock fica no quadro",
"appearance-type-description": "Escolha entre uma pílula flutuante ou uma barra estática anexada à borda.",
"appearance-type-floating": "Flutuante",
"appearance-type-label": "Estilo do dock",
"appearance-type-static": "Estático",
"enabled-description": "Mostrar ou ocultar o dock completamente.",
"enabled-label": "Ativar dock",
"monitors-desc": "Mostrar dock em monitores específicos. O padrão é todos se nenhum for escolhido.",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "Aumentar ou diminuir o tamanho do texto monoespaçado.",
"fonts-monospace-scale-label": "Tamanho da fonte monoespaçada",
"fonts-monospace-search-placeholder": "Pesquisar fontes monoespaçadas...",
"fonts-reset-scaling": "Redefinir escala",
"fonts-title": "Fontes",
"keybinds-conflict-description": "A combinação de teclas já está atribuída a {action}.",
"keybinds-conflict-title": "Conflito de atalhos de teclado",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "Selecionar imagem de avatar",
"profile-title": "Perfil",
"profile-tooltip": "Foto de perfil",
"reverse-scrolling-description": "Inverter a direção de rolagem interpretada.",
"reverse-scrolling-label": "Rolagem invertida",
"screen-corners-desc": "Personalize o arredondamento dos cantos da tela e os efeitos visuais.",
"screen-corners-radius-description": "Ajuste os cantos arredondados da tela.",
"screen-corners-radius-label": "Raio dos cantos da tela",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "Papel de parede alterado",
"wallpaper-changed-placeholder": "p. ex. notify-send \"Papel de parede\" \"Alterado\""
},
"idle": {
"custom-add": "Adicionar comando",
"custom-description": "Executa um comando de shell após um período de inatividade.",
"custom-entry-command": "Comando",
"custom-entry-delete": "Excluir",
"custom-entry-timeout": "Tempo de inatividade",
"custom-label": "Comandos de Inatividade Personalizados",
"enable-description": "Desligar a tela, bloquear ou suspender automaticamente após um período de inatividade.",
"enable-label": "Ativar gerenciamento de inatividade",
"fade-duration-description": "Segundos para a animação de esmaecimento para preto antes de cada ação ser acionada. Qualquer movimento do rato cancela o esmaecimento.",
"fade-duration-label": "Duração do esmaecimento",
"lock-description": "Segundos de inatividade antes da ativação da tela de bloqueio.",
"lock-label": "Bloquear tela",
"screen-off-description": "Segundos de inatividade antes que os monitores sejam desligados.",
"screen-off-label": "Desligar tela",
"status-description": "Tempo ocioso conforme relatado pelo Compositor.",
"status-label": "Tempo Ocioso",
"suspend-description": "Segundos de inatividade antes que o sistema suspenda.",
"tab-behavior": "Comportamento",
"tab-custom": "Personalizado",
"timeouts-description": "Defina como 0 para desativar uma etapa. Os tempos limite são pausados enquanto o Keep Awake estiver ativo.",
"timeouts-label": "Tempos Limite",
"unavailable": "A monitorização nativa de inatividade não está disponível neste Compositor."
},
"indicator": {
"default-value": "Padrão: {value}",
"system-default": "Padrão do sistema"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "Aplica uma sobreposição de tonalidade ao papel de parede da tela de bloqueio.",
"lock-screen-tint-strength-label": "Intensidade do matiz da tela de bloqueio",
"monitors-desc": "Mostrar tela de bloqueio em monitores específicos. O padrão é em todos, se nenhum for escolhido.",
"password-chars-description": "Ícones fofos usados para ocultar sua senha.",
"password-chars-label": "Ícones de senha aleatórios",
"show-hibernate-description": "Mostrar a opção 'hibernar' nos controles de energia.",
"show-hibernate-label": "Mostrar hibernar",
"show-session-buttons-description": "Permitir acesso às configurações de energia a partir da tela de bloqueio.",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "Urgência baixa",
"duration-normal-urgency-description": "Por quanto tempo as notificações de prioridade normal permanecem visíveis.",
"duration-normal-urgency-label": "Urgência normal",
"duration-reset": "Redefinir duração do tempo limite",
"duration-respect-expire-description": "Usa o tempo de expiração definido na notificação.",
"duration-respect-expire-label": "Respeitar tempo de expiração",
"duration-title": "Duração da notificação",
"history-clear-dismiss-description": "Limpar notificação do histórico ao descartar.",
"history-clear-dismiss-label": "Limpar ao dispensar",
"history-critical-urgency-description": "Salvar notificações de prioridade crítica no histórico.",
"history-critical-urgency-label": "Salvar urgência crítica no histórico",
"history-desc": "Controlar quais notificações são salvas no histórico com base no nível de urgência.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "Ativar ou desativar o daemon de notificações, requer reiniciar o Noctalia shell.",
"settings-enabled-label": "Ativar notificações",
"settings-location-description": "Onde as notificações aparecem na tela.",
"settings-markdown-description": "Renderizar o conteúdo da notificação usando formatação Markdown.",
"settings-markdown-label": "Ativar Markdown",
"sounds-desc": "Configurar efeitos sonoros e volume de notificações.",
"sounds-enabled-description": "Ativar efeitos sonoros para notificações recebidas.",
"sounds-enabled-label": "Ativar sons de notificação",
@@ -1493,16 +1589,13 @@
"box-border-label": "Contorno do recipiente",
"box-border-radius-description": "Ajusta o arredondamento dos cantos das principais seções do layout, como barras laterais, cards e painéis de conteúdo.",
"box-border-radius-label": "Raio do contêiner",
"box-border-radius-reset": "Redefinir raio do recipiente",
"control-border-radius-description": "Controla a curvatura de elementos interativos, incluindo botões, alternâncias e campos de texto.",
"control-border-radius-label": "Raio de entrada",
"control-border-radius-reset": "Redefinir raio de entrada",
"desc": "Personalize a aparência, a sensação e o comportamento da interface.",
"dim-desktop-description": "Escurecer a área de trabalho quando painéis ou menus estiverem abertos.",
"dim-desktop-label": "Dim área de trabalho",
"dimmer-opacity-description": "Definir o nível de opacidade para o escurecimento da área de trabalho.",
"dimmer-opacity-label": "Opacidade da área de trabalho escurecida",
"dimmer-opacity-reset": "Redefinir opacidade da área de trabalho escurecida",
"panel-background-opacity-description": "Definir a opacidade do fundo para todos os painéis (barra, iniciador, configurações, etc...).",
"panel-background-opacity-label": "Opacidade de fundo do painel",
"panels-attached-to-bar-description": "Os painéis travam na barra e nas bordas da tela, criando uma aparência perfeita com cantos invertidos elegantes.",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "Manter painéis e barra no topo",
"scaling-description": "Altera o tamanho da interface geral do usuário, excluindo a barra.",
"scaling-label": "Escalonamento da interface",
"scaling-reset-scaling": "Redefinir escala da interface",
"settings-panel-header": "Painel de Definições",
"settings-panel-mode-description": "Escolha o layout das configurações (pode ser necessário reabrir).",
"settings-panel-mode-label": "Modo do painel de configurações",
"settings-panel-sidebar-card-style-description": "Envolve a barra lateral de configurações num fundo preenchido com cantos arredondados.",
"settings-panel-sidebar-card-style-label": "Estilo de Cartão da Barra Lateral",
"shadows-description": "Ativa sombras projetadas sob barras e painéis.",
"shadows-direction-description": "Escolha onde a sombra é projetada.",
"shadows-direction-label": "Direção da sombra",
@@ -1762,6 +1857,7 @@
"collapse": "Recolher barra lateral",
"copy-address": "Copiar endereço",
"delete-notification": "Excluir notificação",
"dismiss-notification": "Descartar notificação",
"do-not-disturb-enabled": "Não perturbe",
"expand": "Expandir barra lateral",
"forget-network": "Esquecer rede",
+111 -15
View File
@@ -8,6 +8,7 @@
"disable-dnd": "Отключить режим 'Не беспокоить'",
"disable-wifi": "Отключить Wi-Fi",
"disconnect-vpn": "Отключить {name}",
"dock-settings": "Настройки дока",
"enable-bluetooth": "Включить Bluetooth",
"enable-dnd": "Не беспокоить",
"enable-wifi": "Включить Wi-Fi",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Отображать выбор профиля питания в панели батареи.",
"show-power-profile-label": "Показывать элементы управления профилем питания"
},
"brightness": {
"apply-all-description": "Изменять яркость для всех мониторов при использовании колеса прокрутки.",
"apply-all-label": "Применить изменения прокрутки ко всем мониторам"
},
"clock": {
"clock-display-description": "Настройте отображение часов, добавив токены из списка ниже. Чтобы использовать 12-часовой формат, необходимо включить токен 'AP'.",
"clock-display-label": "Отображение часов",
@@ -87,7 +92,7 @@
"browse-file": "Выбор файла",
"browse-library": "Обзор библиотеки",
"color-selection-description": "Применяет цвета темы к значкам.",
"enable-colorization-description": "Включает окрашивание для значка центра управления, применяя цвета темы.",
"enable-colorization-description": "Включить раскрашивание значка с применением цветов темы.",
"icon-description": "Выберите иконку из библиотеки или пользовательский файл.",
"select-custom-icon": "Выбрать пользовательскую иконку",
"use-distro-logo-description": "Использовать логотип вашего дистрибутива вместо пользовательской иконки.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Если выходной текст соответствует этому значению, кнопка будет скрыта.",
"collapse-condition-label": "Условие скрытия",
"color-selection-description": "Применить цвета темы к значку и тексту.",
"default-tooltip": "Пользовательская кнопка, настроить в настройках",
"display-command-output-description": "Введите команду для регулярного выполнения. Первая строка её вывода будет отображаться как текст.",
"display-command-output-label": "Вывод команды",
"display-command-output-stream-description": "Введите команду для непрерывного выполнения.",
"dynamic-text": "Динамический текст",
"enable-colorization-description": "Включить раскраску значка и текста пользовательской кнопки, применяя цвета темы.",
"enable-colorization-label": "Включить раскраску",
"general-tooltip-text-description": "Пользовательский текст для отображения во всплывающей подсказке кнопки.",
"general-tooltip-text-label": "Пользовательский текст всплывающей подсказки",
"hide-mode-always-expanded": "Всегда раскрыт",
"hide-mode-description": "Управляет видимостью виджета, когда команда не имеет вывода.",
"hide-mode-expand-with-output": "Раскрывать при наличии вывода",
@@ -128,16 +136,22 @@
"right-click-description": "Команда для выполнения при нажатии правой кнопкой мыши.",
"right-click-label": "Клик правой кнопкой",
"right-click-update-text": "Обновить отображаемый текст по правому клику",
"show-exec-tooltip-description": "Показывать всплывающие подсказки с деталями команд (левый/правый/средний клик, колесо).",
"show-exec-tooltip-label": "Показывать всплывающие подсказки команд",
"show-icon-description": "Переключает видимость иконки виджета.",
"show-icon-label": "Показать иконку",
"show-text-tooltip-description": "Показывать всплывающие подсказки с выводом текстовой команды.",
"show-text-tooltip-label": "Показывать динамические текстовые подсказки",
"text-stream-description": "Потоковые строки из команды будут отображаться как текст на кнопке.",
"text-stream-label": "Поток",
"wheel-description": "Команда для выполнения при использовании колеса прокрутки.<br>Используйте $delta для дельты колеса прокрутки в команде.",
"wheel-down": "Колесо вниз",
"wheel-down-description": "Команда для выполнения при прокрутке колеса вниз.",
"wheel-down-label": "Команда прокрутки колеса вниз",
"wheel-label": "Колесо прокрутки",
"wheel-label": "Колесо мыши",
"wheel-mode-separate-description": "Включить раздельные команды для колеса прокрутки вверх и вниз.",
"wheel-mode-separate-label": "Раздельные команды колеса прокрутки",
"wheel-up": "Колесо вверх",
"wheel-up-description": "Команда для выполнения при прокрутке колеса вверх.",
"wheel-up-label": "Команда прокрутки колеса вверх",
"wheel-update-text": "Обновить отображаемый текст при прокрутке"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Действия",
"active": "Активный",
"add": "Добавить",
"appearance": "Внешний вид",
"apply": "Применить",
@@ -363,6 +378,7 @@
"available": "Доступно",
"back": "Назад",
"battery": "Батарея",
"behavior": "Поведение",
"bluetooth": "Bluetooth",
"brightness": "Яркость",
"browse": "Обзор",
@@ -394,7 +410,8 @@
"disconnect": "Отключить",
"disconnected": "Отключено",
"disconnecting": "Отключение...",
"display-mode": "Режим oтображения",
"display-mode": "Режим отображения",
"documentation": "Документация",
"download": "Скачать",
"duration": "Продолжительность",
"dysfunctional": "Дисфункциональный",
@@ -458,6 +475,7 @@
"primary": "Основной",
"random": "Случайный",
"reboot": "Перезагрузить",
"reboot-to-uefi": "Перезагрузить в UEFI",
"record": "Начать запись",
"refresh": "Обновить",
"required": "(обязательно)",
@@ -470,6 +488,8 @@
"scanning": "Сканирование...",
"screen-corners": "Углы экрана",
"search": "Поиск",
"second": "{count} секунда",
"second-plural": "{count} секунд",
"secondary": "Вторичный",
"security": "Безопасность",
"select": "Выбрать",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Нажмите, чтобы свернуть",
"click-to-expand": "Нажмите, чтобы развернуть",
"description": "Ваши уведомления будут появляться здесь по мере их поступления.",
"no-notifications": "Нет уведомлений"
@@ -751,6 +772,9 @@
"visualizer-type-description": "Выберите тип визуализации для воспроизведения медиа.",
"visualizer-type-label": "Тип визуализации",
"volumes-desc": "Настройка регуляторов громкости и уровней аудио.",
"volumes-feedback-sound-file-description": "Путь к звуковому файлу, воспроизводимому при изменении громкости.",
"volumes-feedback-sound-file-label": "Звуковой файл обратной связи громкости",
"volumes-feedback-sound-file-select-title": "Выбрать звуковой файл обратной связи громкости",
"volumes-input-volume-description": "Уровень громкости ввода с микрофона.",
"volumes-mute-input-description": "Отключить стандартный аудиовход (микрофон).",
"volumes-mute-input-label": "Отключить аудиовход",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "Цвет капсулы",
"appearance-capsule-opacity-description": "Установить уровень непрозрачности для фона виджетов, когда капсула отображается.",
"appearance-capsule-opacity-label": "Непрозрачность капсулы",
"appearance-content-padding-description": "Отрегулируйте отступ между краями панели и виджетами.",
"appearance-content-padding-label": "Отступ содержимого",
"appearance-density-description": "Настройка отступов панели для компактного или просторного вида.",
"appearance-density-label": "Плотность панели",
"appearance-desc": "Настройка внешнего вида и положения панели.",
"appearance-display-mode-description": "Выберите, когда панель видна.",
"appearance-floating-description": "Отображает панель как плавающую 'таблетку'.",
"appearance-floating-label": "Плавающая панель",
"appearance-font-scale-description": "Настройте масштаб размера шрифта для текста, отображаемого на панели.",
"appearance-font-scale-label": "Масштаб шрифта",
"appearance-frame-radius": "Внутренний радиус",
"appearance-frame-settings-description": "Настройте толщину рамки и внутренний радиус углов",
"appearance-frame-settings-label": "Настройки рамки",
@@ -798,12 +826,16 @@
"appearance-position-label": "Положение панели",
"appearance-show-capsule-description": "Показывать фон виджетов.",
"appearance-show-capsule-label": "Показывать капсулу",
"appearance-show-on-workspace-switch-description": "Автоматически кратко показывать Bar при смене рабочего пространства.",
"appearance-show-on-workspace-switch-label": "Показывать панель при переключении рабочего пространства",
"appearance-show-outline-description": "Отображает видимую границу вокруг каждого виджета.",
"appearance-show-outline-label": "Показать контуры виджетов",
"appearance-type-description": "Выберите стиль панели: Простой, Плавающий или В рамке.",
"appearance-type-label": "Тип панели",
"appearance-use-separate-opacity-description": "Включить использование отдельного значения прозрачности для фона полосы.",
"appearance-use-separate-opacity-label": "Использовать раздельную прозрачность столбцов",
"appearance-widget-spacing-description": "Отрегулируйте интервал между каждым виджетом на панели.",
"appearance-widget-spacing-label": "Расстояние между виджетами",
"monitor-configure-widgets": "Настроить виджеты",
"monitor-override-settings": "Переопределить глобальные настройки",
"monitor-override-settings-description": "Использовать пользовательские настройки для этого монитора.",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "Требуется аутентификация",
"bluetooth-devices-unnamed": "Безымянные устройства не отображаются.",
"bluetooth-discoverable": "Это устройство обнаруживаемо как <b> {hostName} </b>, пока открыта эта вкладка настроек.",
"bluetooth-discoverable": "Это устройство обнаруживаемо как <b>{hostName}</b>, пока открыта эта вкладка настроек.",
"bluetooth-rssi-polling-description": "Периодически опрашивает RSSI для подключенных устройств через bluetoothctl. Может быть недоступно для всех устройств; при включении использует минимальные ресурсы.",
"bluetooth-rssi-polling-interval-description": "Настройте, как часто обновлять уровень сигнала для подключенных устройств.",
"bluetooth-rssi-polling-interval-label": "Интервал опроса",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "Команда для выполнения при нажатии на кнопку.",
"shortcuts-custom-button-enable-on-state-logic-description": "Включить вторую иконку и 'активное' состояние на основе команды проверки.",
"shortcuts-custom-button-enable-on-state-logic-label": "Включить логику активного состояния",
"shortcuts-custom-button-general-tooltip-text-description": "Общее описание для подсказки кнопки.",
"shortcuts-custom-button-general-tooltip-text-label": "Общий текст подсказки",
"shortcuts-custom-button-icon-description": "Выберите значок из библиотеки.",
"shortcuts-custom-button-on-clicked-label": "Команда для левого клика",
"shortcuts-custom-button-on-middle-clicked-label": "Команда для среднего клика",
"shortcuts-custom-button-on-right-clicked-label": "Команда для правого клика",
"shortcuts-custom-button-on-middle-clicked-description": "Команда для выполнения при нажатии средней кнопки мыши.",
"shortcuts-custom-button-on-state-command-description": "Команда для проверки, должна ли кнопка находиться в 'активном' состоянии. Возвращает 0 для 'включено', ненулевое для 'выключено'.",
"shortcuts-custom-button-on-state-command-label": "Команда проверки активного состояния",
"shortcuts-custom-button-on-state-icon-description": "Иконка для кнопки, когда она находится в 'активном' состоянии.",
@@ -943,6 +973,7 @@
"clock-style-label": "Стиль часов",
"clock-style-minimal": "Минимальный",
"clock-width-description": "Ширина виджета часов в пикселях.",
"cpu-intensive-note": "Виджеты, отмеченные знаком !, используют больше CPU и должны быть включены обдуманно.",
"edit-mode-button-label": "Войти в режим редактирования",
"edit-mode-controls-explanation": "Левый клик и перетаскивание: Переместить или изменить размер виджета.\nПравый клик: Открыть контекстное меню.",
"edit-mode-description": "Включите режим редактирования, чтобы перемещать и изменять положение виджетов рабочего стола. В этом режиме виджеты отображаются с контуром перетаскивания и могут быть перемещены.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "Показать кнопки",
"media-player-show-visualizer-description": "Показать наложение аудиовизуализатора.",
"media-player-visualizer-type-description": "Выберите тип визуализации для фона медиаплеера.",
"overview-enabled-description": "Показывать виджеты рабочего стола, пока обзор композитора открыт.",
"overview-enabled-label": "Показать в обзоре",
"system-stat-layout-bottom": "Низ",
"system-stat-layout-description": "Выберите, как отображается легенда относительно графика.",
"system-stat-layout-label": "Макет",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "Показать фоновый контейнер для погодного виджета."
},
"display": {
"monitors-backlight-device-auto-option": "По умолчанию",
"monitors-backlight-device-description": "Выберите устройство подсветки для этого вывода.",
"monitors-backlight-device-label": "Устройство Подсветки",
"monitors-brightness-step-description": "Настройка шага изменения яркости (колесо прокрутки и сочетания клавиш).",
"monitors-brightness-step-label": "Шаг изменения яркости",
"monitors-brightness-unavailable-ddc-disabled": "Управление яркостью недоступно. Включите \"Поддержка внешней яркости\", чтобы управлять яркостью этого дисплея.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "Обеспечить минимальную яркость (1%)",
"monitors-external-brightness-description": "Включить поддержку DDCUtil для управления яркостью на внешних дисплеях через протокол DDC/CI.",
"monitors-external-brightness-label": "Поддержка внешней яркости",
"monitors-global-brightness-description": "Настроить яркость всех мониторов одновременно.",
"monitors-global-brightness-label": "Все мониторы",
"monitors-title": "Настройки для каждого монитора",
"night-light-auto-schedule-description": "На основе времени заката и восхода солнца в <i>{location}</i> — рекомендуется.",
"night-light-auto-schedule-label": "Автоматическое расписание",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "Исключительно",
"appearance-floating-distance-description": "Установите расстояние между доком и краем экрана.",
"appearance-floating-distance-label": "Расстояние плавающего дока",
"appearance-frame-indicator-description": "Показывать небольшой индикатор на рамке, когда док скрыт.",
"appearance-frame-indicator-label": "Рамочный индикатор дока",
"appearance-group-apps-description": "Группировать несколько окон одного и того же приложения в одну запись Dock.",
"appearance-group-apps-label": "Группировать одинаковые приложения",
"appearance-group-click-action-cycle": "Переключение окон",
"appearance-group-click-action-description": "Выберите, что делает левый клик для сгруппированных приложений.",
"appearance-group-click-action-label": "Действие по клику сгруппированного приложения",
"appearance-group-click-action-list": "Открыть список окон",
"appearance-group-context-menu-mode-description": "Выберите, как контекстное меню ведет себя для сгруппированных приложений.",
"appearance-group-context-menu-mode-extended": "Расширенный",
"appearance-group-context-menu-mode-label": "Режим cгруппированного меню приложений",
"appearance-group-context-menu-mode-list": "Список окон",
"appearance-group-indicator-style-description": "Выберите, как сгруппированные индикаторы запущенных приложений отображают состояние активного окна.",
"appearance-group-indicator-style-dots": "Точки",
"appearance-group-indicator-style-label": "Стиль сгруппированного индикатора",
"appearance-group-indicator-style-number": "Число",
"appearance-hide-show-speed-description": "Настройка скорости анимации скрытия/открытия дока.",
"appearance-hide-show-speed-label": "Скорость анимации",
"appearance-icon-size-description": "Настройка общего размера дока.",
"appearance-icon-size-label": "Размер дока",
"appearance-inactive-indicators-description": "Отображать индикаторы для всех приложений, а не только для активного.",
"appearance-inactive-indicators-label": "Бегущие индикаторы",
"appearance-launcher-position-description": "Выберите, где значок запуска приложений отображается в доке.",
"appearance-launcher-position-end": "Конец",
"appearance-launcher-position-label": "Позиция запускателя",
"appearance-launcher-position-start": "Старт",
"appearance-pinned-static-description": "Всегда перемещайте закреплённые значки приложений влево в статичном порядке.",
"appearance-pinned-static-label": "Закреплённые статические приложения",
"appearance-position-description": "Выберите, где док будет отображаться на экране.",
"appearance-position-label": "Позиция",
"appearance-show-launcher-icon-description": "Показывать значок запуска приложений в доке.",
"appearance-show-launcher-icon-label": "Показать панель запуска приложений",
"appearance-sit-on-frame-description": "Выровнять док внутри границы рамки, а не поверх нее.",
"appearance-sit-on-frame-label": "док располагается на рамке",
"appearance-type-description": "Выберите между плавающей пилюлей или статической панелью, прикрепленной к краю.",
"appearance-type-floating": "Плавающий",
"appearance-type-label": "Стиль дока",
"appearance-type-static": "Статический",
"enabled-description": "Показать или скрыть док целиком.",
"enabled-label": "Включить док",
"monitors-desc": "Показывать док на определённых мониторах. По умолчанию на всех, если ни один не выбран.",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "Увеличение или уменьшение размера моноширинного текста.",
"fonts-monospace-scale-label": "Размер моноширинного шрифта",
"fonts-monospace-search-placeholder": "Поиск моноширинного шрифта...",
"fonts-reset-scaling": "Сбросить масштабирование",
"fonts-title": "Шрифты",
"keybinds-conflict-description": "Комбинация клавиш уже назначена для {action}.",
"keybinds-conflict-title": "Конфликт горячих клавиш",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "Выбрать изображение аватара",
"profile-title": "Профиль",
"profile-tooltip": "Фотография профиля",
"reverse-scrolling-description": "Инвертировать интерпретированное направление прокрутки.",
"reverse-scrolling-label": "Обратная прокрутка",
"screen-corners-desc": "Настройка скругления углов экрана и визуальных эффектов.",
"screen-corners-radius-description": "Настройка скругления углов экрана.",
"screen-corners-radius-label": "Радиус углов экрана",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "Обои изменены",
"wallpaper-changed-placeholder": "напр. notify-send \"Обои\" \"Изменены\""
},
"idle": {
"custom-add": "Добавить команду",
"custom-description": "Выполнить команду оболочки после периода бездействия.",
"custom-entry-command": "Команда",
"custom-entry-delete": "Удалить",
"custom-entry-timeout": "Время бездействия",
"custom-label": "Пользовательские Команды Простоя",
"enable-description": "Автоматически выключать экран, блокировать или приостанавливать работу после периода бездействия.",
"enable-label": "Включить управление бездействием",
"fade-duration-description": "Секунды для анимации затемнения перед выполнением каждого действия. Любое движение мыши отменяет затемнение.",
"fade-duration-label": "Длительность затухания",
"lock-description": "Секунды бездействия до активации экрана блокировки.",
"lock-label": "Заблокировать экран",
"screen-off-description": "Секунды бездействия до выключения мониторов.",
"screen-off-label": "Выключить экран",
"status-description": "Время простоя, сообщаемое Compositor.",
"status-label": "Время Простоя",
"suspend-description": "Секунды бездействия до приостановки работы системы.",
"tab-behavior": "Поведение",
"tab-custom": "Пользовательский",
"timeouts-description": "Установите 0, чтобы отключить этап. Тайм-ауты приостанавливаются, пока Keep Awake активен.",
"timeouts-label": "Тайм-ауты",
"unavailable": "Нативный мониторинг бездействия недоступен на этом Compositorе."
},
"indicator": {
"default-value": "По умолчанию: {value}",
"system-default": "По умолчанию"
@@ -1228,7 +1319,7 @@
"lock-screen": {
"allow-password-with-fprintd-description": "Когда fprintd (аутентификация по отпечатку пальца) активен, эта опция позволяет вам входить в систему с помощью пароля вместо отпечатка пальца.",
"allow-password-with-fprintd-label": "Разрешить вход по паролю с помощью fprintd",
"auto-start-auth-description": "Aвтоматически запускает аутентификацию по отпечатку пальца без необходимости нажатия клавиши или щелчка кнопки.",
"auto-start-auth-description": "Автоматически запускает аутентификацию по отпечатку пальца без необходимости нажатия клавиши или щелчка кнопки.",
"auto-start-auth-label": "Автоматический запуск аутентификации",
"clock-format-description": "Настройте формат часов, используя токены синтаксиса даты/времени.",
"clock-format-label": "Формат часов",
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "Применяет наложение оттенка к обоям экрана блокировки.",
"lock-screen-tint-strength-label": "Интенсивность тонировки экрана блокировки",
"monitors-desc": "Показать экран блокировки на определенных мониторах. По умолчанию на всех, если ни один не выбран.",
"password-chars-description": "Милые иконки, используемые для скрытия вашего пароля.",
"password-chars-label": "Случайные иконки паролей",
"show-hibernate-description": "Показывать опцию 'спящий режим' в элементах управления питанием.",
"show-hibernate-label": "Показывать спящий режим",
"show-session-buttons-description": "Разрешить доступ к настройкам питания с экрана блокировки.",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "Низкая срочность",
"duration-normal-urgency-description": "Как долго остаются видимыми уведомления с нормальным приоритетом.",
"duration-normal-urgency-label": "Нормальная срочность",
"duration-reset": "Сбросить длительность тайм-аута",
"duration-respect-expire-description": "Использовать таймаут истечения, установленный в уведомлении.",
"duration-respect-expire-label": "Учитывать таймаут истечения",
"duration-title": "Продолжительность уведомлений",
"history-clear-dismiss-description": "Удалять уведомление из истории при закрытии.",
"history-clear-dismiss-label": "Очищать при закрытии",
"history-critical-urgency-description": "Сохранять уведомления с критическим приоритетом в истории.",
"history-critical-urgency-label": "Сохранять критическую срочность в истории",
"history-desc": "Управление тем, какие уведомления сохраняются в истории в зависимости от их уровня срочности.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "Включить или отключить демон уведомлений, требуется перезапуск Noctalia shell.",
"settings-enabled-label": "Включить уведомления",
"settings-location-description": "Где уведомления появляются на экране.",
"settings-markdown-description": "Отображать содержимое уведомлений, используя форматирование Markdown.",
"settings-markdown-label": "Включить Markdown",
"sounds-desc": "Настроить звуковые эффекты и громкость уведомлений.",
"sounds-enabled-description": "Включить звуковые эффекты для входящих уведомлений.",
"sounds-enabled-label": "Включить звуки уведомлений",
@@ -1493,16 +1589,13 @@
"box-border-label": "Контур контейнера",
"box-border-radius-description": "Настраивает скругление углов основных разделов макета, таких как боковые панели, карточки и панели контента.",
"box-border-radius-label": "Радиус контейнера",
"box-border-radius-reset": "Сбросить радиус контейнера",
"control-border-radius-description": "Управляет скруглением интерактивных элементов, включая кнопки, переключатели и текстовые поля.",
"control-border-radius-label": "Радиус элементов ввода",
"control-border-radius-reset": "Сбросить радиус ввода",
"desc": "Настройка внешнего вида, ощущений и поведения интерфейса.",
"dim-desktop-description": "Затемнять рабочий стол при открытии панелей или меню.",
"dim-desktop-label": "Затемнять рабочий стол",
"dimmer-opacity-description": "Установить уровень непрозрачности для затемнения рабочего стола.",
"dimmer-opacity-label": "Непрозрачность затемнённого рабочего стола",
"dimmer-opacity-reset": "Сбросить непрозрачность затемнённого рабочего стола",
"panel-background-opacity-description": "Установить прозрачность фона для всех панелей (верхней панели, панели запуска, настроек и т. д.).",
"panel-background-opacity-label": "Прозрачность фона панелей",
"panels-attached-to-bar-description": "Панели прикрепляются к панели и краям экрана, создавая цельный вид со стильными инвертированными углами.",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "Держать панели и панель задач сверху",
"scaling-description": "Изменяет размер общего пользовательского интерфейса, исключая панель.",
"scaling-label": "Масштабирование интерфейса",
"scaling-reset-scaling": "Сбросить масштабирование интерфейса",
"settings-panel-header": "Панель настроек",
"settings-panel-mode-description": "Выберите раскладку настроек (может потребоваться перезапуск).",
"settings-panel-mode-label": "Режим панели настроек",
"settings-panel-sidebar-card-style-description": "Оборачивает боковую панель настроек в заполненный фон со скругленными углами.",
"settings-panel-sidebar-card-style-label": "Стиль карточек боковой панели",
"shadows-description": "Включает отбрасываемые тени под панелями и панелью задач.",
"shadows-direction-description": "Выберите, куда отбрасывается тень.",
"shadows-direction-label": "Направление тени",
@@ -1762,6 +1857,7 @@
"collapse": "Свернуть боковую панель",
"copy-address": "Копировать адрес",
"delete-notification": "Удалить уведомление",
"dismiss-notification": "Отклонить уведомление",
"do-not-disturb-enabled": "Не беспокоить",
"expand": "Развернуть боковую панель",
"forget-network": "Забыть сеть",
+108 -12
View File
@@ -8,6 +8,7 @@
"disable-dnd": "Inaktivera Stör inte",
"disable-wifi": "Inaktivera Wi-Fi",
"disconnect-vpn": "Koppla från {name}",
"dock-settings": "Dockinställningar",
"enable-bluetooth": "Aktivera Bluetooth",
"enable-dnd": "Aktivera Stör inte",
"enable-wifi": "Aktivera Wi-Fi",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Visa valet av strömprofil i batteripanelen.",
"show-power-profile-label": "Visa strömprofilkontroller"
},
"brightness": {
"apply-all-description": "Ändra ljusstyrka för alla bildskärmar när du använder skrollhjulet.",
"apply-all-label": "Tillämpa rullningsändringar på alla bildskärmar"
},
"clock": {
"clock-display-description": "Anpassa klockans visning genom att lägga till symboler från listan nedan. För att använda 12-timmarsformatet måste du inkludera symbolen \"AP\".",
"clock-display-label": "Klockvisning",
@@ -87,7 +92,7 @@
"browse-file": "Bläddra bland filer",
"browse-library": "Bläddra bland bibliotek",
"color-selection-description": "Tillämpa temafärger på ikoner.",
"enable-colorization-description": "Aktivera färgläggning för kontrollcenterikonen och tillämpa temafärger. ",
"enable-colorization-description": "Aktivera färgläggning för ikon, tillämpa temafärger.",
"icon-description": "Välj en ikon från biblioteket eller en anpassad fil.",
"select-custom-icon": "Välj en anpassad ikon",
"use-distro-logo-description": "Använd din distributions logotyp istället för en anpassad ikon.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Om utdatatexten matchar detta värde kommer knappen att döljas.",
"collapse-condition-label": "Dölj villkor",
"color-selection-description": "Tillämpa temafärger på ikon och text.",
"default-tooltip": "Anpassad knapp, konfigurera i inställningarna",
"display-command-output-description": "Ange ett kommando som ska köras med jämna mellanrum. Den första raden i utdata visas som text.",
"display-command-output-label": "Visa kommandoutdata",
"display-command-output-stream-description": "Ange ett kommando som ska köras kontinuerligt.",
"dynamic-text": "Dynamisk text",
"enable-colorization-description": "Aktivera färgläggning för den anpassade knappikonen och texten, tillämpa temafärger.",
"enable-colorization-label": "Aktivera färgläggning",
"general-tooltip-text-description": "Anpassad text att visa i knappens verktygstips.",
"general-tooltip-text-label": "Anpassad verktygstipsstext",
"hide-mode-always-expanded": "Alltid expanderad",
"hide-mode-description": "Styr widgetens synlighet när kommandot inte har någon utdata.",
"hide-mode-expand-with-output": "Expandera när det finns utdata",
@@ -128,16 +136,22 @@
"right-click-description": "Kommando som ska utföras när knappen högerklickas.",
"right-click-label": "Högerklicka",
"right-click-update-text": "Uppdatera visad text vid högerklick",
"show-exec-tooltip-description": "Visa verktygstips med kommandodetaljer (vänster-/höger-/mittenklick, rullhjul).",
"show-exec-tooltip-label": "Visa kommandoverktygstips",
"show-icon-description": "Växlar mellan att visa och dölja widgetens ikon.",
"show-icon-label": "Visa ikon",
"show-text-tooltip-description": "Visa verktygstips med utdata från textkommandot.",
"show-text-tooltip-label": "Visa dynamiska textverktygstips",
"text-stream-description": "Strömmade rader från kommandot visas som text på knappen.",
"text-stream-label": "Ström",
"wheel-description": "Kommando som ska utföras när rullhjulet används. <br>Använd $delta för rullhjulets delta i kommandot.",
"wheel-down": "Skrolla ned",
"wheel-down-description": "Kommando som ska utföras när rullhjulet rullas nedåt.",
"wheel-down-label": "Kommando för att rulla nedåt",
"wheel-label": "Rullhjul",
"wheel-mode-separate-description": "Aktivera separata kommandon för att rulla uppåt och nedåt.",
"wheel-mode-separate-label": "Separata hjulkommandon",
"wheel-up": "Rulla upp",
"wheel-up-description": "Kommando som ska utföras när rullhjulet rullas uppåt.",
"wheel-up-label": "Kommando för att rulla uppåt",
"wheel-update-text": "Uppdatera visad text vid rullning"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Åtgärder",
"active": "Aktiv",
"add": "Lägg till",
"appearance": "Utseende",
"apply": "Tillämpa",
@@ -363,6 +378,7 @@
"available": "Tillgänglig",
"back": "Tillbaka",
"battery": "Batteri",
"behavior": "Beteende",
"bluetooth": "Bluetooth",
"brightness": "Ljusstyrka",
"browse": "Bläddra",
@@ -395,6 +411,7 @@
"disconnected": "Frånkopplad",
"disconnecting": "Kopplar från...",
"display-mode": "Visningsläge",
"documentation": "Dokumentation",
"download": "Hämta ner",
"duration": "Varaktighet",
"dysfunctional": "Dysfunktionell",
@@ -458,6 +475,7 @@
"primary": "Primär",
"random": "Slumpmässig",
"reboot": "Starta om",
"reboot-to-uefi": "Starta om till UEFI",
"record": "Starta inspelning",
"refresh": "Uppdatera",
"required": "(krävs)",
@@ -470,6 +488,8 @@
"scanning": "Söker igenom...",
"screen-corners": "Skärmhörn",
"search": "Sök",
"second": "{count} sekund",
"second-plural": "{count} sekunder",
"secondary": "Sekundär",
"security": "Säkerhet",
"select": "Välj",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Klicka för att fälla ihop",
"click-to-expand": "Klicka för att expandera",
"description": "Dina aviseringar visas här när de kommer in. ",
"no-notifications": "Inga meddelanden"
@@ -751,6 +772,9 @@
"visualizer-type-description": "Välj en visualiseringstyp för medieuppspelning.",
"visualizer-type-label": "Visualiseringstyp",
"volumes-desc": "Justera volymkontroller och ljudnivåer.",
"volumes-feedback-sound-file-description": "Sökväg till ljudfilen som spelas upp när volymen ändras.",
"volumes-feedback-sound-file-label": "Ljudfil för volymfeedback",
"volumes-feedback-sound-file-select-title": "Välj ljudfil för volymfeedback",
"volumes-input-volume-description": "Mikrofonens ingångsvolymnivå.",
"volumes-mute-input-description": "Stäng av standardljudingången (mikrofon).",
"volumes-mute-input-label": "Stäng av ljudingång",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "Kapselfärg",
"appearance-capsule-opacity-description": "Ställ in opacitetsnivån för widgetbakgrunder när kapseln visas.",
"appearance-capsule-opacity-label": "Kapselns opacitet",
"appearance-content-padding-description": "Justera avståndet mellan fältets kanter och widgetar.",
"appearance-content-padding-label": "Innehållsavstånd",
"appearance-density-description": "Justera stapelns avstånd för ett kompakt eller rymligt utseende.",
"appearance-density-label": "Stapeldensitet",
"appearance-desc": "Anpassa stapelns utseende och position.",
"appearance-display-mode-description": "Välj när listen är synlig.",
"appearance-floating-description": "Visa stapeln som en flytande \"piller\".",
"appearance-floating-label": "Flytande stapel",
"appearance-font-scale-description": "Justera skalningen av teckenstorleken för text som visas i fältet.",
"appearance-font-scale-label": "Teckensnittsskala",
"appearance-frame-radius": "Inre radie",
"appearance-frame-settings-description": "Justera ramens tjocklek och inre hörnradie",
"appearance-frame-settings-label": "Raminställningar",
@@ -798,12 +826,16 @@
"appearance-position-label": "Stapelposition",
"appearance-show-capsule-description": "Visa widgetbakgrunder.",
"appearance-show-capsule-label": "Visa kapsel",
"appearance-show-on-workspace-switch-description": "Visa Bar automatiskt en kort stund när arbetsytan ändras.",
"appearance-show-on-workspace-switch-label": "Visa fält vid arbetsytebyte",
"appearance-show-outline-description": "Visar en synlig kant runt varje widget.",
"appearance-show-outline-label": "Visa widgetkonturer",
"appearance-type-description": "Välj stil för fältet: Enkel, Flytande eller Inramad.",
"appearance-type-label": "Fälttyp",
"appearance-use-separate-opacity-description": "Aktivera för att använda ett separat opacitetsvärde för fältets bakgrund.",
"appearance-use-separate-opacity-label": "Använd separat opacitet för fältet",
"appearance-widget-spacing-description": "Justera avståndet mellan varje widget i fältet.",
"appearance-widget-spacing-label": "Widgetavstånd",
"monitor-configure-widgets": "Konfigurera widgetar",
"monitor-override-settings": "Åsidosätt globala inställningar",
"monitor-override-settings-description": "Använd anpassade inställningar för denna skärm.",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "Autentisering krävs",
"bluetooth-devices-unnamed": "Namnlösa enheter visas inte.",
"bluetooth-discoverable": "Denna enhet är upptäckbar som <b> {hostName} </b> medan denna inställningsflik är öppen.",
"bluetooth-discoverable": "Denna enhet är upptäckbar som <b>{hostName}</b> medan denna inställningsflik är öppen.",
"bluetooth-rssi-polling-description": "Samplar periodiskt RSSI för anslutna enheter via bluetoothctl. Kanske inte tillgängligt för alla enheter; använder minimala resurser när det är aktiverat.",
"bluetooth-rssi-polling-interval-description": "Konfigurera hur ofta signalstyrkan för anslutna enheter ska uppdateras.",
"bluetooth-rssi-polling-interval-label": "Avsökningsintervall",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "Kommandot som ska utföras när knappen klickas på.",
"shortcuts-custom-button-enable-on-state-logic-description": "Aktivera en andra ikon och aktivt tillstånd baserat på ett kontrollkommando.",
"shortcuts-custom-button-enable-on-state-logic-label": "Aktivera logik för aktivt tillstånd",
"shortcuts-custom-button-general-tooltip-text-description": "Allmän beskrivning av knappens verktygstips. ",
"shortcuts-custom-button-general-tooltip-text-label": "Allmän verktygstipstext",
"shortcuts-custom-button-icon-description": "Välj en ikon från biblioteket.",
"shortcuts-custom-button-on-clicked-label": "Kommando vid vänsterklick",
"shortcuts-custom-button-on-middle-clicked-label": "Kommando vid mittenklick",
"shortcuts-custom-button-on-right-clicked-label": "Kommando vid högerklick",
"shortcuts-custom-button-on-middle-clicked-description": "Kommando som ska köras när knappen mittklickas.",
"shortcuts-custom-button-on-state-command-description": "Kommando som ska utföras för att kontrollera om knappen ska vara i läge \"på\". Returnerar 0 för på, icke-noll för av.",
"shortcuts-custom-button-on-state-command-label": "Kommando för att kontrollera om knappen är på",
"shortcuts-custom-button-on-state-icon-description": "Ikonen för knappen när den är på.",
@@ -943,6 +973,7 @@
"clock-style-label": "Klockstil",
"clock-style-minimal": "Minimal",
"clock-width-description": "Klockwidgets bredd i bildpunkter.",
"cpu-intensive-note": "Widgets markerade med ! använder mer CPU och bör aktiveras med eftertanke.",
"edit-mode-button-label": "Gå till redigeringsläge",
"edit-mode-controls-explanation": "Vänsterklicka och dra: Flytta eller ändra storlek på widgeten.\nHögerklicka: Öppna kontextmenyns alternativ.",
"edit-mode-description": "Aktivera redigeringsläge för att flytta och omplacera skrivbordswidgets. När det är aktiverat visas en dragram runt widgets och de kan omplaceras.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "Visa knappar",
"media-player-show-visualizer-description": "Visa ljudvisualiseringsöverlägget.",
"media-player-visualizer-type-description": "Välj en visualiseringstyp.",
"overview-enabled-description": "Visa skrivbordswidgetar medan kompositorns översikt är öppen.",
"overview-enabled-label": "Visa i översikt",
"system-stat-layout-bottom": "Botten",
"system-stat-layout-description": "Välj hur förklaringen visas i förhållande till diagrammet.",
"system-stat-layout-label": "Layout",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "Visa bakgrundsbehållaren för väderwidgeten."
},
"display": {
"monitors-backlight-device-auto-option": "Standard",
"monitors-backlight-device-description": "Välj en bakgrundsbelysningsenhet för denna utgång.",
"monitors-backlight-device-label": "Bakgrundsbelysningsenhet",
"monitors-brightness-step-description": "Justera stegstorleken för ljusstyrkeändringar (rullhjul och kortkommandon).",
"monitors-brightness-step-label": "Ljusstyrkestegstorlek",
"monitors-brightness-unavailable-ddc-disabled": "Ljusstyrkekontroll otillgänglig. Aktivera \"Extern ljusstyrkestöd\"för att kontrollera ljusstyrkan på denna skärm.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "Tvinga fram minsta ljusstyrka (1 %)",
"monitors-external-brightness-description": "Aktivera DDCUtil-stöd för att kontrollera ljusstyrkan på externa skärmar via DDC/CI-protokollet.",
"monitors-external-brightness-label": "Externt ljusstyrkestöd",
"monitors-global-brightness-description": "Justera ljusstyrkan för alla bildskärmar samtidigt.",
"monitors-global-brightness-label": "Alla bildskärmar",
"monitors-title": "Inställningar per skärm",
"night-light-auto-schedule-description": "Baserat på solnedgångs- och soluppgångstiden i <i>{location}</i> — rekommenderas. ",
"night-light-auto-schedule-label": "Automatisk schemaläggning",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "Exklusiv",
"appearance-floating-distance-description": "Ställ in avståndet mellan dockan och skärmens kant.",
"appearance-floating-distance-label": "Dockens flytande avstånd",
"appearance-frame-indicator-description": "Visa en liten indikator på ramen när dockan är dold.",
"appearance-frame-indicator-label": "Inramad dockindikator",
"appearance-group-apps-description": "Gruppera flera fönster från samma app till en Dock-post.",
"appearance-group-apps-label": "Gruppera samma appar",
"appearance-group-click-action-cycle": "Växla fönster",
"appearance-group-click-action-description": "Välj vad vänsterklick gör för grupperade appar.",
"appearance-group-click-action-label": "Klickåtgärd för grupperad app",
"appearance-group-click-action-list": "Öppna fönsterlista",
"appearance-group-context-menu-mode-description": "Välj hur snabbmenyn fungerar för grupperade appar.",
"appearance-group-context-menu-mode-extended": "Utökad",
"appearance-group-context-menu-mode-label": "Grupperat appmenyläge",
"appearance-group-context-menu-mode-list": "Fönsterlista",
"appearance-group-indicator-style-description": "Välj hur grupperade körande indikatorer visar fokuserat fönstertillstånd.",
"appearance-group-indicator-style-dots": "Punkter",
"appearance-group-indicator-style-label": "Grupperad indikatorstil",
"appearance-group-indicator-style-number": "Nummer",
"appearance-hide-show-speed-description": "Justera hastigheten för dockens döljnings-/visningsanimation.",
"appearance-hide-show-speed-label": "Döljnings-/visningshastighet",
"appearance-icon-size-description": "Justera dockens totala storlek. ",
"appearance-icon-size-label": "Dockstorlek",
"appearance-inactive-indicators-description": "Visa indikatorer för alla appar, inte bara den som är aktiv för tillfället.",
"appearance-inactive-indicators-label": "Indikatorer som körs",
"appearance-launcher-position-description": "Välj var startprogrammets ikon visas i dockan.",
"appearance-launcher-position-end": "Slut",
"appearance-launcher-position-label": "Startarens position",
"appearance-launcher-position-start": "Starta",
"appearance-pinned-static-description": "Flytta alltid fastnålade appikoner till vänster i statisk ordning. ",
"appearance-pinned-static-label": "Statiska fästa appar",
"appearance-position-description": "Välj var dockan ska visas på skärmen.",
"appearance-position-label": "Position",
"appearance-show-launcher-icon-description": "Visa ikonen för programstartaren i dockan.",
"appearance-show-launcher-icon-label": "Visa appstartare",
"appearance-sit-on-frame-description": "Justera dockan innanför ramkanten istället för att ligga ovanpå.",
"appearance-sit-on-frame-label": "Dockan sitter på ramen",
"appearance-type-description": "Välj mellan en flytande pillerform eller en statisk stapel fäst vid kanten.",
"appearance-type-floating": "Flytande",
"appearance-type-label": "Dockstil",
"appearance-type-static": "Statisk",
"enabled-description": "Visa eller dölj dockningsstationen helt.",
"enabled-label": "Aktivera dockningsstation",
"monitors-desc": "Visa dockningsstationen på specifika bildskärmar. Standardinställningen är alla om ingen är vald.",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "Öka eller minska storleken på text med fast bredd.",
"fonts-monospace-scale-label": "Teckensnittsstorlek med fast bredd",
"fonts-monospace-search-placeholder": "Sök teckensnitt med fast bredd...",
"fonts-reset-scaling": "Återställ skalning",
"fonts-title": "Teckensnitt",
"keybinds-conflict-description": "Tangentkombinationen är redan tilldelad {action}.",
"keybinds-conflict-title": "Tangentbindningskonflikt",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "Välj avatarbild",
"profile-title": "Profil",
"profile-tooltip": "Profilbild",
"reverse-scrolling-description": "Vänd den tolkade rullningsriktningen.",
"reverse-scrolling-label": "Omvänd rullning",
"screen-corners-desc": "Anpassa rundningen av skärmens hörn och visuella effekter.",
"screen-corners-radius-description": "Justera skärmens rundade hörn.",
"screen-corners-radius-label": "Skärmens hörnradie",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "Bakgrundsbild ändrad",
"wallpaper-changed-placeholder": "t.ex. notify-send \"Bakgrundsbild\"\"Ändrad\""
},
"idle": {
"custom-add": "Lägg till kommando",
"custom-description": "Kör ett skal-kommando efter en period av inaktivitet.",
"custom-entry-command": "Kommando",
"custom-entry-delete": "Ta bort",
"custom-entry-timeout": "Inaktivitetstid",
"custom-label": "Anpassade Inaktivitetskommandon",
"enable-description": "Stäng automatiskt av skärmen, lås eller försätt i viloläge efter en period av inaktivitet.",
"enable-label": "Aktivera inaktivitetshantering",
"fade-duration-description": "Sekunder för animationen som tonar till svart innan varje åtgärd utlöses. Alla musrörelser avbryter nedtoningen.",
"fade-duration-label": "Toningstid",
"lock-description": "Sekunder av inaktivitet innan låsskärmen aktiveras.",
"lock-label": "Lås skärm",
"screen-off-description": "Sekunder av inaktivitet innan skärmarna stängs av.",
"screen-off-label": "Stäng av skärmen",
"status-description": "Inaktiv tid som rapporterats av Compositor.",
"status-label": "Inaktiv Tid",
"suspend-description": "Sekunder av inaktivitet innan systemet försätts i viloläge.",
"tab-behavior": "Beteende",
"tab-custom": "Anpassad",
"timeouts-description": "Ställ in på 0 för att inaktivera ett steg. Tidsgränser pausas medan Keep Awake är aktivt.",
"timeouts-label": "Tidsgränser",
"unavailable": "Inbyggd inaktivitetsövervakning är inte tillgänglig på denna Compositor."
},
"indicator": {
"default-value": "Standard: {värde}",
"system-default": "Systemstandard"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "Tillämpar en färgtoningsöverlagring på låsskärmens bakgrundsbild.",
"lock-screen-tint-strength-label": "Låsskärmens toningsstyrka",
"monitors-desc": "Visa låsskärm på specifika bildskärmar. Standard är alla om inga väljs.",
"password-chars-description": "Söta ikoner som används för att dölja ditt lösenord.",
"password-chars-label": "Slumpmässiga lösenordsikoner",
"show-hibernate-description": "Visa alternativet \"viloläge\"i strömkontrollerna.",
"show-hibernate-label": "Visa viloläge",
"show-session-buttons-description": "Tillåt åtkomst till ströminställningar från låsskärmen. ",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "Låg brådskande",
"duration-normal-urgency-description": "Hur länge meddelanden med normal prioritet förblir synliga.",
"duration-normal-urgency-label": "Normal brådskande",
"duration-reset": "Återställ tidsgräns",
"duration-respect-expire-description": "Använd den tidsgräns som anges i meddelandet.",
"duration-respect-expire-label": "Respektera tidsgränsen för utgång",
"duration-title": "Meddelandets varaktighet",
"history-clear-dismiss-description": "Rensa avisering från historiken när den avfärdas.",
"history-clear-dismiss-label": "Rensa vid avfärdande",
"history-critical-urgency-description": "Spara meddelanden med kritisk prioritet i historiken.",
"history-critical-urgency-label": "Spara kritiska meddelanden i historiken",
"history-desc": "Kontrollera vilka meddelanden som sparas i historiken baserat på deras brådskande nivå.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "Aktivera eller inaktivera meddelandedemonen, kräver omstart av Noctalia-skalet.",
"settings-enabled-label": "Aktivera meddelanden",
"settings-location-description": "Var meddelanden visas på skärmen.",
"settings-markdown-description": "Rendera meddelandeinnehåll med Markdown-formatering.",
"settings-markdown-label": "Aktivera Markdown",
"sounds-desc": "Konfigurera ljud effekter och volym för meddelanden.",
"sounds-enabled-description": "Aktivera ljudeffekter för inkommande meddelanden.",
"sounds-enabled-label": "Aktivera meddelandeljud",
@@ -1493,16 +1589,13 @@
"box-border-label": "Behållarkontur",
"box-border-radius-description": "Justerar hörnrundningen för större layoutsektioner, såsom sidofält, kort och innehållspaneler.",
"box-border-radius-label": "Behållarradie",
"box-border-radius-reset": "Återställ behållarradie",
"control-border-radius-description": "Styr kurvaturen för interaktiva element, inklusive knappar, växlar och textfält.",
"control-border-radius-label": "Inmatningsradie",
"control-border-radius-reset": "Återställ inmatningsradie",
"desc": "Anpassa utseendet, känslan och beteendet hos gränssnittet.",
"dim-desktop-description": "Dämpa skrivbordet när paneler eller menyer är öppna.",
"dim-desktop-label": "Dämpa skrivbordet",
"dimmer-opacity-description": "Ställ in opacitetsnivån för dämpning av skrivbordet. ",
"dimmer-opacity-label": "Dimrad skrivbordsopacitet",
"dimmer-opacity-reset": "Återställ dimrad skrivbordsopacitet",
"panel-background-opacity-description": "Ställ in bakgrundsopaciteten för alla paneler (fält, startprogram, inställningar osv.). ",
"panel-background-opacity-label": "Panelens bakgrundsopacitet",
"panels-attached-to-bar-description": "Panelerna låses fast vid fältet och skärmens kanter, vilket skapar ett sömlöst utseende med snygga inverterade hörn.",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "Håll paneler och fält överst",
"scaling-description": "Ändrar storleken på det allmänna användargränssnittet, exklusive fältet.",
"scaling-label": "Gränssnittsskalning",
"scaling-reset-scaling": "Återställ gränssnittsskalning",
"settings-panel-header": "Inställningspanel",
"settings-panel-mode-description": "Välj inställningslayout (kan kräva att du öppnar om).",
"settings-panel-mode-label": "Inställningspanelens läge",
"settings-panel-sidebar-card-style-description": "Omsluter sidofältet för inställningar i en fylld bakgrund med rundade hörn.",
"settings-panel-sidebar-card-style-label": "Sidopanelens kortstil",
"shadows-description": "Aktiverar skuggor under fält och paneler.",
"shadows-direction-description": "Välj var skuggan ska kastas.",
"shadows-direction-label": "Skuggans riktning",
@@ -1762,6 +1857,7 @@
"collapse": "Dölj sidofält",
"copy-address": "Kopiera adress",
"delete-notification": "Ta bort avisering",
"dismiss-notification": "Avfärda avisering",
"do-not-disturb-enabled": "Stör inte",
"expand": "Expandera sidofält",
"forget-network": "Glöm nätverk",
+108 -12
View File
@@ -8,6 +8,7 @@
"disable-dnd": "'Rahatsız etmeyin'i kapat",
"disable-wifi": "Kablosuz bağlantıyı kapat",
"disconnect-vpn": "{name} bağlantısını kes",
"dock-settings": "Dock ayarları",
"enable-bluetooth": "Bluetooth'u etkinleştir",
"enable-dnd": "'Rahatsız etmeyin'i etkinleştir",
"enable-wifi": "Kablosuz bağlantıyı etkinleştir",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Pil panelinde güç profili seçimlerini göster.",
"show-power-profile-label": "Güç profili denetimlerini göster"
},
"brightness": {
"apply-all-description": "Kaydırma tekerleğini kullanırken tüm monitörlerin parlaklığını değiştir.",
"apply-all-label": "Kaydırma değişikliklerini tüm monitörlere uygula"
},
"clock": {
"clock-display-description": "Saatinizin görüntüsünü özelleştirmek için aşağıdaki listeden jetonları ekleyin. 12 saat formatını kullanmak için 'AP' jetonunu eklemelisiniz.",
"clock-display-label": "Saat görüntüleme",
@@ -87,7 +92,7 @@
"browse-file": "Dosyaya göz at",
"browse-library": "Kütüphaneye göz at",
"color-selection-description": "Simgeye tema renklerini uygular.",
"enable-colorization-description": "Kontrol merkezi simgesi için renklendirmeyi etkinleştirir, tema renklerini uygular.",
"enable-colorization-description": "Simge için renklendirmeyi etkinleştir, tema renklerini uygula.",
"icon-description": "Kütüphaneden veya özel bir dosyadan bir simge seçin.",
"select-custom-icon": "Özel bir simge seç",
"use-distro-logo-description": "Özel simge yerine dağıtımınızın logosunu kullanın.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Çıktı metni bu değerle eşleşirse düğme daralacak.",
"collapse-condition-label": "Daralma durumu",
"color-selection-description": "Tema renklerini simgeye ve metne uygula.",
"default-tooltip": "Özel düğme, ayarlarda yapılandırın",
"display-command-output-description": "Düzenli aralıklarla çalıştırılacak bir komut girin. Çıktısının ilk satırı metin olarak gösterilecektir.",
"display-command-output-label": "Komut çıktısını göster",
"display-command-output-stream-description": "Sürekli çalıştırılacak bir komut girin.",
"dynamic-text": "Hareketli metin",
"enable-colorization-description": "Özel düğme simgesi ve metni için renklendirmeyi etkinleştir, tema renklerini uygular.",
"enable-colorization-label": "Renklendirmeyi etkinleştir",
"general-tooltip-text-description": "Düğmenin araç ipucunda görüntülenecek özel metin.",
"general-tooltip-text-label": "Özel ipucu metni",
"hide-mode-always-expanded": "Her zaman geniş",
"hide-mode-description": "Komutun çıktı vermemesi durumunda gerecin görünürlüğünü kontrol eder.",
"hide-mode-expand-with-output": "Çıktı olduğunda genişlet",
@@ -128,16 +136,22 @@
"right-click-description": "Sağ düğmeye tıklandığında yürütülecek komut.",
"right-click-label": "Sağ tıklama",
"right-click-update-text": "Sağ tıklamada görüntülenen metni güncelle",
"show-exec-tooltip-description": "Komut ayrıntılarını içeren ipuçlarını göster (sol/sağ/orta tıklama, tekerlek).",
"show-exec-tooltip-label": "Komut ipuçlarını göster",
"show-icon-description": "Takım aracının simgesinin görünürlüğünü değiştirir.",
"show-icon-label": "Simgeyi göster",
"show-text-tooltip-description": "Metin komutunun çıktısıyla araç ipuçlarını göster.",
"show-text-tooltip-label": "Dinamik metin ipuçlarını göster",
"text-stream-description": "Komuttan gelen akış satırları düğmede metin olarak gösterilecektir.",
"text-stream-label": "Akış",
"wheel-description": "Kaydırma tekerleği kullanıldığında yürütülecek komut.<br>Komutta kaydırma tekerleği deltası için $delta kullanın.",
"wheel-down": "Aşağı kaydır",
"wheel-down-description": "Kaydırma tekerleği aşağı kaydırıldığında yürütülecek komut.",
"wheel-down-label": "Kaydırma tekerleği aşağı komutu",
"wheel-label": "Kaydırma tekerleği",
"wheel-mode-separate-description": "Kaydırma tekerleği yukarı ve aşağı için ayrı komutları etkinleştir.",
"wheel-mode-separate-label": "Ayrı kaydırma tekerleği komutları",
"wheel-up": "Yukarı kaydır",
"wheel-up-description": "Kaydırma tekerleği yukarı kaydırıldığında yürütülecek komut.",
"wheel-up-label": "Kaydırma tekerleği yukarı komutu",
"wheel-update-text": "Kaydırmada gösterilen metni güncelle"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Eylemler",
"active": "Aktif",
"add": "Ekle",
"appearance": "Görünüm",
"apply": "Uygula",
@@ -363,6 +378,7 @@
"available": "Mevcut",
"back": "Geri",
"battery": "Pil",
"behavior": "Davranış",
"bluetooth": "Bluetooth",
"brightness": "Parlaklık",
"browse": "Göz at",
@@ -395,6 +411,7 @@
"disconnected": "Bağlantı kesildi",
"disconnecting": "Bağlantı kesiliyor...",
"display-mode": "Görüntü modu",
"documentation": "Dokümantasyon",
"download": "İndir",
"duration": "Süre",
"dysfunctional": "İşlevsiz",
@@ -458,6 +475,7 @@
"primary": "Birincil",
"random": "Rastgele",
"reboot": "Yeniden başlat",
"reboot-to-uefi": "UEFI'ye yeniden başlat",
"record": "Kaydı Başlat",
"refresh": "Yenile",
"required": "(gerekli)",
@@ -470,6 +488,8 @@
"scanning": "Taranıyor...",
"screen-corners": "Ekran köşeleri",
"search": "Arama",
"second": "{count} saniye",
"second-plural": "{count} saniye",
"secondary": "İkincil",
"security": "Güvenlik",
"select": "Seç",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Daraltmak için tıklayın",
"click-to-expand": "Genişletmek için tıklayın",
"description": "Bildirimler geldikçe burada görünecek.",
"no-notifications": "Bildirim yok"
@@ -751,6 +772,9 @@
"visualizer-type-description": "Medya oynatma için bir görselleştirme türü seçin.",
"visualizer-type-label": "Görselleştirme türü",
"volumes-desc": "Ses kontrollerini ve ses seviyelerini ayarlayın.",
"volumes-feedback-sound-file-description": "Ses seviyesi değiştirilirken çalınan ses dosyasının yolu.",
"volumes-feedback-sound-file-label": "Ses geri bildirim ses dosyası",
"volumes-feedback-sound-file-select-title": "Ses geri bildirimi ses dosyası seç",
"volumes-input-volume-description": "Mikrofon giriş ses seviyesi.",
"volumes-mute-input-description": "Varsayılan ses girişini (mikrofon) sessize al.",
"volumes-mute-input-label": "Ses girişini sessize al",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "Kapsül rengi",
"appearance-capsule-opacity-description": "Kapsül gösterildiğinde araç takımı arka planlarının saydamlık seviyesini ayarla.",
"appearance-capsule-opacity-label": "Kapsül saydamlığı",
"appearance-content-padding-description": "Çubuk kenarları ile widget'lar arasındaki dolguyu ayarlayın.",
"appearance-content-padding-label": "İçerik dolgusu",
"appearance-density-description": "Sıkı veya geniş bir görünüm için araç çubuğu dolgusunu ayarlayın.",
"appearance-density-label": "Araç Çubuğu yoğunluğu",
"appearance-desc": "Araç çubuğunun görünümünü ve konumunu özelleştirin.",
"appearance-display-mode-description": "Çubuğun ne zaman görünür olacağını seçin.",
"appearance-floating-description": "Araç çubuğunu yüzen bir 'kapsül' olarak görüntüler. Not: Bu, ekran köşelerini kenarlara taşıyacaktır.",
"appearance-floating-label": "Yüzen araç çubuğu",
"appearance-font-scale-description": "Çubukta görüntülenen metin için yazı tipi boyutu ölçeğini ayarlayın.",
"appearance-font-scale-label": "Yazı tipi ölçeği",
"appearance-frame-radius": "İç Yarıçap",
"appearance-frame-settings-description": "Çerçeve kalınlığını ve iç köşe yarıçapını ayarlayın",
"appearance-frame-settings-label": "Çerçeve Ayarları",
@@ -798,12 +826,16 @@
"appearance-position-label": "Araç çubuğu konumu",
"appearance-show-capsule-description": "Araç takımı arka planlarını göster.",
"appearance-show-capsule-label": "Kapsülü göster",
"appearance-show-on-workspace-switch-description": "Çalışma alanı değiştiğinde Bar'ı otomatik olarak kısa bir süre göster.",
"appearance-show-on-workspace-switch-label": "Çalışma alanı değiştirildiğinde çubuğu göster",
"appearance-show-outline-description": "Her widget'ın etrafında görünür bir kenarlık görüntüler.",
"appearance-show-outline-label": "Araç kutusu ana hatlarını göster",
"appearance-type-description": "Çubuk stilini seçin: Basit, Yüzen veya Çerçeveli.",
"appearance-type-label": "Çubuk türü",
"appearance-use-separate-opacity-description": "Çubuk arka planı için ayrı bir opaklık değeri kullanmayı etkinleştir.",
"appearance-use-separate-opacity-label": "Ayrı çubuk opaklığı kullan",
"appearance-widget-spacing-description": "Çubuktaki her bir widget arasındaki boşluğu ayarlayın.",
"appearance-widget-spacing-label": "Widget aralığı",
"monitor-configure-widgets": "Araçları yapılandır",
"monitor-override-settings": "Genel ayarları geçersiz kıl",
"monitor-override-settings-description": "Bu monitör için özel ayarları kullan.",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "Kimlik doğrulama gerekli",
"bluetooth-devices-unnamed": "Adlandırılmamış cihazlar gösterilmez.",
"bluetooth-discoverable": "Bu ayarlar sekmesi açıkken bu cihaz <b> {hostName} </b> olarak keşfedilebilir.",
"bluetooth-discoverable": "Bu ayarlar sekmesi açıkken bu cihaz <b>{hostName}</b> olarak keşfedilebilir.",
"bluetooth-rssi-polling-description": "bluetoothctl aracılığıyla bağlı cihazların RSSI değerini periyodik olarak örnekler. Tüm cihazlar için mevcut olmayabilir; etkinleştirildiğinde minimum kaynak kullanır.",
"bluetooth-rssi-polling-interval-description": "Bağlı cihazlar için sinyal gücünün ne sıklıkta güncelleneceğini yapılandırın.",
"bluetooth-rssi-polling-interval-label": "Yoklama Aralığı",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "Düğmeye tıklandığında çalıştırılacak komut.",
"shortcuts-custom-button-enable-on-state-logic-description": "Bir kontrol komutuna bağlı olarak ikinci bir simgeyi ve 'etkin' durumunu etkinleştir.",
"shortcuts-custom-button-enable-on-state-logic-label": "Açık durum mantığını etkinleştir",
"shortcuts-custom-button-general-tooltip-text-description": "Düğme araç ipucu için genel açıklama.",
"shortcuts-custom-button-general-tooltip-text-label": "Genel araç i̇pucu metni",
"shortcuts-custom-button-icon-description": "Kütüphaneden bir simge seçin.",
"shortcuts-custom-button-on-clicked-label": "Sol tık komutu",
"shortcuts-custom-button-on-middle-clicked-label": "Orta tıklama komutu",
"shortcuts-custom-button-on-right-clicked-label": "Sağ tık komutu",
"shortcuts-custom-button-on-middle-clicked-description": "Düğmeye orta tıklama yapıldığında çalıştırılacak komut.",
"shortcuts-custom-button-on-state-command-description": "Düğmenin 'açık' durumda olup olmadığını kontrol etmek için çalıştırılacak komut. Açık için 0, kapalı için sıfır olmayan bir değer döndürür.",
"shortcuts-custom-button-on-state-command-label": "Durum kontrol komutu",
"shortcuts-custom-button-on-state-icon-description": "Düğme 'açık' durumdayken kullanılan simge.",
@@ -943,6 +973,7 @@
"clock-style-label": "Saat stili",
"clock-style-minimal": "Minimal",
"clock-width-description": "Saat widget'ının piksel cinsinden genişliği.",
"cpu-intensive-note": "! ile işaretlenmiş widgetlar daha fazla CPU kullanır ve dikkatli bir şekilde etkinleştirilmelidir.",
"edit-mode-button-label": "Düzenleme moduna gir",
"edit-mode-controls-explanation": "Sol tıklayıp sürükleyin: Bileşeni taşıyın veya yeniden boyutlandırın.\nSağ tıklayın: Bağlam menüsü seçeneklerini açın.",
"edit-mode-description": "Masaüstü araçlarını taşımak ve yeniden konumlandırmak için düzenleme modunu etkinleştirin. Etkinleştirildiğinde, araçlar bir sürükleme ana hattı gösterir ve yeniden konumlandırılabilir.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "Düğmeleri göster",
"media-player-show-visualizer-description": "Ses görselleştirici katmanını göster.",
"media-player-visualizer-type-description": "Masaüstü medya oynatıcı arka planı için bir görselleştirme türü seçin.",
"overview-enabled-description": "Kompozitör genel görünümü açıkken masaüstü araç takımlarını göster.",
"overview-enabled-label": "Genel bakışta göster",
"system-stat-layout-bottom": "Alt",
"system-stat-layout-description": "Efsanenin grafiğe göre nasıl görüntüleneceğini seçin.",
"system-stat-layout-label": "Düzen",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "Hava durumu widget'ı için arka plan konteynerini göster."
},
"display": {
"monitors-backlight-device-auto-option": "Varsayılan",
"monitors-backlight-device-description": "Bu çıkış için bir arka ışık cihazı seçin.",
"monitors-backlight-device-label": "Arka Işık Cihazı",
"monitors-brightness-step-description": "Parlaklık değişimleri için adım boyutunu ayarlayın (tekerlek ve klavye kısayolları).",
"monitors-brightness-step-label": "Parlaklık adım boyutu",
"monitors-brightness-unavailable-ddc-disabled": "Parlaklık kontrolü kullanılamıyor. Bu ekranın parlaklığını kontrol etmek için \"Harici parlaklık desteği\"ni etkinleştirin.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "Minimum parlaklığı zorla (%1)",
"monitors-external-brightness-description": "Harici ekranlarda parlaklığı DDC/CI protokolü üzerinden kontrol etmek için DDCUtil desteğini etkinleştir.",
"monitors-external-brightness-label": "Harici parlaklık desteği",
"monitors-global-brightness-description": "Tüm monitörlerin parlaklığını aynı anda ayarla.",
"monitors-global-brightness-label": "Tüm monitörler",
"monitors-title": "Ekran başına ayarlar",
"night-light-auto-schedule-description": "<i>{location}</i> konumunda gün batımı ve gün doğumu zamanına göre — önerilen.",
"night-light-auto-schedule-label": "Otomatik zamanlama",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "Özel",
"appearance-floating-distance-description": "Dock ile ekran kenarı arasındaki mesafeyi ayarlayın.",
"appearance-floating-distance-label": "Dock yüzen mesafesi",
"appearance-frame-indicator-description": "Dock gizlendiğinde çerçevede küçük bir gösterge göster.",
"appearance-frame-indicator-label": "Çerçeveli dock göstergesi",
"appearance-group-apps-description": "Aynı uygulamanın birden fazla penceresini tek bir Dock girişinde grupla.",
"appearance-group-apps-label": "Aynı uygulamaları grupla",
"appearance-group-click-action-cycle": "Pencereler arasında geçiş yap",
"appearance-group-click-action-description": "Gruplandırılmış uygulamalar için sol tıklamanın ne yapacağını seçin.",
"appearance-group-click-action-label": "Gruplandırılmış Uygulama Tıklama Eylemi",
"appearance-group-click-action-list": "Pencere listesini aç",
"appearance-group-context-menu-mode-description": "Gruplandırılmış uygulamalar için bağlam menüsünün nasıl davranacağını seçin.",
"appearance-group-context-menu-mode-extended": "Genişletilmiş",
"appearance-group-context-menu-mode-label": "Gruplandırılmış uygulama menüsü modu",
"appearance-group-context-menu-mode-list": "Pencere listesi",
"appearance-group-indicator-style-description": "Gruplandırılmış çalışan göstergelerin odaklanmış pencere durumunu nasıl görüntüleyeceğini seçin.",
"appearance-group-indicator-style-dots": "Noktalar",
"appearance-group-indicator-style-label": "Gruplandırılmış gösterge stili",
"appearance-group-indicator-style-number": "Sayı",
"appearance-hide-show-speed-description": "Dockun gizle/göster animasyonunun hızını ayarlayın.",
"appearance-hide-show-speed-label": "Gizle/göster hızı",
"appearance-icon-size-description": "Dockun genel boyutunu ayarlayın.",
"appearance-icon-size-label": "Dock boyutu",
"appearance-inactive-indicators-description": "Tüm uygulamalar için, sadece etkin olan için değil, gösterge haplarını göster.",
"appearance-inactive-indicators-label": "Çalışan göstergeler",
"appearance-launcher-position-description": "Başlatıcı simgesinin dock'ta nerede görüneceğini seçin.",
"appearance-launcher-position-end": "Son",
"appearance-launcher-position-label": "Başlatıcı konumu",
"appearance-launcher-position-start": "Başlat",
"appearance-pinned-static-description": "Sabit sırada, sabitlenmiş uygulama simgelerini her zaman sola itin.",
"appearance-pinned-static-label": "Sabitlenmiş statik uygulamalar",
"appearance-position-description": "Dockun ekranda nerede görüneceğini seçin.",
"appearance-position-label": "Pozisyon",
"appearance-show-launcher-icon-description": "Uygulama başlatıcı simgesini dock'ta göster.",
"appearance-show-launcher-icon-label": "Uygulama başlatıcıyı göster",
"appearance-sit-on-frame-description": "Dock'u çerçevenin kenar boşluğunun içine hizalayın, üstüne oturmak yerine.",
"appearance-sit-on-frame-label": "Dock çerçevede yer alır",
"appearance-type-description": "Yüzen bir hap veya kenara bağlı sabit bir çubuk arasından seçim yapın.",
"appearance-type-floating": "Yüzen",
"appearance-type-label": "Dock stili",
"appearance-type-static": "Statik",
"enabled-description": "Docku tamamen gösterin veya gizleyin.",
"enabled-label": "Docku etkinleştir",
"monitors-desc": "Docku belirli ekranlarda gösterin. Hiçbiri seçilmezse varsayılan olarak tümünde gösterilir.",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "Eş aralıklı metin boyutunu artırın veya azaltın.",
"fonts-monospace-scale-label": "Eş aralıklı yazı tipi boyutu",
"fonts-monospace-search-placeholder": "Eş aralıklı yazı tipi ara...",
"fonts-reset-scaling": "Ölçeklemeyi sıfırla",
"fonts-title": "Yazı tipleri",
"keybinds-conflict-description": "Tuş kombinasyonu zaten {action} için atanmış.",
"keybinds-conflict-title": "Tuş ataması çakışması",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "Avatar resmini seç",
"profile-title": "Avatar",
"profile-tooltip": "Avatar resmi",
"reverse-scrolling-description": "Yorumlanan kaydırma yönünü tersine çevir.",
"reverse-scrolling-label": "Kaydırmayı tersine çevir",
"screen-corners-desc": "Ekran köşesi yuvarlatma ve görsel efektleri özelleştirin.",
"screen-corners-radius-description": "Ekranın yuvarlatılmış köşelerini ayarlayın.",
"screen-corners-radius-label": "Ekran köşesi yarıçapı",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "Duvar kâğıdı değişti",
"wallpaper-changed-placeholder": "örn. notify-send \"Duvar Kâğıdı\" \"Değişti\""
},
"idle": {
"custom-add": "Komut Ekle",
"custom-description": "Bir süre hareketsizlikten sonra bir kabuk komutu çalıştır.",
"custom-entry-command": "Komut",
"custom-entry-delete": "Sil",
"custom-entry-timeout": "Boşta kalma süresi",
"custom-label": "Özel Boşta Kalma Komutları",
"enable-description": "Belirli bir süre işlem yapılmadığında ekranı otomatik olarak kapat, kilitle veya askıya al.",
"enable-label": "Boşta kalma yönetimini etkinleştir",
"fade-duration-description": "Her eylem tetiklenmeden önce kararan animasyonun saniye cinsinden süresi. Herhangi bir fare hareketi kararmayı iptal eder.",
"fade-duration-label": "Solma süresi",
"lock-description": "Kilit ekranı etkinleşmeden önceki hareketsizlik süresi (saniye).",
"lock-label": "Ekranı Kilitle",
"screen-off-description": "Monitörler kapanmadan önceki hareketsizlik süresi (saniye).",
"screen-off-label": "Ekranı kapat",
"status-description": "Compositor tarafından bildirilen boşta kalma süresi.",
"status-label": "Boşta Kalma Süresi",
"suspend-description": "Sistem askıya alınmadan önceki hareketsizlik süresi (saniye).",
"tab-behavior": "Davranış",
"tab-custom": "Özel",
"timeouts-description": "Bir aşamayı devre dışı bırakmak için 0 olarak ayarlayın. Keep Awake aktifken zaman aşımları duraklatılır.",
"timeouts-label": "Zaman Aşımları",
"unavailable": "Yerel boşta kalma izleme bu Compositor'da mevcut değil."
},
"indicator": {
"default-value": "Varsayılan: {value}",
"system-default": "Sistem varsayılanı"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "Kilit ekranı duvar kağıdına bir renk tonu katmanı uygular.",
"lock-screen-tint-strength-label": "Kilit ekranı ton gücü",
"monitors-desc": "Kilit ekranını belirli monitörlerde göster. Hiçbiri seçilmezse varsayılan olarak tüm monitörlerde gösterilir.",
"password-chars-description": "Şifrenizi gizlemek için kullanılan sevimli simgeler.",
"password-chars-label": "Rastgele şifre simgeleri",
"show-hibernate-description": "Güç kontrollerinde 'hazırda beklet' seçeneğini göster.",
"show-hibernate-label": "Hazırda beklet seçeneğini göster",
"show-session-buttons-description": "Kilit ekranından güç ayarlarına erişime izin ver.",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "Düşük öncelikli",
"duration-normal-urgency-description": "Normal öncelikli bildirimlerin ne kadar süreyle görüneceği.",
"duration-normal-urgency-label": "Normal öncelikli",
"duration-reset": "Zaman aşımı süresini sıfırla",
"duration-respect-expire-description": "Bildirimde ayarlanan sona erme zaman aşımını kullanın.",
"duration-respect-expire-label": "Sona erme zaman aşımına uyar",
"duration-title": "Bildirim süresi",
"history-clear-dismiss-description": "Bildirimi kapatıldığında geçmişten sil.",
"history-clear-dismiss-label": "Kapatıldığında temizle",
"history-critical-urgency-description": "Kritik öncelikli bildirimleri geçmişe kaydet.",
"history-critical-urgency-label": "Kritik aciliyeti geçmişe kaydet",
"history-desc": "Aciliyet seviyelerine göre hangi bildirimlerin geçmişe kaydedileceğini kontrol edin.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "Bildirim arka plan programını etkinleştir veya devre dışı bırak, Noctalia shell'in yeniden başlatılmasını gerektirir.",
"settings-enabled-label": "Bildirimleri etkinleştir",
"settings-location-description": "Bildirimlerin ekranda nerede görüneceği.",
"settings-markdown-description": "Bildirim içeriğini Markdown biçimlendirmesi kullanarak oluştur.",
"settings-markdown-label": "Markdown'ı Etkinleştir",
"sounds-desc": "Bildirim ses efektlerini ve ses seviyesini yapılandırın.",
"sounds-enabled-description": "Gelen bildirimler için ses efektlerini etkinleştir.",
"sounds-enabled-label": "Bildirim seslerini etkinleştir",
@@ -1493,16 +1589,13 @@
"box-border-label": "Konteyner ana hattı",
"box-border-radius-description": "Kenar çubukları, kartlar ve içerik panelleri gibi ana düzen bölümlerinin köşe yuvarlaklığını ayarlar.",
"box-border-radius-label": "Konteyner yarıçapı",
"box-border-radius-reset": "Konteyner yarıçapını sıfırla",
"control-border-radius-description": "İnteraktif öğelerin, düğmeler, geçişler ve metin alanları dahil olmak üzere, eğriliğini kontrol eder.",
"control-border-radius-label": "Giriş yarıçapı",
"control-border-radius-reset": "Giriş yarıçapını sıfırla",
"desc": "Arayüzün görünümünü, hissini ve davranışını özelleştirin.",
"dim-desktop-description": "Paneller veya menüler açıkken masaüstünü karart.",
"dim-desktop-label": "Masaüstünü karart",
"dimmer-opacity-description": "Masaüstü karartması için opaklık seviyesini ayarlayın.",
"dimmer-opacity-label": "Karartılmış masaüstü opaklığı",
"dimmer-opacity-reset": "Karartılmış masaüstü opaklığını sıfırla",
"panel-background-opacity-description": "Tüm panellerin (çubuk, başlatıcı, ayarlar vb.) arka plan opaklığını ayarlayın.",
"panel-background-opacity-label": "Panel arka plan opaklığı",
"panels-attached-to-bar-description": "Paneller çubuğa ve ekran kenarlarına kilitlenerek şık ters köşelerle kusursuz bir görünüm oluşturur.",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "Panelleri ve çubuğu üstte tut",
"scaling-description": "Çubuğu hariç tutarak genel kullanıcı arayüzünün boyutunu değiştirir.",
"scaling-label": "Arayüz ölçekleme",
"scaling-reset-scaling": "Arayüz ölçeklemesini sıfırla",
"settings-panel-header": "Ayarlar Paneli",
"settings-panel-mode-description": "Ayarlar düzenini seçin (yeniden açılması gerekebilir).",
"settings-panel-mode-label": "Ayarlar paneli modu",
"settings-panel-sidebar-card-style-description": "Ayarlar kenar çubuğunu yuvarlatılmış köşeli dolgulu bir arka planla sarar.",
"settings-panel-sidebar-card-style-label": "Kenar çubuğu kart stili",
"shadows-description": "Çubukların ve panellerin altında gölgelerin etkinleştirilmesini sağlar.",
"shadows-direction-description": "Gölgenin nereye düşeceğini seçin.",
"shadows-direction-label": "Gölge yönü",
@@ -1762,6 +1857,7 @@
"collapse": "Kenar çubuğunu daralt",
"copy-address": "Adresi kopyala",
"delete-notification": "Bildiriyi sil",
"dismiss-notification": "Bildirimi kapat",
"do-not-disturb-enabled": "Rahatsız etme",
"expand": "Kenar çubuğunu genişlet",
"forget-network": "Ağı unut",
+114 -18
View File
@@ -8,6 +8,7 @@
"disable-dnd": "Вимкнути режим 'Не турбувати'",
"disable-wifi": "Вимкнути Wi-Fi",
"disconnect-vpn": "Відключити {name}",
"dock-settings": "Налаштування дока",
"enable-bluetooth": "Увімкнути Bluetooth",
"enable-dnd": "Увімкнути режим 'Не турбувати'",
"enable-wifi": "Увімкнути Wi-Fi",
@@ -64,6 +65,10 @@
"show-power-profile-description": "Відображати вибір профілю живлення в панелі батареї.",
"show-power-profile-label": "Показувати елементи керування профілем живлення"
},
"brightness": {
"apply-all-description": "Змінювати яскравість для всіх моніторів при використанні колеса прокрутки.",
"apply-all-label": "Застосувати зміни прокрутки до всіх моніторів"
},
"clock": {
"clock-display-description": "Налаштуйте відображення годинника, додавши токени зі списку нижче. Для використання 12-годинного формату ви повинні включити токен 'AP'.",
"clock-display-label": "Відображення годинника",
@@ -87,7 +92,7 @@
"browse-file": "Огляд файлу",
"browse-library": "Огляд бібліотеки",
"color-selection-description": "Застосовує кольори теми до іконок.",
"enable-colorization-description": "Вмикає розфарбовування для іконки центру керування, застосовуючи кольори теми.",
"enable-colorization-description": "Увімкнути розфарбовування іконки із застосуванням кольорів теми.",
"icon-description": "Вибрати значок з бібліотеки або власний файл.",
"select-custom-icon": "Вибрати власний значок",
"use-distro-logo-description": "Використовувати логотип вашого дистрибутива замість власного значка.",
@@ -97,12 +102,15 @@
"collapse-condition-description": "Якщо вихідний текст збігається з цим значенням, кнопка згорнеться.",
"collapse-condition-label": "Умова згортання",
"color-selection-description": "Застосувати кольори теми до значка та тексту.",
"default-tooltip": "Користувацька кнопка, налаштуйте в налаштуваннях",
"display-command-output-description": "Введіть команду для запуску з регулярним інтервалом. Перший рядок її виведення відображатиметься як текст.",
"display-command-output-label": "Відображати виведення команди",
"display-command-output-stream-description": "Введіть команду для безперервного запуску.",
"dynamic-text": "Динамічний текст",
"enable-colorization-description": "Увімкнути розфарбовування для значка та тексту власної кнопки, застосовуючи кольори теми.",
"enable-colorization-label": "Увімкнути розфарбовування",
"general-tooltip-text-description": "Власний текст для відображення у підказці кнопки.",
"general-tooltip-text-label": "Користувацький текст підказки",
"hide-mode-always-expanded": "Завжди розширено",
"hide-mode-description": "Контролює видимість віджета, коли команда не має виведення.",
"hide-mode-expand-with-output": "Розширити, якщо є виведення",
@@ -128,16 +136,22 @@
"right-click-description": "Команда для виконання при правому кліку на кнопку.",
"right-click-label": "Правий клік",
"right-click-update-text": "Оновити текст, що відображається, при натисканні правою кнопкою миші",
"show-exec-tooltip-description": "Показувати підказки з деталями команд (лівий/правий/середній клік, колесо).",
"show-exec-tooltip-label": "Показувати підказки команд",
"show-icon-description": "Перемикає видимість значка віджета.",
"show-icon-label": "Показати значок",
"show-text-tooltip-description": "Показувати підказки з виводом текстової команди.",
"show-text-tooltip-label": "Показувати динамічні текстові підказки",
"text-stream-description": "Потокові рядки з команди відображатимуться як текст на кнопці.",
"text-stream-label": "Потік",
"wheel-description": "Команда для виконання при використанні колеса прокрутки.<br>Використовуйте $delta для дельти колеса прокрутки в команді.",
"wheel-down": "Колесо вниз",
"wheel-down-description": "Команда для виконання при прокрутці колеса вниз.",
"wheel-down-label": "Команда прокрутки колеса вниз",
"wheel-label": "Колесо прокрутки",
"wheel-mode-separate-description": "Увімкнути окремі команди для колеса прокрутки вгору та вниз.",
"wheel-mode-separate-label": "Окремі команди колеса прокрутки",
"wheel-up": "Колесо вгору",
"wheel-up-description": "Команда для виконання при прокрутці колеса вгору.",
"wheel-up-label": "Команда прокрутки колеса вгору",
"wheel-update-text": "Оновити відображуваний текст при прокрутці"
@@ -276,7 +290,7 @@
"focused-color-description": "Встановити колір тла для сфокусованого Workspace.",
"focused-color-label": "Колір сфокусованого робочого столу",
"follow-focused-screen-description": "Відображати робочі простори з поточного активного екрана, а не з екрана, на якому розташована панель.",
"follow-focused-screen-label": "Слідувати за активним eкраном",
"follow-focused-screen-label": "Слідувати за активним екраном",
"grouped-border-opacity-description": "Встановити рівень непрозорості для меж контейнерів робочої області.",
"grouped-border-opacity-label": "Прозорість межі",
"hide-unoccupied-description": "Не відображати робочі простори без вікон.",
@@ -356,6 +370,7 @@
},
"common": {
"actions": "Дії",
"active": "Активний",
"add": "Додати",
"appearance": "Зовнішній вигляд",
"apply": "Подати заявку",
@@ -363,6 +378,7 @@
"available": "Доступний",
"back": "Назад",
"battery": "Акумулятор",
"behavior": "Поведінка",
"bluetooth": "Bluetooth",
"brightness": "Яскравість",
"browse": "Перегляд",
@@ -395,6 +411,7 @@
"disconnected": "Від'єднано",
"disconnecting": "Від'єднання...",
"display-mode": "Режим відображення",
"documentation": "Документація",
"download": "Завантажити",
"duration": "Тривалість",
"dysfunctional": "Дисфункціональний",
@@ -457,7 +474,8 @@
"previous": "Попередній",
"primary": "Основний",
"random": "Випадковий",
"reboot": "Перезапустити",
"reboot": "Перезавантажити",
"reboot-to-uefi": "Перезавантажити в UEFI",
"record": "Почати запис",
"refresh": "Оновити",
"required": "(обов'язково)",
@@ -470,6 +488,8 @@
"scanning": "Сканування...",
"screen-corners": "Кути екрана",
"search": "Пошук",
"second": "{count} секунда",
"second-plural": "{count} секунд",
"secondary": "Вторинний",
"security": "Безпека",
"select": "Вибрати",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "Натисніть, щоб згорнути",
"click-to-expand": "Клацніть для розгортання",
"description": "Ваші сповіщення з'являтимуться тут по мірі надходження.",
"no-notifications": "Немає сповіщень"
@@ -751,6 +772,9 @@
"visualizer-type-description": "Виберіть тип візуалізації для відтворення медіа.",
"visualizer-type-label": "Тип візуалізації",
"volumes-desc": "Налаштуйте регулятори гучності та рівні звуку.",
"volumes-feedback-sound-file-description": "Шлях до звукового файлу, який відтворюється під час зміни гучності.",
"volumes-feedback-sound-file-label": "Звуковий файл зворотного зв'язку гучності",
"volumes-feedback-sound-file-select-title": "Вибрати звуковий файл зворотного зв'язку гучності",
"volumes-input-volume-description": "Рівень гучності мікрофона.",
"volumes-mute-input-description": "Вимкнути стандартний аудіовхід (мікрофон).",
"volumes-mute-input-label": "Вимкнути вхідний звук",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "Колір капсули",
"appearance-capsule-opacity-description": "Встановити рівень непрозорості для фону віджетів, коли показано капсулу.",
"appearance-capsule-opacity-label": "Непрозорість капсули",
"appearance-content-padding-description": "Налаштуйте відступ між краями панелі та віджетами.",
"appearance-content-padding-label": "Відступ вмісту",
"appearance-density-description": "Налаштуйте відступи панелі для компактного або просторого вигляду.",
"appearance-density-label": "Щільність панелі",
"appearance-desc": "Налаштуйте зовнішній вигляд та положення панелі.",
"appearance-display-mode-description": "Виберіть, коли панель видима.",
"appearance-floating-description": "Відображати панель як плаваючу 'капсулу'. Примітка: Це перемістить кути екрана до країв.",
"appearance-floating-label": "Плаваюча панель (Острівець)",
"appearance-font-scale-description": "Налаштуйте масштаб розміру шрифту для тексту, що відображається на панелі.",
"appearance-font-scale-label": "Масштаб шрифту",
"appearance-frame-radius": "Внутрішній радіус",
"appearance-frame-settings-description": "Налаштуйте товщину рамки та внутрішній радіус кутів",
"appearance-frame-settings-label": "Налаштування рамки",
@@ -798,12 +826,16 @@
"appearance-position-label": "Положення панелі",
"appearance-show-capsule-description": "Показувати фон віджетів.",
"appearance-show-capsule-label": "Показувати капсулу",
"appearance-show-on-workspace-switch-description": "Автоматично коротко показувати Bar при зміні робочого простору.",
"appearance-show-on-workspace-switch-label": "Показувати панель при перемиканні робочого простору",
"appearance-show-outline-description": "Відображає видиму рамку навколо кожного віджета.",
"appearance-show-outline-label": "Показувати контури віджетів",
"appearance-type-description": "Виберіть стиль панелі: Простий, Плаваючий або У рамці.",
"appearance-type-label": "Тип панелі",
"appearance-use-separate-opacity-description": "Увімкнути використання окремого значення прозорості для фону панелі.",
"appearance-use-separate-opacity-label": "Використовувати окрему прозорість стовпців",
"appearance-widget-spacing-description": "Налаштуйте інтервал між кожним віджетом на панелі.",
"appearance-widget-spacing-label": "Відстань між віджетами",
"monitor-configure-widgets": "Налаштувати віджети",
"monitor-override-settings": "Перевизначити глобальні налаштування",
"monitor-override-settings-description": "Використовувати власні налаштування для цього монітора.",
@@ -863,7 +895,7 @@
"predefined-desc": "Виберіть із колекції попередньо визначених колірних схем.",
"predefined-generate-templates-label": "Генерувати шаблони для попередньо визначених схем",
"predefined-title": "Попередньо визначені колірні схеми",
"templates-desc": "Застосовувати кольори до зовнішніх застосункiв.",
"templates-desc": "Застосовувати кольори до зовнішніх застосунків.",
"templates-filter-description": "Показати шаблони з певної категорії.",
"templates-filter-label": "Фільтрувати за категорією",
"templates-misc-description": "Створіть власні шаблони.",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "Потрібна автентифікація",
"bluetooth-devices-unnamed": "Безіменні пристрої не відображаються.",
"bluetooth-discoverable": "Цей пристрій можна виявити як <b> {hostName} </b>, поки ця вкладка налаштувань відкрита.",
"bluetooth-discoverable": "Цей пристрій можна виявити як <b>{hostName}</b>, поки ця вкладка налаштувань відкрита.",
"bluetooth-rssi-polling-description": "Періодично вимірює RSSI для підключених пристроїв через bluetoothctl. Може бути недоступно для всіх пристроїв; використовує мінімальні ресурси, якщо увімкнено.",
"bluetooth-rssi-polling-interval-description": "Налаштуйте, як часто оновлювати рівень сигналу для підключених пристроїв.",
"bluetooth-rssi-polling-interval-label": "Інтервал опитування",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "Команда, яка буде виконана при натисканні кнопки.",
"shortcuts-custom-button-enable-on-state-logic-description": "Увімкнути другу іконку та 'гарячий' стан на основі команди перевірки.",
"shortcuts-custom-button-enable-on-state-logic-label": "Увімкнути логіку увімкненого стану",
"shortcuts-custom-button-general-tooltip-text-description": "Загальний опис для підказки кнопки.",
"shortcuts-custom-button-general-tooltip-text-label": "Загальний текст підказки",
"shortcuts-custom-button-icon-description": "Виберіть іконку з бібліотеки.",
"shortcuts-custom-button-on-clicked-label": "Команда лівого кліку",
"shortcuts-custom-button-on-middle-clicked-label": "Команда середнього кліку",
"shortcuts-custom-button-on-right-clicked-label": "Команда правого кліку",
"shortcuts-custom-button-on-middle-clicked-description": "Команда для виконання при натисканні середньої кнопки миші.",
"shortcuts-custom-button-on-state-command-description": "Команда для перевірки, чи повинна кнопка бути у стані 'увімкнено'. Повертає 0 для увімкненого стану, ненульове значення для вимкненого.",
"shortcuts-custom-button-on-state-command-label": "Команда перевірки увімкненого стану",
"shortcuts-custom-button-on-state-icon-description": "Іконка для кнопки, коли вона у стані 'увімкнено'.",
@@ -943,6 +973,7 @@
"clock-style-label": "Стиль годинника",
"clock-style-minimal": "Мінімальний",
"clock-width-description": "Ширина віджета годинника в пікселях.",
"cpu-intensive-note": "Віджети, позначені !, використовують більше CPU, і їх слід вмикати обережно.",
"edit-mode-button-label": "Увійти в режим редагування",
"edit-mode-controls-explanation": "Клацання лівою кнопкою миші та перетягування: Перемістити або змінити розмір віджета.\nКлацання правою кнопкою миші: Відкрити контекстне меню з опціями.",
"edit-mode-description": "Увімкніть режим редагування, щоб переміщувати та змінювати розташування віджетів робочого столу. У ввімкненому стані віджети відображають контур перетягування, і їх можна переміщувати.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "Показати кнопки",
"media-player-show-visualizer-description": "Показати накладання аудіовізуалізатора.",
"media-player-visualizer-type-description": "Оберіть тип візуалізації для фону медіаплеєра на робочому столі.",
"overview-enabled-description": "Показувати віджети робочого столу, поки огляд композитора відкритий.",
"overview-enabled-label": "Показати в огляді",
"system-stat-layout-bottom": "Низ",
"system-stat-layout-description": "Виберіть, як відображається легенда відносно графіка.",
"system-stat-layout-label": "Макет",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "Показати фоновий контейнер для погодного віджета."
},
"display": {
"monitors-backlight-device-auto-option": "За замовчуванням",
"monitors-backlight-device-description": "Виберіть пристрій підсвічування для цього виходу.",
"monitors-backlight-device-label": "Пристрій Підсвічування",
"monitors-brightness-step-description": "Налаштуйте крок зміни яскравості (колесо миші та гарячі клавіші).",
"monitors-brightness-step-label": "Крок зміни яскравості",
"monitors-brightness-unavailable-ddc-disabled": "Регулювання яскравості недоступне. Увімкніть \"Підтримку зовнішньої яскравості\", щоб керувати яскравістю цього дисплея.",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "Примусова мінімальна яскравість (1%)",
"monitors-external-brightness-description": "Увімкнути підтримку DDCUtil для керування яскравістю на зовнішніх дисплеях через протокол DDC/CI.",
"monitors-external-brightness-label": "Підтримка зовнішньої яскравості",
"monitors-global-brightness-description": "Налаштувати яскравість усіх моніторів одночасно.",
"monitors-global-brightness-label": "Усі монітори",
"monitors-title": "Налаштування для кожного монітора",
"night-light-auto-schedule-description": "На основі часу заходу та сходу сонця в <i>{location}</i> — рекомендовано.",
"night-light-auto-schedule-label": "Автоматичне планування",
@@ -1014,7 +1052,7 @@
"appearance-background-opacity-description": "Налаштуйте непрозорість фону дока.",
"appearance-border-radius-description": "Налаштуйте радіус заокруглення країв док-панелі.",
"appearance-border-radius-label": "Радіус заокруглення",
"appearance-colorize-icons-description": "Застосувати кольори теми до значків застосункiв у доці (тільки неактивні застосунки).",
"appearance-colorize-icons-description": "Застосувати кольори теми до значків застосунків у доці (тільки неактивні застосунки).",
"appearance-colorize-icons-label": "Розфарбувати значки",
"appearance-dead-opacity-description": "Відрегулюйте прозорість іконок програм, які не запущені.",
"appearance-dead-opacity-label": "Мертва непрозорість",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "Винятковий",
"appearance-floating-distance-description": "Встановіть відстань між доком і краєм екрана.",
"appearance-floating-distance-label": "Відстань плавання дока",
"appearance-frame-indicator-description": "Показувати невеликий індикатор на рамці, коли док приховано.",
"appearance-frame-indicator-label": "Рамочний індикатор дока",
"appearance-group-apps-description": "Групувати кілька вікон з однієї програми в один запис Dock.",
"appearance-group-apps-label": "Групувати однакові програми",
"appearance-group-click-action-cycle": "Перемикати вікна",
"appearance-group-click-action-description": "Виберіть, що робить лівий клік для згрупованих програм.",
"appearance-group-click-action-label": "Дія за кліком згрупованої програми",
"appearance-group-click-action-list": "Відкрити список вікон",
"appearance-group-context-menu-mode-description": "Виберіть, як контекстне меню поводиться для згрупованих програм.",
"appearance-group-context-menu-mode-extended": "Розширений",
"appearance-group-context-menu-mode-label": "Режим згрупованого меню програм",
"appearance-group-context-menu-mode-list": "Список вікон",
"appearance-group-indicator-style-description": "Виберіть, як згруповані індикатори запущених програм відображають стан активного вікна.",
"appearance-group-indicator-style-dots": "Крапки",
"appearance-group-indicator-style-label": "Стиль згрупованого індикатора",
"appearance-group-indicator-style-number": "Число",
"appearance-hide-show-speed-description": "Налаштуйте швидкість анімації приховування/відображення дока.",
"appearance-hide-show-speed-label": "Швидкість приховування/відображення",
"appearance-icon-size-description": "Налаштуйте загальний розмір дока.",
"appearance-icon-size-label": "Розмір дока",
"appearance-inactive-indicators-description": "Відображати індикатори-пігулки для всіх програм, а не лише для поточної активної.",
"appearance-inactive-indicators-label": "Індикатори бігу",
"appearance-launcher-position-description": "Виберіть, де значок запуску програм з'являється в доці.",
"appearance-launcher-position-end": "Кінець",
"appearance-launcher-position-label": "Позиція запускача",
"appearance-launcher-position-start": "Старт",
"appearance-pinned-static-description": "Завжди закріплюйте значки програм ліворуч у статичному порядку.",
"appearance-pinned-static-label": "Статично закріплені програми",
"appearance-position-description": "Виберіть, де док відображатиметься на екрані.",
"appearance-position-label": "Позиція",
"appearance-show-launcher-icon-description": "Показувати піктограму запуску програм у доці.",
"appearance-show-launcher-icon-label": "Показати запуск програм",
"appearance-sit-on-frame-description": "Вирівняйте док всередині межі рамки, а не поверх неї.",
"appearance-sit-on-frame-label": "Док розміщується на рамці",
"appearance-type-description": "Виберіть між плаваючою пігулкою або статичною панеллю, прикріпленою до краю.",
"appearance-type-floating": "Плаваючий",
"appearance-type-label": "Стиль дока",
"appearance-type-static": "Статичний",
"enabled-description": "Показати або сховати док повністю.",
"enabled-label": "Увімкнути док",
"monitors-desc": "Показувати док на певних моніторах. За замовчуванням на всіх, якщо не вибрано.",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "Збільшити або зменшити розмір моноширинного тексту.",
"fonts-monospace-scale-label": "Розмір моноширинного шрифту",
"fonts-monospace-search-placeholder": "Пошук моноширинного шрифту...",
"fonts-reset-scaling": "Скинути масштаб",
"fonts-title": "Шрифти",
"keybinds-conflict-description": "Комбінація клавіш вже призначена для {action}.",
"keybinds-conflict-title": "Конфлікт гарячих клавіш",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "Вибрати зображення аватара",
"profile-title": "Профіль",
"profile-tooltip": "Фото профілю",
"reverse-scrolling-description": "Обернути інтерпретований напрямок прокручування.",
"reverse-scrolling-label": "Зворотне прокручування",
"screen-corners-desc": "Налаштуйте заокруглення кутів екрана та візуальні ефекти.",
"screen-corners-radius-description": "Налаштуйте заокруглення кутів екрана.",
"screen-corners-radius-label": "Радіус кутів екрана",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "Шпалери змінено",
"wallpaper-changed-placeholder": "напр. notify-send \"Шпалери\" \"Змінено\""
},
"idle": {
"custom-add": "Додати команду",
"custom-description": "Виконати команду оболонки після періоду бездіяльності.",
"custom-entry-command": "Команда",
"custom-entry-delete": "Видалити",
"custom-entry-timeout": "Час бездіяльності",
"custom-label": "Користувацькі Команди Бездіяльності",
"enable-description": "Автоматично вимикати екран, блокувати або призупиняти роботу після періоду бездіяльності.",
"enable-label": "Увімкнути керування бездіяльністю",
"fade-duration-description": "Секунди для анімації затемнення до чорного перед виконанням кожної дії. Будь-який рух миші скасовує затемнення.",
"fade-duration-label": "Тривалість згасання",
"lock-description": "Секунди бездіяльності до активації екрана блокування.",
"lock-label": "Заблокувати екран",
"screen-off-description": "Секунди бездіяльності до вимкнення моніторів.",
"screen-off-label": "Вимкнути екран",
"status-description": "Час простою, повідомлений Compositor.",
"status-label": "Час Простою",
"suspend-description": "Секунди бездіяльності до призупинення роботи системи.",
"tab-behavior": "Поведінка",
"tab-custom": "Користувацький",
"timeouts-description": "Встановіть 0, щоб вимкнути етап. Тайм-аути призупиняються, поки Keep Awake активний.",
"timeouts-label": "Тайм-аути",
"unavailable": "Нативний моніторинг бездіяльності недоступний на цьому Compositorі."
},
"indicator": {
"default-value": "За замовчуванням: {value}",
"system-default": "Системні налаштування за замовчуванням"
@@ -1228,7 +1319,7 @@
"lock-screen": {
"allow-password-with-fprintd-description": "Коли fprintd (автентифікація за відбитком пальця) активний, ця опція дозволяє входити в систему за допомогою пароля замість відбитка пальця.",
"allow-password-with-fprintd-label": "Дозволити вхід за паролем за допомогою fprintd",
"auto-start-auth-description": "Aвтоматично запускає автентифікацію за відбитком пальця без необхідності натискання клавіші або клацання кнопки.",
"auto-start-auth-description": "Автоматично запускає автентифікацію за відбитком пальця без необхідності натискання клавіші або клацання кнопки.",
"auto-start-auth-label": "Автоматичний запуск автентифікації",
"clock-format-description": "Налаштуйте формат годинника, використовуючи токени синтаксису дати/часу.",
"clock-format-label": "Формат годинника",
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "Застосовує накладання відтінку до шпалер екрана блокування.",
"lock-screen-tint-strength-label": "Інтенсивність тонування екрана блокування",
"monitors-desc": "Показати екран блокування на певних моніторах. За замовчуванням на всіх, якщо жоден не обрано.",
"password-chars-description": "Милі іконки, що використовуються для приховування вашого пароля.",
"password-chars-label": "Випадкові іконки паролів",
"show-hibernate-description": "Показувати опцію 'сплячий режим' в елементах керування живленням.",
"show-hibernate-label": "Показувати сплячий режим",
"show-session-buttons-description": "Дозволити доступ до налаштувань живлення з екрана блокування.",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "Низька терміновість",
"duration-normal-urgency-description": "Як довго залишаються видимими сповіщення звичайного пріоритету.",
"duration-normal-urgency-label": "Звичайна терміновість",
"duration-reset": "Скинути тривалість очікування",
"duration-respect-expire-description": "Використовувати тривалість показу, встановлений у сповіщенні.",
"duration-respect-expire-label": "Враховувати тривалість показу",
"duration-title": "Тривалість сповіщень",
"history-clear-dismiss-description": "Видаляти сповіщення з історії після закриття.",
"history-clear-dismiss-label": "Очищати при закритті",
"history-critical-urgency-description": "Зберігати сповіщення з критичним пріоритетом в історії.",
"history-critical-urgency-label": "Зберігати критичну терміновість в історії",
"history-desc": "Керування тим, які сповіщення зберігаються в історії залежно від рівня терміновості.",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "Увімкнути або вимкнути демон сповіщень, вимагає перезапуску Noctalia shell.",
"settings-enabled-label": "Увімкнути сповіщення",
"settings-location-description": "Де з'являються сповіщення на екрані.",
"settings-markdown-description": "Відображати вміст сповіщень, використовуючи форматування Markdown.",
"settings-markdown-label": "Увімкнути Markdown",
"sounds-desc": "Налаштуйте звукові ефекти та гучність сповіщень.",
"sounds-enabled-description": "Увімкнути звукові ефекти для вхідних сповіщень.",
"sounds-enabled-label": "Увімкнути звуки сповіщень",
@@ -1493,27 +1589,26 @@
"box-border-label": "Контур контейнера",
"box-border-radius-description": "Налаштовує заокруглення кутів основних розділів макета, таких як бічні панелі, картки та панелі контенту.",
"box-border-radius-label": "Радіус контейнера",
"box-border-radius-reset": "Скинути радіус контейнера",
"control-border-radius-description": "Керує кривизною інтерактивних елементів, включно з кнопками, перемикачами та текстовими полями.",
"control-border-radius-label": "Введіть радіус",
"control-border-radius-reset": "Скинути радіус введення",
"desc": "Налаштуйте вигляд, відчуття та поведінку інтерфейсу.",
"dim-desktop-description": "Затемнювати робочий стіл, коли відкриті панелі або меню.",
"dim-desktop-label": "Приглушити робочий стіл",
"dimmer-opacity-description": "Встановити рівень непрозорості для затемнення робочого столу.",
"dimmer-opacity-label": "Непрозорість приглушеного робочого столу",
"dimmer-opacity-reset": "Скинути непрозорість приглушеного робочого столу",
"panel-background-opacity-description": "Встановити прозорість фону для всіх панелей (панель задач, панель запуску, налаштування тощо...).",
"panel-background-opacity-label": "Прозорість фону панелей",
"panels-attached-to-bar-description": "Панелі фіксуються до штанги та країв екрана, створюючи бездоганний вигляд зі стильними перевернутими кутами.",
"panels-attached-to-bar-label": "Прив'язувати панелі до країв",
"panels-overlay-description": "Забезпечує видимість панелей і панелі завдань, навіть поверх повноекранних застосункiв.",
"panels-overlay-description": "Забезпечує видимість панелей і панелі завдань, навіть поверх повноекранних застосунків.",
"panels-overlay-label": "Тримати панелі та панель зверху",
"scaling-description": "Змінює розмір загального користувацького інтерфейсу, окрім панелі.",
"scaling-label": "Масштабування інтерфейсу",
"scaling-reset-scaling": "Скинути масштабування інтерфейсу",
"settings-panel-header": "Панель налаштувань",
"settings-panel-mode-description": "Виберіть макет налаштувань (може знадобитися перезапуск).",
"settings-panel-mode-label": "Режим панелі налаштувань",
"settings-panel-sidebar-card-style-description": "Обгортає бічну панель налаштувань у заповнений фон із заокругленими кутами.",
"settings-panel-sidebar-card-style-label": "Стиль карток бічної панелі",
"shadows-description": "Увімкнути тіні під панелями та смугами.",
"shadows-direction-description": "Виберіть, куди відкидається тінь.",
"shadows-direction-label": "Напрямок тіні",
@@ -1762,6 +1857,7 @@
"collapse": "Згорнути бічну панель",
"copy-address": "Копіювати адресу",
"delete-notification": "Видалити сповіщення",
"dismiss-notification": "Відхилити сповіщення",
"do-not-disturb-enabled": "Не турбувати",
"expand": "Розгорнути бічну панель",
"forget-network": "Забути мережу",
+108 -12
View File
@@ -8,6 +8,7 @@
"disable-dnd": "关闭勿扰模式",
"disable-wifi": "关闭 Wi-Fi",
"disconnect-vpn": "断开与 {name} 的连接",
"dock-settings": "Dock 设置",
"enable-bluetooth": "启用蓝牙",
"enable-dnd": "启用勿扰模式",
"enable-wifi": "启用 Wi-Fi",
@@ -64,6 +65,10 @@
"show-power-profile-description": "在电池面板中显示电源配置文件选项。",
"show-power-profile-label": "显示电源配置文件控件"
},
"brightness": {
"apply-all-description": "使用滚轮时更改所有显示器的亮度。",
"apply-all-label": "将滚动更改应用到所有显示器"
},
"clock": {
"clock-display-description": "通过从下面的列表添加标记来自定义时钟样式。要使用 12 小时制,则必须包含 'AP' 标记。",
"clock-display-label": "时钟显示",
@@ -87,7 +92,7 @@
"browse-file": "浏览文件",
"browse-library": "浏览库",
"color-selection-description": "将主题颜色应用于图标。",
"enable-colorization-description": "为控制中心图标启用着色,应用主题颜色。",
"enable-colorization-description": "为图标启用着色,应用主题颜色。",
"icon-description": "从库中选择图标或自定义文件。",
"select-custom-icon": "选择自定义图标",
"use-distro-logo-description": "使用您的发行版徽标而不是自定义图标。",
@@ -97,12 +102,15 @@
"collapse-condition-description": "如果输出文本与此值匹配,按钮将折叠。",
"collapse-condition-label": "折叠条件",
"color-selection-description": "将主题颜色应用到图标和文本。",
"default-tooltip": "自定义按钮,在设置中配置",
"display-command-output-description": "输入一个定期运行的命令。其输出的第一行将显示为文本。",
"display-command-output-label": "显示命令输出",
"display-command-output-stream-description": "输入一个要持续运行的命令。",
"dynamic-text": "动态文本",
"enable-colorization-description": "启用自定义按钮图标和文本的着色,应用主题颜色。",
"enable-colorization-label": "启用着色",
"general-tooltip-text-description": "在按钮工具提示中显示的自定义文本。",
"general-tooltip-text-label": "自定义工具提示文本",
"hide-mode-always-expanded": "始终展开",
"hide-mode-description": "控制命令无输出时小部件的可见性。",
"hide-mode-expand-with-output": "有输出时展开",
@@ -128,16 +136,22 @@
"right-click-description": "右键单击按钮时执行的命令。",
"right-click-label": "右键单击",
"right-click-update-text": "右键单击时更新显示的文本",
"show-exec-tooltip-description": "显示带有命令详情的工具提示 (左键/右键/中键点击,滚轮)。",
"show-exec-tooltip-label": "显示命令工具提示",
"show-icon-description": "切换小部件图标的可见性。",
"show-icon-label": "显示图标",
"show-text-tooltip-description": "显示带有文本命令输出的工具提示。",
"show-text-tooltip-label": "显示动态文本工具提示",
"text-stream-description": "来自命令的流式输出行将作为文本显示在按钮上。",
"text-stream-label": "流",
"wheel-description": "使用滚轮时执行的命令。<br>在命令中使用 $delta 表示滚轮增量。",
"wheel-down": "滚轮 下",
"wheel-down-description": "滚轮向下滚动时执行的命令。",
"wheel-down-label": "滚轮向下命令",
"wheel-label": "滚轮",
"wheel-mode-separate-description": "为滚轮向上和向下启用单独的命令。",
"wheel-mode-separate-label": "分开滚轮命令",
"wheel-up": "滚轮 上",
"wheel-up-description": "滚轮向上滚动时执行的命令。",
"wheel-up-label": "滚轮向上命令",
"wheel-update-text": "滚轮滚动时更新显示的文本"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "操作",
"active": "活跃",
"add": "添加",
"appearance": "外观",
"apply": "应用",
@@ -363,6 +378,7 @@
"available": "可用",
"back": "返回",
"battery": "电池",
"behavior": "行为",
"bluetooth": "蓝牙",
"brightness": "亮度",
"browse": "浏览",
@@ -395,6 +411,7 @@
"disconnected": "已断开连接",
"disconnecting": "正在断开连接...",
"display-mode": "显示模式",
"documentation": "文档",
"download": "下载",
"duration": "时长",
"dysfunctional": "功能失调",
@@ -458,6 +475,7 @@
"primary": "主要的",
"random": "随机",
"reboot": "重启",
"reboot-to-uefi": "重启到 UEFI",
"record": "开始录制",
"refresh": "刷新",
"required": "(必要)",
@@ -470,6 +488,8 @@
"scanning": "扫描中...",
"screen-corners": "屏幕边角",
"search": "搜索",
"second": "{count} 秒",
"second-plural": "{count} 秒",
"secondary": "辅助",
"security": "安全",
"select": "选择",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "点击折叠",
"click-to-expand": "点击展开",
"description": "您的通知将在到达时显示在此处。",
"no-notifications": "无通知"
@@ -751,6 +772,9 @@
"visualizer-type-description": "选择媒体播放的可视化类型。",
"visualizer-type-label": "可视化类型",
"volumes-desc": "调整音量控制和音频级别。",
"volumes-feedback-sound-file-description": "更改音量时播放的声音文件路径。",
"volumes-feedback-sound-file-label": "音量反馈声音文件",
"volumes-feedback-sound-file-select-title": "选择音量反馈声音文件",
"volumes-input-volume-description": "麦克风输入音量级别。",
"volumes-mute-input-description": "静音默认音频输入(麦克风)。",
"volumes-mute-input-label": "静音输入",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "胶囊颜色",
"appearance-capsule-opacity-description": "设置显示胶囊时小部件背景的不透明度。",
"appearance-capsule-opacity-label": "胶囊不透明度",
"appearance-content-padding-description": "调整栏边缘与小部件之间的内边距。",
"appearance-content-padding-label": "内容内边距",
"appearance-density-description": "调整状态栏的内边距以获得紧凑或宽松的外观。",
"appearance-density-label": "状态栏密度",
"appearance-desc": "自定义状态栏的外观和位置。",
"appearance-display-mode-description": "选择栏何时可见。",
"appearance-floating-description": "将状态栏显示为浮动的“药丸”形状。",
"appearance-floating-label": "浮动状态栏",
"appearance-font-scale-description": "调整栏中显示的文本的字体大小比例。",
"appearance-font-scale-label": "字体缩放",
"appearance-frame-radius": "内圆角",
"appearance-frame-settings-description": "调整边框粗细和内圆角半径",
"appearance-frame-settings-label": "边框设置",
@@ -798,12 +826,16 @@
"appearance-position-label": "状态栏位置",
"appearance-show-capsule-description": "为每个小部件添加背景。",
"appearance-show-capsule-label": "显示组件背景",
"appearance-show-on-workspace-switch-description": "切换工作区时自动短暂显示状态栏。",
"appearance-show-on-workspace-switch-label": "工作区切换时显示状态栏",
"appearance-show-outline-description": "在每个小部件周围显示可见边框。",
"appearance-show-outline-label": "显示小部件轮廓",
"appearance-type-description": "选择栏的样式:简约、悬浮或边框。",
"appearance-type-label": "栏类型",
"appearance-use-separate-opacity-description": "启用后为状态栏背景使用单独的不透明度值。",
"appearance-use-separate-opacity-label": "使用单独的状态栏不透明度",
"appearance-widget-spacing-description": "调整栏中每个小部件之间的间距。",
"appearance-widget-spacing-label": "小部件间距",
"monitor-configure-widgets": "配置小部件",
"monitor-override-settings": "覆盖全局设置",
"monitor-override-settings-description": "为此显示器使用自定义设置。",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "需要认证",
"bluetooth-devices-unnamed": "未命名设备不显示。",
"bluetooth-discoverable": "当此设置选项卡打开时,此设备可被发现为 <b> {hostName} </b>。",
"bluetooth-discoverable": "当此设置选项卡打开时,此设备可被发现为 <b>{hostName}</b>。",
"bluetooth-rssi-polling-description": "通过 bluetoothctl 定期采样已连接设备的 RSSI。可能并非所有设备都可用;启用时占用最少资源。",
"bluetooth-rssi-polling-interval-description": "配置已连接设备的信号强度更新频率。",
"bluetooth-rssi-polling-interval-label": "轮询间隔",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "单击按钮时执行的命令。",
"shortcuts-custom-button-enable-on-state-logic-description": "根据检查命令启用第二个图标和“高亮”状态。",
"shortcuts-custom-button-enable-on-state-logic-label": "启用开启状态逻辑",
"shortcuts-custom-button-general-tooltip-text-description": "按钮提示信息的常规说明。",
"shortcuts-custom-button-general-tooltip-text-label": "常规工具提示文本",
"shortcuts-custom-button-icon-description": "从库中选择一个图标。",
"shortcuts-custom-button-on-clicked-label": "左键单击命令",
"shortcuts-custom-button-on-middle-clicked-label": "中键单击命令",
"shortcuts-custom-button-on-right-clicked-label": "右键单击命令",
"shortcuts-custom-button-on-middle-clicked-description": "当按钮被中键点击时执行的命令",
"shortcuts-custom-button-on-state-command-description": "执行以检查按钮是否应处于“开启”状态的命令。返回 0 表示开启,非零表示关闭。",
"shortcuts-custom-button-on-state-command-label": "开启状态检查命令",
"shortcuts-custom-button-on-state-icon-description": "按钮处于“开启”状态时的图标。",
@@ -943,6 +973,7 @@
"clock-style-label": "时钟样式",
"clock-style-minimal": "简约",
"clock-width-description": "时钟小部件的宽度,以像素为单位。",
"cpu-intensive-note": "标有 ! 的Widget会占用更多 CPU,请谨慎启用。",
"edit-mode-button-label": "进入编辑模式",
"edit-mode-controls-explanation": "左键点击并拖动:移动或调整小部件大小。\n右键点击:打开上下文菜单选项。",
"edit-mode-description": "启用编辑模式以移动和重新定位桌面小组件。启用后,小组件会显示拖动轮廓,并且可以重新定位。",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "显示按钮",
"media-player-show-visualizer-description": "显示音频可视化叠加层。",
"media-player-visualizer-type-description": "选择桌面媒体播放器的背景可视化类型。",
"overview-enabled-description": "当合成器概览打开时,显示桌面小部件。",
"overview-enabled-label": "在概览中显示",
"system-stat-layout-bottom": "底部",
"system-stat-layout-description": "选择图例相对于图表的显示方式。",
"system-stat-layout-label": "布局",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "显示天气小部件的背景容器。"
},
"display": {
"monitors-backlight-device-auto-option": "默认",
"monitors-backlight-device-description": "为此输出选择一个背光设备。",
"monitors-backlight-device-label": "背光设备",
"monitors-brightness-step-description": "调整亮度变化的步长(滚轮和键盘快捷键)。",
"monitors-brightness-step-label": "亮度步长",
"monitors-brightness-unavailable-ddc-disabled": "亮度控制不可用。启用“外部亮度支持”以控制此显示器的亮度。",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "限制最小亮度为 1%",
"monitors-external-brightness-description": "启用 DDCUtil 支持,通过 DDC/CI 协议控制外部显示器的亮度。",
"monitors-external-brightness-label": "外部亮度支持",
"monitors-global-brightness-description": "同时调整所有显示器的亮度。",
"monitors-global-brightness-label": "所有显示器",
"monitors-title": "显示器设置",
"night-light-auto-schedule-description": "基于 <i>{location}</i> 的日落和日出时间 — 推荐。",
"night-light-auto-schedule-label": "自动调度",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "独占",
"appearance-floating-distance-description": "调整距离屏幕边缘的浮动距离。",
"appearance-floating-distance-label": "Dock 栏浮动距离",
"appearance-frame-indicator-description": "当 Dock 隐藏时,在边框上显示一个小指示器。",
"appearance-frame-indicator-label": "带边框的停靠栏指示器",
"appearance-group-apps-description": "将同一应用的多个窗口分组到一个 Dock 条目中。",
"appearance-group-apps-label": "分组相同应用",
"appearance-group-click-action-cycle": "切换窗口",
"appearance-group-click-action-description": "选择左键单击对分组应用执行的操作。",
"appearance-group-click-action-label": "分组应用点击操作",
"appearance-group-click-action-list": "打开窗口列表",
"appearance-group-context-menu-mode-description": "选择分组应用上下文菜单的行为方式。",
"appearance-group-context-menu-mode-extended": "扩展",
"appearance-group-context-menu-mode-label": "分组应用菜单模式",
"appearance-group-context-menu-mode-list": "窗口列表",
"appearance-group-indicator-style-description": "选择分组运行指示器如何显示焦点窗口状态。",
"appearance-group-indicator-style-dots": "点",
"appearance-group-indicator-style-label": "分组指示器样式",
"appearance-group-indicator-style-number": "数字",
"appearance-hide-show-speed-description": "调整 Dock 栏隐藏/显示动画的速度。",
"appearance-hide-show-speed-label": "隐藏/显示速度",
"appearance-icon-size-description": "调整 Dock 栏的整体大小。",
"appearance-icon-size-label": "Dock 栏大小",
"appearance-inactive-indicators-description": "为所有应用显示指示器小药丸,而不仅仅是当前活跃的应用。",
"appearance-inactive-indicators-label": "运行指示器",
"appearance-launcher-position-description": "选择启动器图标在停靠栏中的显示位置。",
"appearance-launcher-position-end": "结束",
"appearance-launcher-position-label": "启动器位置",
"appearance-launcher-position-start": "开始",
"appearance-pinned-static-description": "始终将固定的应用图标按静态顺序推到左侧。",
"appearance-pinned-static-label": "静态固定应用",
"appearance-position-description": "选择 Dock 栏在屏幕上显示的位置。",
"appearance-position-label": "位置",
"appearance-show-launcher-icon-description": "在 Dock 中显示应用程序启动器图标。",
"appearance-show-launcher-icon-label": "显示应用启动器",
"appearance-sit-on-frame-description": "将停靠栏对齐在框架边框内,而不是位于顶部。",
"appearance-sit-on-frame-label": "停靠栏位于框架上",
"appearance-type-description": "选择浮动药丸样式或附着在边缘的静态栏。",
"appearance-type-floating": "浮动",
"appearance-type-label": "Dock 样式",
"appearance-type-static": "静态",
"enabled-description": "完全显示或隐藏 Dock 栏。",
"enabled-label": "启用 Dock 栏",
"monitors-desc": "在特定显示器上显示 Dock 栏。如果未选择任何显示器,则默认在所有显示器上显示。",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "增大或减小等宽文本的尺寸。",
"fonts-monospace-scale-label": "默认等宽字体大小",
"fonts-monospace-search-placeholder": "搜索等宽字体...",
"fonts-reset-scaling": "恢复默认缩放",
"fonts-title": "字体",
"keybinds-conflict-description": "此按键组合已分配给 {action}。",
"keybinds-conflict-title": "按键绑定冲突",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "选择头像图片",
"profile-title": "个人资料",
"profile-tooltip": "头像",
"reverse-scrolling-description": "反转解释的滚动方向。",
"reverse-scrolling-label": "反转滚动",
"screen-corners-desc": "自定义屏幕边角的圆度和视觉效果。",
"screen-corners-radius-description": "调整屏幕圆角的弧度。",
"screen-corners-radius-label": "屏幕边角半径",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "壁纸已更改",
"wallpaper-changed-placeholder": "例如:notify-send \"壁纸\" \"已更改\""
},
"idle": {
"custom-add": "添加命令",
"custom-description": "在一段时间不活动后运行 shell 命令。",
"custom-entry-command": "命令",
"custom-entry-delete": "删除",
"custom-entry-timeout": "空闲时间",
"custom-label": "自定义空闲命令",
"enable-description": "在一段时间不活动后,自动关闭屏幕、锁定或休眠。",
"enable-label": "启用空闲管理",
"fade-duration-description": "每次操作触发前,屏幕渐变为黑的动画持续时间(秒)。任何鼠标移动都会取消渐变。",
"fade-duration-label": "淡入淡出时长",
"lock-description": "锁屏激活前的非活动秒数。",
"lock-label": "锁定屏幕",
"screen-off-description": "显示器关闭前的不活动秒数。",
"screen-off-label": "关闭屏幕",
"status-description": "Compositor报告的空闲时间。",
"status-label": "空闲时间",
"suspend-description": "系统挂起前的非活动秒数。",
"tab-behavior": "行为",
"tab-custom": "自定义",
"timeouts-description": "设置为0以禁用一个阶段。Keep Awake激活时,超时会暂停。",
"timeouts-label": "超时",
"unavailable": "此 Compositor 不支持原生空闲监控。"
},
"indicator": {
"default-value": "默认值:{value}",
"system-default": "系统默认"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "将色调叠加应用于锁屏壁纸。",
"lock-screen-tint-strength-label": "锁屏着色强度",
"monitors-desc": "在指定显示器上显示锁屏。如果未选择,则默认为所有显示器。",
"password-chars-description": "用于隐藏密码的可爱图标。",
"password-chars-label": "随机密码图标",
"show-hibernate-description": "在电源控制中显示'休眠'选项。",
"show-hibernate-label": "显示休眠",
"show-session-buttons-description": "允许从锁屏访问电源设置。",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "低紧急度",
"duration-normal-urgency-description": "正常优先级通知保持可见的时间。",
"duration-normal-urgency-label": "正常紧急度",
"duration-reset": "重置超时时长",
"duration-respect-expire-description": "使用通知中设置的过期超时。",
"duration-respect-expire-label": "尊重过期超时",
"duration-title": "通知持续时间",
"history-clear-dismiss-description": "关闭时从历史记录中清除通知。",
"history-clear-dismiss-label": "关闭时清除",
"history-critical-urgency-description": "将关键优先级通知保存到历史记录。",
"history-critical-urgency-label": "将高紧急度保存到历史记录",
"history-desc": "根据紧急级别控制哪些通知保存到历史记录。",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "启用或禁用通知守护进程,需要重启 Noctalia shell。",
"settings-enabled-label": "启用通知",
"settings-location-description": "通知在屏幕上出现的位置。",
"settings-markdown-description": "使用 Markdown 格式渲染通知内容。",
"settings-markdown-label": "启用 Markdown",
"sounds-desc": "配置通知音效和音量。",
"sounds-enabled-description": "启用收到通知时的音效。",
"sounds-enabled-label": "启用通知声音",
@@ -1493,16 +1589,13 @@
"box-border-label": "容器轮廓",
"box-border-radius-description": "调整主要布局部分(如侧边栏、卡片和内容面板)的圆角程度。",
"box-border-radius-label": "容器半径",
"box-border-radius-reset": "重置容器半径",
"control-border-radius-description": "控制交互元素的曲率,包括按钮、开关和文本字段。",
"control-border-radius-label": "输入半径",
"control-border-radius-reset": "重置输入半径",
"desc": "自定义界面的外观、感觉和行为。",
"dim-desktop-description": "当面板或菜单打开时,桌面变暗。",
"dim-desktop-label": "昏暗的桌面",
"dimmer-opacity-description": "设置桌面变暗时的不透明度。",
"dimmer-opacity-label": "变暗桌面不透明度",
"dimmer-opacity-reset": "重置变暗桌面不透明度",
"panel-background-opacity-description": "设置所有面板(栏、启动器、设置等)的背景不透明度。",
"panel-background-opacity-label": "面板背景不透明度",
"panels-attached-to-bar-description": "面板锁定到边栏和屏幕边缘,形成无缝外观,并具有时尚的倒角。",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "将面板和栏保持在顶部",
"scaling-description": "更改通用用户界面大小,不包括栏。",
"scaling-label": "界面缩放",
"scaling-reset-scaling": "重置界面缩放",
"settings-panel-header": "设置面板",
"settings-panel-mode-description": "选择「设置」面板的布局(可能需要重新打开「设置」面板才会生效)。",
"settings-panel-mode-label": "「设置」面板模式",
"settings-panel-sidebar-card-style-description": "用圆角填充背景包裹设置侧边栏。",
"settings-panel-sidebar-card-style-label": "侧边栏卡片样式",
"shadows-description": "启用条形图和面板下的阴影。",
"shadows-direction-description": "选择阴影投射的位置。",
"shadows-direction-label": "阴影方向",
@@ -1762,6 +1857,7 @@
"collapse": "折叠侧边栏",
"copy-address": "复制地址",
"delete-notification": "删除通知",
"dismiss-notification": "关闭通知",
"do-not-disturb-enabled": "勿扰模式",
"expand": "展开侧边栏",
"forget-network": "忘记网络",
+108 -12
View File
@@ -8,6 +8,7 @@
"disable-dnd": "停用勿擾模式",
"disable-wifi": "關閉 Wi-Fi",
"disconnect-vpn": "自 {name} 中斷連線",
"dock-settings": "Dock 設定",
"enable-bluetooth": "啟用藍牙",
"enable-dnd": "啟用勿擾模式",
"enable-wifi": "啟用 Wi-Fi",
@@ -64,6 +65,10 @@
"show-power-profile-description": "在電池面板內顯示可切換的電源配置",
"show-power-profile-label": "顯示電源配置"
},
"brightness": {
"apply-all-description": "使用滾輪時更改所有顯示器的亮度。",
"apply-all-label": "將捲動變更套用到所有螢幕"
},
"clock": {
"clock-display-description": "利用下面列表的標記自訂你想要的時鐘格式; 如果想使用12小時制, 你必須要再增加 \"AP\" 標記",
"clock-display-label": "時鐘顯示",
@@ -87,7 +92,7 @@
"browse-file": "瀏覽檔案",
"browse-library": "瀏覽圖示庫",
"color-selection-description": "將主題用色套用至圖示上",
"enable-colorization-description": "對控制中心的圖示啟用上色, 並套用主題用色",
"enable-colorization-description": "為圖示啟用著色,應用主題顏色。",
"icon-description": "自圖示庫或檔案選擇一個圖示",
"select-custom-icon": "選取一個自訂圖示",
"use-distro-logo-description": "使用你現在使用的發行版 Logo 作為圖示",
@@ -97,12 +102,15 @@
"collapse-condition-description": "若輸出文字符合此值,按鈕將會摺疊。",
"collapse-condition-label": "摺疊條件",
"color-selection-description": "將主題用色套用至圖示及文字上",
"default-tooltip": "自訂按鈕,在設定中配置",
"display-command-output-description": "輸入一個想要定時重複執行的指令, 指令的第一行輸出將會作為顯示的文字",
"display-command-output-label": "顯示指令的輸出",
"display-command-output-stream-description": "輸入一個要持續執行的指令",
"dynamic-text": "動態文字",
"enable-colorization-description": "替自訂按鈕的圖示及文字啟用上色, 套用主題用色",
"enable-colorization-label": "啟用上色",
"general-tooltip-text-description": "在按鈕工具提示中顯示的自訂文字。",
"general-tooltip-text-label": "自訂工具提示文字",
"hide-mode-always-expanded": "總是展開",
"hide-mode-description": "控制當指令沒有輸出時,元件之可見性",
"hide-mode-expand-with-output": "有訊息輸出時展開",
@@ -128,16 +136,22 @@
"right-click-description": "在點擊右鍵時要執行的指令",
"right-click-label": "點擊右鍵",
"right-click-update-text": "在點擊右鍵時更新顯示文字",
"show-exec-tooltip-description": "顯示帶有指令詳細資訊的工具提示 (左鍵/右鍵/中鍵點擊,滾輪)。",
"show-exec-tooltip-label": "顯示指令工具提示",
"show-icon-description": "切換小工具圖示的能見性",
"show-icon-label": "顯示圖示",
"show-text-tooltip-description": "顯示帶有文字命令輸出的工具提示。",
"show-text-tooltip-label": "顯示動態文字工具提示",
"text-stream-description": "命令列的串流內容將以文字形式顯示在按鈕上。",
"text-stream-label": "串流",
"wheel-description": "在滾輪滾動時要執行的指令<br>在指令裡使用 $delta 表示指令中滾動多少的值",
"wheel-down": "滾輪 下",
"wheel-down-description": "在滾輪下滾時要執行的指令",
"wheel-down-label": "滾輪下滾",
"wheel-label": "滑鼠滾輪",
"wheel-mode-separate-description": "分別在滾輪上滾及下滾時執行不同指令",
"wheel-mode-separate-label": "分開設定滾輪指令",
"wheel-up": "滾輪 上",
"wheel-up-description": "在滾輪上滾時要執行的指令",
"wheel-up-label": "滾輪上滾",
"wheel-update-text": "在滾動滾輪時更新顯示文字"
@@ -356,6 +370,7 @@
},
"common": {
"actions": "操作",
"active": "活躍",
"add": "新增",
"appearance": "外觀",
"apply": "套用",
@@ -363,6 +378,7 @@
"available": "可用",
"back": "返回",
"battery": "電池",
"behavior": "行為",
"bluetooth": "藍牙",
"brightness": "亮度",
"browse": "瀏覽",
@@ -395,6 +411,7 @@
"disconnected": "已斷線",
"disconnecting": "正在斷線...",
"display-mode": "顯示模式",
"documentation": "文件",
"download": "下載",
"duration": "持續時間",
"dysfunctional": "功能失調",
@@ -458,6 +475,7 @@
"primary": "主要的",
"random": "隨機",
"reboot": "重新啟動",
"reboot-to-uefi": "重新啟動至 UEFI",
"record": "開始錄製",
"refresh": "重新整理",
"required": "(必要)",
@@ -470,6 +488,8 @@
"scanning": "掃描中...",
"screen-corners": "畫面邊角",
"search": "搜尋",
"second": "{count} 秒",
"second-plural": "{count} 秒",
"secondary": "輔助",
"security": "安全",
"select": "選取",
@@ -597,6 +617,7 @@
},
"notifications": {
"panel": {
"click-to-collapse": "點擊摺疊",
"click-to-expand": "點擊展開",
"description": "如果有收到通知就會顯示在這裡",
"no-notifications": "沒有任何通知"
@@ -751,6 +772,9 @@
"visualizer-type-description": "選擇媒體播放時的視覺效果樣式",
"visualizer-type-label": "視覺效果樣式",
"volumes-desc": "調整音訊控制及音量",
"volumes-feedback-sound-file-description": "更改音量時播放的聲音檔案路徑。",
"volumes-feedback-sound-file-label": "音量回饋聲音檔案",
"volumes-feedback-sound-file-select-title": "選擇音量回饋聲音檔案",
"volumes-input-volume-description": "麥克風輸入音量",
"volumes-mute-input-description": "將預設音訊輸入 (麥克風) 靜音",
"volumes-mute-input-label": "輸入靜音",
@@ -776,12 +800,16 @@
"appearance-capsule-color-label": "膠囊顏色",
"appearance-capsule-opacity-description": "設定當啟用顯示小容器時小工具的背景不透明度",
"appearance-capsule-opacity-label": "小容器不透明度",
"appearance-content-padding-description": "調整列邊緣與小工具之間的內邊距。",
"appearance-content-padding-label": "內容內邊距",
"appearance-density-description": "調整工具列的內部間距來做出緊湊或寬敞的外觀",
"appearance-density-label": "工具列密度",
"appearance-desc": "自訂工具列的外觀及位置",
"appearance-display-mode-description": "選擇列何時可見",
"appearance-floating-description": "將工具列以懸浮的圓弧長條狀顯示",
"appearance-floating-label": "懸浮工具列",
"appearance-font-scale-description": "調整列中顯示的文字的字體大小比例。",
"appearance-font-scale-label": "字體縮放",
"appearance-frame-radius": "內圓角",
"appearance-frame-settings-description": "調整邊框粗細和內圓角半徑",
"appearance-frame-settings-label": "邊框設定",
@@ -798,12 +826,16 @@
"appearance-position-label": "工具列位置",
"appearance-show-capsule-description": "顯示小工具的填充背景",
"appearance-show-capsule-label": "顯示小容器",
"appearance-show-on-workspace-switch-description": "切換工作區時自動短暫顯示狀態列。",
"appearance-show-on-workspace-switch-label": "工作區切換時顯示狀態列",
"appearance-show-outline-description": "讓每個小工具都顯示可視邊框",
"appearance-show-outline-label": "顯示小工具外框",
"appearance-type-description": "選擇欄的樣式:簡約、懸浮或邊框",
"appearance-type-label": "欄類型",
"appearance-use-separate-opacity-description": "啟用後可針對工具列背景使用分開的不透明度數值",
"appearance-use-separate-opacity-label": "分開設定工具列不透明度",
"appearance-widget-spacing-description": "調整列中每個小工具之間的間距。",
"appearance-widget-spacing-label": "小工具間距",
"monitor-configure-widgets": "設定小工具",
"monitor-override-settings": "覆寫全域設定",
"monitor-override-settings-description": "在這個顯示器上使用自訂設定",
@@ -881,7 +913,7 @@
"connections": {
"authentication-required": "需要驗證",
"bluetooth-devices-unnamed": "未命名裝置不顯示。",
"bluetooth-discoverable": "當此設定分頁開啟時,此裝置可被發現為 <b> {hostName} </b>。",
"bluetooth-discoverable": "當此設定分頁開啟時,此裝置可被發現為 <b>{hostName}</b>。",
"bluetooth-rssi-polling-description": "透過 bluetoothctl 定期取樣已連接裝置的 RSSI。可能並非所有裝置都可用;啟用時佔用最少資源。",
"bluetooth-rssi-polling-interval-description": "配置已連線裝置的訊號強度更新頻率。",
"bluetooth-rssi-polling-interval-label": "輪詢間隔",
@@ -900,11 +932,9 @@
"shortcuts-custom-button-command-description": "在按鈕按下時要執行的命令",
"shortcuts-custom-button-enable-on-state-logic-description": "啟用第二個圖示與「熱區」狀態,並根據檢查命令判斷。",
"shortcuts-custom-button-enable-on-state-logic-label": "啟用狀態邏輯",
"shortcuts-custom-button-general-tooltip-text-description": "自訂按鈕的工具框提示文字",
"shortcuts-custom-button-general-tooltip-text-label": "提示框文字",
"shortcuts-custom-button-icon-description": "從圖庫中選擇一個圖示。",
"shortcuts-custom-button-on-clicked-label": "左鍵指令",
"shortcuts-custom-button-on-middle-clicked-label": "中鍵指令",
"shortcuts-custom-button-on-right-clicked-label": "右鍵指令",
"shortcuts-custom-button-on-middle-clicked-description": "當按鈕被中鍵點擊時執行的命令。",
"shortcuts-custom-button-on-state-command-description": "用來檢查按鈕是否應處於「開啟」狀態的指令。傳回 0 表示應開啟,非 0 表示應關閉。",
"shortcuts-custom-button-on-state-command-label": "狀態檢查命令",
"shortcuts-custom-button-on-state-icon-description": "按鈕處於「開啓」狀態時的圖示。",
@@ -943,6 +973,7 @@
"clock-style-label": "時鐘樣式",
"clock-style-minimal": "極簡",
"clock-width-description": "以像素 (px) 設定時鐘寬度",
"cpu-intensive-note": "標有 ! 的Widget會佔用更多 CPU,請謹慎啟用。",
"edit-mode-button-label": "進入編輯模式",
"edit-mode-controls-explanation": "點擊左鍵及拖曳: 移動小工具及調整大小 點擊右鍵: 開啟右鍵選單",
"edit-mode-description": "啟用編輯模式以移動小工具; 當啟用時, 小工具會顯示一個可拖曳的外框以供移動.",
@@ -963,6 +994,8 @@
"media-player-show-buttons-label": "顯示按鈕",
"media-player-show-visualizer-description": "顯示視覺效果",
"media-player-visualizer-type-description": "選擇視覺效果的樣式",
"overview-enabled-description": "當合成器概覽開啟時,顯示桌面小工具。",
"overview-enabled-label": "在概覽中顯示",
"system-stat-layout-bottom": "底部",
"system-stat-layout-description": "選擇圖例相對於圖表的顯示方式。",
"system-stat-layout-label": "佈局",
@@ -979,6 +1012,9 @@
"weather-show-background-description": "顯示天氣小工具的填充背景"
},
"display": {
"monitors-backlight-device-auto-option": "預設",
"monitors-backlight-device-description": "為此輸出選擇一個背光裝置。",
"monitors-backlight-device-label": "背光裝置",
"monitors-brightness-step-description": "微調亮度調整一格的大小 (滾輪及鍵盤快捷鍵)",
"monitors-brightness-step-label": "亮度步進大小",
"monitors-brightness-unavailable-ddc-disabled": "無法使用亮度控制, 啟用 \"外部亮度調整支援\" 來控制這個顯示器的亮度",
@@ -988,6 +1024,8 @@
"monitors-enforce-minimum-label": "強制最小 1% 亮度",
"monitors-external-brightness-description": "啟用 DDCUtil 支援以替外部顯示器使用 DDC/CI 協定控制亮度",
"monitors-external-brightness-label": "外部亮度調整支援",
"monitors-global-brightness-description": "同時調整所有顯示器的亮度。",
"monitors-global-brightness-label": "所有顯示器",
"monitors-title": "個別顯示器設定",
"night-light-auto-schedule-description": "基於在 <i> {location} </i> 日出日落的時間設定 — 推薦",
"night-light-auto-schedule-label": "自動排程",
@@ -1024,16 +1062,44 @@
"appearance-display-exclusive": "獨占空間",
"appearance-floating-distance-description": "設定 Dock 與螢幕邊緣相隔的距離",
"appearance-floating-distance-label": "Dock 懸浮間距",
"appearance-frame-indicator-description": "當 Dock 隱藏時,在邊框上顯示一個小指示器。",
"appearance-frame-indicator-label": "帶邊框的停靠欄指示器",
"appearance-group-apps-description": "將同一應用程式的多個視窗分組到一個 Dock 項目中。",
"appearance-group-apps-label": "分組相同應用程式",
"appearance-group-click-action-cycle": "切換視窗",
"appearance-group-click-action-description": "選擇左鍵點擊對分組應用程式執行的操作。",
"appearance-group-click-action-label": "分組應用程式點擊動作",
"appearance-group-click-action-list": "開啟視窗列表",
"appearance-group-context-menu-mode-description": "選擇分組應用程式上下文選單的行為方式。",
"appearance-group-context-menu-mode-extended": "擴展",
"appearance-group-context-menu-mode-label": "分組應用程式選單模式",
"appearance-group-context-menu-mode-list": "視窗列表",
"appearance-group-indicator-style-description": "選擇分組執行指示器如何顯示焦點視窗狀態。",
"appearance-group-indicator-style-dots": "點",
"appearance-group-indicator-style-label": "分組指示器樣式",
"appearance-group-indicator-style-number": "數字",
"appearance-hide-show-speed-description": "調整 Dock 隱藏及浮出的動畫速度",
"appearance-hide-show-speed-label": "隱藏/浮出速度",
"appearance-icon-size-description": "調整 Dock 的整體大小",
"appearance-icon-size-label": "Dock 大小",
"appearance-inactive-indicators-description": "為所有應用程式顯示指示膠囊(而不僅是正在運作的程式)。",
"appearance-inactive-indicators-label": "運作指示器",
"appearance-launcher-position-description": "選擇啟動器圖示在停靠欄中的顯示位置。",
"appearance-launcher-position-end": "結束",
"appearance-launcher-position-label": "啟動器位置",
"appearance-launcher-position-start": "開始",
"appearance-pinned-static-description": "總是將釘選的程式圖示固定放在左邊",
"appearance-pinned-static-label": "固定放置釘選程式",
"appearance-position-description": "選擇 Dock 該放在畫面的哪裡",
"appearance-position-label": "位置",
"appearance-show-launcher-icon-description": "在 Dock 中顯示應用程式啟動器圖示。",
"appearance-show-launcher-icon-label": "顯示應用程式啟動器",
"appearance-sit-on-frame-description": "將停靠欄對齊在框架邊框內,而不是位於頂部。",
"appearance-sit-on-frame-label": "停靠欄位於框架上",
"appearance-type-description": "選擇浮動藥丸樣式或附著在邊緣的靜態列。",
"appearance-type-floating": "浮動",
"appearance-type-label": "Dock 樣式",
"appearance-type-static": "靜態",
"enabled-description": "顯示或完全隱藏 Dock",
"enabled-label": "啟用 Dock",
"monitors-desc": "只在特定的顯示器顯示 Dock, 如果全部取消勾選則會顯示在所有顯示器",
@@ -1057,7 +1123,6 @@
"fonts-monospace-scale-description": "增大或縮小等寬文字的大小",
"fonts-monospace-scale-label": "等寬字型大小",
"fonts-monospace-search-placeholder": "搜尋等寬字型...",
"fonts-reset-scaling": "重設文字大小",
"fonts-title": "字型",
"keybinds-conflict-description": "此按鍵組合已分配給 {action}。",
"keybinds-conflict-title": "按鍵綁定衝突",
@@ -1083,6 +1148,8 @@
"profile-select-avatar": "選擇作為頭像的圖片",
"profile-title": "個人檔案",
"profile-tooltip": "個人頭像",
"reverse-scrolling-description": "反轉解讀的捲動方向",
"reverse-scrolling-label": "反轉捲動",
"screen-corners-desc": "自訂畫面邊角的弧度及視覺效果",
"screen-corners-radius-description": "調整畫面所使用的邊角半徑",
"screen-corners-radius-label": "畫面邊角半徑",
@@ -1130,6 +1197,30 @@
"wallpaper-changed-label": "桌布更換時",
"wallpaper-changed-placeholder": "例如: notify-send \"Wallpaper\" \"Changed\""
},
"idle": {
"custom-add": "新增指令",
"custom-description": "在一段時間不活動後執行 shell 命令。",
"custom-entry-command": "命令",
"custom-entry-delete": "刪除",
"custom-entry-timeout": "閒置時間",
"custom-label": "自訂閒置指令",
"enable-description": "在一段時間不活動後,自動關閉螢幕、鎖定或暫停。",
"enable-label": "啟用閒置管理",
"fade-duration-description": "每次操作觸發前,螢幕漸變為黑的動畫持續時間(秒)。任何滑鼠移動都會取消漸變。",
"fade-duration-label": "淡入淡出時長",
"lock-description": "鎖定畫面啟用前的閒置秒數。",
"lock-label": "鎖定螢幕",
"screen-off-description": "顯示器關閉前的不活動秒數。",
"screen-off-label": "關閉螢幕",
"status-description": "Compositor回報的閒置時間。",
"status-label": "閒置時間",
"suspend-description": "系統暫停前的閒置秒數。",
"tab-behavior": "行為",
"tab-custom": "自訂",
"timeouts-description": "設定為0以停用一個階段。Keep Awake啟用時,逾時會暫停。",
"timeouts-label": "逾時",
"unavailable": "此 Compositor 不支援原生閒置監控。"
},
"indicator": {
"default-value": "預設值: {value}",
"system-default": "系統預設"
@@ -1248,6 +1339,8 @@
"lock-screen-tint-strength-description": "將色調疊加套用到鎖定畫面桌布。",
"lock-screen-tint-strength-label": "鎖定畫面著色強度",
"monitors-desc": "在特定顯示器上顯示鎖定畫面。如果未選擇,則預設為所有顯示器。",
"password-chars-description": "用於隱藏密碼的可愛圖示。",
"password-chars-label": "隨機密碼圖示",
"show-hibernate-description": "在電源及工作階段選單顯示睡眠",
"show-hibernate-label": "顯示睡眠",
"show-session-buttons-description": "允許在鎖定畫面存取電源控制",
@@ -1269,10 +1362,11 @@
"duration-low-urgency-label": "低急迫性",
"duration-normal-urgency-description": "設定普通急迫的通知該顯示多久",
"duration-normal-urgency-label": "普通急迫",
"duration-reset": "重設逾時時間長度",
"duration-respect-expire-description": "使用通知中設定的到期逾時時間。",
"duration-respect-expire-label": "遵循到期逾時設定",
"duration-title": "通知顯示時長",
"history-clear-dismiss-description": "關閉時從歷史記錄中清除通知。",
"history-clear-dismiss-label": "關閉時清除",
"history-critical-urgency-description": "將非常危急的通知存放到歷史通知",
"history-critical-urgency-label": "儲存非常危急到歷史通知",
"history-desc": "根據通知的緊急程度,控制要將哪些通知儲存至紀錄。",
@@ -1290,6 +1384,8 @@
"settings-enabled-description": "啟用或完全停用通知的 daemon, 需要重新啟動 Noctalia 介面",
"settings-enabled-label": "啟用通知",
"settings-location-description": "通知該在畫面的哪裡出現",
"settings-markdown-description": "使用 Markdown 格式渲染通知內容。",
"settings-markdown-label": "啟用 Markdown",
"sounds-desc": "設定通知所使用的音效及音量",
"sounds-enabled-description": "在有新通知時啟用音效",
"sounds-enabled-label": "啟用通知音效",
@@ -1493,16 +1589,13 @@
"box-border-label": "頁面容器外框",
"box-border-radius-description": "調整主要版面區塊(例如側邊欄、卡片與內容面板)的圓角弧度。",
"box-border-radius-label": "頁面容器半徑",
"box-border-radius-reset": "重設頁面容器半徑",
"control-border-radius-description": "控制互動元素(包括按鈕、切換開關與文字欄位)的圓角弧度。",
"control-border-radius-label": "控制項半徑",
"control-border-radius-reset": "重設控制項半徑",
"desc": "自訂介面顯示的行為, 外觀及風格",
"dim-desktop-description": "當功能表或面板打開時調暗桌布",
"dim-desktop-label": "調暗桌布",
"dimmer-opacity-description": "設定調暗桌布所使用的不透明度",
"dimmer-opacity-label": "調暗桌面不透明度",
"dimmer-opacity-reset": "重設調暗桌面不透明度",
"panel-background-opacity-description": "設定所有面板的背景不透明度 (工具列, 啟動器, 設定等...)",
"panel-background-opacity-label": "面板背景不透明度",
"panels-attached-to-bar-description": "將面板鎖定在工具列及畫面邊緣, 配合倒角可做出更一致的效果",
@@ -1511,9 +1604,11 @@
"panels-overlay-label": "維持工具列及面板在最上層",
"scaling-description": "調整除了工具列以外的整體介面大小",
"scaling-label": "介面比例",
"scaling-reset-scaling": "重設介面比例",
"settings-panel-header": "設定面板",
"settings-panel-mode-description": "選擇介面設定出現所用的佈局 (可能需要重新打開)",
"settings-panel-mode-label": "設定面板顯示",
"settings-panel-sidebar-card-style-description": "用圓角填充背景包裹設定側邊欄。",
"settings-panel-sidebar-card-style-label": "側邊欄卡片樣式",
"shadows-description": "為工具列及面板啟用陰影",
"shadows-direction-description": "選擇陰影投射的位置。",
"shadows-direction-label": "陰影方向",
@@ -1762,6 +1857,7 @@
"collapse": "收起側邊欄",
"copy-address": "複製位址",
"delete-notification": "刪除通知",
"dismiss-notification": "關閉通知",
"do-not-disturb-enabled": "勿擾模式",
"expand": "展開側邊欄",
"forget-network": "忘記網路設定",
+33 -9
View File
@@ -9,6 +9,9 @@
"showCapsule": true,
"capsuleOpacity": 1,
"capsuleColorKey": "none",
"widgetSpacing": 6,
"contentPadding": 0,
"fontScale": 1,
"backgroundOpacity": 0.93,
"useSeparateOpacity": false,
"floating": false,
@@ -21,6 +24,7 @@
"displayMode": "always_visible",
"autoHideDelay": 500,
"autoShowDelay": 150,
"showOnWorkspaceSwitch": true,
"widgets": {
"left": [
{
@@ -98,6 +102,7 @@
"allowPasswordWithFprintd": false,
"clockStyle": "custom",
"clockFormat": "hh\\nmm",
"passwordChars": false,
"lockScreenMonitors": [],
"lockScreenBlur": 0,
"lockScreenTint": 0,
@@ -123,7 +128,8 @@
"keyRemove": [
"Del"
]
}
},
"reverseScroll": false
},
"ui": {
"fontDefault": "",
@@ -131,14 +137,11 @@
"fontDefaultScale": 1,
"fontFixedScale": 1,
"tooltipsEnabled": true,
"boxBorderEnabled": false,
"panelBackgroundOpacity": 0.93,
"panelsAttachedToBar": true,
"settingsPanelMode": "attached",
"wifiDetailsViewMode": "grid",
"bluetoothDetailsViewMode": "grid",
"networkPanelView": "wifi",
"bluetoothHideUnnamedDevices": false,
"boxBorderEnabled": false
"settingsPanelSideBarCardStyle": false
},
"location": {
"name": "Tokyo",
@@ -321,6 +324,7 @@
"enabled": true,
"position": "bottom",
"displayMode": "auto_hide",
"dockType": "floating",
"backgroundOpacity": 1,
"floatingRatio": 1,
"size": 1,
@@ -328,16 +332,26 @@
"monitors": [],
"pinnedApps": [],
"colorizeIcons": false,
"showLauncherIcon": false,
"launcherPosition": "end",
"launcherIconColor": "none",
"pinnedStatic": false,
"inactiveIndicators": false,
"groupApps": false,
"groupContextMenuMode": "extended",
"groupClickAction": "cycle",
"groupIndicatorStyle": "dots",
"deadOpacity": 0.6,
"animationSpeed": 1
"animationSpeed": 1,
"sitOnFrame": false,
"showFrameIndicator": true
},
"network": {
"wifiEnabled": true,
"airplaneModeEnabled": false,
"bluetoothRssiPollingEnabled": false,
"bluetoothRssiPollIntervalMs": 60000,
"networkPanelView": "wifi",
"wifiDetailsViewMode": "grid",
"bluetoothDetailsViewMode": "grid",
"bluetoothHideUnnamedDevices": false,
@@ -381,11 +395,17 @@
"action": "shutdown",
"enabled": true,
"keybind": "6"
},
{
"action": "rebootToUefi",
"enabled": true,
"keybind": "7"
}
]
},
"notifications": {
"enabled": true,
"enableMarkdown": false,
"density": "default",
"monitors": [],
"location": "top_right",
@@ -395,6 +415,7 @@
"lowUrgencyDuration": 3,
"normalUrgencyDuration": 8,
"criticalUrgencyDuration": 15,
"clearDismissed": true,
"saveToHistory": {
"low": true,
"normal": true,
@@ -433,12 +454,14 @@
"visualizerType": "linear",
"mprisBlacklist": [],
"preferredPlayer": "",
"volumeFeedback": false
"volumeFeedback": false,
"volumeFeedbackSoundFile": ""
},
"brightness": {
"brightnessStep": 5,
"enforceMinimum": true,
"enableDdcSupport": false
"enableDdcSupport": false,
"backlightDeviceMappings": []
},
"colorSchemes": {
"useWallpaperColors": false,
@@ -479,6 +502,7 @@
},
"desktopWidgets": {
"enabled": false,
"overviewEnabled": true,
"gridSnap": false,
"monitorWidgets": []
}
+270 -56
View File
@@ -89,6 +89,15 @@
"subTab": 0,
"subTabLabel": "common.volumes"
},
{
"labelKey": "panels.audio.volumes-feedback-sound-file-label",
"descriptionKey": "panels.audio.volumes-feedback-sound-file-description",
"widget": "NLabel",
"tab": 13,
"tabLabel": "panels.audio.title",
"subTab": 0,
"subTabLabel": "common.volumes"
},
{
"labelKey": "panels.osd.types-input-volume-label",
"descriptionKey": "panels.audio.volumes-input-volume-description",
@@ -179,6 +188,33 @@
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.bar.appearance-font-scale-label",
"descriptionKey": "panels.bar.appearance-font-scale-description",
"widget": "NValueSlider",
"tab": 4,
"tabLabel": "panels.bar.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.bar.appearance-widget-spacing-label",
"descriptionKey": "panels.bar.appearance-widget-spacing-description",
"widget": "NValueSlider",
"tab": 4,
"tabLabel": "panels.bar.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.bar.appearance-content-padding-label",
"descriptionKey": "panels.bar.appearance-content-padding-description",
"widget": "NValueSlider",
"tab": 4,
"tabLabel": "panels.bar.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.bar.appearance-show-outline-label",
"descriptionKey": "panels.bar.appearance-show-outline-description",
@@ -296,6 +332,15 @@
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.bar.appearance-show-on-workspace-switch-label",
"descriptionKey": "panels.bar.appearance-show-on-workspace-switch-description",
"widget": "NToggle",
"tab": 4,
"tabLabel": "panels.bar.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.bar.monitor-override-settings",
"descriptionKey": "panels.bar.monitor-override-settings-description",
@@ -377,6 +422,24 @@
"subTab": 1,
"subTabLabel": "common.bluetooth"
},
{
"labelKey": "bluetooth.panel.connected-devices",
"descriptionKey": null,
"widget": "NLabel",
"tab": 15,
"tabLabel": "panels.connections.title",
"subTab": 1,
"subTabLabel": "common.bluetooth"
},
{
"labelKey": "bluetooth.panel.paired-devices",
"descriptionKey": null,
"widget": "NLabel",
"tab": 15,
"tabLabel": "panels.connections.title",
"subTab": 1,
"subTabLabel": "common.bluetooth"
},
{
"labelKey": "bluetooth.panel.available-devices",
"descriptionKey": null,
@@ -422,6 +485,15 @@
"subTab": 1,
"subTabLabel": "common.bluetooth"
},
{
"labelKey": "toast.airplane-mode.title",
"descriptionKey": null,
"widget": "NToggle",
"tab": 15,
"tabLabel": "panels.connections.title",
"subTab": 0,
"subTabLabel": "common.wifi"
},
{
"labelKey": "common.wifi",
"descriptionKey": null,
@@ -457,6 +529,23 @@
"tabLabel": "panels.desktop-widgets.title",
"subTab": null
},
{
"labelKey": "panels.desktop-widgets.overview-enabled-label",
"descriptionKey": "panels.desktop-widgets.overview-enabled-description",
"widget": "NToggle",
"tab": 6,
"tabLabel": "panels.desktop-widgets.title",
"subTab": null
},
{
"labelKey": "panels.display.monitors-backlight-device-label",
"descriptionKey": "panels.display.monitors-backlight-device-description",
"widget": "NComboBox",
"tab": 14,
"tabLabel": "panels.display.title",
"subTab": 0,
"subTabLabel": "common.brightness"
},
{
"labelKey": "panels.display.monitors-brightness-step-label",
"descriptionKey": "panels.display.monitors-brightness-step-description",
@@ -547,6 +636,15 @@
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.dock.appearance-type-label",
"descriptionKey": "panels.dock.appearance-type-description",
"widget": "NComboBox",
"tab": 5,
"tabLabel": "panels.dock.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.display.title",
"descriptionKey": "panels.dock.appearance-display-description",
@@ -556,6 +654,24 @@
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.dock.appearance-sit-on-frame-label",
"descriptionKey": "panels.dock.appearance-sit-on-frame-description",
"widget": "NToggle",
"tab": 5,
"tabLabel": "panels.dock.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.dock.appearance-frame-indicator-label",
"descriptionKey": "panels.dock.appearance-frame-indicator-description",
"widget": "NToggle",
"tab": 5,
"tabLabel": "panels.dock.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.osd.background-opacity-label",
"descriptionKey": "panels.dock.appearance-background-opacity-description",
@@ -619,6 +735,42 @@
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.dock.appearance-group-apps-label",
"descriptionKey": "panels.dock.appearance-group-apps-description",
"widget": "NToggle",
"tab": 5,
"tabLabel": "panels.dock.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.dock.appearance-group-click-action-label",
"descriptionKey": "panels.dock.appearance-group-click-action-description",
"widget": "NComboBox",
"tab": 5,
"tabLabel": "panels.dock.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.dock.appearance-group-context-menu-mode-label",
"descriptionKey": "panels.dock.appearance-group-context-menu-mode-description",
"widget": "NComboBox",
"tab": 5,
"tabLabel": "panels.dock.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.dock.appearance-group-indicator-style-label",
"descriptionKey": "panels.dock.appearance-group-indicator-style-description",
"widget": "NComboBox",
"tab": 5,
"tabLabel": "panels.dock.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.dock.monitors-only-same-monitor-label",
"descriptionKey": "panels.dock.monitors-only-same-monitor-description",
@@ -637,6 +789,24 @@
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.dock.appearance-show-launcher-icon-label",
"descriptionKey": "panels.dock.appearance-show-launcher-icon-description",
"widget": "NToggle",
"tab": 5,
"tabLabel": "panels.dock.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.dock.appearance-launcher-position-label",
"descriptionKey": "panels.dock.appearance-launcher-position-description",
"widget": "NComboBox",
"tab": 5,
"tabLabel": "panels.dock.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.general.profile-picture-label",
"descriptionKey": "panels.general.profile-picture-description",
@@ -677,6 +847,14 @@
"tabLabel": "common.general",
"subTab": null
},
{
"labelKey": "panels.general.reverse-scrolling-label",
"descriptionKey": "panels.general.reverse-scrolling-description",
"widget": "NToggle",
"tab": 0,
"tabLabel": "common.general",
"subTab": null
},
{
"labelKey": "panels.general.keybinds-title",
"descriptionKey": "panels.general.keybinds-description",
@@ -992,8 +1170,8 @@
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.lock-screen.lock-on-suspend-label",
"descriptionKey": "panels.lock-screen.lock-on-suspend-description",
"labelKey": "panels.lock-screen.password-chars-label",
"descriptionKey": "panels.lock-screen.password-chars-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
@@ -1018,60 +1196,6 @@
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.lock-screen.auto-start-auth-label",
"descriptionKey": "panels.lock-screen.auto-start-auth-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.lock-screen.allow-password-with-fprintd-label",
"descriptionKey": "panels.lock-screen.allow-password-with-fprintd-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.lock-screen.show-session-buttons-label",
"descriptionKey": "panels.lock-screen.show-session-buttons-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.lock-screen.show-hibernate-label",
"descriptionKey": "panels.lock-screen.show-hibernate-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.session-menu.enable-countdown-label",
"descriptionKey": "panels.session-menu.enable-countdown-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.session-menu.countdown-duration-label",
"descriptionKey": "panels.session-menu.countdown-duration-description",
"widget": "NValueSlider",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.lock-screen.lock-screen-blur-strength-label",
"descriptionKey": "panels.lock-screen.lock-screen-blur-strength-description",
@@ -1090,6 +1214,69 @@
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.lock-screen.lock-on-suspend-label",
"descriptionKey": "panels.lock-screen.lock-on-suspend-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 1,
"subTabLabel": "common.behavior"
},
{
"labelKey": "panels.lock-screen.auto-start-auth-label",
"descriptionKey": "panels.lock-screen.auto-start-auth-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 1,
"subTabLabel": "common.behavior"
},
{
"labelKey": "panels.lock-screen.allow-password-with-fprintd-label",
"descriptionKey": "panels.lock-screen.allow-password-with-fprintd-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 1,
"subTabLabel": "common.behavior"
},
{
"labelKey": "panels.lock-screen.show-session-buttons-label",
"descriptionKey": "panels.lock-screen.show-session-buttons-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 1,
"subTabLabel": "common.behavior"
},
{
"labelKey": "panels.lock-screen.show-hibernate-label",
"descriptionKey": "panels.lock-screen.show-hibernate-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 1,
"subTabLabel": "common.behavior"
},
{
"labelKey": "panels.session-menu.enable-countdown-label",
"descriptionKey": "panels.session-menu.enable-countdown-description",
"widget": "NToggle",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 1,
"subTabLabel": "common.behavior"
},
{
"labelKey": "panels.session-menu.countdown-duration-label",
"descriptionKey": "panels.session-menu.countdown-duration-description",
"widget": "NValueSlider",
"tab": 11,
"tabLabel": "panels.lock-screen.title",
"subTab": 1,
"subTabLabel": "common.behavior"
},
{
"labelKey": "panels.notifications.duration-respect-expire-label",
"descriptionKey": "panels.notifications.duration-respect-expire-description",
@@ -1162,6 +1349,24 @@
"subTab": 0,
"subTabLabel": "common.appearance"
},
{
"labelKey": "panels.notifications.history-clear-dismiss-label",
"descriptionKey": "panels.notifications.history-clear-dismiss-description",
"widget": "NToggle",
"tab": 9,
"tabLabel": "common.notifications",
"subTab": 2,
"subTabLabel": "common.history"
},
{
"labelKey": "panels.notifications.settings-markdown-label",
"descriptionKey": "panels.notifications.settings-markdown-description",
"widget": "NToggle",
"tab": 9,
"tabLabel": "common.notifications",
"subTab": 2,
"subTabLabel": "common.history"
},
{
"labelKey": "panels.notifications.history-low-urgency-label",
"descriptionKey": "panels.notifications.history-low-urgency-description",
@@ -1657,6 +1862,15 @@
"subTab": 1,
"subTabLabel": "common.panels"
},
{
"labelKey": "panels.user-interface.settings-panel-sidebar-card-style-label",
"descriptionKey": "panels.user-interface.settings-panel-sidebar-card-style-description",
"widget": "NToggle",
"tab": 1,
"tabLabel": "panels.user-interface.title",
"subTab": 1,
"subTabLabel": "common.panels"
},
{
"labelKey": "panels.general.screen-corners-show-corners-label",
"descriptionKey": "panels.general.screen-corners-show-corners-description",
+16 -5
View File
@@ -30,7 +30,8 @@
"Brightness": {
"displayMode": "onhover",
"iconColor": "none",
"textColor": "none"
"textColor": "none",
"applyToAllMonitors": false
},
"Clock": {
"clockColor": "none",
@@ -51,6 +52,9 @@
"CustomButton": {
"icon": "heart",
"showIcon": true,
"showExecTooltip": true,
"showTextTooltip": true,
"generalTooltipText": "",
"hideMode": "alwaysExpanded",
"leftClickExec": "",
"leftClickUpdateText": false,
@@ -101,7 +105,11 @@
"hideWhenOff": false
},
"Launcher": {
"useDistroLogo": false,
"icon": "rocket",
"customIconPath": "",
"colorizeSystemIcon": "none",
"enableColorization": false,
"iconColor": "none"
},
"MediaMini": {
@@ -138,6 +146,9 @@
"SessionMenu": {
"iconColor": "error"
},
"Settings": {
"iconColor": "non"
},
"Spacer": {
"width": 20
},
@@ -216,7 +227,6 @@
"occupiedColor": "secondary",
"emptyColor": "secondary",
"showBadge": true,
"reverseScroll": false,
"pillSize": 0.6
},
"Volume": {
@@ -235,9 +245,10 @@
"onClicked": "",
"onRightClicked": "",
"onMiddleClicked": "",
"stateChecks": [],
"generalTooltipText": "Custom Button",
"enableOnStateLogic": false
"stateChecksJson": "[]",
"generalTooltipText": "",
"enableOnStateLogic": false,
"showExecTooltip": true
}
},
"desktop": {
+1 -1
View File
@@ -14,7 +14,7 @@ Singleton {
property string systemDetectedLangCode: ""
property string fullLocaleCode: "" // Preserves regional locale variants
// Static list of available translations update when adding/removing translation files
property var availableLanguages: ["en", "de", "es", "fr", "hu", "ja", "ko-KR", "ku", "nl", "nn-HN", "nn-NO", "pl", "pt", "ru", "sv", "tr", "uk-UA", "zh-CN", "zh-TW"]
property var availableLanguages: ["en", "de", "es", "fr", "hu", "it", "ja", "ko-KR", "ku", "nl", "nn-HN", "nn-NO", "pl", "pt", "ru", "sv", "tr", "uk-UA", "zh-CN", "zh-TW"]
property var translations: ({})
property var fallbackTranslations: ({})
+1
View File
@@ -33,6 +33,7 @@ Singleton {
"media-next": "player-skip-forward-filled",
"download-speed": "download",
"upload-speed": "upload",
"cpu-intensive": "alert-octagon",
"cpu-usage": "brand-speedtest",
"cpu-temperature": "flame",
"gpu-temperature": "device-desktop",
+184
View File
@@ -0,0 +1,184 @@
pragma Singleton
import QtQuick
QtObject {
function getKeybindString(event) {
let keyStr = "";
if (event.modifiers & Qt.ControlModifier)
keyStr += "Ctrl+";
if (event.modifiers & Qt.AltModifier)
keyStr += "Alt+";
if (event.modifiers & Qt.ShiftModifier)
keyStr += "Shift+";
let keyName = "";
let rawText = event.text;
if (event.key >= Qt.Key_A && event.key <= Qt.Key_Z || event.key >= Qt.Key_0 && event.key <= Qt.Key_9) {
keyName = String.fromCharCode(event.key);
} else if (event.key >= Qt.Key_F1 && event.key <= Qt.Key_F12) {
keyName = "F" + (event.key - Qt.Key_F1 + 1);
} else if (rawText && rawText.length > 0 && rawText.charCodeAt(0) > 31 && rawText.charCodeAt(0) !== 127) {
keyName = rawText.toUpperCase();
if (event.modifiers & Qt.ShiftModifier) {
const shiftMap = {
"!": "1",
"\"": "2",
"§": "3",
"$": "4",
"%": "5",
"&": "6",
"/": "7",
"(": "8",
")": "9",
"=": "0",
"@": "2",
"#": "3",
"^": "6",
"*": "8"
};
if (shiftMap[keyName]) {
keyName = shiftMap[keyName];
}
}
} else {
switch (event.key) {
case Qt.Key_Escape:
keyName = "Esc";
break;
case Qt.Key_Space:
keyName = "Space";
break;
case Qt.Key_Return:
keyName = "Return";
break;
case Qt.Key_Enter:
keyName = "Enter";
break;
case Qt.Key_Tab:
keyName = "Tab";
break;
case Qt.Key_Backspace:
keyName = "Backspace";
break;
case Qt.Key_Delete:
keyName = "Del";
break;
case Qt.Key_Insert:
keyName = "Ins";
break;
case Qt.Key_Home:
keyName = "Home";
break;
case Qt.Key_End:
keyName = "End";
break;
case Qt.Key_PageUp:
keyName = "PgUp";
break;
case Qt.Key_PageDown:
keyName = "PgDn";
break;
case Qt.Key_Left:
keyName = "Left";
break;
case Qt.Key_Right:
keyName = "Right";
break;
case Qt.Key_Up:
keyName = "Up";
break;
case Qt.Key_Down:
keyName = "Down";
break;
}
}
if (!keyName)
return "";
return keyStr + keyName;
}
function checkKey(event, settingName, settings) {
// Accept both simplified names ("remove") and full property names ("keyRemove")
// so callers are less error-prone.
var normalized = String(settingName || "");
if (!normalized)
return false;
var propName = normalized.startsWith("key") ? normalized : ("key" + normalized.charAt(0).toUpperCase() + normalized.slice(1));
var boundKeys = settings.data.general.keybinds[propName];
if (!boundKeys || boundKeys.length === 0)
return false;
var eventString = getKeybindString(event);
for (var i = 0; i < boundKeys.length; i++) {
if (boundKeys[i] === eventString)
return true;
}
return false;
}
/**
* Check if a keybind string conflicts with any other existing keybinds.
* @param {string} keyStr - The keybind string to check (e.g., "Ctrl+A").
* @param {string} currentPath - The settings path of the keybind being edited (to skip checking itself).
* @param {object} data - The settings data object (from Settings.data).
* @returns {string|null} - The name of the conflicting action, or null if no conflict.
*/
function getKeybindConflict(keyStr, currentPath, data) {
if (!keyStr || !data)
return null;
const searchKey = String(keyStr).trim().toLowerCase();
// 1. Check navigation keybinds
const navKeybinds = data.general ? data.general.keybinds : null;
const navMap = {
"keyUp": "Navigation: Up",
"keyDown": "Navigation: Down",
"keyLeft": "Navigation: Left",
"keyRight": "Navigation: Right",
"keyEnter": "Navigation: Enter",
"keyEscape": "Navigation: Escape"
};
if (navKeybinds) {
for (const prop in navMap) {
const fullPath = "general.keybinds." + prop;
if (fullPath === currentPath)
continue;
const boundKeys = navKeybinds[prop];
if (boundKeys && boundKeys.length !== undefined) {
for (let i = 0; i < boundKeys.length; i++) {
if (String(boundKeys[i]).trim().toLowerCase() === searchKey) {
return navMap[prop];
}
}
}
}
}
// 2. Check session menu power options
const sessionMenu = data.sessionMenu;
if (sessionMenu && sessionMenu.powerOptions) {
const powerOptions = sessionMenu.powerOptions;
for (let i = 0; i < powerOptions.length; i++) {
const entry = powerOptions[i];
const fullPath = "sessionMenu.powerOptions[" + i + "].keybind";
if (fullPath === currentPath)
continue;
if (entry.keybind && String(entry.keybind).trim().toLowerCase() === searchKey) {
// Capitalize action name
const actionName = entry.action ? entry.action.charAt(0).toUpperCase() + entry.action.slice(1) : "Unknown";
return "Session Menu: " + actionName;
}
}
}
return null;
}
}
+45 -10
View File
@@ -36,9 +36,9 @@ Singleton {
readonly property string defaultVideosDirectory: Quickshell.env("HOME") + "/Videos"
readonly property string defaultWallpapersDirectory: Quickshell.env("HOME") + "/Pictures/Wallpapers"
// Signal emitted when settings are loaded after startupcale changes
signal settingsLoaded
signal settingsSaved
signal settingsReloaded
// -----------------------------------------------------
// -----------------------------------------------------
@@ -121,6 +121,9 @@ Singleton {
root.settingsLoaded();
upgradeSettings();
} else {
Logger.d("Settings", "Settings reloaded from external file change");
root.settingsReloaded();
}
}
onLoadFailed: function (error) {
@@ -178,6 +181,9 @@ Singleton {
property bool showCapsule: true
property real capsuleOpacity: 1.0
property string capsuleColorKey: "none"
property int widgetSpacing: 6
property int contentPadding: 0
property real fontScale: 1.0
// Bar background opacity settings
property real backgroundOpacity: 0.93
@@ -202,6 +208,7 @@ Singleton {
property string displayMode: "always_visible"
property int autoHideDelay: 500 // ms before hiding after mouse leaves
property int autoShowDelay: 150 // ms before showing when mouse enters
property bool showOnWorkspaceSwitch: true // show bar briefly on workspace switch
// Widget configuration for modular bar system
property JsonObject widgets
@@ -287,6 +294,7 @@ Singleton {
property bool allowPasswordWithFprintd: false
property string clockStyle: "custom"
property string clockFormat: "hh\\nmm"
property bool passwordChars: false
property list<string> lockScreenMonitors: [] // holds lock screen visibility per monitor
property real lockScreenBlur: 0.0
property real lockScreenTint: 0.0
@@ -299,6 +307,7 @@ Singleton {
property list<string> keyEscape: ["Esc"]
property list<string> keyRemove: ["Del"]
}
property bool reverseScroll: false
}
// ui
@@ -308,17 +317,11 @@ Singleton {
property real fontDefaultScale: 1.0
property real fontFixedScale: 1.0
property bool tooltipsEnabled: true
property bool boxBorderEnabled: false
property real panelBackgroundOpacity: 0.93
property bool panelsAttachedToBar: true
property string settingsPanelMode: "attached" // "centered", "attached", "window"
// Details view mode persistence for panels
property string wifiDetailsViewMode: "grid" // "grid" or "list"
property string bluetoothDetailsViewMode: "grid" // "grid" or "list"
// Persist the last-opened view for the unified network panel: "wifi" | "ethernet"
property string networkPanelView: "wifi"
// Bluetooth available devices list: hide items without a name
property bool bluetoothHideUnnamedDevices: false
property bool boxBorderEnabled: false
property bool settingsPanelSideBarCardStyle: false
}
// location
@@ -522,6 +525,7 @@ Singleton {
property bool enabled: true
property string position: "bottom" // "top", "bottom", "left", "right"
property string displayMode: "auto_hide" // "always_visible", "auto_hide", "exclusive"
property string dockType: "floating" // "floating", "static"
property real backgroundOpacity: 1.0
property real floatingRatio: 1.0
property real size: 1
@@ -529,11 +533,19 @@ Singleton {
property list<string> monitors: [] // holds dock visibility per monitor
property list<string> pinnedApps: [] // Desktop entry IDs pinned to the dock (e.g., "org.kde.konsole", "firefox.desktop")
property bool colorizeIcons: false
property bool showLauncherIcon: false
property string launcherPosition: "end" // "start", "end"
property string launcherIconColor: "none"
property bool pinnedStatic: false
property bool inactiveIndicators: false
property bool groupApps: false
property string groupContextMenuMode: "extended" // "list", "extended"
property string groupClickAction: "cycle" // "cycle", "list"
property string groupIndicatorStyle: "dots" // "number", "dots"
property double deadOpacity: 0.6
property real animationSpeed: 1.0 // Speed multiplier for hide/show animations (0.1 = slowest, 2.0 = fastest)
property bool sitOnFrame: false
property bool showFrameIndicator: true
}
// network
@@ -542,6 +554,7 @@ Singleton {
property bool airplaneModeEnabled: false
property bool bluetoothRssiPollingEnabled: false // Opt-in Bluetooth RSSI polling (uses bluetoothctl)
property int bluetoothRssiPollIntervalMs: 60000 // Polling interval in milliseconds for RSSI queries
property string networkPanelView: "wifi"
property string wifiDetailsViewMode: "grid" // "grid" or "list"
property string bluetoothDetailsViewMode: "grid" // "grid" or "list"
property bool bluetoothHideUnnamedDevices: false
@@ -587,6 +600,11 @@ Singleton {
"action": "shutdown",
"enabled": true,
"keybind": "6"
},
{
"action": "rebootToUefi",
"enabled": true,
"keybind": "7"
}
]
}
@@ -594,6 +612,7 @@ Singleton {
// notifications
property JsonObject notifications: JsonObject {
property bool enabled: true
property bool enableMarkdown: false
property string density: "default" // "default", "compact"
property list<string> monitors: [] // holds notifications visibility per monitor
property string location: "top_right"
@@ -603,6 +622,7 @@ Singleton {
property int lowUrgencyDuration: 3
property int normalUrgencyDuration: 8
property int criticalUrgencyDuration: 15
property bool clearDismissed: true
property JsonObject saveToHistory: JsonObject {
property bool low: true
property bool normal: true
@@ -642,6 +662,7 @@ Singleton {
property list<string> mprisBlacklist: []
property string preferredPlayer: ""
property bool volumeFeedback: false
property string volumeFeedbackSoundFile: ""
}
// brightness
@@ -649,6 +670,8 @@ Singleton {
property int brightnessStep: 5
property bool enforceMinimum: true
property bool enableDdcSupport: false
property list<var> backlightDeviceMappings: []
// Format: [{ "output": "eDP-1", "device": "/sys/class/backlight/intel_backlight" }]
}
property JsonObject colorSchemes: JsonObject {
@@ -701,6 +724,7 @@ Singleton {
// desktop widgets
property JsonObject desktopWidgets: JsonObject {
property bool enabled: false
property bool overviewEnabled: true
property bool gridSnap: false
property list<var> monitorWidgets: []
// Format: [{ "name": "DP-1", "widgets": [...] }, { "name": "HDMI-1", "widgets": [...] }]
@@ -864,6 +888,17 @@ Singleton {
return data.bar.density || "default";
}
// -----------------------------------------------------
// Get effective bar display mode for a screen (with inheritance)
// If the screen has a displayMode override and overrides are enabled, use it; otherwise use global default
function getBarDisplayModeForScreen(screenName) {
var override = _findScreenOverride(screenName);
if (override && override.enabled !== false && override.displayMode !== undefined) {
return override.displayMode;
}
return data.bar.displayMode || "always_visible";
}
// -----------------------------------------------------
// Check if a screen has any overrides, optionally for a specific property
function hasScreenOverride(screenName, property) {
+12 -2
View File
@@ -47,6 +47,7 @@ Singleton {
readonly property int borderL: Math.max(1, Math.round(3 * uiScaleRatio))
// Margins (for margins and spacing)
readonly property int marginXXXS: Math.round(1 * uiScaleRatio)
readonly property int marginXXS: Math.round(2 * uiScaleRatio)
readonly property int marginXS: Math.round(4 * uiScaleRatio)
readonly property int marginS: Math.round(6 * uiScaleRatio)
@@ -54,6 +55,15 @@ Singleton {
readonly property int marginL: Math.round(13 * uiScaleRatio)
readonly property int marginXL: Math.round(18 * uiScaleRatio)
// Double margins, for proper container sizing only (e.g. height: id.implicitHeight + Style.margin2M)
readonly property int margin2XXXS: marginXXXS * 2
readonly property int margin2XXS: marginXXS * 2
readonly property int margin2XS: marginXS * 2
readonly property int margin2S: marginS * 2
readonly property int margin2M: marginM * 2
readonly property int margin2L: marginL * 2
readonly property int margin2XL: marginXL * 2
// Opacity
readonly property real opacityNone: 0.0
readonly property real opacityLight: 0.25
@@ -137,7 +147,7 @@ Singleton {
// The base/default font size for all texts in the bar
readonly property real _barBaseFontSize: Math.max(1, (Style.barHeight / Style.capsuleHeight) * Style.fontSizeXXS)
readonly property real barFontSize: (Settings.data.bar.position === "left" || Settings.data.bar.position === "right") ? _barBaseFontSize * 0.9 : _barBaseFontSize
readonly property real barFontSize: (Settings.data.bar.position === "left" || Settings.data.bar.position === "right") ? _barBaseFontSize * 0.9 * Settings.data.bar.fontScale : _barBaseFontSize * Settings.data.bar.fontScale
readonly property color capsuleColor: Settings.data.bar.showCapsule ? Qt.alpha(Settings.data.bar.capsuleColorKey !== "none" ? Color.resolveColorKey(Settings.data.bar.capsuleColorKey) : Color.mSurfaceVariant, Settings.data.bar.capsuleOpacity) : "transparent"
@@ -210,7 +220,7 @@ Singleton {
// Get bar font size for a specific bar height, capsule height, and orientation
function getBarFontSizeForDensity(barHeight, capsuleHeight, isVertical) {
const baseFontSize = Math.max(1, (barHeight / capsuleHeight) * Style.fontSizeXXS);
return isVertical ? baseFontSize * 0.9 : baseFontSize;
return isVertical ? baseFontSize * 0.9 * Settings.data.bar.fontScale : baseFontSize * Settings.data.bar.fontScale;
}
// Convenience functions for per-screen bar sizing
-170
View File
@@ -1,170 +0,0 @@
function getKeybindString(event) {
let keyStr = "";
if (event.modifiers & Qt.ControlModifier)
keyStr += "Ctrl+";
if (event.modifiers & Qt.AltModifier)
keyStr += "Alt+";
if (event.modifiers & Qt.ShiftModifier)
keyStr += "Shift+";
let keyName = "";
let rawText = event.text;
if (event.key >= Qt.Key_A && event.key <= Qt.Key_Z || event.key >= Qt.Key_0 && event.key <= Qt.Key_9) {
keyName = String.fromCharCode(event.key);
} else if (event.key >= Qt.Key_F1 && event.key <= Qt.Key_F12) {
keyName = "F" + (event.key - Qt.Key_F1 + 1);
} else if (rawText && rawText.length > 0 && rawText.charCodeAt(0) > 31 && rawText.charCodeAt(0) !== 127) {
keyName = rawText.toUpperCase();
if (event.modifiers & Qt.ShiftModifier) {
const shiftMap = {
"!": "1",
"\"": "2",
"§": "3",
"$": "4",
"%": "5",
"&": "6",
"/": "7",
"(": "8",
")": "9",
"=": "0",
"@": "2",
"#": "3",
"^": "6",
"*": "8"
};
if (shiftMap[keyName]) {
keyName = shiftMap[keyName];
}
}
} else {
switch (event.key) {
case Qt.Key_Escape:
keyName = "Esc";
break;
case Qt.Key_Space:
keyName = "Space";
break;
case Qt.Key_Return:
keyName = "Return";
break;
case Qt.Key_Enter:
keyName = "Enter";
break;
case Qt.Key_Tab:
keyName = "Tab";
break;
case Qt.Key_Backspace:
keyName = "Backspace";
break;
case Qt.Key_Delete:
keyName = "Del";
break;
case Qt.Key_Insert:
keyName = "Ins";
break;
case Qt.Key_Home:
keyName = "Home";
break;
case Qt.Key_End:
keyName = "End";
break;
case Qt.Key_PageUp:
keyName = "PgUp";
break;
case Qt.Key_PageDown:
keyName = "PgDn";
break;
case Qt.Key_Left:
keyName = "Left";
break;
case Qt.Key_Right:
keyName = "Right";
break;
case Qt.Key_Up:
keyName = "Up";
break;
case Qt.Key_Down:
keyName = "Down";
break;
}
}
if (!keyName)
return "";
return keyStr + keyName;
}
function checkKey(event, settingName, settings) {
// Map simplified names to the actual setting property names
var propName = "key" + settingName.charAt(0).toUpperCase() + settingName.slice(1);
var boundKeys = settings.data.general.keybinds[propName];
if (!boundKeys || boundKeys.length === 0)
return false;
var eventString = getKeybindString(event);
for (var i = 0; i < boundKeys.length; i++) {
if (boundKeys[i] === eventString)
return true;
}
return false;
}
/**
* Check if a keybind string conflicts with any other existing keybinds.
* @param {string} keyStr - The keybind string to check (e.g., "Ctrl+A").
* @param {string} currentPath - The settings path of the keybind being edited (to skip checking itself).
* @param {object} data - The settings data object (from Settings.data).
* @returns {string|null} - The name of the conflicting action, or null if no conflict.
*/
function getKeybindConflict(keyStr, currentPath, data) {
if (!keyStr || !data) return null;
const searchKey = String(keyStr).trim().toLowerCase();
// 1. Check navigation keybinds
const navKeybinds = data.general ? data.general.keybinds : null;
const navMap = {
"keyUp": "Navigation: Up",
"keyDown": "Navigation: Down",
"keyLeft": "Navigation: Left",
"keyRight": "Navigation: Right",
"keyEnter": "Navigation: Enter",
"keyEscape": "Navigation: Escape"
};
if (navKeybinds) {
for (const prop in navMap) {
const fullPath = "general.keybinds." + prop;
if (fullPath === currentPath) continue;
const boundKeys = navKeybinds[prop];
if (boundKeys && boundKeys.length !== undefined) {
for (let i = 0; i < boundKeys.length; i++) {
if (String(boundKeys[i]).trim().toLowerCase() === searchKey) {
return navMap[prop];
}
}
}
}
}
// 2. Check session menu power options
const sessionMenu = data.sessionMenu;
if (sessionMenu && sessionMenu.powerOptions) {
const powerOptions = sessionMenu.powerOptions;
for (let i = 0; i < powerOptions.length; i++) {
const entry = powerOptions[i];
const fullPath = "sessionMenu.powerOptions[" + i + "].keybind";
if (fullPath === currentPath) continue;
if (entry.keybind && String(entry.keybind).trim().toLowerCase() === searchKey) {
// Capitalize action name
const actionName = entry.action ? entry.action.charAt(0).toUpperCase() + entry.action.slice(1) : "Unknown";
return "Session Menu: " + actionName;
}
}
}
return null;
}
+17 -16
View File
@@ -292,12 +292,13 @@ Item {
}
// Click is on empty bar background - open control center
var controlCenterPanel = PanelService.getPanel("controlCenterPanel", screen);
if (Settings.data.controlCenter.position === "close_to_bar_button") {
// Will attempt to open the panel next to the bar button if any.
controlCenterPanel?.toggle(null, "ControlCenter");
} else {
controlCenterPanel?.toggle();
}
// Map click position to screen-relative coordinates
// We need to map from bar coordinates to screen coordinates
var screenRelativePos = mapToItem(null, mouse.x, mouse.y);
// Pass click position directly
controlCenterPanel?.toggle(null, screenRelativePos);
mouse.accepted = true;
}
}
@@ -343,8 +344,8 @@ Item {
ColumnLayout {
x: Style.pixelAlignCenter(parent.width, width)
anchors.top: parent.top
anchors.topMargin: verticalBarMargin
spacing: Style.marginS
anchors.topMargin: verticalBarMargin + Settings.data.bar.contentPadding
spacing: Settings.data.bar.widgetSpacing
Repeater {
model: root.leftWidgetsModel
@@ -369,7 +370,7 @@ Item {
ColumnLayout {
x: Style.pixelAlignCenter(parent.width, width)
anchors.verticalCenter: parent.verticalCenter
spacing: Style.marginS
spacing: Settings.data.bar.widgetSpacing
Repeater {
model: root.centerWidgetsModel
@@ -394,8 +395,8 @@ Item {
ColumnLayout {
x: Style.pixelAlignCenter(parent.width, width)
anchors.bottom: parent.bottom
anchors.bottomMargin: verticalBarMargin
spacing: Style.marginS
anchors.bottomMargin: verticalBarMargin + Settings.data.bar.contentPadding
spacing: Settings.data.bar.widgetSpacing
Repeater {
model: root.rightWidgetsModel
@@ -451,9 +452,9 @@ Item {
id: leftSection
objectName: "leftSection"
anchors.left: parent.left
anchors.leftMargin: horizontalBarMargin
anchors.leftMargin: horizontalBarMargin + Settings.data.bar.contentPadding
y: Style.pixelAlignCenter(parent.height, height)
spacing: Style.marginS
spacing: Settings.data.bar.widgetSpacing
Repeater {
model: root.leftWidgetsModel
@@ -480,7 +481,7 @@ Item {
objectName: "centerSection"
anchors.horizontalCenter: parent.horizontalCenter
y: Style.pixelAlignCenter(parent.height, height)
spacing: Style.marginS
spacing: Settings.data.bar.widgetSpacing
Repeater {
model: root.centerWidgetsModel
@@ -506,9 +507,9 @@ Item {
id: rightSection
objectName: "rightSection"
anchors.right: parent.right
anchors.rightMargin: horizontalBarMargin
anchors.rightMargin: horizontalBarMargin + Settings.data.bar.contentPadding
y: Style.pixelAlignCenter(parent.height, height)
spacing: Style.marginS
spacing: Settings.data.bar.widgetSpacing
Repeater {
model: root.rightWidgetsModel
+2 -2
View File
@@ -45,8 +45,8 @@ Item {
readonly property real barFontSize: Style.getBarFontSizeForScreen(screen?.name)
readonly property int pillHeight: buttonSize
readonly property int pillOverlap: Math.round(buttonSize * 0.5)
readonly property int maxPillWidth: rotateText ? Math.max(buttonSize, Math.round(textItem.implicitHeight + Style.marginXL)) : buttonSize
readonly property int maxPillHeight: rotateText ? Math.max(1, Math.round(textItem.implicitWidth + Style.marginXL + Math.round(iconCircle.height / 4))) : Math.max(1, Math.round(textItem.implicitHeight + Style.marginXL))
readonly property int maxPillWidth: rotateText ? Math.max(buttonSize, Math.round(textItem.implicitHeight + Style.margin2M)) : buttonSize
readonly property int maxPillHeight: rotateText ? Math.max(1, Math.round(textItem.implicitWidth + Style.margin2M + Math.round(iconCircle.height / 4))) : Math.max(1, Math.round(textItem.implicitHeight + Style.margin2M))
// Determine pill direction based on section position
readonly property bool openDownward: oppositeDirection
+3 -3
View File
@@ -46,7 +46,7 @@ PopupWindow {
implicitWidth: menuWidth
// Use the content height of the Flickable for implicit height
implicitHeight: Math.min(screen?.height * 0.9, flickable.contentHeight + (Style.marginS * 2))
implicitHeight: Math.min(screen?.height * 0.9, flickable.contentHeight + Style.margin2S)
// When implicitHeight changes (menu content loads), force anchor recalculation
onImplicitHeightChanged: {
@@ -267,7 +267,7 @@ PopupWindow {
} else {
// Calculate based on text content
const textHeight = text.contentHeight || (Style.fontSizeS * 1.2);
return Math.max(28, textHeight + (Style.marginS * 2));
return Math.max(28, textHeight + Style.margin2S);
}
}
@@ -276,7 +276,7 @@ PopupWindow {
NDivider {
anchors.centerIn: parent
width: parent.width - (Style.marginXL)
width: parent.width - Style.margin2M
visible: modelData?.isSeparator ?? false
}
+6 -23
View File
@@ -29,23 +29,6 @@ Item {
// Fixed dimension (cross-axis) for visual pill
readonly property real fixedDimension: Style.toOdd(capsuleHeight * baseDimensionRatio)
// Helper to safely get colors with proper reactivity
// Accesses Color singleton directly to ensure fresh values
function getColorPair(colorKey) {
switch (colorKey) {
case "primary":
return [Color.mPrimary, Color.mOnPrimary];
case "secondary":
return [Color.mSecondary, Color.mOnSecondary];
case "tertiary":
return [Color.mTertiary, Color.mOnTertiary];
case "onSurface":
return [Color.mOnSurface, Color.mSurface];
default:
return [Color.mPrimary, Color.mOnPrimary];
}
}
// Animated pill dimensions (for visual pill, not container)
property real pillWidth: isVertical ? fixedDimension : getWorkspaceWidth(workspace, false)
property real pillHeight: isVertical ? getWorkspaceHeight(workspace, false) : fixedDimension
@@ -102,12 +85,12 @@ Item {
if (pillMouseArea.containsMouse)
return Color.mHover;
if (workspace.isFocused)
return getColorPair(focusedColor)[0];
return Color.resolveColorKey(focusedColor);
if (workspace.isUrgent)
return Color.mError;
if (workspace.isOccupied)
return getColorPair(occupiedColor)[0];
return Qt.alpha(getColorPair(emptyColor)[0], 0.3);
return Color.resolveColorKey(occupiedColor);
return Qt.alpha(Color.resolveColorKey(emptyColor), 0.3);
}
Loader {
@@ -144,12 +127,12 @@ Item {
if (pillMouseArea.containsMouse)
return Color.mOnHover;
if (workspace.isFocused)
return getColorPair(focusedColor)[1];
return Color.resolveOnColorKey(focusedColor);
if (workspace.isUrgent)
return Color.mOnError;
if (workspace.isOccupied)
return getColorPair(occupiedColor)[1];
return getColorPair(emptyColor)[1];
return Color.resolveOnColorKey(occupiedColor);
return Color.resolveOnColorKey(emptyColor);
}
Behavior on color {
+5 -5
View File
@@ -93,7 +93,7 @@ Item {
function calculateContentWidth() {
// Calculate the actual content width based on visible elements
var contentWidth = 0;
var margins = Style.marginS * 2; // Left and right margins
var margins = Style.margin2S; // Left and right margins
// Icon width (if visible)
if (showIcon) {
@@ -105,7 +105,7 @@ Item {
contentWidth += titleContainer.measuredWidth;
// Additional small margin for text
contentWidth += Style.marginXS;
contentWidth += Style.margin2XXS;
// Add container margins
contentWidth += margins;
@@ -259,7 +259,7 @@ Item {
maxWidth: {
// Calculate available width based on other elements
var iconWidth = (showIcon && windowIcon.visible ? (iconSize + Style.marginS) : 0);
var totalMargins = Style.marginXS;
var totalMargins = Style.margin2XXS;
var availableWidth = mainContainer.width - iconWidth - totalMargins;
return Math.max(20, availableWidth);
}
@@ -288,8 +288,8 @@ Item {
// Vertical layout for left/right bars - icon only
Item {
id: verticalLayout
width: parent.width - Style.marginXL
height: parent.height - Style.marginXL
width: parent.width - Style.margin2M
height: parent.height - Style.margin2M
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, height)
visible: isVerticalBar
+1 -14
View File
@@ -41,20 +41,7 @@ Item {
readonly property bool hideWhenIdle: widgetSettings.hideWhenIdle !== undefined ? widgetSettings.hideWhenIdle : widgetMetadata.hideWhenIdle
readonly property string colorName: widgetSettings.colorName !== undefined ? widgetSettings.colorName : widgetMetadata.colorName
readonly property color fillColor: {
switch (colorName) {
case "primary":
return Color.mPrimary;
case "secondary":
return Color.mSecondary;
case "tertiary":
return Color.mTertiary;
case "error":
return Color.mError;
default:
return Color.mOnSurface;
}
}
readonly property color fillColor: Color.resolveColorKey(colorName)
readonly property bool shouldShow: (currentVisualizerType !== "" && currentVisualizerType !== "none") && (!hideWhenIdle || MediaService.isPlaying)
+2 -2
View File
@@ -153,8 +153,8 @@ Item {
id: capsule
visible: root.useGraphicMode
anchors.centerIn: nBattery
width: root.isBarVertical ? root.capsuleHeight : nBattery.width + Style.marginS * 2
height: root.isBarVertical ? nBattery.height + Style.marginS * 2 : root.capsuleHeight
width: root.isBarVertical ? root.capsuleHeight : nBattery.width + Style.margin2S
height: root.isBarVertical ? nBattery.height + Style.margin2S : root.capsuleHeight
radius: Math.min(Style.radiusL, width / 2)
color: graphicMouseArea.containsMouse ? Color.mHover : Style.capsuleColor
border.color: Style.capsuleBorderColor
+39 -1
View File
@@ -37,6 +37,8 @@ Item {
readonly property string displayMode: (widgetSettings.displayMode !== undefined) ? widgetSettings.displayMode : widgetMetadata.displayMode
readonly property string iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
readonly property string textColorKey: widgetSettings.textColor !== undefined ? widgetSettings.textColor : widgetMetadata.textColor
readonly property bool applyToAllMonitors: widgetSettings.applyToAllMonitors !== undefined ? widgetSettings.applyToAllMonitors : (Settings.data.brightness.syncAllMonitors !== undefined ? Settings.data.brightness.syncAllMonitors : widgetMetadata.applyToAllMonitors)
readonly property bool reverseScroll: Settings.data.general.reverseScroll
// Used to avoid opening the pill on Quickshell startup
property bool firstBrightnessReceived: false
@@ -51,6 +53,16 @@ Item {
brightnessMonitor = BrightnessService.getMonitorForScreen(screen) || null;
}
function getControllableMonitorCount() {
var monitors = BrightnessService.monitors || [];
var count = 0;
for (var i = 0; i < monitors.length; i++) {
if (monitors[i] && monitors[i].brightnessControlAvailable)
count++;
}
return count;
}
onScreenChanged: updateMonitor()
Connections {
@@ -163,7 +175,33 @@ Item {
if (!monitor || !monitor.brightnessControlAvailable)
return;
if (angle > 0) {
if (root.reverseScroll)
angle *= -1;
if (angle === 0)
return;
var shouldApplyToAll = root.applyToAllMonitors && root.getControllableMonitorCount() > 1;
if (shouldApplyToAll) {
var direction = angle > 0 ? 1 : -1;
var baseValue = !isNaN(monitor.queuedBrightness) ? monitor.queuedBrightness : monitor.brightness;
var step = monitor.stepSize;
var minValue = monitor.minBrightnessValue;
if (direction > 0 && Settings.data.brightness.enforceMinimum && baseValue < minValue) {
baseValue = Math.max(step, minValue);
} else {
baseValue = baseValue + direction * step;
}
var targetValue = Math.max(minValue, Math.min(1, baseValue));
BrightnessService.monitors.forEach(function (m) {
if (m && m.brightnessControlAvailable) {
m.setBrightnessDebounced(targetValue);
}
});
} else if (angle > 0) {
monitor.increaseBrightness();
} else if (angle < 0) {
monitor.decreaseBrightness();
+4 -4
View File
@@ -48,8 +48,8 @@ Item {
readonly property color textColor: Color.resolveColorKey(clockColor)
// Content dimensions for implicit sizing
readonly property real contentWidth: isBarVertical ? capsuleHeight : Math.round((isBarVertical ? verticalLoader.implicitWidth : horizontalLoader.implicitWidth) + Style.marginXL)
readonly property real contentHeight: isBarVertical ? Math.round(verticalLoader.implicitHeight + Style.marginS * 2) : capsuleHeight
readonly property real contentWidth: isBarVertical ? capsuleHeight : Math.round((isBarVertical ? verticalLoader.implicitWidth : horizontalLoader.implicitWidth) + Style.margin2M)
readonly property real contentHeight: isBarVertical ? Math.round(verticalLoader.implicitHeight + Style.margin2S) : capsuleHeight
// Size: use implicit width/height
// BarWidgetLoader sets explicit width/height to extend click area
@@ -181,7 +181,7 @@ Item {
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
onEntered: {
if (!PanelService.getPanel("clockPanel", screen)?.active) {
if (!PanelService.getPanel("clockPanel", screen)?.isPanelOpen) {
TooltipService.show(root, buildTooltipText(), BarService.getTooltipDirection(root.screen?.name));
tooltipRefreshTimer.start();
}
@@ -205,7 +205,7 @@ Item {
interval: 1000
repeat: true
onTriggered: {
if (clockMouseArea.containsMouse && !PanelService.getPanel("clockPanel", screen)?.active) {
if (clockMouseArea.containsMouse && !PanelService.getPanel("clockPanel", screen)?.isPanelOpen) {
TooltipService.updateText(buildTooltipText());
}
}
+1 -12
View File
@@ -43,18 +43,7 @@ NIconButton {
readonly property color iconColor: {
if (!enableColorization)
return Color.mOnSurface;
switch (colorizeSystemIcon) {
case "primary":
return Color.mPrimary;
case "secondary":
return Color.mSecondary;
case "tertiary":
return Color.mTertiary;
case "error":
return Color.mError;
default:
return Color.mOnSurface;
}
return Color.resolveColorKey(colorizeSystemIcon);
}
// If we have a custom path and not using distro logo, use the theme icon.
+41 -18
View File
@@ -58,6 +58,10 @@ Item {
readonly property bool parseJson: widgetSettings.parseJson !== undefined ? widgetSettings.parseJson : (widgetMetadata.parseJson || false)
readonly property bool hasExec: (leftClickExec || rightClickExec || middleClickExec || (wheelMode === "unified" && wheelExec) || (wheelMode === "separate" && (wheelUpExec || wheelDownExec)))
readonly property bool showIcon: (widgetSettings.showIcon !== undefined) ? widgetSettings.showIcon : true
readonly property bool showExecTooltip: widgetSettings.showExecTooltip !== undefined ? widgetSettings.showExecTooltip : (widgetMetadata.showExecTooltip !== undefined ? widgetMetadata.showExecTooltip : true)
readonly property bool showTextTooltip: widgetSettings.showTextTooltip !== undefined ? widgetSettings.showTextTooltip : (widgetMetadata.showTextTooltip !== undefined ? widgetMetadata.showTextTooltip : true)
readonly property string generalTooltipText: widgetSettings.generalTooltipText !== undefined ? widgetSettings.generalTooltipText : (widgetMetadata.generalTooltipText || "")
readonly property bool _hasCustomTooltip: generalTooltipText.trim() !== ""
readonly property string hideMode: widgetSettings.hideMode || "alwaysExpanded"
readonly property bool hasOutput: _dynamicText !== ""
readonly property bool shouldForceOpen: textStream && (hideMode === "alwaysExpanded" || hideMode === "maxTransparent")
@@ -201,45 +205,64 @@ Item {
rotateText: isVerticalBar && currentMaxTextLength > 0
autoHide: false
forceOpen: _pillForceOpen
forceClose: !_pillForceOpen
customTextIconColor: iconColor
tooltipText: {
var tooltipLines = [];
// Helper function to build tooltip content
function _buildTooltipContent() {
var lines = [];
if (hasExec) {
// Add custom tooltip if set
if (_hasCustomTooltip) {
lines.push(generalTooltipText);
}
// Add command details if enabled and available
if (showExecTooltip && hasExec) {
if (leftClickExec !== "") {
tooltipLines.push(`Left click: ${leftClickExec}.`);
lines.push(I18n.tr("bar.custom-button.left-click-label") + `: ${leftClickExec}`);
}
if (rightClickExec !== "") {
tooltipLines.push(`Right click: ${rightClickExec}.`);
lines.push(I18n.tr("bar.custom-button.right-click-label") + `: ${rightClickExec}`);
}
if (middleClickExec !== "") {
tooltipLines.push(`Middle click: ${middleClickExec}.`);
lines.push(I18n.tr("bar.custom-button.middle-click-label") + `: ${middleClickExec}`);
}
if (wheelMode === "unified" && wheelExec !== "") {
tooltipLines.push(`Wheel: ${wheelExec}.`);
lines.push(I18n.tr("bar.custom-button.wheel-label") + `: ${wheelExec}`);
} else if (wheelMode === "separate") {
if (wheelUpExec !== "") {
tooltipLines.push(`Wheel up: ${wheelUpExec}.`);
lines.push(I18n.tr("bar.custom-button.wheel-up") + `: ${wheelUpExec}`);
}
if (wheelDownExec !== "") {
tooltipLines.push(`Wheel down: ${wheelDownExec}.`);
lines.push(I18n.tr("bar.custom-button.wheel-down") + `Wheel down: ${wheelDownExec}`);
}
}
}
if (_dynamicTooltip !== "") {
if (tooltipLines.length > 0) {
tooltipLines.push("");
}
tooltipLines.push(_dynamicTooltip);
// Add dynamic text tooltip if enabled and available
if (showTextTooltip && _dynamicTooltip !== "") {
lines.push(_dynamicTooltip);
}
if (tooltipLines.length === 0) {
return "Custom button, configure in settings.";
} else {
return tooltipLines.join("\n");
return lines;
}
tooltipText: {
var lines = _buildTooltipContent();
// If no custom tooltip and both switches are off, show default tooltip
if (!_hasCustomTooltip && !showExecTooltip && !showTextTooltip) {
return I18n.tr("bar.custom-button.default-tooltip");
}
// If there's content, join with newlines
if (lines.length > 0) {
return lines.join("\n");
}
// Fallback (shouldn't reach here normally)
return I18n.tr("bar.custom-button.default-tooltip");
}
onClicked: root.clicked()
+40 -4
View File
@@ -1,7 +1,9 @@
import QtQuick
import Quickshell
import Quickshell.Widgets
import qs.Commons
import qs.Modules.Panels.Settings
import qs.Services.System
import qs.Services.UI
import qs.Widgets
@@ -29,18 +31,28 @@ NIconButton {
return {};
}
readonly property string iconName: widgetSettings.icon || (widgetMetadata ? widgetMetadata.icon : "search")
readonly property string iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
readonly property string customIcon: widgetSettings.icon || (widgetMetadata ? widgetMetadata.icon : "rocket")
readonly property bool useDistroLogo: widgetSettings.useDistroLogo !== undefined ? widgetSettings.useDistroLogo : widgetMetadata.useDistroLogo
readonly property string customIconPath: widgetSettings.customIconPath !== undefined ? widgetSettings.customIconPath : widgetMetadata.customIconPath
readonly property bool enableColorization: widgetSettings.enableColorization !== undefined ? widgetSettings.enableColorization : widgetMetadata.enableColorization
readonly property string colorizeSystemIcon: widgetSettings.colorizeSystemIcon !== undefined ? widgetSettings.colorizeSystemIcon : widgetMetadata.colorizeSystemIcon
icon: iconName
readonly property color iconColor: {
if (!enableColorization)
return Color.mOnSurface;
return Color.resolveColorKey(colorizeSystemIcon);
}
// If we have a custom path or are using distro logo, don't show the theme icon.
icon: (customIconPath === "" && !useDistroLogo) ? customIcon : ""
tooltipText: I18n.tr("actions.open-launcher")
tooltipDirection: BarService.getTooltipDirection(screenName)
baseSize: Style.getCapsuleHeightForScreen(screenName)
applyUiScale: false
customRadius: Style.radiusL
colorBg: Style.capsuleColor
colorFg: iconColor
colorBgHover: Color.mHover
colorFg: Color.resolveColorKey(iconColorKey)
colorFgHover: Color.mOnHover
colorBorder: Style.capsuleBorderColor
colorBorderHover: Style.capsuleBorderColor
@@ -80,4 +92,28 @@ NIconButton {
onRightClicked: {
PanelService.showContextMenu(contextMenu, root, screen);
}
IconImage {
id: customOrDistroLogo
anchors.centerIn: parent
width: root.buttonSize * 0.8
height: width
source: {
if (useDistroLogo)
return HostService.osLogo;
if (customIconPath !== "")
return customIconPath.startsWith("file://") ? customIconPath : "file://" + customIconPath;
return "";
}
visible: source !== ""
smooth: true
asynchronous: true
layer.enabled: (enableColorization) && (useDistroLogo || customIconPath !== "")
layer.effect: ShaderEffect {
property color targetColor: !hovering ? iconColor : Color.mOnHover
property real colorizeMode: 2.0
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/appicon_colorize.frag.qsb")
}
}
}
+2 -2
View File
@@ -39,8 +39,8 @@ Item {
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
// Content dimensions for implicit sizing
readonly property real contentWidth: isVertical ? capsuleHeight : Math.round(layout.implicitWidth + Style.marginXL)
readonly property real contentHeight: isVertical ? Math.round(layout.implicitHeight + Style.marginXL) : capsuleHeight
readonly property real contentWidth: isVertical ? capsuleHeight : Math.round(layout.implicitWidth + Style.margin2M)
readonly property real contentHeight: isVertical ? Math.round(layout.implicitHeight + Style.margin2M) : capsuleHeight
readonly property bool hideWhenOff: (widgetSettings.hideWhenOff !== undefined) ? widgetSettings.hideWhenOff : (widgetMetadata.hideWhenOff !== undefined ? widgetMetadata.hideWhenOff : false)
+2 -2
View File
@@ -127,13 +127,13 @@ Item {
iconWidth = artSize;
}
var margins = isVertical ? 0 : (Style.marginS * 2);
var margins = isVertical ? 0 : Style.margin2S;
// Add spacing and text width
var textWidth = 0;
if (titleContainer.measuredWidth > 0) {
margins += Style.marginS;
textWidth = titleContainer.measuredWidth + Style.marginXS;
textWidth = titleContainer.measuredWidth + Style.margin2XXS;
}
var total = iconWidth + textWidth + margins;
+1 -14
View File
@@ -38,20 +38,7 @@ NIconButton {
readonly property string unreadBadgeColor: widgetSettings.unreadBadgeColor !== undefined ? widgetSettings.unreadBadgeColor : widgetMetadata.unreadBadgeColor
readonly property string iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
readonly property color badgeColor: {
switch (unreadBadgeColor) {
case "primary":
return Color.mPrimary;
case "secondary":
return Color.mSecondary;
case "tertiary":
return Color.mTertiary;
case "error":
return Color.mError;
default:
return Color.mOnSurface;
}
}
readonly property color badgeColor: Color.resolveColorKey(unreadBadgeColor)
function computeUnreadCount() {
var since = NotificationService.lastSeenTs;
+80
View File
@@ -0,0 +1,80 @@
import QtQuick
import QtQuick.Controls
import Quickshell
import qs.Commons
import qs.Services.UI
import qs.Widgets
NIconButton {
id: root
property ShellScreen screen
// Widget properties passed from Bar.qml for per-instance settings
property string widgetId: ""
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
// Explicit screenName property ensures reactive binding when screen changes
readonly property string screenName: screen ? screen.name : ""
property var widgetSettings: {
if (section && sectionWidgetIndex >= 0 && screenName) {
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
if (widgets && sectionWidgetIndex < widgets.length) {
return widgets[sectionWidgetIndex];
}
}
return {};
}
readonly property string valueIconColor: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
readonly property color iconColor: Color.resolveColorKey(valueIconColor)
icon: "settings"
tooltipText: !PanelService.getPanel("settingsPanel", screen)?.isPanelOpen ? I18n.tr("tooltips.open-settings") : ""
tooltipDirection: BarService.getTooltipDirection(screen?.name)
baseSize: Style.getCapsuleHeightForScreen(screen?.name)
applyUiScale: false
customRadius: Style.radiusL
colorBg: Style.capsuleColor
colorFg: iconColor
colorBgHover: Color.mHover
colorFgHover: Color.mOnHover
colorBorder: Style.capsuleBorderColor
colorBorderHover: Style.capsuleBorderColor
NPopupContextMenu {
id: contextMenu
model: [
{
"label": I18n.tr("actions.widget-settings"),
"action": "widget-settings",
"icon": "settings"
},
]
onTriggered: action => {
contextMenu.close();
PanelService.closeContextMenu(screen);
if (action === "widget-settings") {
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
}
}
}
onClicked: {
if (Settings.data.ui.settingsPanelMode === "attached") {
PanelService.getPanel("settingsPanel", screen)?.toggle(this);
} else {
PanelService.getPanel("settingsPanel", screen)?.toggle();
}
}
onRightClicked: {
PanelService.showContextMenu(contextMenu, root, screen);
}
}
+2 -17
View File
@@ -70,8 +70,8 @@ Item {
readonly property real miniGaugeWidth: Math.max(3, Style.toOdd(root.iconSize * 0.25))
// Content dimensions for implicit sizing
readonly property real contentWidth: isVertical ? capsuleHeight : Math.round(mainGrid.implicitWidth + Style.marginXL)
readonly property real contentHeight: isVertical ? Math.round(mainGrid.implicitHeight + Style.marginXL) : capsuleHeight
readonly property real contentWidth: isVertical ? capsuleHeight : Math.round(mainGrid.implicitWidth + Style.margin2M)
readonly property real contentHeight: isVertical ? Math.round(mainGrid.implicitHeight + Style.margin2M) : capsuleHeight
readonly property color iconColor: Color.resolveColorKey(iconColorKey)
readonly property color textColor: Color.resolveColorKey(textColorKey)
@@ -202,21 +202,6 @@ Item {
radius: parent.radius
color: miniGauge.statColor
anchors.bottom: parent.bottom
Behavior on fillHeight {
enabled: !Settings.data.general.animationDisabled
NumberAnimation {
duration: Style.animationNormal
easing.type: Easing.OutCubic
}
}
Behavior on color {
ColorAnimation {
duration: Style.animationNormal
easing.type: Easing.OutCubic
}
}
}
}
}
+4 -4
View File
@@ -68,7 +68,7 @@ Item {
if (smartWidth && combinedModel.length > 0) {
if (maxTaskbarWidth > 0) {
var entriesCount = combinedModel.length;
var maxWidthPerEntry = (maxTaskbarWidth / entriesCount) - itemSize - Style.marginS - Style.marginXL;
var maxWidthPerEntry = (maxTaskbarWidth / entriesCount) - itemSize - Style.marginS - Style.margin2M;
calculatedWidth = Math.min(calculatedWidth, maxWidthPerEntry);
}
@@ -598,7 +598,7 @@ Item {
if (isVerticalBar)
return barHeight;
var calculatedWidth = showTitle ? taskbarLayout.implicitWidth : taskbarLayout.implicitWidth + Style.marginXL;
var calculatedWidth = showTitle ? taskbarLayout.implicitWidth : taskbarLayout.implicitWidth + Style.margin2M;
// Apply maximum width constraint when smartWidth is enabled
if (smartWidth && maxTaskbarWidth > 0) {
@@ -607,7 +607,7 @@ Item {
return Math.round(calculatedWidth);
}
readonly property real contentHeight: visible ? (isVerticalBar ? Math.round(taskbarLayout.implicitHeight + Style.marginS * 2) : capsuleHeight) : 0
readonly property real contentHeight: visible ? (isVerticalBar ? Math.round(taskbarLayout.implicitHeight + Style.margin2S) : capsuleHeight) : 0
implicitWidth: contentWidth
implicitHeight: contentHeight
@@ -659,7 +659,7 @@ Item {
readonly property color titleBgColor: (isHovered || isFocused) ? Color.mHover : Style.capsuleColor
readonly property color titleFgColor: (isHovered || isFocused) ? Color.mOnHover : Color.mOnSurface
Layout.preferredWidth: root.isVerticalBar ? root.barHeight : (root.showTitle ? Math.round(contentWidth + Style.marginXL) : Math.round(contentWidth)) // Add margins for both pinned and running apps
Layout.preferredWidth: root.isVerticalBar ? root.barHeight : (root.showTitle ? Math.round(contentWidth + Style.margin2M) : Math.round(contentWidth)) // Add margins for both pinned and running apps
Layout.preferredHeight: root.isVerticalBar ? root.itemSize : root.barHeight
Layout.alignment: Qt.AlignCenter
+15 -1
View File
@@ -39,6 +39,7 @@ Item {
readonly property string middleClickCommand: (widgetSettings.middleClickCommand !== undefined) ? widgetSettings.middleClickCommand : widgetMetadata.middleClickCommand
readonly property string iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
readonly property string textColorKey: widgetSettings.textColor !== undefined ? widgetSettings.textColor : widgetMetadata.textColor
readonly property bool reverseScroll: Settings.data.general.reverseScroll
// Used to avoid opening the pill on Quickshell startup
property bool firstVolumeReceived: false
@@ -49,7 +50,7 @@ Item {
// Connection used to open the pill when volume changes
Connections {
target: AudioService.sink?.audio ? AudioService.sink?.audio : null
target: AudioService
function onVolumeChanged() {
// Logger.i("Bar:Volume", "onVolumeChanged")
if (!firstVolumeReceived) {
@@ -62,6 +63,16 @@ Item {
externalHideTimer.restart();
}
}
function onMutedChanged() {
if (!firstVolumeReceived) {
firstVolumeReceived = true;
} else {
TooltipService.hide();
pill.show();
externalHideTimer.restart();
}
}
}
Timer {
@@ -137,6 +148,9 @@ Item {
// Hide tooltip as soon as the user starts scrolling to adjust volume
TooltipService.hide();
if (root.reverseScroll)
delta *= -1;
wheelAccumulator += delta;
if (wheelAccumulator >= 120) {
wheelAccumulator = 0;
+8 -23
View File
@@ -61,28 +61,13 @@ Item {
readonly property real unfocusedIconsOpacity: (widgetSettings.unfocusedIconsOpacity !== undefined) ? widgetSettings.unfocusedIconsOpacity : widgetMetadata.unfocusedIconsOpacity
readonly property real groupedBorderOpacity: (widgetSettings.groupedBorderOpacity !== undefined) ? widgetSettings.groupedBorderOpacity : widgetMetadata.groupedBorderOpacity
readonly property bool enableScrollWheel: (widgetSettings.enableScrollWheel !== undefined) ? widgetSettings.enableScrollWheel : widgetMetadata.enableScrollWheel
readonly property bool reverseScroll: (widgetSettings.reverseScroll !== undefined) ? widgetSettings.reverseScroll : (widgetMetadata.reverseScroll || false)
readonly property bool reverseScroll: Settings.data.general.reverseScroll
readonly property real iconScale: (widgetSettings.iconScale !== undefined) ? widgetSettings.iconScale : widgetMetadata.iconScale
readonly property string focusedColor: (widgetSettings.focusedColor !== undefined) ? widgetSettings.focusedColor : widgetMetadata.focusedColor
readonly property string occupiedColor: (widgetSettings.occupiedColor !== undefined) ? widgetSettings.occupiedColor : widgetMetadata.occupiedColor
readonly property string emptyColor: (widgetSettings.emptyColor !== undefined) ? widgetSettings.emptyColor : widgetMetadata.emptyColor
readonly property bool showBadge: (widgetSettings.showBadge !== undefined) ? widgetSettings.showBadge : widgetMetadata.showBadge
// Helper to safely get colors with proper reactivity
// Accesses Color singleton directly to ensure fresh values
function getColorPair(colorKey) {
switch (colorKey) {
case "primary":
return [Color.mPrimary, Color.mOnPrimary];
case "secondary":
return [Color.mSecondary, Color.mOnSecondary];
case "tertiary":
return [Color.mTertiary, Color.mOnTertiary];
default:
return [Color.mOnSurface, Color.mSurface];
}
}
// Only for grouped mode / show apps
readonly property int baseItemSize: Style.toOdd(capsuleHeight * 0.8)
readonly property int iconSize: Style.toOdd(baseItemSize * iconScale)
@@ -793,7 +778,7 @@ Item {
topMargin: -Style.fontSizeXS * 0.25
}
width: Math.max(groupedWorkspaceNumber.implicitWidth + (Style.marginXS * 2), Style.fontSizeXXS * 2)
width: Math.max(groupedWorkspaceNumber.implicitWidth + Style.margin2XS, Style.fontSizeXXS * 2)
height: Math.max(groupedWorkspaceNumber.implicitHeight + Style.marginXS, Style.fontSizeXXS * 2)
Rectangle {
@@ -804,13 +789,13 @@ Item {
color: {
if (groupedContainer.workspaceModel.isFocused)
return root.getColorPair(root.focusedColor)[0];
return Color.resolveColorKey(root.focusedColor);
if (groupedContainer.workspaceModel.isUrgent)
return Color.mError;
if (groupedContainer.hasWindows)
return root.getColorPair(root.occupiedColor)[0];
return Color.resolveColorKey(root.occupiedColor);
return root.getColorPair(root.emptyColor)[0];
return Color.resolveColorKey(root.emptyColor);
}
scale: groupedContainer.workspaceModel.isActive ? 1.0 : 0.8
@@ -873,13 +858,13 @@ Item {
color: {
if (groupedContainer.workspaceModel.isFocused)
return root.getColorPair(root.focusedColor)[1];
return Color.resolveOnColorKey(root.focusedColor);
if (groupedContainer.workspaceModel.isUrgent)
return Color.mOnError;
if (groupedContainer.hasWindows)
return root.getColorPair(root.occupiedColor)[1];
return Color.resolveOnColorKey(root.occupiedColor);
return root.getColorPair(root.emptyColor)[1];
return Color.resolveOnColorKey(root.emptyColor);
}
Behavior on opacity {
+1 -5
View File
@@ -155,11 +155,7 @@ NBox {
colorBg: "transparent"
colorBgHover: Color.mHover
colorFgHover: Color.mOnHover
onClicked: {
if (AudioService.sink && AudioService.sink.audio) {
AudioService.sink.audio.muted = !AudioService.muted;
}
}
onClicked: AudioService.setOutputMuted(!AudioService.muted)
}
NText {
+4 -4
View File
@@ -10,9 +10,9 @@ import qs.Widgets
Rectangle {
id: root
Layout.fillWidth: true
Layout.minimumHeight: (60 * Style.uiScaleRatio) + (Style.marginXL)
Layout.preferredHeight: (60 * Style.uiScaleRatio) + (Style.marginXL)
implicitHeight: (60 * Style.uiScaleRatio) + (Style.marginXL)
Layout.minimumHeight: (60 * Style.uiScaleRatio) + Style.margin2M
Layout.preferredHeight: (60 * Style.uiScaleRatio) + Style.margin2M
implicitHeight: (60 * Style.uiScaleRatio) + Style.margin2M
radius: Style.radiusL
color: Color.mPrimary
@@ -31,7 +31,7 @@ Rectangle {
anchors.bottom: parent.bottom
anchors.topMargin: Style.marginM
anchors.bottomMargin: Style.marginM
anchors.rightMargin: clockLoader.width + (Style.marginXL * 2)
anchors.rightMargin: clockLoader.width + Style.margin2XL
anchors.leftMargin: Style.marginXL
spacing: 0
+1 -1
View File
@@ -12,7 +12,7 @@ import qs.Widgets
NBox {
id: root
Layout.fillWidth: true
implicitHeight: calendarContent.implicitHeight + Style.marginXL
implicitHeight: calendarContent.implicitHeight + Style.margin2M
// Internal state - independent from header
readonly property var now: Time.now
+1 -1
View File
@@ -29,7 +29,7 @@ NBox {
readonly property bool isClearNight: testEffects === "clear_night" || (testEffects === "" && (currentWeatherCode === 0 && !isDayTime))
visible: Settings.data.location.weatherEnabled
implicitHeight: Math.max(100 * Style.uiScaleRatio, content.implicitHeight + (Style.marginXL * 2))
implicitHeight: Math.max(100 * Style.uiScaleRatio, content.implicitHeight + Style.margin2XL)
// Weather effect layer (rain/snow)
Loader {
+4 -3
View File
@@ -50,7 +50,8 @@ Variants {
}
// Only create PanelWindow if enabled AND (screen has widgets OR in edit mode)
active: modelData && Settings.data.desktopWidgets.enabled && (screenWidgets.length > 0 || DesktopWidgetRegistry.editMode) && !PowerProfileService.noctaliaPerformanceMode
// During compositor overview, show widgets only when overviewEnabled is true.
active: modelData && Settings.data.desktopWidgets.enabled && (screenWidgets.length > 0 || DesktopWidgetRegistry.editMode) && (!CompositorService.overviewActive || Settings.data.desktopWidgets.overviewEnabled) && !PowerProfileService.noctaliaPerformanceMode && !PanelService.lockScreen?.active
sourceComponent: PanelWindow {
id: window
@@ -345,8 +346,8 @@ Variants {
x: panelInternal.isDragging ? panelInternal.dragOffsetX : panelInternal.baseX
y: panelInternal.isDragging ? panelInternal.dragOffsetY : panelInternal.baseY
width: controlsLayout.implicitWidth + (Style.marginXL * 2)
height: controlsLayout.implicitHeight + (Style.marginXL * 2)
width: controlsLayout.implicitWidth + Style.margin2XL
height: controlsLayout.implicitHeight + Style.margin2XL
color: Qt.rgba(Color.mSurface.r, Color.mSurface.g, Color.mSurface.b, 0.85)
radius: Style.radiusL
@@ -58,7 +58,7 @@ DraggableDesktopWidget {
readonly property int visibleButtonCount: root.showButtons ? (1 + (showPrev ? 1 : 0) + (showNext ? 1 : 0)) : 0
implicitWidth: Math.round(400 * widgetScale)
implicitHeight: Math.round(64 * widgetScale + Style.marginXL * widgetScale)
implicitHeight: Math.round(64 * widgetScale + Style.margin2M * widgetScale)
width: implicitWidth
height: implicitHeight
@@ -170,7 +170,7 @@ DraggableDesktopWidget {
readonly property int graphUpdateInterval: {
switch (root.statType) {
case "CPU":
return SystemStatService.cpuIntervalMs;
return SystemStatService.cpuUsageIntervalMs;
case "GPU":
return SystemStatService.gpuIntervalMs;
case "Memory":
@@ -44,8 +44,8 @@ DraggableDesktopWidget {
return chunks[0];
}
implicitWidth: Math.round(Math.max(240 * widgetScale, contentLayout.implicitWidth + Style.marginXL * widgetScale))
implicitHeight: Math.round(64 * widgetScale + Style.marginXL * widgetScale)
implicitWidth: Math.round(Math.max(240 * widgetScale, contentLayout.implicitWidth + Style.margin2M * widgetScale))
implicitHeight: Math.round(64 * widgetScale + Style.margin2M * widgetScale)
width: implicitWidth
height: implicitHeight
+251 -518
View File
@@ -50,6 +50,9 @@ Loader {
function onOnlySameOutputChanged() {
updateDockApps();
}
function onGroupAppsChanged() {
updateDockApps();
}
}
// Initial update when component is ready
@@ -72,11 +75,13 @@ Loader {
readonly property string displayMode: Settings.data.dock.displayMode
readonly property bool autoHide: displayMode === "auto_hide"
readonly property bool exclusive: displayMode === "exclusive"
readonly property bool isStaticMode: Settings.data.dock.dockType === "static"
readonly property int hideDelay: 500
readonly property int showDelay: 100
readonly property int hideAnimationDuration: Math.max(0, Math.round(Style.animationFast / (Settings.data.dock.animationSpeed || 1.0)))
readonly property int showAnimationDuration: Math.max(0, Math.round(Style.animationFast / (Settings.data.dock.animationSpeed || 1.0)))
readonly property int peekHeight: 1
readonly property int indicatorThickness: 3
readonly property int iconSize: Math.round(12 + 24 * (Settings.data.dock.size ?? 1))
readonly property int floatingMargin: Settings.data.dock.floatingRatio * Style.marginL
readonly property int maxWidth: modelData ? modelData.width * 0.8 : 1000
@@ -89,7 +94,68 @@ Loader {
// Bar detection and positioning properties
readonly property bool hasBar: modelData && modelData.name ? (Settings.data.bar.monitors.includes(modelData.name) || (Settings.data.bar.monitors.length === 0)) : false
readonly property bool barAtSameEdge: hasBar && Settings.getBarPositionForScreen(modelData?.name) === dockPosition
readonly property string barPosition: Settings.getBarPositionForScreen(modelData?.name)
readonly property bool barIsVertical: barPosition === "left" || barPosition === "right"
readonly property bool barIsFramed: Settings.data.bar.barType === "framed" && hasBar
readonly property real barMarginH: Settings.data.bar.floating ? Math.ceil(Settings.data.bar.marginHorizontal) : 0
readonly property real barMarginV: Settings.data.bar.floating ? Math.ceil(Settings.data.bar.marginVertical) : 0
readonly property int barHeight: Style.getBarHeightForScreen(modelData?.name)
readonly property int peekEdgeLength: {
const edgeSize = isVertical ? Math.round(modelData?.height || maxHeight) : Math.round(modelData?.width || maxWidth);
const minLength = Math.max(1, Math.round(edgeSize * ((isStaticMode && Settings.data.dock.showFrameIndicator && Settings.data.bar.barType === "framed" && hasBar) ? 0.1 : 0.25)));
return Math.max(minLength, frameIndicatorLength);
}
readonly property int peekCenterOffsetX: {
if (isVertical)
return 0;
const edgeSize = Math.round(modelData?.width || maxWidth);
if (barIsVertical) {
if (barPosition === "left") {
const availableStart = (barIsFramed ? 0 : barMarginH) + barHeight;
const availableWidth = edgeSize - availableStart - (barIsFramed ? Settings.data.bar.frameThickness : 0);
return Math.max(0, Math.round(availableStart + (availableWidth - peekEdgeLength) / 2));
}
if (barPosition === "right") {
const availableWidth = edgeSize - (barIsFramed ? 0 : barMarginH) - barHeight - (barIsFramed ? Settings.data.bar.frameThickness : 0);
return Math.max(0, Math.round((barIsFramed ? Settings.data.bar.frameThickness : 0) + (availableWidth - peekEdgeLength) / 2));
}
}
return Math.max(0, Math.round((edgeSize - peekEdgeLength) / 2));
}
readonly property int peekCenterOffsetY: {
if (!isVertical)
return 0;
const edgeSize = Math.round(modelData?.height || maxHeight);
if (!barIsVertical) {
if (barPosition === "top") {
const availableStart = (barIsFramed ? 0 : barMarginV) + barHeight;
const availableHeight = edgeSize - availableStart - (barIsFramed ? Settings.data.bar.frameThickness : 0);
return Math.max(0, Math.round(availableStart + (availableHeight - peekEdgeLength) / 2));
}
if (barPosition === "bottom") {
const availableHeight = edgeSize - (barIsFramed ? 0 : barMarginV) - barHeight - (barIsFramed ? Settings.data.bar.frameThickness : 0);
return Math.max(0, Math.round((barIsFramed ? Settings.data.bar.frameThickness : 0) + (availableHeight - peekEdgeLength) / 2));
}
}
return Math.max(0, Math.round((edgeSize - peekEdgeLength) / 2));
}
readonly property bool showFrameIndicator: {
if (!isStaticMode || !Settings.data.dock.showFrameIndicator || Settings.data.bar.barType !== "framed" || !hasBar)
return false;
var panel = getStaticDockPanel();
if (panel && panel.isPanelOpen !== undefined)
return !panel.isPanelOpen;
return hidden;
}
readonly property int dockItemCount: dockApps.length + (Settings.data.dock.showLauncherIcon ? 1 : 0)
readonly property int frameIndicatorLength: {
if (dockItemCount <= 0)
return 0;
const spacing = Style.marginS;
const layoutLength = (iconSize * dockItemCount) + (spacing * Math.max(0, dockItemCount - 1));
const padded = layoutLength + Style.marginXL;
return Math.min(padded, isVertical ? maxHeight : maxWidth);
}
// Shared state between windows
property bool dockHovered: false
@@ -106,6 +172,7 @@ Loader {
// Combined model of running apps and pinned apps
property var dockApps: []
property var groupCycleIndices: ({})
// Track the session order of apps (transient reordering)
property var sessionAppOrder: []
@@ -133,10 +200,18 @@ Loader {
}
}
function getStaticDockPanel() {
return PanelService.getPanel("staticDockPanel", modelData, false);
}
function getAppKey(appData) {
if (!appData)
return null;
if (Settings.data.dock.groupApps) {
return appData.appId;
}
// Use stable appId for pinned apps to maintain their slot regardless of running state
if (appData.type === "pinned" || appData.type === "pinned-running") {
return appData.appId;
@@ -268,6 +343,91 @@ Loader {
return appId;
}
function getToplevelsForEntry(appData) {
if (!appData)
return [];
if (appData.toplevels && appData.toplevels.length > 0) {
return appData.toplevels.filter(toplevel => toplevel && (!Settings.data.dock.onlySameOutput || !toplevel.screens || toplevel.screens.includes(modelData)));
}
if (!appData.toplevel)
return [];
if (Settings.data.dock.onlySameOutput && appData.toplevel.screens && !appData.toplevel.screens.includes(modelData))
return [];
return [appData.toplevel];
}
function getPrimaryToplevelForEntry(appData) {
const toplevels = getToplevelsForEntry(appData);
if (toplevels.length === 0)
return null;
if (ToplevelManager && ToplevelManager.activeToplevel && toplevels.includes(ToplevelManager.activeToplevel))
return ToplevelManager.activeToplevel;
return toplevels[0];
}
// Build grouped render model without mutating the raw toplevel list.
function buildGroupedDockApps(apps) {
if (!Settings.data.dock.groupApps) {
return apps.map(app => {
const entry = Object.assign({}, app);
entry.toplevels = getToplevelsForEntry(app);
return entry;
});
}
const grouped = [];
const groupedById = new Map();
apps.forEach(app => {
const appId = app.appId;
const toplevels = getToplevelsForEntry(app);
const existing = groupedById.get(appId);
if (existing) {
toplevels.forEach(toplevel => {
if (!existing.toplevels.includes(toplevel)) {
existing.toplevels.push(toplevel);
}
});
if (app.type === "pinned" || app.type === "pinned-running") {
existing.isPinned = true;
}
} else {
const entry = {
"type": app.type,
"appId": appId,
"title": app.title,
"toplevels": toplevels.slice(),
"isPinned": app.type === "pinned" || app.type === "pinned-running"
};
grouped.push(entry);
groupedById.set(appId, entry);
}
});
grouped.forEach(entry => {
entry.toplevel = getPrimaryToplevelForEntry(entry);
if (entry.toplevels.length > 0 && entry.isPinned) {
entry.type = "pinned-running";
} else if (entry.toplevels.length > 0) {
entry.type = "running";
} else {
entry.type = "pinned";
}
if (entry.toplevel && entry.toplevel.title && entry.toplevel.title.trim() !== "") {
entry.title = entry.toplevel.title;
}
});
return grouped;
}
// Function to update the combined dock apps model
function updateDockApps() {
const runningApps = ToplevelManager ? (ToplevelManager.toplevels.values || []) : [];
@@ -292,6 +452,7 @@ Loader {
combined.push({
"type": appType,
"toplevel": toplevel,
"toplevels": toplevel ? [toplevel] : [],
"appId": canonicalId,
"title": title
});
@@ -304,6 +465,7 @@ Loader {
combined.push({
"type": appType,
"toplevel": toplevel,
"toplevels": [],
"appId": canonicalId,
"title": title
});
@@ -352,7 +514,16 @@ Loader {
pushPinned();
}
dockApps = sortDockApps(combined);
const sortedApps = sortDockApps(combined);
dockApps = buildGroupedDockApps(sortedApps);
const cycleState = root.groupCycleIndices || {};
const nextCycleState = {};
dockApps.forEach(app => {
if (app && app.appId && cycleState[app.appId] !== undefined) {
nextCycleState[app.appId] = cycleState[app.appId];
}
});
root.groupCycleIndices = nextCycleState;
// Sync session order if needed
// Instead of resetting everything when length changes, we reconcile the keys
@@ -397,6 +568,10 @@ Loader {
}
}
property alias hideTimer: hideTimer
property alias showTimer: showTimer
property alias unloadTimer: unloadTimer
// Timer for auto-hide delay
Timer {
id: hideTimer
@@ -412,7 +587,21 @@ Loader {
menuHovered = false;
}
if (autoHide && !dockHovered && !anyAppHovered && !peekHovered && !menuHovered) {
closeAllContextMenus();
if (isStaticMode) {
const panel = getStaticDockPanel();
if (panel && (panel.menuHovered || (panel.currentContextMenu && panel.currentContextMenu.visible))) {
restart();
return;
}
if (panel && panel.isDockHovered) {
restart();
return;
}
if (panel)
panel.close();
} else {
closeAllContextMenus();
}
hidden = true;
unloadTimer.restart(); // Start unload timer when hiding
} else if (autoHide && !dockHovered && !peekHovered) {
@@ -428,7 +617,15 @@ Loader {
interval: showDelay
onTriggered: {
if (autoHide) {
dockLoaded = true; // Load dock immediately
if (isStaticMode) {
if (dockItemCount <= 0)
return;
const panel = getStaticDockPanel();
if (panel && !panel.isPanelOpen)
panel.open();
} else {
dockLoaded = true; // Load dock immediately
}
hidden = false; // Then trigger show animation
unloadTimer.stop(); // Cancel any pending unload
}
@@ -451,7 +648,7 @@ Loader {
// PEEK WINDOW
Loader {
active: (barIsReady || !hasBar) && modelData && (Settings.data.dock.monitors.length === 0 || Settings.data.dock.monitors.includes(modelData.name)) && autoHide
active: (barIsReady || !hasBar) && modelData && (Settings.data.dock.monitors.length === 0 || Settings.data.dock.monitors.includes(modelData.name)) && (autoHide || isStaticMode)
sourceComponent: PanelWindow {
id: peekWindow
@@ -459,23 +656,38 @@ Loader {
screen: modelData
// Dynamic anchors based on dock position
anchors.top: dockPosition === "top" || isVertical
anchors.bottom: dockPosition === "bottom" || isVertical
anchors.bottom: dockPosition === "bottom"
anchors.left: dockPosition === "left" || !isVertical
anchors.right: dockPosition === "right" || !isVertical
anchors.right: dockPosition === "right"
focusable: false
color: "transparent"
// When bar is at same edge, position peek window past the bar so it receives mouse events
margins.top: dockPosition === "top" && barAtSameEdge ? (barHeight + (Settings.data.bar.floating ? Settings.data.bar.marginVertical : 0)) : 0
margins.bottom: dockPosition === "bottom" && barAtSameEdge ? (barHeight + (Settings.data.bar.floating ? Settings.data.bar.marginVertical : 0)) : 0
margins.left: dockPosition === "left" && barAtSameEdge ? (barHeight + (Settings.data.bar.floating ? Settings.data.bar.marginHorizontal : 0)) : 0
margins.right: dockPosition === "right" && barAtSameEdge ? (barHeight + (Settings.data.bar.floating ? Settings.data.bar.marginHorizontal : 0)) : 0
margins.top: isVertical ? peekCenterOffsetY : (dockPosition === "top" && barAtSameEdge && !showFrameIndicator ? (barHeight + (Settings.data.bar.floating ? Settings.data.bar.marginVertical : 0)) : 0)
margins.bottom: dockPosition === "bottom" && barAtSameEdge && !showFrameIndicator ? (barHeight + (Settings.data.bar.floating ? Settings.data.bar.marginVertical : 0)) : 0
margins.left: !isVertical ? peekCenterOffsetX : (dockPosition === "left" && barAtSameEdge && !showFrameIndicator ? (barHeight + (Settings.data.bar.floating ? Settings.data.bar.marginHorizontal : 0)) : 0)
margins.right: dockPosition === "right" && barAtSameEdge && !showFrameIndicator ? (barHeight + (Settings.data.bar.floating ? Settings.data.bar.marginHorizontal : 0)) : 0
WlrLayershell.namespace: "noctalia-dock-peek-" + (screen?.name || "unknown")
WlrLayershell.exclusionMode: ExclusionMode.Ignore
// Larger peek area when bar is at same edge, normal 1px otherwise
implicitHeight: barAtSameEdge && !isVertical ? 3 : peekHeight
implicitWidth: barAtSameEdge && isVertical ? 3 : peekHeight
implicitHeight: isVertical ? peekEdgeLength : ((showFrameIndicator || barAtSameEdge) ? indicatorThickness : peekHeight)
implicitWidth: isVertical ? ((showFrameIndicator || barAtSameEdge) ? indicatorThickness : peekHeight) : peekEdgeLength
Rectangle {
anchors.fill: parent
radius: indicatorThickness
color: Qt.alpha(Color.mPrimary, 0.6)
opacity: showFrameIndicator && frameIndicatorLength > 0 ? 1 : 0
visible: opacity > 0
Behavior on opacity {
NumberAnimation {
duration: Style.animationFast
easing.type: Easing.InOutQuad
}
}
}
MouseArea {
id: peekArea
@@ -484,6 +696,18 @@ Loader {
onEntered: {
peekHovered = true;
if (isStaticMode && !autoHide) {
if (dockItemCount <= 0)
return;
const panel = getStaticDockPanel();
if (panel && !panel.isPanelOpen)
panel.open();
return;
}
if (isStaticMode) {
showTimer.start();
return;
}
if (hidden) {
showTimer.start();
}
@@ -522,7 +746,7 @@ Loader {
Loader {
id: dockWindowLoader
active: Settings.data.dock.enabled && (barIsReady || !hasBar) && modelData && (Settings.data.dock.monitors.length === 0 || Settings.data.dock.monitors.includes(modelData.name)) && dockLoaded && ToplevelManager && (dockApps.length > 0)
active: Settings.data.dock.enabled && !isStaticMode && (barIsReady || !hasBar) && modelData && (Settings.data.dock.monitors.length === 0 || Settings.data.dock.monitors.includes(modelData.name)) && dockLoaded && ToplevelManager && (dockApps.length > 0)
sourceComponent: PanelWindow {
id: dockWindow
@@ -567,8 +791,9 @@ Loader {
readonly property int extraLeft: (!isVertical && !exclusive && barOnLeft) ? barHeight : 0
readonly property int extraRight: (!isVertical && !exclusive && barOnRight) ? barHeight : 0
width: dockContainer.width + extraLeft + extraRight
height: dockContainer.height + extraTop + extraBottom
// Add +2 buffer for fractional scaling issues
width: dockContent.dockContainer.width + extraLeft + extraRight + (root.isVertical ? 2 : Style.margin2XL * 6)
height: dockContent.dockContainer.height + extraTop + extraBottom + 2
anchors.horizontalCenter: isVertical ? undefined : parent.horizontalCenter
anchors.verticalCenter: isVertical ? parent.verticalCenter : undefined
@@ -578,6 +803,9 @@ Loader {
anchors.left: dockPosition === "left" ? parent.left : undefined
anchors.right: dockPosition === "right" ? parent.right : undefined
// Enable layer caching to reduce GPU usage from continuous animations
layer.enabled: true
opacity: hidden ? 0 : 1
scale: hidden ? 0.85 : 1
@@ -596,509 +824,14 @@ Loader {
}
}
Rectangle {
id: dockContainer
// For vertical dock, swap width and height logic
width: isVertical ? Math.round(iconSize * 1.5) : Math.min(dockLayout.implicitWidth + Style.marginXL, root.maxWidth)
height: isVertical ? Math.min(dockLayout.implicitHeight + Style.marginXL, root.maxHeight) : Math.round(iconSize * 1.5)
color: Qt.alpha(Color.mSurface, Settings.data.dock.backgroundOpacity)
// Anchor based on padding to achieve centering shift
anchors.horizontalCenter: parent.extraLeft > 0 || parent.extraRight > 0 ? undefined : parent.horizontalCenter
anchors.right: parent.extraLeft > 0 ? parent.right : undefined
anchors.left: parent.extraRight > 0 ? parent.left : undefined
anchors.verticalCenter: parent.extraTop > 0 || parent.extraBottom > 0 ? undefined : parent.verticalCenter
anchors.bottom: parent.extraTop > 0 ? parent.bottom : undefined
anchors.top: parent.extraBottom > 0 ? parent.top : undefined
radius: Style.radiusL
border.width: Style.borderS
border.color: Qt.alpha(Color.mOutline, Settings.data.dock.backgroundOpacity)
// Enable layer caching to reduce GPU usage from continuous animations
layer.enabled: true
MouseArea {
id: dockMouseArea
anchors.fill: parent
hoverEnabled: true
onEntered: {
dockHovered = true;
if (autoHide) {
showTimer.stop();
hideTimer.stop();
unloadTimer.stop(); // Cancel unload if hovering
hidden = false; // Make sure dock is visible
}
}
onExited: {
dockHovered = false;
if (autoHide && !anyAppHovered && !peekHovered && !menuHovered && root.dragSourceIndex === -1) {
hideTimer.restart();
}
}
onClicked: {
// Close any open context menu when clicking on the dock background
closeAllContextMenus();
}
}
Flickable {
id: dock
// Use parent dimensions more directly to avoid clipping
width: isVertical ? parent.width : Math.min(dockLayout.implicitWidth, parent.width - Style.marginXL)
height: !isVertical ? parent.height : Math.min(dockLayout.implicitHeight, parent.height - Style.marginXL)
contentWidth: dockLayout.implicitWidth
contentHeight: dockLayout.implicitHeight
anchors.centerIn: parent
clip: true
flickableDirection: isVertical ? Flickable.VerticalFlick : Flickable.HorizontalFlick
// Keep interactive dependent on overflow
interactive: isVertical ? contentHeight > height : contentWidth > width
// Centering margins
contentX: isVertical && contentWidth < width ? (contentWidth - width) / 2 : 0
contentY: !isVertical && contentHeight < height ? (contentHeight - height) / 2 : 0
WheelHandler {
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
onWheel: event => {
var delta = (event.angleDelta.y !== 0) ? event.angleDelta.y : event.angleDelta.x;
if (root.isVertical) {
dock.contentY = Math.max(-dock.topMargin, Math.min(dock.contentHeight - dock.height + dock.bottomMargin, dock.contentY - delta));
} else {
// For horizontal dock, we want to scroll contentX with BOTH x and y wheels
var hDelta = (event.angleDelta.x !== 0) ? event.angleDelta.x : event.angleDelta.y;
dock.contentX = Math.max(-dock.leftMargin, Math.min(dock.contentWidth - dock.width + dock.rightMargin, dock.contentX - hDelta));
}
event.accepted = true;
}
}
ScrollBar.horizontal: ScrollBar {
visible: !isVertical && dock.interactive
policy: ScrollBar.AsNeeded
}
ScrollBar.vertical: ScrollBar {
visible: isVertical && dock.interactive
policy: ScrollBar.AsNeeded
}
function getAppIcon(appData): string {
if (!appData || !appData.appId)
return "";
return ThemeIcons.iconForAppId(appData.appId?.toLowerCase());
}
// Use GridLayout for flexible horizontal/vertical arrangement
GridLayout {
id: dockLayout
columns: isVertical ? 1 : -1
rows: isVertical ? -1 : 1
rowSpacing: Style.marginS
columnSpacing: Style.marginS
// Ensure the layout takes its full implicit size
width: implicitWidth
height: implicitHeight
Repeater {
model: dockApps
delegate: Item {
id: appButton
readonly property real indicatorMargin: Math.max(3, Math.round(iconSize * 0.18))
Layout.preferredWidth: isVertical ? iconSize + indicatorMargin * 2 : iconSize
Layout.preferredHeight: isVertical ? iconSize : iconSize + indicatorMargin * 2
Layout.alignment: Qt.AlignCenter
property bool isActive: modelData.toplevel && ToplevelManager.activeToplevel && ToplevelManager.activeToplevel === modelData.toplevel
property bool hovered: appMouseArea.containsMouse
property string appId: modelData ? modelData.appId : ""
property string appTitle: {
if (!modelData)
return "";
// For running apps, use the toplevel title directly (reactive)
if (modelData.toplevel) {
const toplevelTitle = modelData.toplevel.title || "";
// If title is "Loading..." or empty, use desktop entry name
if (!toplevelTitle || toplevelTitle === "Loading..." || toplevelTitle.trim() === "") {
return root.getAppNameFromDesktopEntry(modelData.appId) || modelData.appId;
}
return toplevelTitle;
}
// For pinned apps that aren't running, use the stored title
return modelData.title || modelData.appId || "";
}
property bool isRunning: modelData && (modelData.type === "running" || modelData.type === "pinned-running")
// Store index for drag-and-drop
property int modelIndex: index
objectName: "dockAppButton"
DropArea {
anchors.fill: parent
keys: ["dock-app"]
onEntered: function (drag) {
if (drag.source && drag.source.objectName === "dockAppButton") {
root.dragTargetIndex = appButton.modelIndex;
}
}
onExited: function () {
if (root.dragTargetIndex === appButton.modelIndex) {
root.dragTargetIndex = -1;
}
}
onDropped: function (drop) {
root.dragSourceIndex = -1;
root.dragTargetIndex = -1;
if (drop.source && drop.source.objectName === "dockAppButton" && drop.source !== appButton) {
root.reorderApps(drop.source.modelIndex, appButton.modelIndex);
}
}
}
// Listen for the toplevel being closed
Connections {
target: modelData?.toplevel
function onClosed() {
Qt.callLater(root.updateDockApps);
}
}
// Draggable container for the icon
Item {
id: iconContainer
width: iconSize
height: iconSize
// When dragging, remove anchors so MouseArea can position it
anchors.centerIn: dragging ? undefined : parent
property bool dragging: appMouseArea.drag.active
onDraggingChanged: {
if (dragging) {
root.dragSourceIndex = index;
} else {
// Reset if not handled by drop (e.g. dropped outside)
Qt.callLater(() => {
if (!appMouseArea.drag.active && root.dragSourceIndex === index) {
root.dragSourceIndex = -1;
root.dragTargetIndex = -1;
}
});
}
}
Drag.active: dragging
Drag.source: appButton
Drag.hotSpot.x: width / 2
Drag.hotSpot.y: height / 2
Drag.keys: ["dock-app"]
z: (root.dragSourceIndex === index) ? 1000 : ((dragging ? 1000 : 0))
scale: dragging ? 1.1 : (appButton.hovered ? 1.15 : 1.0)
Behavior on scale {
NumberAnimation {
duration: Style.animationNormal
easing.type: Easing.OutBack
easing.overshoot: 1.2
}
}
// Visual shifting logic
readonly property bool isDragged: root.dragSourceIndex === index
property real shiftOffset: 0
Binding on shiftOffset {
value: {
if (root.dragSourceIndex !== -1 && root.dragTargetIndex !== -1 && !iconContainer.isDragged) {
if (root.dragSourceIndex < root.dragTargetIndex) {
// Dragging Forward: Items between source and target shift Backward
if (index > root.dragSourceIndex && index <= root.dragTargetIndex) {
return -1 * (root.isVertical ? iconSize + Style.marginS : iconSize + Style.marginS);
}
} else if (root.dragSourceIndex > root.dragTargetIndex) {
// Dragging Backward: Items between target and source shift Forward
if (index >= root.dragTargetIndex && index < root.dragSourceIndex) {
return (root.isVertical ? iconSize + Style.marginS : iconSize + Style.marginS);
}
}
}
return 0;
}
}
transform: Translate {
x: !root.isVertical ? iconContainer.shiftOffset : 0
y: root.isVertical ? iconContainer.shiftOffset : 0
Behavior on x {
NumberAnimation {
duration: Style.animationFast
easing.type: Easing.OutQuad
}
}
Behavior on y {
NumberAnimation {
duration: Style.animationFast
easing.type: Easing.OutQuad
}
}
}
IconImage {
id: appIcon
anchors.fill: parent
source: {
root.iconRevision; // Force re-evaluation when revision changes
return dock.getAppIcon(modelData);
}
visible: source.toString() !== ""
smooth: true
asynchronous: true
// Dim pinned apps that aren't running
opacity: appButton.isRunning ? 1.0 : Settings.data.dock.deadOpacity
// Apply dock-specific colorization shader only to non-focused apps
layer.enabled: !appButton.isActive && Settings.data.dock.colorizeIcons
layer.effect: ShaderEffect {
property color targetColor: Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mSurfaceVariant
property real colorizeMode: 0.0 // Dock mode (grayscale)
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/appicon_colorize.frag.qsb")
}
Behavior on opacity {
NumberAnimation {
duration: Style.animationFast
easing.type: Easing.OutQuad
}
}
}
// Fall back if no icon
NIcon {
anchors.centerIn: parent
visible: !appIcon.visible
icon: "question-mark"
pointSize: iconSize * 0.7
color: appButton.isActive ? Color.mPrimary : Color.mOnSurfaceVariant
opacity: appButton.isRunning ? 1.0 : 0.6
Behavior on opacity {
NumberAnimation {
duration: Style.animationFast
easing.type: Easing.OutQuad
}
}
}
}
// Context menu popup
DockMenu {
id: contextMenu
dockPosition: root.dockPosition // Pass dock position for menu placement
onHoveredChanged: {
// Only update menuHovered if this menu is current and visible
if (root.currentContextMenu === contextMenu && contextMenu.visible) {
menuHovered = hovered;
} else {
menuHovered = false;
}
}
Connections {
target: contextMenu
function onRequestClose() {
// Clear current menu immediately to prevent hover updates
root.currentContextMenu = null;
hideTimer.stop();
contextMenu.hide();
menuHovered = false;
anyAppHovered = false;
}
}
onAppClosed: root.updateDockApps // Force immediate dock update when app is closed
onVisibleChanged: {
if (visible) {
root.currentContextMenu = contextMenu;
} else if (root.currentContextMenu === contextMenu) {
root.currentContextMenu = null;
hideTimer.stop();
menuHovered = false;
// Restart hide timer after menu closes
if (autoHide && !dockHovered && !anyAppHovered && !peekHovered && !menuHovered) {
hideTimer.restart();
}
}
}
}
MouseArea {
id: appMouseArea
objectName: "appMouseArea"
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
// Only allow left-click dragging via axis control
drag.target: iconContainer
drag.axis: (pressedButtons & Qt.LeftButton) ? (root.isVertical ? Drag.YAxis : Drag.XAxis) : Drag.None
onPressed: {
var p1 = appButton.mapFromItem(dockContainer, 0, 0);
var p2 = appButton.mapFromItem(dockContainer, dockContainer.width, dockContainer.height);
drag.minimumX = p1.x;
drag.maximumX = p2.x - iconContainer.width;
drag.minimumY = p1.y;
drag.maximumY = p2.y - iconContainer.height;
}
onReleased: {
if (iconContainer.Drag.active) {
iconContainer.Drag.drop();
}
}
onEntered: {
anyAppHovered = true;
const appName = appButton.appTitle || appButton.appId || "Unknown";
const tooltipText = appName.length > 40 ? appName.substring(0, 37) + "..." : appName;
if (!contextMenu.visible) {
TooltipService.show(appButton, tooltipText, "top");
}
if (autoHide) {
showTimer.stop();
hideTimer.stop();
unloadTimer.stop(); // Cancel unload if hovering app
hidden = false; // Make sure dock is visible
}
}
onExited: {
anyAppHovered = false;
TooltipService.hide();
// Clear menuHovered if no current menu or menu not visible
if (!root.currentContextMenu || !root.currentContextMenu.visible) {
menuHovered = false;
}
if (autoHide && !dockHovered && !peekHovered && !menuHovered && root.dragSourceIndex === -1) {
hideTimer.restart();
}
}
onClicked: mouse => {
if (mouse.button === Qt.RightButton) {
// If right-clicking on the same app with an open context menu, close it
if (root.currentContextMenu === contextMenu && contextMenu.visible) {
root.closeAllContextMenus();
return;
}
// Close any other existing context menu first
root.closeAllContextMenus();
// Hide tooltip when showing context menu
TooltipService.hideImmediately();
contextMenu.show(appButton, modelData.toplevel || modelData);
return;
}
// Close any existing context menu for non-right-click actions
root.closeAllContextMenus();
// Check if toplevel is still valid (not a stale reference)
const isValidToplevel = modelData?.toplevel && ToplevelManager && ToplevelManager.toplevels.values.includes(modelData.toplevel);
if (mouse.button === Qt.MiddleButton && isValidToplevel && modelData.toplevel.close) {
modelData.toplevel.close();
Qt.callLater(root.updateDockApps); // Force immediate dock update
} else if (mouse.button === Qt.LeftButton) {
if (isValidToplevel && modelData.toplevel.activate) {
// Running app - activate it
modelData.toplevel.activate();
} else if (modelData?.appId) {
// Pinned app not running - launch it
// Use ThemeIcons to robustly find the desktop entry
const app = ThemeIcons.findAppEntry(modelData.appId);
if (!app) {
Logger.w("Dock", `Could not find desktop entry for pinned app: ${modelData.appId}`);
return;
}
if (Settings.data.appLauncher.customLaunchPrefixEnabled && Settings.data.appLauncher.customLaunchPrefix) {
// Use custom launch prefix
const prefix = Settings.data.appLauncher.customLaunchPrefix.split(" ");
if (app.runInTerminal) {
const terminal = Settings.data.appLauncher.terminalCommand.split(" ");
const command = prefix.concat(terminal.concat(app.command));
Quickshell.execDetached(command);
} else {
const command = prefix.concat(app.command);
Quickshell.execDetached(command);
}
} else if (Settings.data.appLauncher.useApp2Unit && ProgramCheckerService.app2unitAvailable && app.id) {
Logger.d("Dock", `Using app2unit for: ${app.id}`);
if (app.runInTerminal)
Quickshell.execDetached(["app2unit", "--", app.id + ".desktop"]);
else
Quickshell.execDetached(["app2unit", "--"].concat(app.command));
} else {
// Fallback logic when app2unit is not used
if (app.runInTerminal) {
Logger.d("Dock", "Executing terminal app manually: " + app.name);
const terminal = Settings.data.appLauncher.terminalCommand.split(" ");
const command = terminal.concat(app.command);
CompositorService.spawn(command);
} else if (app.command && app.command.length > 0) {
CompositorService.spawn(app.command);
} else if (app.execute) {
app.execute();
} else {
Logger.w("Dock", `Could not launch: ${app.name}. No valid launch method.`);
}
}
}
}
}
}
// Active indicator - positioned at the edge of the delegate area
Rectangle {
visible: Settings.data.dock.inactiveIndicators ? isRunning : isActive
width: isVertical ? indicatorMargin * 0.6 : iconSize * 0.2
height: isVertical ? iconSize * 0.2 : indicatorMargin * 0.6
color: Color.mPrimary
radius: Style.radiusXS
// Anchor to the edge facing the screen center
anchors.bottom: !isVertical && dockPosition === "bottom" ? parent.bottom : undefined
anchors.top: !isVertical && dockPosition === "top" ? parent.top : undefined
anchors.left: isVertical && dockPosition === "left" ? parent.left : undefined
anchors.right: isVertical && dockPosition === "right" ? parent.right : undefined
anchors.horizontalCenter: isVertical ? undefined : parent.horizontalCenter
anchors.verticalCenter: isVertical ? parent.verticalCenter : undefined
// Offset slightly from the edge
anchors.bottomMargin: !isVertical && dockPosition === "bottom" ? 2 : 0
anchors.topMargin: !isVertical && dockPosition === "top" ? 2 : 0
anchors.leftMargin: isVertical && dockPosition === "left" ? 2 : 0
anchors.rightMargin: isVertical && dockPosition === "right" ? 2 : 0
}
}
}
}
}
DockContent {
id: dockContent
anchors.fill: parent
dockRoot: root
extraTop: dockContainerWrapper.extraTop
extraBottom: dockContainerWrapper.extraBottom
extraLeft: dockContainerWrapper.extraLeft
extraRight: dockContainerWrapper.extraRight
}
}
}
+868
View File
@@ -0,0 +1,868 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Effects
import QtQuick.Layouts
import Quickshell
import Quickshell.Wayland
import Quickshell.Widgets
import qs.Commons
import qs.Services.Compositor
import qs.Services.System
import qs.Services.UI
import qs.Widgets
Item {
required property var dockRoot
required property int extraTop
required property int extraBottom
required property int extraLeft
required property int extraRight
property alias dockContainer: dockContainer
readonly property bool isStaticMode: Settings.data.dock.dockType === "static"
readonly property string tooltipDirection: dockRoot.dockPosition === "top" ? "bottom" : "top"
Rectangle {
id: dockContainer
// For vertical dock, swap width and height logic
width: dockRoot.isVertical ? Math.round(dockRoot.iconSize * 1.5) : Math.min(dockLayout.implicitWidth + Style.marginXL, dockRoot.maxWidth)
height: dockRoot.isVertical ? Math.min(dockLayout.implicitHeight + Style.marginXL, dockRoot.maxHeight) : Math.round(dockRoot.iconSize * 1.5)
color: Qt.alpha(Color.mSurface, (isStaticMode ? 0 : Settings.data.dock.backgroundOpacity))
// Anchor based on padding to achieve centering shift
anchors.horizontalCenter: extraLeft > 0 || extraRight > 0 ? undefined : parent.horizontalCenter
anchors.right: extraLeft > 0 ? parent.right : undefined
anchors.left: extraRight > 0 ? parent.left : undefined
anchors.verticalCenter: extraTop > 0 || extraBottom > 0 ? undefined : parent.verticalCenter
anchors.bottom: extraTop > 0 ? parent.bottom : undefined
anchors.top: extraBottom > 0 ? parent.top : undefined
radius: Style.radiusL
border.width: Style.borderS
border.color: Qt.alpha(Color.mOutline, (isStaticMode ? 0 : Settings.data.dock.backgroundOpacity))
MouseArea {
id: dockMouseArea
anchors.fill: parent
hoverEnabled: true
onEntered: {
dockRoot.dockHovered = true;
if (dockRoot.autoHide) {
dockRoot.showTimer.stop();
dockRoot.hideTimer.stop();
dockRoot.unloadTimer.stop(); // Cancel unload if hovering
dockRoot.hidden = false; // Make sure dock is visible
}
}
onExited: {
dockRoot.dockHovered = false;
if (dockRoot.autoHide && !dockRoot.anyAppHovered && !dockRoot.peekHovered && !dockRoot.menuHovered && dockRoot.dragSourceIndex === -1) {
dockRoot.hideTimer.restart();
}
}
onClicked: {
// Close any open context menu when clicking on the dock background
dockRoot.closeAllContextMenus();
}
}
Flickable {
id: dock
// Use parent dimensions more directly to avoid clipping
width: dockRoot.isVertical ? parent.width : Math.min(dockLayout.implicitWidth, parent.width - Style.marginXL)
height: !dockRoot.isVertical ? parent.height : Math.min(dockLayout.implicitHeight, parent.height - Style.marginXL)
contentWidth: dockLayout.implicitWidth
contentHeight: dockLayout.implicitHeight
anchors.centerIn: parent
clip: true
flickableDirection: dockRoot.isVertical ? Flickable.VerticalFlick : Flickable.HorizontalFlick
// Keep interactive dependent on overflow
interactive: dockRoot.isVertical ? contentHeight > height : contentWidth > width
// Centering margins
contentX: dockRoot.isVertical && contentWidth < width ? (contentWidth - width) / 2 : 0
contentY: !dockRoot.isVertical && contentHeight < height ? (contentHeight - height) / 2 : 0
WheelHandler {
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
onWheel: event => {
var delta = (event.angleDelta.y !== 0) ? event.angleDelta.y : event.angleDelta.x;
if (dockRoot.isVertical) {
dock.contentY = Math.max(-dock.topMargin, Math.min(dock.contentHeight - dock.height + dock.bottomMargin, dock.contentY - delta));
} else {
// For horizontal dock, we want to scroll contentX with BOTH x and y wheels
var hDelta = (event.angleDelta.x !== 0) ? event.angleDelta.x : event.angleDelta.y;
dock.contentX = Math.max(-dock.leftMargin, Math.min(dock.contentWidth - dock.width + dock.rightMargin, dock.contentX - hDelta));
}
event.accepted = true;
}
}
ScrollBar.horizontal: ScrollBar {
visible: !dockRoot.isVertical && dock.interactive
policy: ScrollBar.AsNeeded
}
ScrollBar.vertical: ScrollBar {
visible: dockRoot.isVertical && dock.interactive
policy: ScrollBar.AsNeeded
}
function getAppIcon(appData): string {
if (!appData || !appData.appId)
return "";
return ThemeIcons.iconForAppId(appData.appId?.toLowerCase());
}
function getValidToplevels(appData) {
if (!appData || !ToplevelManager || !ToplevelManager.toplevels)
return [];
const source = appData.toplevels && appData.toplevels.length > 0 ? appData.toplevels : (appData.toplevel ? [appData.toplevel] : []);
const allToplevels = ToplevelManager.toplevels.values || [];
return source.filter(toplevel => toplevel && allToplevels.includes(toplevel));
}
function getPrimaryToplevel(appData) {
const toplevels = getValidToplevels(appData);
if (toplevels.length === 0)
return null;
if (ToplevelManager && ToplevelManager.activeToplevel && toplevels.includes(ToplevelManager.activeToplevel))
return ToplevelManager.activeToplevel;
return toplevels[0];
}
function launchAppById(appId) {
if (!appId)
return;
const app = ThemeIcons.findAppEntry(appId);
if (!app) {
Logger.w("Dock", `Could not find desktop entry for pinned app: ${appId}`);
return;
}
if (Settings.data.appLauncher.customLaunchPrefixEnabled && Settings.data.appLauncher.customLaunchPrefix) {
const prefix = Settings.data.appLauncher.customLaunchPrefix.split(" ");
if (app.runInTerminal) {
const terminal = Settings.data.appLauncher.terminalCommand.split(" ");
const command = prefix.concat(terminal.concat(app.command));
Quickshell.execDetached(command);
} else {
const command = prefix.concat(app.command);
Quickshell.execDetached(command);
}
} else if (Settings.data.appLauncher.useApp2Unit && ProgramCheckerService.app2unitAvailable && app.id) {
Logger.d("Dock", `Using app2unit for: ${app.id}`);
if (app.runInTerminal)
Quickshell.execDetached(["app2unit", "--", app.id + ".desktop"]);
else
Quickshell.execDetached(["app2unit", "--"].concat(app.command));
} else {
if (app.runInTerminal) {
Logger.d("Dock", "Executing terminal app manually: " + app.name);
const terminal = Settings.data.appLauncher.terminalCommand.split(" ");
const command = terminal.concat(app.command);
CompositorService.spawn(command);
} else if (app.command && app.command.length > 0) {
CompositorService.spawn(app.command);
} else if (app.execute) {
app.execute();
} else {
Logger.w("Dock", `Could not launch: ${app.name}. No valid launch method.`);
}
}
}
// Use GridLayout for flexible horizontal/vertical arrangement
GridLayout {
id: dockLayout
columns: dockRoot.isVertical ? 1 : -1
rows: dockRoot.isVertical ? -1 : 1
rowSpacing: Style.marginS
columnSpacing: Style.marginS
// Ensure the layout takes its full implicit size
width: implicitWidth
height: implicitHeight
Component {
id: launcherButtonComponent
Item {
id: launcherButton
anchors.fill: parent
readonly property string screenName: dockRoot.modelData ? dockRoot.modelData.name : (dockRoot.screen ? dockRoot.screen.name : "")
readonly property var launcherWidgetSettings: {
const widgetsBySection = screenName ? Settings.getBarWidgetsForScreen(screenName) : Settings.data.bar.widgets;
if (!widgetsBySection)
return {};
const sections = ["left", "center", "right"];
for (let i = 0; i < sections.length; i++) {
const sectionWidgets = widgetsBySection[sections[i]] || [];
for (let j = 0; j < sectionWidgets.length; j++) {
const widget = sectionWidgets[j];
if (widget && widget.id === "Launcher")
return widget;
}
}
return {};
}
readonly property string launcherWidgetSection: {
const widgetsBySection = screenName ? Settings.getBarWidgetsForScreen(screenName) : Settings.data.bar.widgets;
if (!widgetsBySection)
return "";
const sections = ["left", "center", "right"];
for (let i = 0; i < sections.length; i++) {
const sectionWidgets = widgetsBySection[sections[i]] || [];
for (let j = 0; j < sectionWidgets.length; j++) {
const widget = sectionWidgets[j];
if (widget && widget.id === "Launcher")
return sections[i];
}
}
return "";
}
readonly property int launcherWidgetIndex: {
const widgetsBySection = screenName ? Settings.getBarWidgetsForScreen(screenName) : Settings.data.bar.widgets;
if (!widgetsBySection)
return -1;
const sections = ["left", "center", "right"];
for (let i = 0; i < sections.length; i++) {
const sectionWidgets = widgetsBySection[sections[i]] || [];
for (let j = 0; j < sectionWidgets.length; j++) {
const widget = sectionWidgets[j];
if (widget && widget.id === "Launcher")
return j;
}
}
return -1;
}
readonly property var launcherMetadata: BarWidgetRegistry.widgetMetadata["Launcher"]
readonly property string launcherIcon: launcherWidgetSettings.icon || (launcherMetadata && launcherMetadata.icon ? launcherMetadata.icon : "search")
readonly property string launcherIconColorKey: {
if (Settings.data.dock.launcherIconColor !== undefined)
return Settings.data.dock.launcherIconColor;
if (launcherWidgetSettings.iconColor !== undefined)
return launcherWidgetSettings.iconColor;
if (launcherMetadata && launcherMetadata.iconColor !== undefined)
return launcherMetadata.iconColor;
return "none";
}
Item {
id: launcherIconContainer
width: dockRoot.iconSize
height: dockRoot.iconSize
anchors.centerIn: parent
scale: launcherMouseArea.containsMouse ? 1.15 : 1.0
Behavior on scale {
NumberAnimation {
duration: Style.animationNormal
easing.type: Easing.OutBack
easing.overshoot: 1.2
}
}
NIcon {
anchors.centerIn: parent
icon: launcherButton.launcherIcon
pointSize: dockRoot.iconSize * 0.7
color: Color.resolveColorKey(launcherButton.launcherIconColorKey)
}
}
MouseArea {
id: launcherMouseArea
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
onEntered: {
dockRoot.anyAppHovered = true;
TooltipService.show(launcherButton, I18n.tr("actions.open-launcher"), tooltipDirection);
if (dockRoot.autoHide) {
dockRoot.showTimer.stop();
dockRoot.hideTimer.stop();
dockRoot.unloadTimer.stop();
dockRoot.hidden = false;
}
}
onExited: {
dockRoot.anyAppHovered = false;
TooltipService.hide();
if (dockRoot.autoHide && !dockRoot.dockHovered && !dockRoot.peekHovered && !dockRoot.menuHovered && dockRoot.dragSourceIndex === -1) {
dockRoot.hideTimer.restart();
}
}
onClicked: mouse => {
const targetScreen = dockRoot.modelData || dockRoot.screen || null;
if (!targetScreen) {
return;
}
if (mouse.button === Qt.RightButton) {
if (dockRoot.currentContextMenu === launcherContextMenu && launcherContextMenu.visible) {
dockRoot.closeAllContextMenus();
return;
}
dockRoot.closeAllContextMenus();
TooltipService.hideImmediately();
launcherContextMenu.show(launcherButton, null, targetScreen);
return;
}
if (mouse.button === Qt.LeftButton || mouse.button === Qt.MiddleButton) {
dockRoot.closeAllContextMenus();
PanelService.toggleLauncher(targetScreen);
}
}
}
DockMenu {
id: launcherContextMenu
dockPosition: dockRoot.dockPosition
menuMode: "launcher"
launcherWidgetSection: launcherButton.launcherWidgetSection
launcherWidgetIndex: launcherButton.launcherWidgetIndex
launcherWidgetSettings: launcherButton.launcherWidgetSettings
onHoveredChanged: {
if (dockRoot.currentContextMenu === launcherContextMenu && launcherContextMenu.visible) {
dockRoot.menuHovered = hovered;
} else {
dockRoot.menuHovered = false;
}
}
Connections {
target: launcherContextMenu
function onRequestClose() {
dockRoot.currentContextMenu = null;
dockRoot.hideTimer.stop();
launcherContextMenu.hide();
dockRoot.menuHovered = false;
dockRoot.anyAppHovered = false;
}
}
onVisibleChanged: {
if (visible) {
dockRoot.currentContextMenu = launcherContextMenu;
} else if (dockRoot.currentContextMenu === launcherContextMenu) {
dockRoot.currentContextMenu = null;
dockRoot.hideTimer.stop();
dockRoot.menuHovered = false;
if (dockRoot.autoHide && !dockRoot.dockHovered && !dockRoot.anyAppHovered && !dockRoot.peekHovered && !dockRoot.menuHovered) {
dockRoot.hideTimer.restart();
}
}
}
}
}
}
Loader {
id: launcherButtonStart
active: Settings.data.dock.showLauncherIcon && Settings.data.dock.launcherPosition === "start"
visible: active
sourceComponent: launcherButtonComponent
readonly property real indicatorMargin: Math.max(3, Math.round(dockRoot.iconSize * 0.18))
Layout.preferredWidth: active ? (dockRoot.isVertical ? dockRoot.iconSize + indicatorMargin * 2 : dockRoot.iconSize) : 0
Layout.preferredHeight: active ? (dockRoot.isVertical ? dockRoot.iconSize : dockRoot.iconSize + indicatorMargin * 2) : 0
Layout.minimumWidth: active ? Layout.preferredWidth : 0
Layout.minimumHeight: active ? Layout.preferredHeight : 0
Layout.maximumWidth: active ? Layout.preferredWidth : 0
Layout.maximumHeight: active ? Layout.preferredHeight : 0
Layout.alignment: Qt.AlignCenter
}
Repeater {
model: dockRoot.dockApps
delegate: Item {
id: appButton
readonly property real indicatorMargin: Math.max(3, Math.round(dockRoot.iconSize * 0.18))
Layout.preferredWidth: dockRoot.isVertical ? dockRoot.iconSize + indicatorMargin * 2 : dockRoot.iconSize
Layout.preferredHeight: dockRoot.isVertical ? dockRoot.iconSize : dockRoot.iconSize + indicatorMargin * 2
Layout.alignment: Qt.AlignCenter
property var toplevels: dock.getValidToplevels(modelData)
property bool isActive: ToplevelManager && ToplevelManager.activeToplevel && toplevels.includes(ToplevelManager.activeToplevel)
property bool hovered: appMouseArea.containsMouse
property string appId: modelData ? modelData.appId : ""
property int groupedCount: toplevels.length
property int focusedWindowIndex: {
if (!ToplevelManager || !ToplevelManager.activeToplevel)
return -1;
return toplevels.indexOf(ToplevelManager.activeToplevel);
}
property string groupedIndicatorText: focusedWindowIndex >= 0 ? (focusedWindowIndex + 1) + "/" + groupedCount : groupedCount.toString()
property string appTitle: {
if (!modelData)
return "";
const primaryToplevel = dock.getPrimaryToplevel(modelData);
if (primaryToplevel) {
const toplevelTitle = primaryToplevel.title || "";
// If title is "Loading..." or empty, use desktop entry name
if (!toplevelTitle || toplevelTitle === "Loading..." || toplevelTitle.trim() === "") {
return dockRoot.getAppNameFromDesktopEntry(modelData.appId) || modelData.appId;
}
return toplevelTitle;
}
// For pinned apps that aren't running, use the stored title
return modelData.title || modelData.appId || "";
}
property bool isRunning: toplevels.length > 0
readonly property bool baseIndicatorVisible: Settings.data.dock.inactiveIndicators ? isRunning : isActive
// Grouped indicators should be visible whenever grouped windows are running, even if none is focused.
readonly property bool showGroupedIndicator: Settings.data.dock.groupApps && groupedCount > 1 && isRunning
// Store index for drag-and-drop
property int modelIndex: index
objectName: "dockAppButton"
DropArea {
anchors.fill: parent
keys: ["dock-app"]
onEntered: function (drag) {
if (drag.source && drag.source.objectName === "dockAppButton") {
dockRoot.dragTargetIndex = appButton.modelIndex;
}
}
onExited: function () {
if (dockRoot.dragTargetIndex === appButton.modelIndex) {
dockRoot.dragTargetIndex = -1;
}
}
onDropped: function (drop) {
dockRoot.dragSourceIndex = -1;
dockRoot.dragTargetIndex = -1;
if (drop.source && drop.source.objectName === "dockAppButton" && drop.source !== appButton) {
dockRoot.reorderApps(drop.source.modelIndex, appButton.modelIndex);
}
}
}
// Listen for the toplevel being closed
Connections {
target: modelData?.toplevel
function onClosed() {
Qt.callLater(dockRoot.updateDockApps);
}
}
// Draggable container for the icon
Item {
id: iconContainer
width: dockRoot.iconSize
height: dockRoot.iconSize
// When dragging, remove anchors so MouseArea can position it
anchors.centerIn: dragging ? undefined : parent
property bool dragging: appMouseArea.drag.active
onDraggingChanged: {
if (dragging) {
dockRoot.dragSourceIndex = index;
} else {
// Reset if not handled by drop (e.g. dropped outside)
Qt.callLater(() => {
if (!appMouseArea.drag.active && dockRoot.dragSourceIndex === index) {
dockRoot.dragSourceIndex = -1;
dockRoot.dragTargetIndex = -1;
}
});
}
}
Drag.active: dragging
Drag.source: appButton
Drag.hotSpot.x: width / 2
Drag.hotSpot.y: height / 2
Drag.keys: ["dock-app"]
z: (dockRoot.dragSourceIndex === index) ? 1000 : ((dragging ? 1000 : 0))
scale: dragging ? 1.1 : (appButton.hovered ? 1.15 : 1.0)
Behavior on scale {
NumberAnimation {
duration: Style.animationNormal
easing.type: Easing.OutBack
easing.overshoot: 1.2
}
}
// Visual shifting logic
readonly property bool isDragged: dockRoot.dragSourceIndex === index
property real shiftOffset: 0
Binding on shiftOffset {
value: {
if (dockRoot.dragSourceIndex !== -1 && dockRoot.dragTargetIndex !== -1 && !iconContainer.isDragged) {
if (dockRoot.dragSourceIndex < dockRoot.dragTargetIndex) {
// Dragging Forward: Items between source and target shift Backward
if (index > dockRoot.dragSourceIndex && index <= dockRoot.dragTargetIndex) {
return -1 * (dockRoot.isVertical ? dockRoot.iconSize + Style.marginS : dockRoot.iconSize + Style.marginS);
}
} else if (dockRoot.dragSourceIndex > dockRoot.dragTargetIndex) {
// Dragging Backward: Items between target and source shift Forward
if (index >= dockRoot.dragTargetIndex && index < dockRoot.dragSourceIndex) {
return (dockRoot.isVertical ? dockRoot.iconSize + Style.marginS : dockRoot.iconSize + Style.marginS);
}
}
}
return 0;
}
}
transform: Translate {
x: !dockRoot.isVertical ? iconContainer.shiftOffset : 0
y: dockRoot.isVertical ? iconContainer.shiftOffset : 0
Behavior on x {
NumberAnimation {
duration: Style.animationFast
easing.type: Easing.OutQuad
}
}
Behavior on y {
NumberAnimation {
duration: Style.animationFast
easing.type: Easing.OutQuad
}
}
}
IconImage {
id: appIcon
anchors.fill: parent
source: {
dockRoot.iconRevision; // Force re-evaluation when revision changes
return dock.getAppIcon(modelData);
}
visible: source.toString() !== ""
smooth: true
asynchronous: true
// Dim pinned apps that aren't running
opacity: appButton.isRunning ? 1.0 : Settings.data.dock.deadOpacity
// Apply dock-specific colorization shader only to non-focused apps
layer.enabled: !appButton.isActive && Settings.data.dock.colorizeIcons
layer.effect: ShaderEffect {
property color targetColor: Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mSurfaceVariant
property real colorizeMode: 0.0 // Dock mode (grayscale)
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/appicon_colorize.frag.qsb")
}
Behavior on opacity {
NumberAnimation {
duration: Style.animationFast
easing.type: Easing.OutQuad
}
}
}
// Fall back if no icon
NIcon {
anchors.centerIn: parent
visible: !appIcon.visible
icon: "question-mark"
pointSize: dockRoot.iconSize * 0.7
color: appButton.isActive ? Color.mPrimary : Color.mOnSurfaceVariant
opacity: appButton.isRunning ? 1.0 : 0.6
Behavior on opacity {
NumberAnimation {
duration: Style.animationFast
easing.type: Easing.OutQuad
}
}
}
}
// Context menu popup
DockMenu {
id: contextMenu
dockPosition: dockRoot.dockPosition // Pass dock position for menu placement
onHoveredChanged: {
// Only update menuHovered if this menu is current and visible
if (dockRoot.currentContextMenu === contextMenu && contextMenu.visible) {
dockRoot.menuHovered = hovered;
} else {
dockRoot.menuHovered = false;
}
}
Connections {
target: contextMenu
function onRequestClose() {
// Clear current menu immediately to prevent hover updates
dockRoot.currentContextMenu = null;
dockRoot.hideTimer.stop();
contextMenu.hide();
dockRoot.menuHovered = false;
dockRoot.anyAppHovered = false;
}
}
onAppClosed: dockRoot.updateDockApps // Force immediate dock update when app is closed
onVisibleChanged: {
if (visible) {
dockRoot.currentContextMenu = contextMenu;
} else if (dockRoot.currentContextMenu === contextMenu) {
dockRoot.currentContextMenu = null;
dockRoot.hideTimer.stop();
dockRoot.menuHovered = false;
// Restart hide timer after menu closes
if (dockRoot.autoHide && !dockRoot.dockHovered && !dockRoot.anyAppHovered && !dockRoot.peekHovered && !dockRoot.menuHovered) {
dockRoot.hideTimer.restart();
}
}
}
}
MouseArea {
id: appMouseArea
objectName: "appMouseArea"
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
// Only allow left-click dragging via axis control
drag.target: iconContainer
drag.axis: (pressedButtons & Qt.LeftButton) ? (dockRoot.isVertical ? Drag.YAxis : Drag.XAxis) : Drag.None
onPressed: {
var p1 = appButton.mapFromItem(dockContainer, 0, 0);
var p2 = appButton.mapFromItem(dockContainer, dockContainer.width, dockContainer.height);
drag.minimumX = p1.x;
drag.maximumX = p2.x - iconContainer.width;
drag.minimumY = p1.y;
drag.maximumY = p2.y - iconContainer.height;
}
onReleased: {
if (iconContainer.Drag.active) {
iconContainer.Drag.drop();
}
}
onEntered: {
dockRoot.anyAppHovered = true;
const appName = appButton.appTitle || appButton.appId || "Unknown";
const tooltipText = appName.length > 40 ? appName.substring(0, 37) + "..." : appName;
if (!contextMenu.visible) {
TooltipService.show(appButton, tooltipText, tooltipDirection);
}
if (dockRoot.autoHide) {
dockRoot.showTimer.stop();
dockRoot.hideTimer.stop();
dockRoot.unloadTimer.stop(); // Cancel unload if hovering app
dockRoot.hidden = false; // Make sure dock is visible
}
}
onExited: {
dockRoot.anyAppHovered = false;
TooltipService.hide();
// Clear menuHovered if no current menu or menu not visible
if (!dockRoot.currentContextMenu || !dockRoot.currentContextMenu.visible) {
dockRoot.menuHovered = false;
}
if (dockRoot.autoHide && !dockRoot.dockHovered && !dockRoot.peekHovered && !dockRoot.menuHovered && dockRoot.dragSourceIndex === -1) {
dockRoot.hideTimer.restart();
}
}
onClicked: mouse => {
if (mouse.button === Qt.RightButton) {
const targetScreen = dockRoot.modelData || dockRoot.screen || null;
// If right-clicking on the same app with an open context menu, close it
if (dockRoot.currentContextMenu === contextMenu && contextMenu.visible) {
dockRoot.closeAllContextMenus();
return;
}
// Close any other existing context menu first
dockRoot.closeAllContextMenus();
// Hide tooltip when showing context menu
TooltipService.hideImmediately();
contextMenu.show(appButton, modelData, targetScreen);
return;
}
// Close any existing context menu for non-right-click actions
dockRoot.closeAllContextMenus();
const runningToplevels = dock.getValidToplevels(modelData);
const primaryToplevel = dock.getPrimaryToplevel(modelData);
if (mouse.button === Qt.MiddleButton) {
if (primaryToplevel && primaryToplevel.close) {
primaryToplevel.close();
Qt.callLater(dockRoot.updateDockApps);
}
} else if (mouse.button === Qt.LeftButton) {
if (runningToplevels.length === 0) {
dock.launchAppById(modelData?.appId);
return;
}
if (!Settings.data.dock.groupApps || runningToplevels.length <= 1) {
if (primaryToplevel && primaryToplevel.activate) {
primaryToplevel.activate();
}
return;
}
const clickAction = Settings.data.dock.groupClickAction || "cycle";
if (clickAction === "list") {
const targetScreen = dockRoot.modelData || dockRoot.screen || null;
TooltipService.hideImmediately();
// Left-click list should always open the grouped window list view.
contextMenu.show(appButton, modelData, targetScreen, "list");
} else {
const appKey = modelData?.appId || "";
const state = dockRoot.groupCycleIndices || {};
const nextIndex = (state[appKey] || 0) % runningToplevels.length;
const nextToplevel = runningToplevels[nextIndex];
if (nextToplevel && nextToplevel.activate) {
nextToplevel.activate();
}
state[appKey] = (nextIndex + 1) % runningToplevels.length;
dockRoot.groupCycleIndices = Object.assign({}, state);
}
}
}
}
// Active indicator - positioned at the edge of the delegate area
Rectangle {
visible: baseIndicatorVisible && !showGroupedIndicator
width: dockRoot.isVertical ? indicatorMargin * 0.6 : dockRoot.iconSize * 0.2
height: dockRoot.isVertical ? dockRoot.iconSize * 0.2 : indicatorMargin * 0.6
color: Color.mPrimary
radius: Style.radiusXS
// Anchor to the edge facing the screen center
anchors.bottom: !dockRoot.isVertical && dockRoot.dockPosition === "bottom" ? parent.bottom : undefined
anchors.top: !dockRoot.isVertical && dockRoot.dockPosition === "top" ? parent.top : undefined
anchors.left: dockRoot.isVertical && dockRoot.dockPosition === "left" ? parent.left : undefined
anchors.right: dockRoot.isVertical && dockRoot.dockPosition === "right" ? parent.right : undefined
anchors.horizontalCenter: dockRoot.isVertical ? undefined : parent.horizontalCenter
anchors.verticalCenter: dockRoot.isVertical ? parent.verticalCenter : undefined
// Offset slightly from the edge
anchors.bottomMargin: !dockRoot.isVertical && dockRoot.dockPosition === "bottom" ? 2 : 0
anchors.topMargin: !dockRoot.isVertical && dockRoot.dockPosition === "top" ? 2 : 0
anchors.leftMargin: dockRoot.isVertical && dockRoot.dockPosition === "left" ? 2 : 0
anchors.rightMargin: dockRoot.isVertical && dockRoot.dockPosition === "right" ? 2 : 0
}
Loader {
id: groupedIndicatorLoader
active: showGroupedIndicator
anchors.bottom: !dockRoot.isVertical && dockRoot.dockPosition === "bottom" ? parent.bottom : undefined
anchors.top: !dockRoot.isVertical && dockRoot.dockPosition === "top" ? parent.top : undefined
anchors.left: dockRoot.isVertical && dockRoot.dockPosition === "left" ? parent.left : undefined
anchors.right: dockRoot.isVertical && dockRoot.dockPosition === "right" ? parent.right : undefined
anchors.horizontalCenter: dockRoot.isVertical ? undefined : parent.horizontalCenter
anchors.verticalCenter: dockRoot.isVertical ? parent.verticalCenter : undefined
anchors.bottomMargin: !dockRoot.isVertical && dockRoot.dockPosition === "bottom" ? 1 : 0
anchors.topMargin: !dockRoot.isVertical && dockRoot.dockPosition === "top" ? 1 : 0
anchors.leftMargin: dockRoot.isVertical && dockRoot.dockPosition === "left" ? 1 : 0
anchors.rightMargin: dockRoot.isVertical && dockRoot.dockPosition === "right" ? 1 : 0
sourceComponent: Settings.data.dock.groupIndicatorStyle === "dots" ? groupDotsIndicatorComponent : groupNumberIndicatorComponent
}
Component {
id: groupNumberIndicatorComponent
Rectangle {
radius: Style.radiusS
color: Qt.alpha(Color.mSurface, 0.9)
border.color: Qt.alpha(Color.mOutline, 0.7)
border.width: Style.borderS
width: Math.max(14, numberLabel.implicitWidth + Style.marginXS)
height: Math.max(10, numberLabel.implicitHeight + 2)
NText {
id: numberLabel
anchors.centerIn: parent
text: appButton.groupedIndicatorText
pointSize: Style.fontSizeXS
color: appButton.focusedWindowIndex >= 0 ? Color.mPrimary : Color.mOnSurfaceVariant
}
}
}
Component {
id: groupDotsIndicatorComponent
Item {
readonly property int maxVisibleDots: 5
readonly property int totalCount: Math.max(0, appButton.groupedCount)
readonly property int focusedIndex: appButton.focusedWindowIndex >= 0 ? appButton.focusedWindowIndex : 0
readonly property int visibleCount: Math.min(totalCount, maxVisibleDots)
readonly property int dotSize: Math.max(2, Math.round(dockRoot.iconSize * 0.1))
readonly property int dotSpacing: Math.max(1, Math.round(dotSize * 0.7))
readonly property int pitch: dotSize + dotSpacing
readonly property int windowStart: {
if (totalCount <= maxVisibleDots)
return 0;
const centeredStart = focusedIndex - Math.floor(maxVisibleDots / 2);
const maxStart = totalCount - maxVisibleDots;
return Math.max(0, Math.min(maxStart, centeredStart));
}
readonly property bool hasHiddenLeft: windowStart > 0
readonly property bool hasHiddenRight: (windowStart + visibleCount) < totalCount
width: dockRoot.isVertical ? dotSize : (visibleCount * dotSize + Math.max(0, visibleCount - 1) * dotSpacing)
height: dockRoot.isVertical ? (visibleCount * dotSize + Math.max(0, visibleCount - 1) * dotSpacing) : dotSize
Repeater {
model: parent.visibleCount
delegate: Rectangle {
readonly property int absoluteIndex: parent.windowStart + index
readonly property bool isFocusedDot: appButton.focusedWindowIndex >= 0 && absoluteIndex === appButton.focusedWindowIndex
readonly property bool isOverflowHint: (index === 0 && parent.hasHiddenLeft) || (index === parent.visibleCount - 1 && parent.hasHiddenRight)
width: isOverflowHint && !isFocusedDot ? Math.max(2, Math.round(parent.dotSize * 0.72)) : parent.dotSize
height: width
radius: width / 2
x: dockRoot.isVertical ? Math.round((parent.dotSize - width) / 2) : (index * parent.pitch + Math.round((parent.dotSize - width) / 2))
y: dockRoot.isVertical ? (index * parent.pitch + Math.round((parent.dotSize - width) / 2)) : Math.round((parent.dotSize - width) / 2)
color: isFocusedDot ? Color.mPrimary : Qt.alpha(Color.mOutline, 0.9)
opacity: isOverflowHint && !isFocusedDot ? 0.55 : 1.0
}
}
}
}
}
}
Loader {
id: launcherButtonEnd
active: Settings.data.dock.showLauncherIcon && Settings.data.dock.launcherPosition === "end"
visible: active
sourceComponent: launcherButtonComponent
readonly property real indicatorMargin: Math.max(3, Math.round(dockRoot.iconSize * 0.18))
Layout.preferredWidth: active ? (dockRoot.isVertical ? dockRoot.iconSize + indicatorMargin * 2 : dockRoot.iconSize) : 0
Layout.preferredHeight: active ? (dockRoot.isVertical ? dockRoot.iconSize : dockRoot.iconSize + indicatorMargin * 2) : 0
Layout.minimumWidth: active ? Layout.preferredWidth : 0
Layout.minimumHeight: active ? Layout.preferredHeight : 0
Layout.maximumWidth: active ? Layout.preferredWidth : 0
Layout.maximumHeight: active ? Layout.preferredHeight : 0
Layout.alignment: Qt.AlignCenter
}
}
}
}
}
+490 -105
View File
@@ -5,15 +5,24 @@ import Quickshell
import Quickshell.Wayland
import Quickshell.Widgets
import qs.Commons
import qs.Modules.Panels.Settings
import qs.Services.UI
import qs.Widgets
PopupWindow {
id: root
property var toplevel: null
property var appData: null
property Item anchorItem: null
property ShellScreen targetScreen: null
property bool hovered: menuMouseArea.containsMouse
property string menuMode: "app" // "app" or "launcher"
property string launcherWidgetSection: ""
property int launcherWidgetIndex: -1
property var launcherWidgetSettings: ({})
property bool hovered: menuHoverHandler.hovered
property var onAppClosed: null // Callback function for when an app is closed
property bool canAutoClose: false
@@ -25,9 +34,35 @@ PopupWindow {
signal requestClose
property real menuContentWidth: 160
property real menuMinWidth: 120
property real menuMaxWidth: 360
property real menuMaxHeight: Math.max(180, Math.min(420, Math.round((targetScreen ? targetScreen.height : 600) * 0.3)))
property int separatorCompactHeight: Style.borderS + Style.margin2S
property string forcedGroupMenuMode: ""
readonly property int separatorIndex: {
for (let i = 0; i < root.items.length; i++) {
if (root.items[i] && root.items[i].separator === true)
return i;
}
return -1;
}
readonly property bool splitExtendedLayout: separatorIndex >= 0
readonly property var scrollItems: splitExtendedLayout ? root.items.slice(0, separatorIndex) : root.items
readonly property var fixedItems: splitExtendedLayout ? root.items.slice(separatorIndex + 1) : []
readonly property real menuInnerHeight: Math.max(0, implicitHeight - Style.margin2M)
readonly property real fixedActionsHeight: listHeight(fixedItems)
readonly property real separatorBlockHeight: splitExtendedLayout ? separatorCompactHeight : 0
readonly property real scrollAreaHeight: splitExtendedLayout ? Math.max(0, menuInnerHeight - fixedActionsHeight - separatorBlockHeight) : menuInnerHeight
readonly property bool listOverflowing: menuFlick && menuFlick.contentHeight > menuFlick.height
readonly property real menuBodyHeight: {
if (splitExtendedLayout) {
return listHeight(scrollItems) + separatorBlockHeight + fixedActionsHeight;
}
return listHeight(root.items);
}
implicitWidth: menuContentWidth + (Style.marginXL)
implicitHeight: (root.items.length * 32) + (Style.marginXL)
implicitWidth: menuContentWidth + Style.margin2M
implicitHeight: Math.min(menuBodyHeight + Style.margin2M, menuMaxHeight)
color: "transparent"
visible: false
@@ -49,7 +84,7 @@ PopupWindow {
const item = root.items[i];
if (item && item.text) {
// Calculate width: margins + icon (if present) + spacing + text width
let itemWidth = Style.marginS * 2; // left and right margins
let itemWidth = Style.margin2S; // left and right margins
if (item.icon && item.icon !== "") {
itemWidth += Style.fontSizeL + Style.marginS; // icon + spacing
@@ -66,52 +101,158 @@ PopupWindow {
}
}
}
// Apply a reasonable minimum width (like 120px)
menuContentWidth = Math.max(120, Math.ceil(maxWidth));
// Keep menu readable without allowing extremely wide labels.
menuContentWidth = Math.max(menuMinWidth, Math.min(menuMaxWidth, Math.ceil(maxWidth)));
}
function getCurrentAppId() {
return appData?.appId || toplevel?.appId || "";
}
function getValidToplevels() {
if (!ToplevelManager || !ToplevelManager.toplevels)
return [];
const source = appData?.toplevels && appData.toplevels.length > 0 ? appData.toplevels : (toplevel ? [toplevel] : []);
const allToplevels = ToplevelManager.toplevels.values || [];
return source.filter(window => window && allToplevels.includes(window));
}
function getPrimaryToplevel() {
const windows = getValidToplevels();
if (windows.length === 0)
return null;
if (ToplevelManager && ToplevelManager.activeToplevel && windows.includes(ToplevelManager.activeToplevel))
return ToplevelManager.activeToplevel;
return windows[0];
}
function isItemActionable(index) {
if (index < 0 || index >= root.items.length)
return false;
const item = root.items[index];
return item && typeof item.action === "function";
}
function rowHeightForItem(item) {
return item && item.separator === true ? 16 : 32;
}
function listHeight(items) {
let total = 0;
if (!items)
return total;
for (let i = 0; i < items.length; i++) {
total += rowHeightForItem(items[i]);
}
return total;
}
function initItems() {
// Is this a running app?
const isRunning = root.toplevel && ToplevelManager && ToplevelManager.toplevels.values.includes(root.toplevel);
if (menuMode === "launcher") {
root.items = [
{
"icon": "adjustments",
"text": I18n.tr("actions.dock-settings"),
"action": function () {
handleDockSettings();
}
},
{
"icon": "adjustments",
"text": I18n.tr("actions.launcher-settings"),
"action": function () {
handleLauncherSettings();
}
}
];
calculateMenuWidth();
return;
}
// Is this a pinned app?
const isPinned = root.toplevel && root.isAppPinned(root.toplevel.appId);
const windows = getValidToplevels();
const primaryToplevel = getPrimaryToplevel();
const appId = getCurrentAppId();
const isRunning = windows.length > 0;
const isPinned = isAppPinned(appId);
const grouped = Settings.data.dock.groupApps && windows.length > 1;
const rawGroupMenuMode = forcedGroupMenuMode || Settings.data.dock.groupContextMenuMode || "extended";
const menuModeForGroup = grouped ? ((rawGroupMenuMode === "list" || rawGroupMenuMode === "extended") ? rawGroupMenuMode : "extended") : "single";
var next = [];
if (isRunning) {
// Focus item
if (!grouped || menuModeForGroup === "single") {
if (isRunning) {
next.push({
"icon": "eye",
"text": I18n.tr("common.focus"),
"action": function () {
handleFocus(primaryToplevel);
}
});
}
next.push({
"icon": "eye",
"text": I18n.tr("common.focus"),
"icon": !isPinned ? "pin" : "unpin",
"text": !isPinned ? I18n.tr("common.pin") : I18n.tr("common.unpin"),
"action": function () {
handleFocus();
handlePin(appId);
}
});
if (isRunning) {
next.push({
"icon": "close",
"text": I18n.tr("common.close"),
"action": function () {
handleClose(primaryToplevel);
}
});
}
} else {
windows.forEach((window, index) => {
const windowTitle = (window.title && window.title.trim() !== "") ? window.title : (appId || ("Window " + (index + 1)));
next.push({
"icon": window === ToplevelManager?.activeToplevel ? "circle-filled" : "square-rounded",
"text": windowTitle,
"action": function () {
handleFocus(window);
}
});
});
if (menuModeForGroup === "extended") {
next.push({
"separator": true
});
next.push({
"icon": "eye",
"text": I18n.tr("common.focus"),
"action": function () {
handleFocus(primaryToplevel);
}
});
next.push({
"icon": !isPinned ? "pin" : "unpin",
"text": !isPinned ? I18n.tr("common.pin") : I18n.tr("common.unpin"),
"action": function () {
handlePin(appId);
}
});
next.push({
"icon": "close",
"text": I18n.tr("common.close") + " All",
"action": function () {
handleCloseAll(windows);
}
});
}
}
// Pin/Unpin item
next.push({
"icon": !isPinned ? "pin" : "unpin",
"text": !isPinned ? I18n.tr("common.pin") : I18n.tr("common.unpin"),
"action": function () {
handlePin();
}
});
// Keep grouped list mode as a clean window switcher.
const canAddDesktopActions = !grouped || menuModeForGroup === "extended";
if (isRunning) {
// Close item
next.push({
"icon": "close",
"text": I18n.tr("common.close"),
"action": function () {
handleClose();
}
});
}
// Create a menu entry for each app-specific action definied in its .desktop file
if (typeof DesktopEntries !== 'undefined' && DesktopEntries.byId && root.toplevel?.appId) {
const appId = root.toplevel.appId;
// Create a menu entry for each app-specific action defined in its .desktop file
if (canAddDesktopActions && typeof DesktopEntries !== 'undefined' && DesktopEntries.byId && appId) {
const entry = (DesktopEntries.heuristicLookup) ? DesktopEntries.heuristicLookup(appId) : DesktopEntries.byId(appId);
if (entry != null) {
entry.actions.forEach(function (action) {
@@ -124,6 +265,11 @@ PopupWindow {
} else if (action.execute) {
action.execute();
}
if (Settings.data.dock.dockType === "static") {
const panel = PanelService.getPanel("staticDockPanel", root.screen, false);
if (panel)
panel.close();
}
}
});
});
@@ -243,7 +389,7 @@ PopupWindow {
}
}
function show(item, toplevelData) {
function show(item, toplevelData, screen, groupModeOverride) {
if (!item) {
return;
}
@@ -253,7 +399,19 @@ PopupWindow {
// Then set up new data
anchorItem = item;
toplevel = toplevelData;
if (toplevelData && typeof toplevelData === "object" && (toplevelData.appId !== undefined || toplevelData.toplevels !== undefined)) {
appData = toplevelData;
toplevel = toplevelData.toplevel || null;
} else {
appData = toplevelData ? {
"appId": toplevelData.appId,
"toplevel": toplevelData,
"toplevels": toplevelData ? [toplevelData] : []
} : null;
toplevel = toplevelData;
}
targetScreen = screen || null;
forcedGroupMenuMode = groupModeOverride || "";
initItems();
visible = true;
@@ -261,52 +419,142 @@ PopupWindow {
gracePeriodTimer.restart();
}
function hide() {
visible = false;
root.items.length = 0;
menuContentWidth = 120; // Reset to minimum
}
// Helper function to determine which menu item is under the mouse
function getHoveredItem(mouseY) {
const itemHeight = 32;
const startY = Style.marginM;
const relativeY = mouseY - startY;
const localY = mouseY - startY;
if (relativeY < 0)
if (localY < 0)
return -1;
const itemIndex = Math.floor(relativeY / itemHeight);
return itemIndex >= 0 && itemIndex < root.items.length ? itemIndex : -1;
function findIndexInList(items, relativeY, baseIndex) {
let offset = 0;
for (let i = 0; i < items.length; i++) {
const h = rowHeightForItem(items[i]);
if (relativeY >= offset && relativeY < offset + h)
return baseIndex + i;
offset += h;
}
return -1;
}
if (splitExtendedLayout) {
if (localY < scrollAreaHeight) {
return findIndexInList(scrollItems, localY + (menuFlick ? menuFlick.contentY : 0), 0);
}
if (localY < scrollAreaHeight + separatorBlockHeight) {
return -1;
}
return findIndexInList(fixedItems, localY - scrollAreaHeight - separatorBlockHeight, separatorIndex + 1);
} else {
return findIndexInList(scrollItems, localY + (menuFlick ? menuFlick.contentY : 0), 0);
}
}
function handleFocus() {
if (root.toplevel?.activate) {
root.toplevel.activate();
}
function fixedItemGlobalIndex(localIndex) {
if (!splitExtendedLayout)
return localIndex;
return separatorIndex + 1 + localIndex;
}
function isScrollableHovered(mouseY) {
const localY = mouseY - Style.marginM;
return localY >= 0 && localY < scrollAreaHeight;
}
function onWheelScroll(deltaY) {
if (!menuFlick || menuFlick.contentHeight <= menuFlick.height)
return;
const nextY = menuFlick.contentY - deltaY;
menuFlick.contentY = Math.max(0, Math.min(nextY, menuFlick.contentHeight - menuFlick.height));
}
function resetMenuState() {
root.items.length = 0;
root.appData = null;
root.toplevel = null;
root.forcedGroupMenuMode = "";
menuContentWidth = menuMinWidth;
hoveredItem = -1;
if (menuFlick)
menuFlick.contentY = 0;
}
function hide() {
visible = false;
resetMenuState();
}
function hideWithoutReset() {
visible = false;
}
function closeAndReset() {
hide();
root.requestClose();
}
function handlePin() {
if (root.toplevel?.appId) {
root.toggleAppPin(root.toplevel.appId);
function handleFocus(targetToplevel) {
if (targetToplevel?.activate) {
targetToplevel.activate();
}
root.requestClose();
closeAndReset();
}
function handleClose() {
// Check if toplevel is still valid before trying to close it
const isValidToplevel = root.toplevel && ToplevelManager && ToplevelManager.toplevels.values.includes(root.toplevel);
function handlePin(appId) {
if (appId) {
root.toggleAppPin(appId);
}
closeAndReset();
}
if (isValidToplevel && root.toplevel.close) {
root.toplevel.close();
// Trigger immediate dock update callback if provided
function handleClose(targetToplevel) {
const isValidToplevel = targetToplevel && ToplevelManager && ToplevelManager.toplevels.values.includes(targetToplevel);
if (isValidToplevel && targetToplevel.close) {
targetToplevel.close();
if (root.onAppClosed && typeof root.onAppClosed === "function") {
Qt.callLater(root.onAppClosed);
}
}
root.hide();
root.requestClose();
closeAndReset();
}
function handleCloseAll(windows) {
windows.forEach(window => {
if (window && ToplevelManager && ToplevelManager.toplevels.values.includes(window) && window.close) {
window.close();
}
});
if (root.onAppClosed && typeof root.onAppClosed === "function") {
Qt.callLater(root.onAppClosed);
}
closeAndReset();
}
function handleLauncherSettings() {
if (targetScreen) {
var panel = PanelService.getPanel("settingsPanel", targetScreen);
panel.requestedTab = SettingsPanel.Tab.Launcher;
panel.toggle();
}
closeAndReset();
}
function handleDockSettings() {
if (targetScreen) {
var panel = PanelService.getPanel("settingsPanel", targetScreen);
panel.requestedTab = SettingsPanel.Tab.Dock;
panel.toggle();
}
closeAndReset();
}
function handleLauncherWidgetSettings() {
if (targetScreen && launcherWidgetSection && launcherWidgetIndex >= 0) {
BarService.openWidgetSettings(targetScreen, launcherWidgetSection, launcherWidgetIndex, "Launcher", launcherWidgetSettings || {});
}
closeAndReset();
}
// Short delay to ignore spurious events
@@ -316,7 +564,7 @@ PopupWindow {
repeat: false
onTriggered: {
root.canAutoClose = true;
if (!menuMouseArea.containsMouse) {
if (!menuHoverHandler.hovered) {
closeTimer.start();
}
}
@@ -328,7 +576,7 @@ PopupWindow {
repeat: false
running: false
onTriggered: {
root.hide();
root.hideWithoutReset();
}
}
@@ -339,56 +587,167 @@ PopupWindow {
border.color: Color.mOutline
border.width: Style.borderS
// Single MouseArea to handle both auto-close and menu interactions
MouseArea {
id: menuMouseArea
anchors.fill: parent
hoverEnabled: true
cursorShape: root.hoveredItem >= 0 ? Qt.PointingHandCursor : Qt.ArrowCursor
onEntered: {
closeTimer.stop();
}
onExited: {
root.hoveredItem = -1;
if (root.canAutoClose) {
// Only close if grace period has passed
closeTimer.start();
HoverHandler {
id: menuHoverHandler
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
onHoveredChanged: {
if (hovered) {
closeTimer.stop();
} else {
root.hoveredItem = -1;
if (root.canAutoClose) {
closeTimer.start();
}
}
}
onPositionChanged: mouse => {
root.hoveredItem = root.getHoveredItem(mouse.y);
}
onClicked: mouse => {
const clickedItem = root.getHoveredItem(mouse.y);
if (clickedItem >= 0) {
root.items[clickedItem].action.call();
}
}
}
ColumnLayout {
id: contextMenuColumn
WheelHandler {
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
onWheel: event => {
if (!root.isScrollableHovered(event.y))
return;
const delta = event.pixelDelta.y !== 0 ? event.pixelDelta.y : event.angleDelta.y / 2;
root.onWheelScroll(delta);
event.accepted = true;
}
}
Flickable {
id: menuFlick
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.margins: Style.marginM
anchors.leftMargin: Style.marginM
anchors.rightMargin: Style.marginM
anchors.topMargin: Style.marginM
height: root.scrollAreaHeight
clip: true
contentWidth: width
contentHeight: scrollColumn.height
flickableDirection: Flickable.VerticalFlick
boundsBehavior: Flickable.StopAtBounds
interactive: contentHeight > height
ScrollBar.vertical: ScrollBar {
id: menuScrollBar
policy: ScrollBar.AsNeeded
visible: root.listOverflowing
interactive: true
hoverEnabled: true
}
Column {
id: scrollColumn
width: menuFlick.width
spacing: 0
Repeater {
model: root.scrollItems
Rectangle {
readonly property bool isSeparator: modelData && modelData.separator === true
width: scrollColumn.width
height: root.rowHeightForItem(modelData)
color: (!isSeparator && root.hoveredItem === index) ? Color.mHover : "transparent"
radius: Style.radiusXS
Row {
id: rowLayout
anchors.left: parent.left
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: Style.marginS
anchors.rightMargin: Style.marginS
spacing: Style.marginS
visible: !isSeparator
NIcon {
icon: modelData.icon
pointSize: Style.fontSizeL
color: root.hoveredItem === index ? Color.mOnHover : Color.mOnSurfaceVariant
visible: icon !== ""
anchors.verticalCenter: parent.verticalCenter
}
NText {
text: modelData.text
pointSize: Style.fontSizeS
color: root.hoveredItem === index ? Color.mOnHover : Color.mOnSurfaceVariant
anchors.verticalCenter: parent.verticalCenter
width: rowLayout.width - ((modelData.icon && modelData.icon !== "") ? (Style.fontSizeL + Style.marginS) : 0)
elide: Text.ElideRight
}
}
MouseArea {
anchors.fill: parent
enabled: !parent.isSeparator && root.isItemActionable(index)
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
acceptedButtons: Qt.LeftButton
onEntered: {
root.hoveredItem = index;
}
onExited: {
if (root.hoveredItem === index) {
root.hoveredItem = -1;
}
}
onClicked: {
if (root.isItemActionable(index)) {
root.items[index].action.call();
}
}
}
}
}
}
}
Rectangle {
id: separator
visible: root.splitExtendedLayout
anchors.left: parent.left
anchors.right: parent.right
anchors.top: menuFlick.bottom
anchors.leftMargin: Style.marginS
anchors.rightMargin: Style.marginS
anchors.topMargin: Style.marginS
height: Style.borderS
color: Qt.alpha(Color.mOutline, 0.7)
radius: Style.radiusXS
}
Column {
id: fixedColumn
visible: root.splitExtendedLayout && root.fixedItems.length > 0
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.leftMargin: Style.marginM
anchors.rightMargin: Style.marginM
anchors.topMargin: Style.marginS
anchors.bottomMargin: Style.marginM
anchors.top: separator.bottom
spacing: 0
Repeater {
model: root.items
model: root.fixedItems
Rectangle {
Layout.fillWidth: true
height: 32
color: root.hoveredItem === index ? Color.mHover : "transparent"
id: fixedItemRect
readonly property int globalIndex: root.fixedItemGlobalIndex(index)
width: fixedColumn.width
height: root.rowHeightForItem(modelData)
color: root.hoveredItem === globalIndex ? Color.mHover : "transparent"
radius: Style.radiusXS
Row {
id: rowLayout
id: fixedRowLayout
anchors.left: parent.left
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
@@ -399,7 +758,7 @@ PopupWindow {
NIcon {
icon: modelData.icon
pointSize: Style.fontSizeL
color: root.hoveredItem === index ? Color.mOnHover : Color.mOnSurfaceVariant
color: root.hoveredItem === fixedItemRect.globalIndex ? Color.mOnHover : Color.mOnSurfaceVariant
visible: icon !== ""
anchors.verticalCenter: parent.verticalCenter
}
@@ -407,8 +766,34 @@ PopupWindow {
NText {
text: modelData.text
pointSize: Style.fontSizeS
color: root.hoveredItem === index ? Color.mOnHover : Color.mOnSurfaceVariant
color: root.hoveredItem === fixedItemRect.globalIndex ? Color.mOnHover : Color.mOnSurfaceVariant
anchors.verticalCenter: parent.verticalCenter
width: fixedRowLayout.width - ((modelData.icon && modelData.icon !== "") ? (Style.fontSizeL + Style.marginS) : 0)
elide: Text.ElideRight
}
}
MouseArea {
anchors.fill: parent
enabled: root.isItemActionable(parent.globalIndex)
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
acceptedButtons: Qt.LeftButton
onEntered: {
root.hoveredItem = parent.globalIndex;
}
onExited: {
if (root.hoveredItem === parent.globalIndex) {
root.hoveredItem = -1;
}
}
onClicked: {
if (root.isItemActionable(parent.globalIndex)) {
root.items[parent.globalIndex].action.call();
}
}
}
}
+65 -7
View File
@@ -4,7 +4,6 @@ import QtQuick.Layouts
import Quickshell
import Quickshell.Services.Pam
import Quickshell.Wayland
import "../../Helpers/Keybinds.js" as Keybinds
import qs.Commons
import qs.Services.Compositor
import qs.Services.Hardware
@@ -26,6 +25,12 @@ Loader {
} else {
CavaService.unregisterComponent("lockscreen");
}
if (root.active) {
LockKeysService.registerComponent("lockscreen");
} else {
LockKeysService.unregisterComponent("lockscreen");
}
}
onNeedsCavaChanged: {
@@ -41,6 +46,11 @@ Loader {
PanelService.lockScreen = this;
}
Component.onDestruction: {
CavaService.unregisterComponent("lockscreen");
LockKeysService.unregisterComponent("lockscreen");
}
Timer {
id: unloadAfterUnlockTimer
interval: 250
@@ -78,7 +88,7 @@ Loader {
Loader {
anchors.fill: parent
active: true
sourceComponent: (Settings.data.general.lockScreenMonitors.length === 0 || Settings.data.general.lockScreenMonitors.includes(lockSurface.screen.name)) ? fullLockScreenComponent : blackScreenComponent
sourceComponent: (Settings.data.general.lockScreenMonitors.length === 0 || (lockSurface.screen && Settings.data.general.lockScreenMonitors.includes(lockSurface.screen.name))) ? fullLockScreenComponent : blackScreenComponent
}
Component {
@@ -270,13 +280,21 @@ Loader {
height: 0
visible: false
enabled: !lockContext.unlockInProgress
font.pointSize: Style.fontSizeM
color: Color.mPrimary
echoMode: TextInput.Password
passwordCharacter: "•"
passwordMaskDelay: 0
text: lockContext.currentText
onTextChanged: lockContext.currentText = text
// Bidirectional sync avoids a declarative binding which breaks on input
onTextChanged: {
if (lockContext.currentText !== text)
lockContext.currentText = text;
}
Connections {
target: lockContext
function onCurrentTextChanged() {
if (passwordInput.text !== lockContext.currentText)
passwordInput.text = lockContext.currentText;
}
}
Keys.onPressed: function (event) {
if (Keybinds.checkKey(event, 'enter', Settings)) {
@@ -307,9 +325,49 @@ Loader {
Component {
id: blackScreenComponent
// Black surface for disabled monitors still captures keyboard for password entry
Rectangle {
anchors.fill: parent
color: "black"
TextInput {
id: blackScreenPasswordInput
width: 0
height: 0
visible: false
enabled: !lockContext.unlockInProgress
echoMode: TextInput.Password
passwordMaskDelay: 0
// Bidirectional sync avoids a declarative binding which breaks on input
onTextChanged: {
if (lockContext.currentText !== text)
lockContext.currentText = text;
}
Connections {
target: lockContext
function onCurrentTextChanged() {
if (blackScreenPasswordInput.text !== lockContext.currentText)
blackScreenPasswordInput.text = lockContext.currentText;
}
}
Keys.onPressed: function (event) {
if (Keybinds.checkKey(event, 'enter', Settings)) {
lockContext.tryUnlock();
event.accepted = true;
}
}
Component.onCompleted: forceActiveFocus()
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.NoButton
onPositionChanged: blackScreenPasswordInput.forceActiveFocus()
}
}
}
}
+1 -1
View File
@@ -44,7 +44,7 @@ Rectangle {
id: contentRow
anchors.fill: parent
anchors.margins: Style.marginL
spacing: Style.marginXL * 2
spacing: Style.margin2XL
// Left side: Avatar
Rectangle {
+89 -14
View File
@@ -115,10 +115,22 @@ Item {
width: {
var hasBattery = batteryIndicator.isReady;
var hasKeyboard = keyboardLayout.currentLayout !== "Unknown";
var hasCaps = LockKeysService.capsLockOn;
var hasCapsSlot = hasBattery || hasKeyboard || hasCaps;
if (hasBattery && hasKeyboard) {
var visibleCount = 0;
if (hasBattery)
visibleCount++;
if (hasKeyboard)
visibleCount++;
if (hasCapsSlot)
visibleCount++;
if (visibleCount >= 3) {
return 280;
} else if (visibleCount === 2) {
return 200;
} else if (hasBattery || hasKeyboard) {
} else if (visibleCount === 1) {
return 120;
} else {
return 0;
@@ -131,9 +143,10 @@ Item {
topLeftRadius: Style.radiusL
topRightRadius: Style.radiusL
color: Color.mSurface
visible: Settings.data.general.compactLockScreen && ((batteryIndicator.isReady) || keyboardLayout.currentLayout !== "Unknown")
visible: Settings.data.general.compactLockScreen && (batteryIndicator.isReady || keyboardLayout.currentLayout !== "Unknown" || LockKeysService.capsLockOn)
RowLayout {
id: compactStatusRow
anchors.centerIn: parent
spacing: Style.marginL
@@ -173,6 +186,25 @@ Item {
elide: Text.ElideRight
}
}
// Caps Lock indicator
RowLayout {
spacing: 6
visible: batteryIndicator.isReady || keyboardLayout.currentLayout !== "Unknown" || LockKeysService.capsLockOn
NIcon {
icon: "letter-c"
pointSize: Style.fontSizeM
color: LockKeysService.capsLockOn ? Color.mPrimary : Qt.alpha(Color.mOnSurfaceVariant, 0.5)
}
NText {
text: I18n.tr("bar.lock-keys.show-caps-lock-label")
color: LockKeysService.capsLockOn ? Color.mOnSurfaceVariant : Qt.alpha(Color.mOnSurfaceVariant, 0.65)
pointSize: Style.fontSizeM
elide: Text.ElideRight
}
}
}
}
@@ -196,7 +228,7 @@ Item {
radius: Style.radiusL
color: Color.mSurface
width: Settings.data.general.showHibernateOnLockScreen ? 800 : 750
width: Settings.data.general.showHibernateOnLockScreen ? 860 : 810
ColumnLayout {
anchors.fill: parent
@@ -460,7 +492,7 @@ Item {
ColumnLayout {
Layout.alignment: (batteryIndicator.isReady) ? (Qt.AlignRight | Qt.AlignVCenter) : Qt.AlignVCenter
spacing: Style.marginM
visible: (batteryIndicator.isReady) || keyboardLayout.currentLayout !== "Unknown"
visible: batteryIndicator.isReady || keyboardLayout.currentLayout !== "Unknown" || LockKeysService.capsLockOn
// Battery
RowLayout {
@@ -498,6 +530,25 @@ Item {
elide: Text.ElideRight
}
}
// Caps Lock
RowLayout {
spacing: Style.marginXS
visible: batteryIndicator.isReady || keyboardLayout.currentLayout !== "Unknown" || LockKeysService.capsLockOn
NIcon {
icon: "letter-c"
pointSize: Style.fontSizeM
color: LockKeysService.capsLockOn ? Color.mPrimary : Qt.alpha(Color.mOnSurfaceVariant, 0.5)
}
NText {
text: I18n.tr("bar.lock-keys.show-caps-lock-label")
color: LockKeysService.capsLockOn ? Color.mOnSurfaceVariant : Qt.alpha(Color.mOnSurfaceVariant, 0.65)
pointSize: Style.fontSizeM
elide: Text.ElideRight
}
}
}
Item {
@@ -581,17 +632,46 @@ Item {
Row {
id: passwordDisplayContent
spacing: Style.marginS
spacing: Style.marginXXXS
anchors.verticalCenter: parent.verticalCenter
Repeater {
model: passwordInput.text.length
id: iconRepeater
model: ScriptModel {
values: Array(passwordInput.text.length)
}
property list<string> passwordChars: ["circle-filled", "pentagon-filled", "michelin-star-filled", "square-rounded-filled", "guitar-pick-filled", "blob-filled", "triangle-filled"]
NIcon {
icon: "circle-filled"
pointSize: Style.fontSizeS
id: icon
required property int index
// This will be called with index = -1 when the TextInput is deleted
// So we make sur index is positive to avoid warning on array accesses
property bool drawCustomChar: index >= 0 && Settings.data.general.passwordChars
icon: drawCustomChar ? iconRepeater.passwordChars[index % iconRepeater.passwordChars.length] : "circle-filled"
pointSize: Style.fontSizeL
color: Color.mPrimary
opacity: 1.0
scale: animationsEnabled ? 0.5 : 1
ParallelAnimation {
id: iconAnim
NumberAnimation {
target: icon
properties: "scale"
to: 1
duration: Style.animationFast
easing.type: Easing.BezierSpline
easing.bezierCurve: Easing.OutInBounce
}
}
Component.onCompleted: {
if (animationsEnabled) {
iconAnim.start();
}
}
}
}
}
@@ -763,7 +843,6 @@ Item {
outlined: true
backgroundColor: Color.mOnSurfaceVariant
textColor: Color.mOnPrimary
hoverColor: Color.mPrimary
fontSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM
iconSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL
horizontalAlignment: Qt.AlignHCenter
@@ -783,7 +862,6 @@ Item {
outlined: true
backgroundColor: Color.mOnSurfaceVariant
textColor: Color.mOnPrimary
hoverColor: Color.mPrimary
fontSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM
iconSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL
horizontalAlignment: Qt.AlignHCenter
@@ -804,7 +882,6 @@ Item {
outlined: true
backgroundColor: Color.mOnSurfaceVariant
textColor: Color.mOnPrimary
hoverColor: Color.mPrimary
fontSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM
iconSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL
horizontalAlignment: Qt.AlignHCenter
@@ -824,7 +901,6 @@ Item {
outlined: true
backgroundColor: Color.mOnSurfaceVariant
textColor: Color.mOnPrimary
hoverColor: Color.mPrimary
fontSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM
iconSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL
horizontalAlignment: Qt.AlignHCenter
@@ -844,7 +920,6 @@ Item {
outlined: true
backgroundColor: Color.mError
textColor: Color.mOnError
hoverColor: Color.mError
fontSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM
iconSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL
horizontalAlignment: Qt.AlignHCenter
+1 -1
View File
@@ -85,7 +85,7 @@ Variants {
return false;
if (!BarService.effectivelyVisible)
return false;
if (Settings.data.bar.displayMode !== "auto_hide")
if (Settings.getBarDisplayModeForScreen(modelData?.name) !== "auto_hide")
return false;
// Check if bar is configured for this screen
+1 -1
View File
@@ -43,7 +43,7 @@ PanelWindow {
readonly property real barHeight: Style.getBarHeightForScreen(barWindow.screen?.name)
// Auto-hide properties
readonly property bool autoHide: Settings.data.bar.displayMode === "auto_hide"
readonly property bool autoHide: Settings.getBarDisplayModeForScreen(barWindow.screen?.name) === "auto_hide"
readonly property int hideDelay: Settings.data.bar.autoHideDelay || 500
readonly property int showDelay: Settings.data.bar.autoShowDelay || 100
property bool isHidden: autoHide
+2 -2
View File
@@ -18,8 +18,8 @@ PanelWindow {
property string edge: Settings.getBarPositionForScreen(screen?.name)
property real thickness: (edge === Settings.getBarPositionForScreen(screen?.name)) ? Style.getBarHeightForScreen(screen?.name) : (Settings.data.bar.frameThickness ?? 12)
readonly property bool autoHide: Settings.data.bar.displayMode === "auto_hide"
readonly property bool nonExclusive: Settings.data.bar.displayMode === "non_exclusive"
readonly property bool autoHide: Settings.getBarDisplayModeForScreen(screen?.name) === "auto_hide"
readonly property bool nonExclusive: Settings.getBarDisplayModeForScreen(screen?.name) === "non_exclusive"
readonly property bool barFloating: Settings.data.bar.floating || false
readonly property real barMarginH: (barFloating && edge === Settings.getBarPositionForScreen(screen?.name)) ? Math.ceil(Settings.data.bar.marginHorizontal) : 0
readonly property real barMarginV: (barFloating && edge === Settings.getBarPositionForScreen(screen?.name)) ? Math.ceil(Settings.data.bar.marginVertical) : 0
+8 -1
View File
@@ -17,6 +17,7 @@ import qs.Modules.Panels.Brightness
import qs.Modules.Panels.Changelog
import qs.Modules.Panels.Clock
import qs.Modules.Panels.ControlCenter
import qs.Modules.Panels.Dock
import qs.Modules.Panels.Launcher
import qs.Modules.Panels.Media
import qs.Modules.Panels.Network
@@ -337,6 +338,12 @@ PanelWindow {
screen: root.screen
}
StaticDockPanel {
id: staticDockPanel
objectName: "staticDockPanel-" + (root.screen?.name || "unknown")
screen: root.screen
}
// ----------------------------------------------
// Plugin panel slots
// ----------------------------------------------
@@ -376,7 +383,7 @@ PanelWindow {
readonly property real barHeight: Style.getBarHeightForScreen(screen?.name)
// Auto-hide properties (read by AllBackgrounds for background fade)
readonly property bool autoHide: Settings.data.bar.displayMode === "auto_hide"
readonly property bool autoHide: Settings.getBarDisplayModeForScreen(screen?.name) === "auto_hide"
property bool isHidden: autoHide
Connections {
+20 -8
View File
@@ -93,12 +93,13 @@ Item {
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
readonly property bool barIsVertical: barPosition === "left" || barPosition === "right"
readonly property real barHeight: Style.getBarHeightForScreen(screen?.name)
readonly property bool isFramed: Settings.data.bar.barType === "framed"
readonly property real barHeight: barShouldShow ? Style.getBarHeightForScreen(screen?.name) : 0
readonly property bool hasBar: modelData && modelData.name ? (Settings.data.bar.monitors.includes(modelData.name) || (Settings.data.bar.monitors.length === 0)) : false
readonly property bool isFramed: Settings.data.bar.barType === "framed" && hasBar
readonly property real frameThickness: Settings.data.bar.frameThickness ?? 12
readonly property bool barFloating: Settings.data.bar.floating
readonly property real barMarginH: barFloating ? Math.ceil(Settings.data.bar.marginHorizontal) : 0
readonly property real barMarginV: barFloating ? Math.ceil(Settings.data.bar.marginVertical) : 0
readonly property real barMarginH: (barFloating && barShouldShow) ? Math.ceil(Settings.data.bar.marginHorizontal) : 0
readonly property real barMarginV: (barFloating && barShouldShow) ? Math.ceil(Settings.data.bar.marginVertical) : 0
readonly property real attachmentOverlap: 1 // Panel extends into bar area to fix hairline gap with fractional scaling
// Check if bar should be visible on this screen
@@ -154,9 +155,21 @@ Item {
function open(buttonItem, buttonName) {
// Reset immediate close flag to ensure animations work properly
PanelService.closedImmediately = false;
// Reset to default - fixes panel being stuck in one position
root.useButtonPosition = false;
if (!buttonItem && buttonName) {
buttonItem = BarService.lookupWidget(buttonName, screen.name);
// Check if buttonName is actually a point object (click coordinates)
if (typeof buttonName === "object" && buttonName.x !== undefined && buttonName.y !== undefined) {
root.buttonItem = null;
root.buttonPosition = buttonName;
root.buttonWidth = 0;
root.buttonHeight = 0;
root.useButtonPosition = true;
} else {
// buttonName is a widget name, look it up
buttonItem = BarService.lookupWidget(buttonName, screen.name);
}
}
// Validate buttonItem is a valid QML Item with mapToItem function
@@ -200,10 +213,9 @@ Item {
root.buttonItem = null;
root.useButtonPosition = false;
}
} else {
// No valid button provided: reset button position mode
} else if (!root.useButtonPosition) {
// No valid button provided and no click position: reset button position mode
root.buttonItem = null;
root.useButtonPosition = false;
}
// Set isPanelOpen to trigger content loading, but don't show yet
+367 -362
View File
@@ -198,14 +198,14 @@ Variants {
property string notificationId: model.id
property var notificationData: model
property int hoverCount: 0
property bool isHovered: false
property bool isRemoving: false
readonly property int animationDelay: index * 100
readonly property int slideDistance: 300
Layout.preferredWidth: notifWidth + notifWindow.shadowPadding * 2
Layout.preferredHeight: (notifWindow.isCompact ? compactContent.implicitHeight : notificationContent.implicitHeight) + Style.marginXL + notifWindow.shadowPadding * 2
Layout.preferredHeight: (notifWindow.isCompact ? compactContent.implicitHeight : notificationContent.implicitHeight) + Style.margin2M + notifWindow.shadowPadding * 2
Layout.maximumHeight: Layout.preferredHeight
// Animation properties
@@ -249,177 +249,13 @@ Variants {
return deltaY;
}
// Background with border
Rectangle {
id: cardBackground
anchors.fill: parent
anchors.margins: notifWindow.shadowPadding
radius: Style.radiusL
border.color: Qt.alpha(Color.mOutline, Settings.data.notifications.backgroundOpacity || 1.0)
border.width: Style.borderS
color: Qt.alpha(Color.mSurface, Settings.data.notifications.backgroundOpacity || 1.0)
// Progress bar
Rectangle {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
height: 2
color: "transparent"
Rectangle {
id: progressBar
readonly property real progressWidth: cardBackground.width - (2 * cardBackground.radius)
height: parent.height
x: cardBackground.radius + (progressWidth * (1 - model.progress)) / 2
width: progressWidth * model.progress
color: {
var baseColor = model.urgency === 2 ? Color.mError : model.urgency === 0 ? Color.mOnSurface : Color.mPrimary;
return Qt.alpha(baseColor, Settings.data.notifications.backgroundOpacity || 1.0);
}
antialiasing: true
Behavior on width {
enabled: !card.isRemoving
NumberAnimation {
duration: 100
easing.type: Easing.Linear
}
}
Behavior on x {
enabled: !card.isRemoving
NumberAnimation {
duration: 100
easing.type: Easing.Linear
}
}
}
}
}
NDropShadow {
anchors.fill: cardBackground
source: cardBackground
autoPaddingEnabled: true
}
// Hover handling
onHoverCountChanged: {
if (hoverCount > 0) {
resumeTimer.stop();
NotificationService.pauseTimeout(notificationId);
} else {
resumeTimer.start();
}
}
Timer {
id: resumeTimer
interval: 50
repeat: false
onTriggered: {
if (hoverCount === 0) {
NotificationService.resumeTimeout(notificationId);
}
}
}
// Right-click to dismiss
MouseArea {
id: cardDragArea
anchors.fill: cardBackground
acceptedButtons: Qt.LeftButton | Qt.RightButton
hoverEnabled: true
onEntered: card.hoverCount++
onExited: card.hoverCount--
onPressed: mouse => {
if (mouse.button === Qt.LeftButton) {
const globalPoint = cardDragArea.mapToGlobal(mouse.x, mouse.y);
card.pressGlobalX = globalPoint.x;
card.pressGlobalY = globalPoint.y;
card.isSwiping = false;
card.suppressClick = false;
}
}
onPositionChanged: mouse => {
if (!(mouse.buttons & Qt.LeftButton) || card.isRemoving)
return;
const globalPoint = cardDragArea.mapToGlobal(mouse.x, mouse.y);
const rawDeltaX = globalPoint.x - card.pressGlobalX;
const rawDeltaY = globalPoint.y - card.pressGlobalY;
const deltaX = card.clampSwipeDelta(rawDeltaX);
const deltaY = card.clampVerticalSwipeDelta(rawDeltaY);
if (!card.isSwiping) {
if (card.useVerticalSwipe) {
if (Math.abs(deltaY) < card.swipeStartThreshold)
return;
card.isSwiping = true;
} else {
if (Math.abs(deltaX) < card.swipeStartThreshold)
return;
card.isSwiping = true;
}
}
if (card.useVerticalSwipe) {
card.swipeOffset = 0;
card.swipeOffsetY = deltaY;
} else {
card.swipeOffset = deltaX;
card.swipeOffsetY = 0;
}
}
onReleased: mouse => {
if (mouse.button === Qt.RightButton) {
card.animateOut();
return;
}
if (mouse.button !== Qt.LeftButton)
return;
if (card.isSwiping) {
const dismissDistance = card.useVerticalSwipe ? Math.abs(card.swipeOffsetY) : Math.abs(card.swipeOffset);
const threshold = card.useVerticalSwipe ? card.verticalSwipeDismissThreshold : card.swipeDismissThreshold;
if (dismissDistance >= threshold) {
card.dismissBySwipe();
} else {
card.swipeOffset = 0;
card.swipeOffsetY = 0;
}
card.suppressClick = true;
card.isSwiping = false;
return;
}
if (card.suppressClick)
return;
var actions = model.actionsJson ? JSON.parse(model.actionsJson) : [];
var hasDefault = actions.some(function (a) {
return a.identifier === "default";
});
if (hasDefault) {
card.animateOut();
deferredActionTimer.actionId = "default";
deferredActionTimer.start();
}
}
onCanceled: {
card.isSwiping = false;
card.swipeOffset = 0;
card.swipeOffsetY = 0;
}
}
// Animation setup
function triggerEntryAnimation() {
animInDelayTimer.stop();
removalTimer.stop();
resumeTimer.stop();
isRemoving = false;
hoverCount = 0;
isHovered = false;
isSwiping = false;
swipeOffset = 0;
swipeOffsetY = 0;
@@ -493,6 +329,16 @@ Variants {
}
}
function runAction(actionId, isDismissed) {
if (!isDismissed) {
NotificationService.focusSenderWindow(model.appName);
NotificationService.invokeActionAndSuppressClose(notificationId, actionId);
} else if (Settings.data.notifications.clearDismissed) {
NotificationService.removeFromHistory(notificationId);
}
card.animateOut();
}
Timer {
id: removalTimer
interval: Style.animationSlow
@@ -502,20 +348,6 @@ Variants {
}
}
Timer {
id: deferredActionTimer
interval: 50
property string actionId: ""
property bool isHistoryRemoval: false
onTriggered: {
if (isHistoryRemoval) {
NotificationService.removeFromHistory(notificationId);
} else {
NotificationService.invokeAction(notificationId, actionId);
}
}
}
onIsRemovingChanged: {
if (isRemoving) {
removalTimer.start();
@@ -566,214 +398,387 @@ Variants {
}
}
// Content
ColumnLayout {
id: notificationContent
visible: !notifWindow.isCompact
anchors.fill: cardBackground
anchors.margins: Style.marginM
spacing: Style.marginM
// Sub item with the right dimensions, really usefull for the
// HoverHandler: card items are overlapping because of the
// negative spacing of notificationStack.
Item {
id: displayedCard
anchors.fill: parent
anchors.margins: notifWindow.shadowPadding
HoverHandler {
onHoveredChanged: {
isHovered = hovered;
if (isHovered) {
resumeTimer.stop();
NotificationService.pauseTimeout(notificationId);
} else {
resumeTimer.start();
}
}
}
Timer {
id: resumeTimer
interval: 50
repeat: false
onTriggered: {
if (!isHovered) {
NotificationService.resumeTimeout(notificationId);
}
}
}
// Right-click to dismiss
MouseArea {
id: cardDragArea
anchors.fill: cardBackground
acceptedButtons: Qt.LeftButton | Qt.RightButton
hoverEnabled: true
onPressed: mouse => {
if (mouse.button === Qt.LeftButton) {
const globalPoint = cardDragArea.mapToGlobal(mouse.x, mouse.y);
card.pressGlobalX = globalPoint.x;
card.pressGlobalY = globalPoint.y;
card.isSwiping = false;
card.suppressClick = false;
}
}
onPositionChanged: mouse => {
if (!(mouse.buttons & Qt.LeftButton) || card.isRemoving)
return;
const globalPoint = cardDragArea.mapToGlobal(mouse.x, mouse.y);
const rawDeltaX = globalPoint.x - card.pressGlobalX;
const rawDeltaY = globalPoint.y - card.pressGlobalY;
const deltaX = card.clampSwipeDelta(rawDeltaX);
const deltaY = card.clampVerticalSwipeDelta(rawDeltaY);
if (!card.isSwiping) {
if (card.useVerticalSwipe) {
if (Math.abs(deltaY) < card.swipeStartThreshold)
return;
card.isSwiping = true;
} else {
if (Math.abs(deltaX) < card.swipeStartThreshold)
return;
card.isSwiping = true;
}
}
if (card.useVerticalSwipe) {
card.swipeOffset = 0;
card.swipeOffsetY = deltaY;
} else {
card.swipeOffset = deltaX;
card.swipeOffsetY = 0;
}
}
onReleased: mouse => {
if (mouse.button === Qt.RightButton) {
card.animateOut();
if (Settings.data.notifications.clearDismissed) {
NotificationService.removeFromHistory(notificationId);
}
return;
}
if (mouse.button !== Qt.LeftButton)
return;
if (card.isSwiping) {
const dismissDistance = card.useVerticalSwipe ? Math.abs(card.swipeOffsetY) : Math.abs(card.swipeOffset);
const threshold = card.useVerticalSwipe ? card.verticalSwipeDismissThreshold : card.swipeDismissThreshold;
if (dismissDistance >= threshold) {
card.dismissBySwipe();
if (Settings.data.notifications.clearDismissed) {
NotificationService.removeFromHistory(notificationId);
}
} else {
card.swipeOffset = 0;
card.swipeOffsetY = 0;
}
card.suppressClick = true;
card.isSwiping = false;
return;
}
if (card.suppressClick)
return;
var actions = model.actionsJson ? JSON.parse(model.actionsJson) : [];
var hasDefault = actions.some(function (a) {
return a.identifier === "default";
});
if (hasDefault) {
card.runAction("default", false);
} else {
NotificationService.focusSenderWindow(model.appName);
card.animateOut();
}
}
onCanceled: {
card.isSwiping = false;
card.swipeOffset = 0;
card.swipeOffsetY = 0;
}
}
// Background with border
Rectangle {
id: cardBackground
anchors.fill: parent
radius: Style.radiusL
border.color: Qt.alpha(Color.mOutline, Settings.data.notifications.backgroundOpacity || 1.0)
border.width: Style.borderS
color: Qt.alpha(Color.mSurface, Settings.data.notifications.backgroundOpacity || 1.0)
// Progress bar
Rectangle {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
height: 2
color: "transparent"
Rectangle {
id: progressBar
readonly property real progressWidth: cardBackground.width - (2 * cardBackground.radius)
height: parent.height
x: cardBackground.radius + (progressWidth * (1 - model.progress)) / 2
width: progressWidth * model.progress
color: {
var baseColor = model.urgency === 2 ? Color.mError : model.urgency === 0 ? Color.mOnSurface : Color.mPrimary;
return Qt.alpha(baseColor, Settings.data.notifications.backgroundOpacity || 1.0);
}
antialiasing: true
Behavior on width {
enabled: !card.isRemoving
NumberAnimation {
duration: 100
easing.type: Easing.Linear
}
}
Behavior on x {
enabled: !card.isRemoving
NumberAnimation {
duration: 100
easing.type: Easing.Linear
}
}
}
}
}
NDropShadow {
anchors.fill: cardBackground
source: cardBackground
autoPaddingEnabled: true
}
// Content
ColumnLayout {
id: notificationContent
visible: !notifWindow.isCompact
anchors.fill: cardBackground
anchors.margins: Style.marginM
spacing: Style.marginM
RowLayout {
Layout.fillWidth: true
spacing: Style.marginL
Layout.leftMargin: Style.marginM
Layout.rightMargin: Style.marginM
Layout.topMargin: Style.marginM
Layout.bottomMargin: Style.marginM
NImageRounded {
Layout.preferredWidth: Math.round(40 * Style.uiScaleRatio)
Layout.preferredHeight: Math.round(40 * Style.uiScaleRatio)
Layout.alignment: Qt.AlignVCenter
radius: Math.min(Style.radiusL, Layout.preferredWidth / 2)
imagePath: model.originalImage || ""
borderColor: "transparent"
borderWidth: 0
fallbackIcon: "bell"
fallbackIconSize: 24
}
ColumnLayout {
Layout.fillWidth: true
spacing: Style.marginS
// Header with urgency indicator
RowLayout {
Layout.fillWidth: true
spacing: Style.marginS
Rectangle {
Layout.preferredWidth: 6
Layout.preferredHeight: 6
Layout.alignment: Qt.AlignVCenter
radius: Style.radiusXS
color: model.urgency === 2 ? Color.mError : model.urgency === 0 ? Color.mOnSurface : Color.mPrimary
}
NText {
text: model.appName || "Unknown App"
pointSize: Style.fontSizeXS
font.weight: Style.fontWeightBold
color: Color.mSecondary
}
NText {
textFormat: Text.PlainText
text: " " + Time.formatRelativeTime(model.timestamp)
pointSize: Style.fontSizeXXS
color: Color.mOnSurfaceVariant
Layout.alignment: Qt.AlignBottom
}
Item {
Layout.fillWidth: true
}
}
NText {
text: model.summary || I18n.tr("common.no-summary")
pointSize: Style.fontSizeM
font.weight: Style.fontWeightMedium
color: Color.mOnSurface
textFormat: Text.StyledText
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
maximumLineCount: 3
elide: Text.ElideRight
visible: text.length > 0
Layout.fillWidth: true
Layout.rightMargin: Style.marginM
}
NText {
text: model.body || ""
pointSize: Style.fontSizeM
color: Color.mOnSurface
textFormat: Text.StyledText
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
maximumLineCount: 5
elide: Text.ElideRight
visible: text.length > 0
Layout.fillWidth: true
Layout.rightMargin: Style.marginXL
}
// Actions
Flow {
Layout.fillWidth: true
spacing: Style.marginS
Layout.topMargin: Style.marginM
flow: Flow.LeftToRight
property string parentNotificationId: notificationId
property var parsedActions: {
try {
return model.actionsJson ? JSON.parse(model.actionsJson) : [];
} catch (e) {
return [];
}
}
visible: parsedActions.length > 0
Repeater {
model: parent.parsedActions
delegate: NButton {
property var actionData: modelData
text: {
var actionText = actionData.text || "Open";
if (actionText.includes(",")) {
return actionText.split(",")[1] || actionText;
}
return actionText;
}
fontSize: Style.fontSizeS
backgroundColor: Color.mPrimary
textColor: hovered ? Color.mOnHover : Color.mOnPrimary
hoverColor: Color.mHover
outlined: false
implicitHeight: 24
onClicked: {
card.runAction(actionData.identifier, false);
}
}
}
}
}
}
}
// Close button
NIconButton {
visible: !notifWindow.isCompact
icon: "close"
tooltipText: I18n.tr("tooltips.dismiss-notification")
baseSize: Style.baseWidgetSize * 0.6
anchors.top: cardBackground.top
anchors.topMargin: Style.marginXL
anchors.right: cardBackground.right
anchors.rightMargin: Style.marginXL
onClicked: {
card.runAction("", true);
}
}
// Compact content
RowLayout {
Layout.fillWidth: true
spacing: Style.marginL
Layout.leftMargin: Style.marginM
Layout.rightMargin: Style.marginM
Layout.topMargin: Style.marginM
Layout.bottomMargin: Style.marginM
id: compactContent
visible: notifWindow.isCompact
anchors.fill: cardBackground
anchors.margins: Style.marginM
spacing: Style.marginS
NImageRounded {
Layout.preferredWidth: Math.round(40 * Style.uiScaleRatio)
Layout.preferredHeight: Math.round(40 * Style.uiScaleRatio)
Layout.preferredWidth: Math.round(24 * Style.uiScaleRatio)
Layout.preferredHeight: Math.round(24 * Style.uiScaleRatio)
Layout.alignment: Qt.AlignVCenter
radius: Math.min(Style.radiusL, Layout.preferredWidth / 2)
radius: Style.radiusXS
imagePath: model.originalImage || ""
borderColor: "transparent"
borderWidth: 0
fallbackIcon: "bell"
fallbackIconSize: 24
fallbackIconSize: 16
}
ColumnLayout {
Layout.fillWidth: true
spacing: Style.marginS
// Header with urgency indicator
RowLayout {
Layout.fillWidth: true
spacing: Style.marginS
Rectangle {
Layout.preferredWidth: 6
Layout.preferredHeight: 6
Layout.alignment: Qt.AlignVCenter
radius: Style.radiusXS
color: model.urgency === 2 ? Color.mError : model.urgency === 0 ? Color.mOnSurface : Color.mPrimary
}
NText {
text: model.appName || "Unknown App"
pointSize: Style.fontSizeXS
font.weight: Style.fontWeightBold
color: Color.mSecondary
}
NText {
textFormat: Text.PlainText
text: " " + Time.formatRelativeTime(model.timestamp)
pointSize: Style.fontSizeXXS
color: Color.mOnSurfaceVariant
Layout.alignment: Qt.AlignBottom
}
Item {
Layout.fillWidth: true
}
}
spacing: Style.marginXS
NText {
text: model.summary || I18n.tr("common.no-summary")
pointSize: Style.fontSizeM
font.weight: Style.fontWeightMedium
color: Color.mOnSurface
textFormat: Text.PlainText
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
maximumLineCount: 3
textFormat: Text.StyledText
maximumLineCount: 1
elide: Text.ElideRight
visible: text.length > 0
Layout.fillWidth: true
Layout.rightMargin: Style.marginM
}
NText {
visible: model.body && model.body.length > 0
Layout.fillWidth: true
text: model.body || ""
pointSize: Style.fontSizeM
color: Color.mOnSurface
textFormat: Text.PlainText
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
maximumLineCount: 5
pointSize: Style.fontSizeS
color: Color.mOnSurfaceVariant
textFormat: Text.StyledText
wrapMode: Text.Wrap
maximumLineCount: 2
elide: Text.ElideRight
visible: text.length > 0
Layout.fillWidth: true
Layout.rightMargin: Style.marginXL
}
// Actions
Flow {
Layout.fillWidth: true
spacing: Style.marginS
Layout.topMargin: Style.marginM
flow: Flow.LeftToRight
property string parentNotificationId: notificationId
property var parsedActions: {
try {
return model.actionsJson ? JSON.parse(model.actionsJson) : [];
} catch (e) {
return [];
}
}
visible: parsedActions.length > 0
Repeater {
model: parent.parsedActions
delegate: NButton {
property var actionData: modelData
onEntered: card.hoverCount++
onExited: card.hoverCount--
text: {
var actionText = actionData.text || "Open";
if (actionText.includes(",")) {
return actionText.split(",")[1] || actionText;
}
return actionText;
}
fontSize: Style.fontSizeS
backgroundColor: Color.mPrimary
textColor: hovered ? Color.mOnHover : Color.mOnPrimary
hoverColor: Color.mHover
outlined: false
implicitHeight: 24
onClicked: {
card.animateOut();
deferredActionTimer.actionId = actionData.identifier;
deferredActionTimer.isHistoryRemoval = false;
deferredActionTimer.start();
}
}
}
}
}
}
}
// Close button
NIconButton {
visible: !notifWindow.isCompact
icon: "close"
tooltipText: I18n.tr("common.close")
baseSize: Style.baseWidgetSize * 0.6
anchors.top: cardBackground.top
anchors.topMargin: Style.marginM
anchors.right: cardBackground.right
anchors.rightMargin: Style.marginM
onClicked: {
card.animateOut();
deferredActionTimer.isHistoryRemoval = true;
deferredActionTimer.start();
}
}
// Compact content
RowLayout {
id: compactContent
visible: notifWindow.isCompact
anchors.fill: cardBackground
anchors.margins: Style.marginM
spacing: Style.marginS
NImageRounded {
Layout.preferredWidth: Math.round(24 * Style.uiScaleRatio)
Layout.preferredHeight: Math.round(24 * Style.uiScaleRatio)
Layout.alignment: Qt.AlignVCenter
radius: Style.radiusXS
imagePath: model.originalImage || ""
borderColor: "transparent"
borderWidth: 0
fallbackIcon: "bell"
fallbackIconSize: 16
}
ColumnLayout {
Layout.fillWidth: true
spacing: Style.marginXS
NText {
text: model.summary || I18n.tr("common.no-summary")
pointSize: Style.fontSizeM
font.weight: Style.fontWeightMedium
color: Color.mOnSurface
textFormat: Text.PlainText
maximumLineCount: 1
elide: Text.ElideRight
Layout.fillWidth: true
}
NText {
visible: model.body && model.body.length > 0
Layout.fillWidth: true
text: model.body || ""
pointSize: Style.fontSizeS
color: Color.mOnSurfaceVariant
textFormat: Text.PlainText
wrapMode: Text.Wrap
maximumLineCount: 2
elide: Text.ElideRight
}
}
}
+6 -6
View File
@@ -407,15 +407,15 @@ Variants {
const fontSize = Style.fontSizeS * Settings.data.ui.fontFixedScale * Style.uiScaleRatio;
const estimatedWidth = text.length * fontSize * 0.6;
const iconWidth = Style.fontSizeXL * Style.uiScaleRatio;
const margins = Style.marginL * 2;
const margins = Style.margin2L;
const spacing = Style.marginM;
const bgMargins = Style.marginM * 1.5 * 2;
const bgMargins = Style.margin2M * 1.5;
return Math.max(shortHWidth, Math.round((estimatedWidth + iconWidth + margins + spacing + bgMargins) * 1.1));
}
const iconWidth = Style.fontSizeXL * Style.uiScaleRatio;
const margins = Style.marginL * 2; // Left and right content margins
const margins = Style.margin2L; // Left and right content margins
const spacing = Style.marginM; // Spacing between icon and text
const bgMargins = Style.marginM * 1.5 * 2; // Background margins
const bgMargins = Style.margin2M * 1.5; // Background margins
const totalWidth = textWidth + iconWidth + margins + spacing + bgMargins;
// Ensure minimum width and add some buffer
return Math.max(shortHWidth, Math.round(totalWidth * 1.1));
@@ -438,8 +438,8 @@ Variants {
const textHeight = charCount * charHeight;
// Background margins (Style.marginM * 1.5 * 2 for top and bottom)
const bgMargins = Style.marginM * 1.5 * 2;
// Content margins (Style.marginL * 2 for top and bottom)
const contentMargins = Style.marginL * 2;
// Content margins (Style.margin2L for top and bottom)
const contentMargins = Style.margin2L;
// Icon size: fontSizeXL scaled, with extra space for icon rendering and padding
const iconSize = Style.fontSizeXL * Style.uiScaleRatio * 1.8; // Add 80% for icon rendering and padding
// Spacing between text and icon (Style.marginM for lock keys)
+9 -9
View File
@@ -149,7 +149,7 @@ SmartPanel {
readonly property var appStreams: AudioService.appStreams
// Use implicitHeight from content + margins to avoid binding loops
property real contentPreferredHeight: mainColumn.implicitHeight + Style.marginL * 2
property real contentPreferredHeight: mainColumn.implicitHeight + Style.margin2L
ColumnLayout {
id: mainColumn
@@ -160,7 +160,7 @@ SmartPanel {
// HEADER
NBox {
Layout.fillWidth: true
implicitHeight: header.implicitHeight + (Style.marginXL)
implicitHeight: header.implicitHeight + Style.margin2M
ColumnLayout {
id: header
@@ -238,7 +238,7 @@ SmartPanel {
// Output Volume
NBox {
Layout.fillWidth: true
Layout.preferredHeight: outputVolumeColumn.implicitHeight + (Style.marginXL)
Layout.preferredHeight: outputVolumeColumn.implicitHeight + Style.margin2M
ColumnLayout {
id: outputVolumeColumn
@@ -287,7 +287,7 @@ SmartPanel {
}
NText {
text: Math.round(localOutputVolume * 100) + "%"
text: Math.round((localOutputVolumeChanging ? localOutputVolume : AudioService.volume) * 100) + "%"
pointSize: Style.fontSizeM
family: Settings.data.ui.fontFixed
color: Color.mOnSurface
@@ -313,7 +313,7 @@ SmartPanel {
// Input Volume
NBox {
Layout.fillWidth: true
Layout.preferredHeight: inputVolumeColumn.implicitHeight + (Style.marginXL)
Layout.preferredHeight: inputVolumeColumn.implicitHeight + Style.margin2M
ColumnLayout {
id: inputVolumeColumn
@@ -362,7 +362,7 @@ SmartPanel {
}
NText {
text: Math.round(localInputVolume * 100) + "%"
text: Math.round((localInputVolumeChanging ? localInputVolume : AudioService.inputVolume) * 100) + "%"
pointSize: Style.fontSizeM
family: Settings.data.ui.fontFixed
color: Color.mOnSurface
@@ -398,7 +398,7 @@ SmartPanel {
id: appBox
required property PwNode modelData
Layout.fillWidth: true
Layout.preferredHeight: appRow.implicitHeight + (Style.marginXL)
Layout.preferredHeight: appRow.implicitHeight + Style.margin2M
visible: !isCaptureStream
// Track individual node to ensure properties are bound
@@ -698,7 +698,7 @@ SmartPanel {
NBox {
Layout.fillWidth: true
Layout.preferredHeight: outputColumn.implicitHeight + (Style.marginXL)
Layout.preferredHeight: outputColumn.implicitHeight + Style.margin2M
ColumnLayout {
id: outputColumn
@@ -740,7 +740,7 @@ SmartPanel {
NBox {
Layout.fillWidth: true
Layout.preferredHeight: inputColumn.implicitHeight + (Style.marginXL)
Layout.preferredHeight: inputColumn.implicitHeight + Style.margin2M
ColumnLayout {
id: inputColumn
+4 -4
View File
@@ -20,7 +20,7 @@ SmartPanel {
panelContent: Item {
id: panelContent
property real contentPreferredHeight: mainLayout.implicitHeight + Style.marginL * 2
property real contentPreferredHeight: mainLayout.implicitHeight + Style.margin2L
property var batteryWidgetInstance: BarService.lookupWidget("Battery", screen ? screen.name : null)
readonly property var batteryWidgetSettings: batteryWidgetInstance ? batteryWidgetInstance.widgetSettings : null
@@ -80,7 +80,7 @@ SmartPanel {
// HEADER
NBox {
Layout.fillWidth: true
implicitHeight: headerRow.implicitHeight + (Style.marginXL)
implicitHeight: headerRow.implicitHeight + Style.margin2M
RowLayout {
id: headerRow
@@ -120,7 +120,7 @@ SmartPanel {
// Charge level + health/time
NBox {
Layout.fillWidth: true
implicitHeight: chargeLayout.implicitHeight + Style.marginL * 2
implicitHeight: chargeLayout.implicitHeight + Style.margin2L
visible: BatteryService.laptopBatteries.length > 0 || BatteryService.bluetoothBatteries.length > 0
ColumnLayout {
@@ -292,7 +292,7 @@ SmartPanel {
NBox {
Layout.fillWidth: true
height: controlsLayout.implicitHeight + Style.marginL * 2
height: controlsLayout.implicitHeight + Style.margin2L
visible: showPowerProfiles || showNoctaliaPerformance
ColumnLayout {
+6 -10
View File
@@ -22,7 +22,7 @@ SmartPanel {
id: panelContent
color: "transparent"
property real contentPreferredHeight: Math.min(root.preferredHeight, mainColumn.implicitHeight + Style.marginL * 2)
property real contentPreferredHeight: Math.min(root.preferredHeight, mainColumn.implicitHeight + Style.margin2L)
ColumnLayout {
id: mainColumn
@@ -33,13 +33,12 @@ SmartPanel {
// Header
NBox {
Layout.fillWidth: true
Layout.preferredHeight: headerRow.implicitHeight + Style.marginXL
Layout.preferredHeight: headerRow.implicitHeight + Style.margin2M
RowLayout {
id: headerRow
anchors.fill: parent
anchors.margins: Style.marginM
spacing: Style.marginM
NIcon {
icon: BluetoothService.enabled ? "bluetooth" : "bluetooth-off"
@@ -47,11 +46,8 @@ SmartPanel {
color: BluetoothService.enabled ? Color.mPrimary : Color.mOnSurfaceVariant
}
NText {
text: I18n.tr("common.bluetooth")
pointSize: Style.fontSizeL
font.weight: Style.fontWeightBold
color: Color.mOnSurface
NLabel {
label: I18n.tr("common.bluetooth")
Layout.fillWidth: true
}
@@ -100,7 +96,7 @@ SmartPanel {
id: disabledBox
visible: !BluetoothService.enabled
Layout.fillWidth: true
Layout.preferredHeight: disabledColumn.implicitHeight + Style.marginXL
Layout.preferredHeight: disabledColumn.implicitHeight + Style.margin2M
ColumnLayout {
id: disabledColumn
@@ -151,7 +147,7 @@ SmartPanel {
return (btSource.pairedDevices.length === 0 && btSource.connectedDevices.length === 0);
}
Layout.fillWidth: true
Layout.preferredHeight: emptyColumn.implicitHeight + Style.marginXL
Layout.preferredHeight: emptyColumn.implicitHeight + Style.margin2M
ColumnLayout {
id: emptyColumn
+134 -3
View File
@@ -7,6 +7,7 @@ import qs.Commons
import qs.Modules.MainScreen
import qs.Services.Compositor
import qs.Services.Hardware
import qs.Services.UI
import qs.Widgets
SmartPanel {
@@ -17,12 +18,84 @@ SmartPanel {
panelContent: Item {
id: panelContent
property real contentPreferredHeight: mainColumn.implicitHeight + Style.marginL * 2
property real contentPreferredHeight: mainColumn.implicitHeight + Style.margin2L
property var brightnessWidgetInstance: BarService.lookupWidget("Brightness", screen ? screen.name : null)
readonly property var brightnessWidgetSettings: brightnessWidgetInstance ? brightnessWidgetInstance.widgetSettings : null
readonly property var brightnessWidgetMetadata: BarWidgetRegistry.widgetMetadata["Brightness"]
function resolveWidgetSetting(key, defaultValue) {
if (brightnessWidgetSettings && brightnessWidgetSettings[key] !== undefined)
return brightnessWidgetSettings[key];
if (brightnessWidgetMetadata && brightnessWidgetMetadata[key] !== undefined)
return brightnessWidgetMetadata[key];
return defaultValue;
}
Connections {
target: BarService
function onActiveWidgetsChanged() {
panelContent.brightnessWidgetInstance = BarService.lookupWidget("Brightness", screen ? screen.name : null);
}
}
property real globalBrightness: 0
property bool globalBrightnessChanging: false
property int globalBrightnessCapableMonitors: 0
function getIcon(brightness) {
return brightness <= 0.5 ? "brightness-low" : "brightness-high";
}
function getControllableMonitors() {
var monitors = BrightnessService.monitors || [];
return monitors.filter(m => m && m.brightnessControlAvailable);
}
function updateGlobalBrightness() {
var monitors = getControllableMonitors();
panelContent.globalBrightnessCapableMonitors = monitors.length;
if (panelContent.globalBrightnessChanging)
return;
if (monitors.length === 0) {
panelContent.globalBrightness = 0;
return;
}
var total = 0;
monitors.forEach(m => {
var brightnessValue = isNaN(m.brightness) ? 0 : m.brightness;
total += brightnessValue;
});
panelContent.globalBrightness = total / monitors.length;
}
function applyGlobalBrightness(value) {
var monitors = BrightnessService.monitors || [];
monitors.forEach(m => {
if (m && m.brightnessControlAvailable) {
m.setBrightness(value);
}
});
}
Component.onCompleted: updateGlobalBrightness()
Connections {
target: BrightnessService
function onMonitorBrightnessChanged(monitor, newBrightness) {
panelContent.updateGlobalBrightness();
}
function onMonitorsChanged() {
panelContent.updateGlobalBrightness();
}
function onDdcMonitorsChanged() {
panelContent.updateGlobalBrightness();
}
}
ColumnLayout {
id: mainColumn
anchors.fill: parent
@@ -32,7 +105,7 @@ SmartPanel {
// HEADER
NBox {
Layout.fillWidth: true
implicitHeight: headerRow.implicitHeight + (Style.marginXL)
implicitHeight: headerRow.implicitHeight + Style.margin2M
RowLayout {
id: headerRow
@@ -80,11 +153,69 @@ SmartPanel {
spacing: Style.marginM
width: brightnessScrollView.availableWidth
NBox {
Layout.fillWidth: true
visible: panelContent.globalBrightnessCapableMonitors > 1 && panelContent.resolveWidgetSetting("applyToAllMonitors", false)
implicitHeight: globalBrightnessContent.implicitHeight + (Style.marginXL)
ColumnLayout {
id: globalBrightnessContent
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.margins: Style.marginM
spacing: Style.marginS
NLabel {
label: I18n.tr("panels.display.monitors-global-brightness-label")
description: I18n.tr("panels.display.monitors-global-brightness-description")
}
RowLayout {
Layout.fillWidth: true
spacing: Style.marginS
NIcon {
icon: panelContent.getIcon(panelContent.globalBrightness)
pointSize: Style.fontSizeXL
color: Color.mOnSurface
}
NValueSlider {
id: globalBrightnessSlider
from: 0
to: 1
value: panelContent.globalBrightness
stepSize: 0.01
enabled: panelContent.globalBrightnessCapableMonitors > 0
onMoved: value => {
panelContent.globalBrightness = value;
panelContent.applyGlobalBrightness(value);
}
onPressedChanged: (pressed, value) => {
panelContent.globalBrightnessChanging = pressed;
panelContent.globalBrightness = value;
panelContent.applyGlobalBrightness(value);
}
Layout.fillWidth: true
text: ""
}
NText {
text: panelContent.globalBrightnessCapableMonitors > 0 ? Math.round(panelContent.globalBrightness * 100) + "%" : "N/A"
Layout.preferredWidth: 55
horizontalAlignment: Text.AlignRight
Layout.alignment: Qt.AlignVCenter
}
}
}
}
Repeater {
model: Quickshell.screens || []
delegate: NBox {
Layout.fillWidth: true
Layout.preferredHeight: outputColumn.implicitHeight + (Style.marginXL)
Layout.preferredHeight: outputColumn.implicitHeight + Style.margin2M
property var brightnessMonitor: BrightnessService.getMonitorForScreen(modelData)
+2 -2
View File
@@ -18,13 +18,13 @@ SmartPanel {
anchors.fill: parent
readonly property real contentPreferredWidth: Math.round((Settings.data.location.showWeekNumberInCalendar ? 440 : 420) * Style.uiScaleRatio)
readonly property real contentPreferredHeight: content.implicitHeight + (Style.marginL * 2)
readonly property real contentPreferredHeight: content.implicitHeight + Style.margin2L
ColumnLayout {
id: content
x: Style.marginL
y: Style.marginL
width: parent.width - (Style.marginL * 2)
width: parent.width - Style.margin2L
spacing: Style.marginL
// All clock panel cards
@@ -93,7 +93,7 @@ SmartPanel {
id: layout
x: Style.marginL
y: Style.marginL
width: parent.width - (Style.marginL * 2)
width: parent.width - Style.margin2L
spacing: Style.marginL
Repeater {
@@ -0,0 +1,17 @@
import QtQuick.Layouts
import Quickshell
import qs.Commons
import qs.Services.Networking
import qs.Services.UI
import qs.Widgets
NIconButtonHot {
property ShellScreen screen
icon: !Settings.data.network.airplaneModeEnabled ? "plane-off" : "plane"
hot: Settings.data.network.airplaneModeEnabled
tooltipText: I18n.tr("toast.airplane-mode.title")
onClicked: {
BluetoothService.setAirplaneMode(!Settings.data.network.airplaneModeEnabled);
}
}
@@ -15,8 +15,10 @@ Item {
property string onMiddleClickedCommand: ""
property string stateChecksJson: "[]" // Store state checks as JSON string
property string generalTooltipText: "Custom Button"
property string generalTooltipText: ""
property bool enableOnStateLogic: false
property bool showExecTooltip: true
property bool _hasCustomTooltip: false
property string _currentIcon: "heart" // Default icon
property bool _isHot: false
@@ -46,8 +48,10 @@ Item {
Logger.e("CustomButton", "Failed to parse stateChecksJson:", e.message);
_parsedStateChecks = [];
}
generalTooltipText = widgetSettings.generalTooltipText || "Custom Button";
generalTooltipText = widgetSettings.generalTooltipText || "";
_hasCustomTooltip = !!(widgetSettings.generalTooltipText && widgetSettings.generalTooltipText.trim() !== "");
enableOnStateLogic = widgetSettings.enableOnStateLogic || false;
showExecTooltip = widgetSettings.showExecTooltip !== undefined ? widgetSettings.showExecTooltip : true;
updateState();
}
@@ -120,15 +124,28 @@ Item {
}
function _buildTooltipText() {
let tooltip = generalTooltipText;
if (onClickedCommand) {
tooltip += `\nLeft click: ${onClickedCommand}`;
// Build tooltip based on settings
let tooltip = "";
// If user set custom text, always show it
// If no custom text and showExecTooltip is off, show i18n default
if (_hasCustomTooltip) {
tooltip = generalTooltipText;
} else if (!showExecTooltip) {
tooltip = I18n.tr("bar.custom-button.default-tooltip");
}
if (onRightClickedCommand) {
tooltip += `\nRight click: ${onRightClickedCommand}`;
}
if (onMiddleClickedCommand) {
tooltip += `\nMiddle click: ${onMiddleClickedCommand}`;
// Add command details if enabled
if (showExecTooltip) {
if (onClickedCommand) {
tooltip += (tooltip ? "\n" : "") + I18n.tr("bar.custom-button.left-click-label") + `: ${onClickedCommand}`;
}
if (onRightClickedCommand) {
tooltip += (tooltip ? "\n" : "") + I18n.tr("bar.custom-button.right-click-label") + `: ${onRightClickedCommand}`;
}
if (onMiddleClickedCommand) {
tooltip += (tooltip ? "\n" : "") + I18n.tr("bar.custom-button.middle-click-label") + `: ${onMiddleClickedCommand}`;
}
}
return tooltip;
@@ -8,7 +8,7 @@ NIconButtonHot {
property ShellScreen screen
icon: PowerProfileService.noctaliaPerformanceMode ? "rocket" : "rocket-off"
tooltipText: PowerProfileService.noctaliaPerformanceMode ? I18n.tr("toast.noctalia-performance.enabled") : I18n.tr("toast.noctalia-performance.disabled")
tooltipText: I18n.tr("tooltips.noctalia-performance-enabled")
hot: PowerProfileService.noctaliaPerformanceMode
onClicked: PowerProfileService.toggleNoctaliaPerformance()
}
+552
View File
@@ -0,0 +1,552 @@
import QtQuick
import Quickshell
import Quickshell.Wayland
import qs.Commons
import qs.Modules.Dock
import qs.Modules.MainScreen
SmartPanel {
id: root
panelBackgroundColor: Qt.alpha(Color.mSurface, Settings.data.dock.backgroundOpacity)
readonly property string dockPosition: Settings.data.dock.position
readonly property bool isVertical: dockPosition === "left" || dockPosition === "right"
readonly property bool hasBar: modelData && modelData.name ? (Settings.data.bar.monitors.includes(modelData.name) || (Settings.data.bar.monitors.length === 0)) : false
readonly property bool barAtSameEdge: hasBar && Settings.getBarPositionForScreen(modelData?.name) === dockPosition
readonly property bool isFramed: Settings.data.bar.barType === "framed" && hasBar
property bool isDockHovered: false
property bool panelHovered: false
readonly property int iconSize: Math.round(12 + 24 * (Settings.data.dock.size ?? 1))
readonly property int maxWidth: screen ? screen.width * 0.8 : 1000
readonly property int maxHeight: screen ? screen.height * 0.8 : 1000
readonly property bool autoHide: false
readonly property int hideDelay: 1000
readonly property int showDelay: 100
// Shared state with dock content
property bool dockHovered: false
property bool anyAppHovered: false
property bool menuHovered: false
property bool hidden: false
property bool peekHovered: false
// Track the currently open context menu
property var currentContextMenu: null
// Combined model of running apps and pinned apps
property var dockApps: []
property var groupCycleIndices: ({})
// Track the session order of apps (transient reordering)
property var sessionAppOrder: []
// Drag and Drop state for visual feedback
property int dragSourceIndex: -1
property int dragTargetIndex: -1
// Revision counter to force icon re-evaluation
property int iconRevision: 0
property alias hideTimer: hideTimer
property alias showTimer: showTimer
onMenuHoveredChanged: {
if (!menuHovered && !panelHovered) {
hoverCloseTimer.restart();
}
}
onClosed: {
hoverCloseTimer.stop();
isDockHovered = false;
}
panelAnchorTop: dockPosition === "top"
panelAnchorBottom: dockPosition === "bottom"
panelAnchorLeft: dockPosition === "left"
panelAnchorRight: dockPosition === "right"
panelAnchorHorizontalCenter: !isVertical
panelAnchorVerticalCenter: isVertical
forceAttachToBar: hasBar
exclusiveKeyboard: false
// when dragging ended but the cursor is outside the dock area, restart the timer
onDragSourceIndexChanged: {
if (dragSourceIndex === -1) {
if (autoHide && !dockHovered && !anyAppHovered && !peekHovered && !menuHovered) {
hideTimer.restart();
}
}
}
// Function to close any open context menu
function closeAllContextMenus() {
if (currentContextMenu && currentContextMenu.visible) {
currentContextMenu.hide();
}
}
function getAppKey(appData) {
if (!appData)
return null;
if (Settings.data.dock.groupApps) {
return appData.appId;
}
// Use stable appId for pinned apps to maintain their slot regardless of running state
if (appData.type === "pinned" || appData.type === "pinned-running") {
return appData.appId;
}
// prefer toplevel object identity for unpinned running apps to distinguish instances
if (appData.toplevel)
return appData.toplevel;
// fallback to appId
return appData.appId;
}
function sortDockApps(apps) {
if (!sessionAppOrder || sessionAppOrder.length === 0) {
return apps;
}
const sorted = [];
const remaining = [...apps];
// Pick apps that are in the session order
for (let i = 0; i < sessionAppOrder.length; i++) {
const key = sessionAppOrder[i];
// Pick ALL matching apps (e.g. all instances of a pinned app)
while (true) {
const idx = remaining.findIndex(app => getAppKey(app) === key);
if (idx !== -1) {
sorted.push(remaining[idx]);
remaining.splice(idx, 1);
} else {
break;
}
}
}
// Append any new/remaining apps
remaining.forEach(app => sorted.push(app));
return sorted;
}
function reorderApps(fromIndex, toIndex) {
if (fromIndex === toIndex || fromIndex < 0 || toIndex < 0 || fromIndex >= dockApps.length || toIndex >= dockApps.length)
return;
const list = [...dockApps];
const item = list.splice(fromIndex, 1)[0];
list.splice(toIndex, 0, item);
dockApps = list;
sessionAppOrder = dockApps.map(getAppKey);
savePinnedOrder();
}
function savePinnedOrder() {
const currentPinned = Settings.data.dock.pinnedApps || [];
const newPinned = [];
const seen = new Set();
// Extract pinned apps in their current visual order
dockApps.forEach(app => {
if (app.appId && !seen.has(app.appId)) {
const isPinned = currentPinned.some(p => normalizeAppId(p) === normalizeAppId(app.appId));
if (isPinned) {
newPinned.push(app.appId);
seen.add(app.appId);
}
}
});
// Check if any pinned apps were missed (unlikely if dockApps is correct)
currentPinned.forEach(p => {
if (!seen.has(p)) {
newPinned.push(p);
seen.add(p);
}
});
if (JSON.stringify(currentPinned) !== JSON.stringify(newPinned)) {
Settings.data.dock.pinnedApps = newPinned;
}
}
// Helper function to normalize app IDs for case-insensitive matching
function normalizeAppId(appId) {
if (!appId || typeof appId !== 'string')
return "";
let id = appId.toLowerCase().trim();
if (id.endsWith(".desktop"))
id = id.substring(0, id.length - 8);
return id;
}
// Helper function to check if an app ID matches a pinned app (case-insensitive)
function isAppIdPinned(appId, pinnedApps) {
if (!appId || !pinnedApps || pinnedApps.length === 0)
return false;
const normalizedId = normalizeAppId(appId);
return pinnedApps.some(pinnedId => normalizeAppId(pinnedId) === normalizedId);
}
// Helper function to get app name from desktop entry
function getAppNameFromDesktopEntry(appId) {
if (!appId)
return appId;
try {
if (typeof DesktopEntries !== 'undefined' && DesktopEntries.heuristicLookup) {
const entry = DesktopEntries.heuristicLookup(appId);
if (entry && entry.name) {
return entry.name;
}
}
if (typeof DesktopEntries !== 'undefined' && DesktopEntries.byId) {
const entry = DesktopEntries.byId(appId);
if (entry && entry.name) {
return entry.name;
}
}
} catch (e)
// Fall through to return original appId
{}
// Return original appId if we can't find a desktop entry
return appId;
}
function getToplevelsForEntry(appData) {
if (!appData)
return [];
if (appData.toplevels && appData.toplevels.length > 0) {
return appData.toplevels.filter(toplevel => toplevel && (!Settings.data.dock.onlySameOutput || !toplevel.screens || toplevel.screens.includes(screen)));
}
if (!appData.toplevel)
return [];
if (Settings.data.dock.onlySameOutput && appData.toplevel.screens && !appData.toplevel.screens.includes(screen))
return [];
return [appData.toplevel];
}
function getPrimaryToplevelForEntry(appData) {
const toplevels = getToplevelsForEntry(appData);
if (toplevels.length === 0)
return null;
if (ToplevelManager && ToplevelManager.activeToplevel && toplevels.includes(ToplevelManager.activeToplevel))
return ToplevelManager.activeToplevel;
return toplevels[0];
}
// Build grouped render model without mutating the raw toplevel list.
function buildGroupedDockApps(apps) {
if (!Settings.data.dock.groupApps) {
return apps.map(app => {
const entry = Object.assign({}, app);
entry.toplevels = getToplevelsForEntry(app);
return entry;
});
}
const grouped = [];
const groupedById = new Map();
apps.forEach(app => {
const appId = app.appId;
const toplevels = getToplevelsForEntry(app);
const existing = groupedById.get(appId);
if (existing) {
toplevels.forEach(toplevel => {
if (!existing.toplevels.includes(toplevel)) {
existing.toplevels.push(toplevel);
}
});
if (app.type === "pinned" || app.type === "pinned-running") {
existing.isPinned = true;
}
} else {
const entry = {
"type": app.type,
"appId": appId,
"title": app.title,
"toplevels": toplevels.slice(),
"isPinned": app.type === "pinned" || app.type === "pinned-running"
};
grouped.push(entry);
groupedById.set(appId, entry);
}
});
grouped.forEach(entry => {
entry.toplevel = getPrimaryToplevelForEntry(entry);
if (entry.toplevels.length > 0 && entry.isPinned) {
entry.type = "pinned-running";
} else if (entry.toplevels.length > 0) {
entry.type = "running";
} else {
entry.type = "pinned";
}
if (entry.toplevel && entry.toplevel.title && entry.toplevel.title.trim() !== "") {
entry.title = entry.toplevel.title;
}
});
return grouped;
}
// Function to update the combined dock apps model
function updateDockApps() {
const runningApps = ToplevelManager ? (ToplevelManager.toplevels.values || []) : [];
const pinnedApps = Settings.data.dock.pinnedApps || [];
const combined = [];
const processedToplevels = new Set();
const processedPinnedAppIds = new Set();
// push an app onto combined with the given appType
function pushApp(appType, toplevel, appId, title) {
// Use canonical ID for pinned apps to ensure key stability
const canonicalId = isAppIdPinned(appId, pinnedApps) ? (pinnedApps.find(p => normalizeAppId(p) === normalizeAppId(appId)) || appId) : appId;
// For running apps, track by toplevel object to allow multiple instances
if (toplevel) {
if (processedToplevels.has(toplevel)) {
return;
}
if (Settings.data.dock.onlySameOutput && toplevel.screens && !toplevel.screens.includes(screen)) {
return;
}
combined.push({
"type": appType,
"toplevel": toplevel,
"toplevels": toplevel ? [toplevel] : [],
"appId": canonicalId,
"title": title
});
processedToplevels.add(toplevel);
} else {
// For pinned apps that aren't running, track by appId to avoid duplicates
if (processedPinnedAppIds.has(canonicalId)) {
return;
}
combined.push({
"type": appType,
"toplevel": toplevel,
"toplevels": [],
"appId": canonicalId,
"title": title
});
processedPinnedAppIds.add(canonicalId);
}
}
function pushRunning(first) {
runningApps.forEach(toplevel => {
if (toplevel) {
// Use robust matching to check if pinned
const isPinned = isAppIdPinned(toplevel.appId, pinnedApps);
if (!first && isPinned && processedToplevels.has(toplevel)) {
return; // Already added by pushPinned()
}
pushApp((first && isPinned) ? "pinned-running" : "running", toplevel, toplevel.appId, toplevel.title);
}
});
}
function pushPinned() {
pinnedApps.forEach(pinnedAppId => {
// Find all running instances of this pinned app using robust matching
const matchingToplevels = runningApps.filter(app => app && normalizeAppId(app.appId) === normalizeAppId(pinnedAppId));
if (matchingToplevels.length > 0) {
// Add all running instances as pinned-running
matchingToplevels.forEach(toplevel => {
pushApp("pinned-running", toplevel, pinnedAppId, toplevel.title);
});
} else {
// App is pinned but not running - add once
pushApp("pinned", null, pinnedAppId, getAppNameFromDesktopEntry(pinnedAppId) || pinnedAppId);
}
});
}
// if pinnedStatic then push all pinned and then all remaining running apps
if (Settings.data.dock.pinnedStatic) {
pushPinned();
pushRunning(false);
// else add all running apps and then remaining pinned apps
} else {
pushRunning(true);
pushPinned();
}
const sortedApps = sortDockApps(combined);
dockApps = buildGroupedDockApps(sortedApps);
const cycleState = root.groupCycleIndices || {};
const nextCycleState = {};
dockApps.forEach(app => {
if (app && app.appId && cycleState[app.appId] !== undefined) {
nextCycleState[app.appId] = cycleState[app.appId];
}
});
root.groupCycleIndices = nextCycleState;
// Sync session order if needed
if (!sessionAppOrder || sessionAppOrder.length === 0) {
sessionAppOrder = dockApps.map(getAppKey);
} else {
const currentKeys = new Set(dockApps.map(getAppKey));
const existingKeys = new Set();
const newOrder = [];
// Keep existing keys that are still present
sessionAppOrder.forEach(key => {
if (currentKeys.has(key)) {
newOrder.push(key);
existingKeys.add(key);
}
});
// Add new keys at the end
dockApps.forEach(app => {
const key = getAppKey(app);
if (!existingKeys.has(key)) {
newOrder.push(key);
existingKeys.add(key);
}
});
if (JSON.stringify(newOrder) !== JSON.stringify(sessionAppOrder)) {
sessionAppOrder = newOrder;
}
}
}
// Update dock apps when toplevels change
Connections {
target: ToplevelManager ? ToplevelManager.toplevels : null
function onValuesChanged() {
updateDockApps();
}
}
// Update dock apps when pinned apps change
Connections {
target: Settings.data.dock
function onPinnedAppsChanged() {
updateDockApps();
}
function onOnlySameOutputChanged() {
updateDockApps();
}
function onGroupAppsChanged() {
updateDockApps();
}
}
// Initial update when component is ready
Component.onCompleted: {
if (ToplevelManager) {
updateDockApps();
}
}
// Refresh icons when DesktopEntries becomes available
Connections {
target: DesktopEntries.applications
function onValuesChanged() {
root.iconRevision++;
}
}
Timer {
id: hideTimer
interval: hideDelay
onTriggered: {}
}
Timer {
id: showTimer
interval: showDelay
onTriggered: {}
}
Timer {
id: hoverCloseTimer
interval: hideDelay
onTriggered: {
if (root.menuHovered || (root.currentContextMenu && root.currentContextMenu.visible)) {
restart();
return;
}
root.isDockHovered = false;
root.close();
}
}
panelContent: Item {
id: panelContent
property bool allowAttach: true
property real frameThickness: isFramed && !barAtSameEdge && !Settings.data.dock.sitOnFrame ? Settings.data.bar.frameThickness : 0
property real contentPreferredWidth: Math.round(dockContainerWrapper.width) - (isVertical ? frameThickness : 0)
property real contentPreferredHeight: Math.round(dockContainerWrapper.height) - (!isVertical ? frameThickness : 0)
// Detect hover over panel content (including DockContent)
HoverHandler {
id: dockHoverHandler
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
onHoveredChanged: {
root.panelHovered = hovered;
if (hovered) {
root.isDockHovered = true;
hoverCloseTimer.stop();
} else {
if (root.menuHovered || (root.currentContextMenu && root.currentContextMenu.visible)) {
hoverCloseTimer.stop();
} else {
hoverCloseTimer.restart();
}
}
}
}
Item {
id: dockContainerWrapper
readonly property real frameThickness: isFramed ? Settings.data.bar.frameThickness : 0
width: dockContent.dockContainer.width
height: dockContent.dockContainer.height
anchors.top: root.dockPosition === "bottom" ? parent.top : undefined
anchors.bottom: root.dockPosition === "top" ? parent.bottom : undefined
anchors.left: root.dockPosition === "right" ? parent.left : undefined
anchors.right: root.dockPosition === "left" ? parent.right : undefined
DockContent {
id: dockContent
anchors.fill: parent
dockRoot: root
extraTop: 0
extraBottom: 0
extraLeft: 0
extraRight: 0
}
}
}
}
+1 -1
View File
@@ -14,7 +14,7 @@ Item {
property bool loadingFullContent: false
property bool isImageContent: false
implicitHeight: contentArea.implicitHeight + Style.marginL * 2
implicitHeight: contentArea.implicitHeight + Style.margin2L
function loadContent() {
if (!currentItem || !currentItem.clipboardId)
+1 -1
View File
@@ -46,7 +46,7 @@ SmartPanel {
// Panel sizing
readonly property int listPanelWidth: Math.round(500 * Style.uiScaleRatio)
readonly property int totalBaseWidth: listPanelWidth + (Style.marginL * 2)
readonly property int totalBaseWidth: listPanelWidth + Style.margin2L
preferredWidth: totalBaseWidth
preferredHeight: Math.round(600 * Style.uiScaleRatio)
-1
View File
@@ -3,7 +3,6 @@ import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import Quickshell.Widgets
import "../../../Helpers/Keybinds.js" as Keybinds
import "Providers"
import qs.Commons
@@ -92,7 +92,7 @@ Variants {
// Launcher panel with position-based anchoring
Item {
id: launcherPanel
width: Math.round(Math.max(parent.width * 0.25, launcherWindow.listPanelWidth + (Style.marginL * 2)))
width: Math.round(Math.max(parent.width * 0.25, launcherWindow.listPanelWidth + Style.margin2L * 2))
height: Math.round(Math.max(parent.height * 0.5, 600 * Style.uiScaleRatio))
clip: false
+1 -1
View File
@@ -100,7 +100,7 @@ SmartPanel {
NBox {
Layout.fillWidth: true
Layout.preferredHeight: headerRow.implicitHeight + Style.marginXL
Layout.preferredHeight: headerRow.implicitHeight + Style.margin2M
RowLayout {
id: headerRow
+22 -26
View File
@@ -4,6 +4,7 @@ import QtQuick.Layouts
import Quickshell
import qs.Commons
import qs.Modules.MainScreen
import qs.Modules.Panels.Settings
import qs.Services.Networking
import qs.Services.UI
import qs.Widgets
@@ -17,10 +18,10 @@ SmartPanel {
property string passwordSsid: ""
property string expandedSsid: ""
// Info panel collapsed by default, view mode persisted under Settings.data.ui.wifiDetailsViewMode
// Info panel collapsed by default, view mode persisted in settings
// Ethernet details UI state (mirrors WiFi info behavior)
property bool ethernetInfoExpanded: false
property bool ethernetDetailsGrid: (Settings.data && Settings.data.ui && Settings.data.network.wifiDetailsViewMode !== undefined) ? (Settings.data.network.wifiDetailsViewMode === "grid") : true
property bool ethernetDetailsGrid: (Settings.data.network.wifiDetailsViewMode === "grid")
// Unified panel view mode: "wifi" | "ethernet" (persisted)
property string panelViewMode: "wifi"
@@ -28,8 +29,9 @@ SmartPanel {
onPanelViewModeChanged: {
// Persist last view (only after restored the initial value)
if (panelViewPersistEnabled && Settings.data && Settings.data.ui && Settings.data.ui.networkPanelView !== undefined)
if (panelViewPersistEnabled) {
Settings.data.ui.networkPanelView = panelViewMode;
}
// Reset transient states to avoid layout artifacts
passwordSsid = "";
expandedSsid = "";
@@ -70,7 +72,7 @@ SmartPanel {
// Also fetch Ethernet details if connected
NetworkService.refreshActiveEthernetDetails();
// Restore last view if valid, otherwise choose what's available (prefer WiFi when both exist)
if (Settings.data && Settings.data.ui && Settings.data.ui.networkPanelView) {
if (Settings.data.ui.networkPanelView) {
const last = Settings.data.ui.networkPanelView;
if (last === "ethernet" && NetworkService.hasEthernet()) {
panelViewMode = "ethernet";
@@ -102,7 +104,7 @@ SmartPanel {
panelContent: Rectangle {
color: "transparent"
property real contentPreferredHeight: Math.min(root.preferredHeight, mainColumn.implicitHeight + Style.marginL * 2)
property real contentPreferredHeight: Math.min(root.preferredHeight, mainColumn.implicitHeight + Style.margin2L)
ColumnLayout {
id: mainColumn
@@ -113,13 +115,14 @@ SmartPanel {
// Header
NBox {
Layout.fillWidth: true
Layout.preferredHeight: header.implicitHeight + Style.marginXL
Layout.preferredHeight: header.implicitHeight + Style.margin2M
ColumnLayout {
id: header
anchors.fill: parent
anchors.margins: Style.marginM
spacing: Style.marginM
RowLayout {
NIcon {
id: modeIcon
@@ -145,11 +148,8 @@ SmartPanel {
}
}
NText {
text: panelViewMode === "wifi" ? I18n.tr("common.wifi") : I18n.tr("common.ethernet")
pointSize: Style.fontSizeL
font.weight: Style.fontWeightBold
color: Color.mOnSurface
NLabel {
label: panelViewMode === "wifi" ? I18n.tr("common.wifi") : I18n.tr("common.ethernet")
Layout.fillWidth: true
}
@@ -196,8 +196,6 @@ SmartPanel {
visible: NetworkService.hasEthernet()
margins: Style.marginS
Layout.fillWidth: true
border.color: Style.boxBorderColor
border.width: Style.borderS
spacing: Style.marginM
distributeEvenly: true
currentIndex: root.panelViewMode === "wifi" ? 0 : 1
@@ -231,7 +229,7 @@ SmartPanel {
Rectangle {
visible: panelViewMode === "wifi" && NetworkService.lastError.length > 0
Layout.fillWidth: true
Layout.preferredHeight: errorRow.implicitHeight + (Style.marginXL)
Layout.preferredHeight: errorRow.implicitHeight + Style.margin2M
color: Qt.alpha(Color.mError, 0.1)
radius: Style.radiusS
border.width: Style.borderS
@@ -285,7 +283,7 @@ SmartPanel {
id: disabledBox
visible: panelViewMode === "wifi" && !Settings.data.network.wifiEnabled
Layout.fillWidth: true
Layout.preferredHeight: disabledColumn.implicitHeight + Style.marginXL
Layout.preferredHeight: disabledColumn.implicitHeight + Style.margin2M
ColumnLayout {
id: disabledColumn
@@ -331,7 +329,7 @@ SmartPanel {
id: scanningBox
visible: panelViewMode === "wifi" && Settings.data.network.wifiEnabled && Object.keys(NetworkService.networks).length === 0 && NetworkService.scanning
Layout.fillWidth: true
Layout.preferredHeight: scanningColumn.implicitHeight + Style.marginXL
Layout.preferredHeight: scanningColumn.implicitHeight + Style.margin2M
ColumnLayout {
id: scanningColumn
@@ -368,7 +366,7 @@ SmartPanel {
id: emptyBox
visible: panelViewMode === "wifi" && Settings.data.network.wifiEnabled && !NetworkService.scanning && Object.keys(NetworkService.networks).length === 0 && !NetworkService.scanning
Layout.fillWidth: true
Layout.preferredHeight: emptyColumn.implicitHeight + Style.marginXL
Layout.preferredHeight: emptyColumn.implicitHeight + Style.margin2M
ColumnLayout {
id: emptyColumn
@@ -477,7 +475,7 @@ SmartPanel {
NBox {
visible: !(NetworkService.ethernetInterfaces && NetworkService.ethernetInterfaces.length > 0)
Layout.fillWidth: true
Layout.preferredHeight: emptyEthColumn.implicitHeight + Style.marginXL
Layout.preferredHeight: emptyEthColumn.implicitHeight + Style.margin2M
ColumnLayout {
id: emptyEthColumn
@@ -524,7 +522,7 @@ SmartPanel {
Layout.fillWidth: true
Layout.leftMargin: Style.marginXS
Layout.rightMargin: Style.marginXS
implicitHeight: ethItemColumn.implicitHeight + (Style.marginXL)
implicitHeight: ethItemColumn.implicitHeight + Style.margin2M
radius: Style.radiusM
border.width: Style.borderS
border.color: modelData.connected ? Color.mPrimary : Color.mOutline
@@ -532,7 +530,7 @@ SmartPanel {
ColumnLayout {
id: ethItemColumn
width: parent.width - (Style.marginXL)
width: parent.width - Style.margin2M
x: Style.marginM
y: Style.marginM
spacing: Style.marginS
@@ -573,8 +571,8 @@ SmartPanel {
visible: modelData.connected
color: Color.mPrimary
radius: height * 0.5
width: ethConnectedText.implicitWidth + (Style.marginS * 2)
height: ethConnectedText.implicitHeight + (Style.marginXS)
width: ethConnectedText.implicitWidth + Style.margin2S
height: ethConnectedText.implicitHeight + (Style.margin2XXS)
NText {
id: ethConnectedText
@@ -634,7 +632,7 @@ SmartPanel {
radius: Style.radiusS
border.width: Style.borderS
border.color: Color.mOutline
implicitHeight: ethInfoGrid.implicitHeight + Style.marginS * 2
implicitHeight: ethInfoGrid.implicitHeight + Style.margin2S
clip: true
Layout.topMargin: Style.marginXS
@@ -648,9 +646,7 @@ SmartPanel {
baseSize: Style.baseWidgetSize * 0.8
onClicked: {
ethernetDetailsGrid = !ethernetDetailsGrid;
if (Settings.data && Settings.data.ui) {
Settings.data.ui.wifiDetailsViewMode = ethernetDetailsGrid ? "grid" : "list";
}
Settings.data.network.wifiDetailsViewMode = ethernetDetailsGrid ? "grid" : "list";
}
z: 1
}
+17 -19
View File
@@ -22,7 +22,7 @@ NBox {
property string infoSsid: ""
// Local layout toggle for details: true = grid (2 cols), false = rows (1 col)
// Persisted under Settings.data.network.wifiDetailsViewMode
property bool detailsGrid: (Settings.data && Settings.data.ui && Settings.data.network.wifiDetailsViewMode !== undefined) ? (Settings.data.network.wifiDetailsViewMode === "grid") : true
property bool detailsGrid: (Settings.data.network.wifiDetailsViewMode === "grid")
signal passwordRequested(string ssid)
signal passwordSubmitted(string ssid, string password)
@@ -48,7 +48,7 @@ NBox {
}
Layout.fillWidth: true
Layout.preferredHeight: column.implicitHeight + Style.marginXL
Layout.preferredHeight: column.implicitHeight + Style.margin2M
visible: root.model.length > 0
ColumnLayout {
@@ -63,10 +63,8 @@ NBox {
Layout.leftMargin: Style.marginS
spacing: Style.marginS
NText {
text: root.label
pointSize: Style.fontSizeM
font.weight: Style.fontWeightBold
NLabel {
label: root.label
Layout.fillWidth: true
}
}
@@ -80,7 +78,7 @@ NBox {
Layout.fillWidth: true
Layout.leftMargin: Style.marginXS
Layout.rightMargin: Style.marginXS
implicitHeight: netColumn.implicitHeight + (Style.marginXL)
implicitHeight: netColumn.implicitHeight + Style.margin2M
opacity: (NetworkService.disconnectingFrom === modelData.ssid || NetworkService.forgettingNetwork === modelData.ssid) ? 0.6 : 1.0
@@ -94,7 +92,7 @@ NBox {
ColumnLayout {
id: netColumn
width: parent.width - (Style.marginXL)
width: parent.width - Style.margin2M
x: Style.marginM
y: Style.marginM
spacing: Style.marginS
@@ -156,8 +154,8 @@ NBox {
visible: modelData.connected && NetworkService.disconnectingFrom !== modelData.ssid
color: NetworkService.internetConnectivity ? Color.mPrimary : Color.mError
radius: height * 0.5
width: connectedText.implicitWidth + (Style.marginS * 2)
height: connectedText.implicitHeight + (Style.marginXS)
width: Math.round(connectedText.implicitWidth + Style.margin2S)
height: Math.round(connectedText.implicitHeight + Style.margin2XXS)
NText {
id: connectedText
@@ -186,8 +184,8 @@ NBox {
visible: NetworkService.disconnectingFrom === modelData.ssid
color: Color.mError
radius: height * 0.5
width: disconnectingText.implicitWidth + (Style.marginS * 2)
height: disconnectingText.implicitHeight + (Style.marginXS)
width: Math.round(disconnectingText.implicitWidth + Style.margin2S)
height: Math.round(disconnectingText.implicitHeight + Style.margin2XXS)
NText {
id: disconnectingText
@@ -202,8 +200,8 @@ NBox {
visible: NetworkService.forgettingNetwork === modelData.ssid
color: Color.mError
radius: height * 0.5
width: forgettingText.implicitWidth + (Style.marginS * 2)
height: forgettingText.implicitHeight + (Style.marginXS)
width: Math.round(forgettingText.implicitWidth + Style.margin2S)
height: Math.round(forgettingText.implicitHeight + Style.margin2XXS)
NText {
id: forgettingText
@@ -220,8 +218,8 @@ NBox {
border.color: Color.mOutline
border.width: Style.borderS
radius: height * 0.5
width: savedText.implicitWidth + (Style.marginS * 2)
height: savedText.implicitHeight + (Style.marginXS)
width: savedText.implicitWidth + Style.margin2S
height: savedText.implicitHeight + (Style.margin2XXS)
NText {
id: savedText
@@ -309,7 +307,7 @@ NBox {
radius: Style.radiusS
border.width: Style.borderS
border.color: Color.mOutline
implicitHeight: infoGrid.implicitHeight + Style.marginS * 2
implicitHeight: infoGrid.implicitHeight + Style.margin2S
clip: true
onVisibleChanged: {
if (visible && infoGrid && infoGrid.forceLayout) {
@@ -589,7 +587,7 @@ NBox {
Rectangle {
visible: root.passwordSsid === modelData.ssid && NetworkService.disconnectingFrom !== modelData.ssid && NetworkService.forgettingNetwork !== modelData.ssid
Layout.fillWidth: true
height: passwordRow.implicitHeight + Style.marginS * 2
height: passwordRow.implicitHeight + Style.margin2S
color: Color.mSurfaceVariant
border.color: Color.mOutline
border.width: Style.borderS
@@ -662,7 +660,7 @@ NBox {
Rectangle {
visible: root.expandedSsid === modelData.ssid && NetworkService.disconnectingFrom !== modelData.ssid && NetworkService.forgettingNetwork !== modelData.ssid
Layout.fillWidth: true
height: forgetRow.implicitHeight + Style.marginS * 2
height: forgetRow.implicitHeight + Style.margin2S
color: Color.mSurfaceVariant
radius: Style.radiusS
border.width: Style.borderS
@@ -4,7 +4,6 @@ import QtQuick.Layouts
import Quickshell
import Quickshell.Services.Notifications
import Quickshell.Wayland
import "../../../Helpers/Keybinds.js" as Keybinds
import qs.Commons
import qs.Modules.MainScreen
import qs.Services.System
@@ -14,8 +13,8 @@ import qs.Widgets
SmartPanel {
id: root
preferredWidth: Math.round(440 * Style.uiScaleRatio)
preferredHeight: Math.round(540 * Style.uiScaleRatio)
preferredWidth: Math.round((Settings.data.notifications.enableMarkdown ? 540 : 440) * Style.uiScaleRatio)
preferredHeight: Math.round((Settings.data.notifications.enableMarkdown ? 640 : 540) * Style.uiScaleRatio)
onOpened: {
NotificationService.updateLastSeenTs();
@@ -80,13 +79,21 @@ SmartPanel {
}
// Removal (Delete/Remove)
if (checkKey(event, 'keyRemove') || event.key === Qt.Key_Delete) {
if (checkKey(event, 'remove') || event.key === Qt.Key_Delete) {
removeSelection();
event.accepted = true;
return;
}
}
function parseActions(actions) {
try {
return JSON.parse(actions || "[]");
} catch (e) {
return [];
}
}
function moveSelection(dir) {
var m = NotificationService.historyList;
if (!m || m.count === 0)
@@ -136,11 +143,7 @@ SmartPanel {
if (!item)
return;
// Parse actions
var actions = [];
try {
actions = JSON.parse(item.actionsJson || "[]");
} catch (e) {}
var actions = parseActions(item.actionsJson);
if (actions.length === 0)
return;
@@ -164,19 +167,17 @@ SmartPanel {
return;
if (actionIndex >= 0) {
// Invoke action
var actions = [];
try {
actions = JSON.parse(item.actionsJson || "[]");
} catch (e) {}
var actions = parseActions(item.actionsJson);
if (actionIndex < actions.length) {
NotificationService.invokeAction(item.id, actions[actionIndex].identifier);
}
} else {
// Toggle expansion or open?
// User request didn't specify. Let's toggle expansion logic if we can access it.
// We can communicate with the delegate via a property or signal?
// Delegates read 'scrollView.expandedId'.
var delegate = notificationColumn.children[focusIndex];
if (!delegate)
return;
if (!(delegate.canExpand || delegate.isExpanded))
return;
if (scrollView.expandedId === item.id) {
scrollView.expandedId = "";
} else {
@@ -237,13 +238,13 @@ SmartPanel {
// Calculate content height based on header + tabs (if visible) + content
property real calculatedHeight: {
if (NotificationService.historyList.count === 0) {
return headerBox.implicitHeight + scrollView.implicitHeight + (Style.marginL * 2) + Style.marginM;
return headerBox.implicitHeight + scrollView.implicitHeight + Style.margin2L + Style.marginM;
}
return headerBox.implicitHeight + scrollView.implicitHeight + (Style.marginL * 2) + Style.marginM;
return headerBox.implicitHeight + scrollView.implicitHeight + Style.margin2L + Style.marginM;
}
property real contentPreferredHeight: Math.min(root.preferredHeight, Math.ceil(calculatedHeight))
property real layoutWidth: Math.max(1, root.preferredWidth - (Style.marginL * 2))
property real layoutWidth: Math.max(1, root.preferredWidth - Style.margin2L)
// State (lazy-loaded with panelContent)
property var rangeCounts: [0, 0, 0, 0]
@@ -378,7 +379,7 @@ SmartPanel {
NBox {
id: headerBox
Layout.fillWidth: true
implicitHeight: header.implicitHeight + Style.marginXL
implicitHeight: header.implicitHeight + Style.margin2M
ColumnLayout {
id: header
@@ -557,7 +558,7 @@ SmartPanel {
id: notificationDelegate
width: parent.width
visible: panelContent.isInCurrentRange(model.timestamp)
height: visible && !isRemoving ? contentColumn.height + Style.marginXL : 0
height: visible && !isRemoving ? contentColumn.height + Style.margin2M : 0
property int listIndex: index
property string notificationId: model.id
@@ -567,11 +568,56 @@ SmartPanel {
property real pressGlobalX: 0
property real pressGlobalY: 0
property bool isSwiping: false
property bool suppressClick: false
property bool isRemoving: false
property string pendingLink: ""
readonly property real swipeStartThreshold: Math.round(16 * Style.uiScaleRatio)
readonly property real swipeDismissThreshold: Math.max(110, width * 0.3)
readonly property int removeAnimationDuration: Style.animationNormal
readonly property int notificationTextFormat: (Settings.data.notifications.enableMarkdown && notificationDelegate.isExpanded) ? Text.MarkdownText : Text.StyledText
readonly property real actionButtonSize: Style.baseWidgetSize * 0.7
readonly property real buttonClusterWidth: notificationDelegate.actionButtonSize * 2 + Style.marginXS
readonly property real iconSize: Math.round(40 * Style.uiScaleRatio)
function isSafeLink(link) {
if (!link)
return false;
const lower = link.toLowerCase();
const schemes = ["http://", "https://", "mailto:"];
return schemes.some(scheme => lower.startsWith(scheme));
}
function linkAtPoint(x, y) {
if (!Settings.data.notifications.enableMarkdown || !notificationDelegate.isExpanded)
return "";
if (summaryText) {
const summaryPoint = summaryText.mapFromItem(historyInteractionArea, x, y);
if (summaryPoint.x >= 0 && summaryPoint.y >= 0 && summaryPoint.x <= summaryText.width && summaryPoint.y <= summaryText.height) {
const summaryLink = summaryText.linkAt ? summaryText.linkAt(summaryPoint.x, summaryPoint.y) : "";
if (isSafeLink(summaryLink))
return summaryLink;
}
}
if (bodyText) {
const bodyPoint = bodyText.mapFromItem(historyInteractionArea, x, y);
if (bodyPoint.x >= 0 && bodyPoint.y >= 0 && bodyPoint.x <= bodyText.width && bodyPoint.y <= bodyText.height) {
const bodyLink = bodyText.linkAt ? bodyText.linkAt(bodyPoint.x, bodyPoint.y) : "";
if (isSafeLink(bodyLink))
return bodyLink;
}
}
return "";
}
function updateCursorAt(x, y) {
if (notificationDelegate.isExpanded && notificationDelegate.linkAtPoint(x, y)) {
historyInteractionArea.cursorShape = Qt.PointingHandCursor;
} else {
historyInteractionArea.cursorShape = Qt.ArrowCursor;
}
}
transform: Translate {
x: notificationDelegate.swipeOffset
@@ -582,7 +628,6 @@ SmartPanel {
return;
isRemoving = true;
isSwiping = false;
suppressClick = true;
if (Settings.data.general.animationDisabled) {
NotificationService.removeFromHistory(notificationId);
@@ -634,13 +679,7 @@ SmartPanel {
}
// Parse actions safely
property var actionsList: {
try {
return JSON.parse(model.actionsJson || "[]");
} catch (e) {
return [];
}
}
property var actionsList: parseActions(model.actionsJson)
property bool isFocused: index === panelContent.focusIndex
@@ -669,20 +708,29 @@ SmartPanel {
MouseArea {
id: historyInteractionArea
anchors.fill: parent
anchors.rightMargin: Style.baseWidgetSize
anchors.rightMargin: notificationDelegate.buttonClusterWidth + Style.marginM
enabled: !notificationDelegate.isRemoving
cursorShape: notificationDelegate.canExpand ? Qt.PointingHandCursor : Qt.ArrowCursor
hoverEnabled: true
cursorShape: Qt.ArrowCursor
onPressed: mouse => {
panelContent.focusIndex = index;
panelContent.actionIndex = -1;
if (notificationDelegate.isExpanded) {
const link = notificationDelegate.linkAtPoint(mouse.x, mouse.y);
if (link) {
notificationDelegate.pendingLink = link;
} else {
notificationDelegate.pendingLink = "";
}
}
if (mouse.button !== Qt.LeftButton)
return;
const globalPoint = historyInteractionArea.mapToGlobal(mouse.x, mouse.y);
notificationDelegate.pressGlobalX = globalPoint.x;
notificationDelegate.pressGlobalY = globalPoint.y;
notificationDelegate.isSwiping = false;
notificationDelegate.suppressClick = false;
}
onPositionChanged: mouse => {
if (!(mouse.buttons & Qt.LeftButton) || notificationDelegate.isRemoving)
@@ -698,12 +746,15 @@ SmartPanel {
// Only start a swipe-dismiss when horizontal movement is dominant.
if (Math.abs(deltaX) <= Math.abs(deltaY) * 1.15) {
notificationDelegate.suppressClick = true;
return;
}
notificationDelegate.isSwiping = true;
}
if (notificationDelegate.pendingLink && Math.abs(deltaX) >= notificationDelegate.swipeStartThreshold) {
notificationDelegate.pendingLink = "";
}
notificationDelegate.swipeOffset = deltaX;
}
onReleased: mouse => {
@@ -716,31 +767,38 @@ SmartPanel {
} else {
notificationDelegate.swipeOffset = 0;
}
notificationDelegate.suppressClick = true;
notificationDelegate.isSwiping = false;
notificationDelegate.pendingLink = "";
return;
}
if (!notificationDelegate.canExpand || notificationDelegate.suppressClick)
return;
if (scrollView.expandedId === notificationId) {
scrollView.expandedId = "";
} else {
scrollView.expandedId = notificationId;
if (notificationDelegate.pendingLink) {
Qt.openUrlExternally(notificationDelegate.pendingLink);
notificationDelegate.pendingLink = "";
return;
}
}
onCanceled: {
notificationDelegate.isSwiping = false;
notificationDelegate.swipeOffset = 0;
notificationDelegate.suppressClick = true;
notificationDelegate.pendingLink = "";
historyInteractionArea.cursorShape = Qt.ArrowCursor;
}
}
HoverHandler {
target: historyInteractionArea
onPointChanged: notificationDelegate.updateCursorAt(point.position.x, point.position.y)
onActiveChanged: {
if (!active) {
historyInteractionArea.cursorShape = Qt.ArrowCursor;
}
}
}
onVisibleChanged: {
if (!visible) {
notificationDelegate.isSwiping = false;
notificationDelegate.suppressClick = false;
notificationDelegate.swipeOffset = 0;
notificationDelegate.opacity = 1;
notificationDelegate.isRemoving = false;
@@ -764,9 +822,9 @@ SmartPanel {
// Icon
NImageRounded {
anchors.verticalCenter: parent.verticalCenter
width: Math.round(40 * Style.uiScaleRatio)
height: Math.round(40 * Style.uiScaleRatio)
anchors.verticalCenter: notificationDelegate.isExpanded ? undefined : parent.verticalCenter
width: notificationDelegate.iconSize
height: notificationDelegate.iconSize
radius: Math.min(Style.radiusL, width / 2)
imagePath: model.cachedImage || model.originalImage || ""
borderColor: "transparent"
@@ -777,7 +835,7 @@ SmartPanel {
// Content
Column {
width: parent.width - Math.round(40 * Style.uiScaleRatio) - Style.marginM - Style.baseWidgetSize
width: parent.width - notificationDelegate.iconSize - notificationDelegate.buttonClusterWidth - Style.margin2M
spacing: Style.marginXS
// Header row with app name and timestamp
@@ -822,10 +880,10 @@ SmartPanel {
NText {
id: summaryText
width: parent.width
text: model.summary || I18n.tr("common.no-summary")
text: (Settings.data.notifications.enableMarkdown && notificationDelegate.isExpanded) ? (model.summaryMarkdown || I18n.tr("common.no-summary")) : (model.summary || I18n.tr("common.no-summary"))
pointSize: Style.fontSizeM
color: Color.mOnSurface
textFormat: Text.PlainText
textFormat: notificationDelegate.notificationTextFormat
wrapMode: Text.Wrap
maximumLineCount: notificationDelegate.isExpanded ? 999 : 2
elide: Text.ElideRight
@@ -835,42 +893,16 @@ SmartPanel {
NText {
id: bodyText
width: parent.width
text: model.body || ""
text: (Settings.data.notifications.enableMarkdown && notificationDelegate.isExpanded) ? (model.bodyMarkdown || "") : (model.body || "")
pointSize: Style.fontSizeS
color: Color.mOnSurfaceVariant
textFormat: Text.PlainText
textFormat: notificationDelegate.notificationTextFormat
wrapMode: Text.Wrap
maximumLineCount: notificationDelegate.isExpanded ? 999 : 3
elide: Text.ElideRight
visible: text.length > 0
}
// Expand indicator
Row {
width: parent.width
visible: !notificationDelegate.isExpanded && notificationDelegate.canExpand
spacing: Style.marginXS
Item {
width: parent.width - expandText.width - expandIcon.width - Style.marginXS
height: 1
}
NText {
id: expandText
text: I18n.tr("notifications.panel.click-to-expand") || "Click to expand"
pointSize: Style.fontSizeXS
color: Color.mPrimary
}
NIcon {
id: expandIcon
icon: "chevron-down"
pointSize: Style.fontSizeS
color: Color.mPrimary
}
}
// Actions Flow
Flow {
width: parent.width
@@ -909,15 +941,43 @@ SmartPanel {
}
}
// Delete button
NIconButton {
icon: "trash"
tooltipText: I18n.tr("tooltips.delete-notification")
baseSize: Style.baseWidgetSize * 0.7
anchors.top: parent.top
Item {
width: notificationDelegate.buttonClusterWidth
height: notificationDelegate.actionButtonSize
onClicked: {
NotificationService.removeFromHistory(notificationId);
Row {
anchors.right: parent.right
spacing: Style.marginXS
NIconButton {
id: expandButton
icon: notificationDelegate.isExpanded ? "chevron-up" : "chevron-down"
tooltipText: notificationDelegate.isExpanded ? I18n.tr("notifications.panel.click-to-collapse") || "Click to collapse" : I18n.tr("notifications.panel.click-to-expand") || "Click to expand"
baseSize: notificationDelegate.actionButtonSize
opacity: (notificationDelegate.canExpand || notificationDelegate.isExpanded) ? 1.0 : 0.0
enabled: notificationDelegate.canExpand || notificationDelegate.isExpanded
onClicked: {
notificationDelegate.pendingLink = "";
historyInteractionArea.cursorShape = Qt.ArrowCursor;
if (scrollView.expandedId === notificationId) {
scrollView.expandedId = "";
} else {
scrollView.expandedId = notificationId;
}
}
}
// Delete button
NIconButton {
icon: "trash"
tooltipText: I18n.tr("tooltips.delete-notification")
baseSize: notificationDelegate.actionButtonSize
onClicked: {
NotificationService.removeFromHistory(notificationId);
}
}
}
}
}
+25 -21
View File
@@ -6,7 +6,6 @@ import Quickshell
import Quickshell.Io
import Quickshell.Wayland
import Quickshell.Widgets
import "../../../Helpers/Keybinds.js" as Keybinds
import qs.Commons
import qs.Modules.MainScreen
import qs.Services.Compositor
@@ -35,7 +34,7 @@ SmartPanel {
var buttonSpacing = Style.marginS;
var enabledCount = powerOptions.length;
var headerSpacing = Settings.data.sessionMenu.showHeader ? (Style.marginL * 2) : 0;
var headerSpacing = Settings.data.sessionMenu.showHeader ? Style.margin2L : 0;
var baseHeight = (Style.marginL * 4) + headerHeight + dividerHeight + headerSpacing;
var buttonsHeight = enabledCount > 0 ? (buttonHeight * enabledCount) + (buttonSpacing * (enabledCount - 1)) : 0;
@@ -158,11 +157,16 @@ SmartPanel {
// Lifecycle handlers
onOpened: {
selectedIndex = -1;
ignoreMouseHover = true;
globalMouseInitialized = false;
mouseTrackingReady = false;
mouseTrackingDelayTimer.restart();
if (powerOptions.length > 0) {
selectedIndex = -1;
ignoreMouseHover = true;
globalMouseInitialized = false;
mouseTrackingReady = false;
mouseTrackingDelayTimer.restart();
} else {
Logger.w("SessionMenu", "Trying to open an empty session menu");
root.closeImmediately();
}
}
onClosed: {
@@ -323,13 +327,15 @@ SmartPanel {
newCol = newCol - 1 < 0 ? grid.itemsInRow(newRow) - 1 : newCol - 1;
break;
case "right":
newCol = newCol + 1 >= grid.itemsInRow(newRow) ? 0 : newCol + 1;
// We already moved to newCol to 0 if grid.currentCol was negative
newCol = grid.currentCol < 0 ? newRow : newCol + 1 >= grid.itemsInRow(newRow) ? 0 : newCol + 1;
break;
case "up":
newRow = newRow - 1 < 0 ? grid.rows - 1 : newRow - 1;
break;
case "down":
newRow = newRow + 1 >= grid.rows ? 0 : newRow + 1;
// We already moved to newRow to 0 if grid.currentRow was negative
newRow = grid.currentRow < 0 ? newRow : newRow + 1 >= grid.rows ? 0 : newRow + 1;
break;
}
@@ -568,8 +574,8 @@ SmartPanel {
anchors.bottom: largeButtonsContainer.top
anchors.horizontalCenter: largeButtonsContainer.horizontalCenter
anchors.bottomMargin: Style.marginM
width: timerText.width + Style.marginXL * 2
height: timerText.height + Style.marginL * 2
width: timerText.width + Style.margin2XL
height: timerText.height + Style.margin2L
radius: Style.radiusM
color: Qt.alpha(Color.mSurface, Settings.data.ui.panelBackgroundOpacity)
border.color: Color.mOutline
@@ -829,8 +835,8 @@ SmartPanel {
anchors.left: countdownText.visible ? countdownText.right : parent.left
anchors.leftMargin: countdownText.visible ? Style.marginXS : 0
anchors.verticalCenter: parent.verticalCenter
width: Math.max(Style.marginXL, labelText.implicitWidth + Style.marginM)
height: Style.marginXL
width: labelText.implicitWidth + Style.margin2M
height: labelText.height + Style.margin2XS
radius: Math.min(Style.radiusM, height / 2)
color: (buttonRoot.isSelected || buttonRoot.effectiveHover) ? Color.mOnPrimary : Qt.alpha(Color.mSurfaceVariant, 0.5)
border.width: Style.borderS
@@ -841,9 +847,8 @@ SmartPanel {
id: labelText
anchors.centerIn: parent
text: buttonRoot.keybind
pointSize: Style.fontSizeS
font.weight: Style.fontWeightBold
color: (buttonRoot.isSelected || buttonRoot.effectiveHover) ? Color.mPrimary : Color.mOnSurface
pointSize: Style.fontSizeXS
color: (buttonRoot.isSelected || buttonRoot.effectiveHover) ? Color.mPrimary : Color.mOnSurfaceVariant
Behavior on color {
ColorAnimation {
@@ -1066,8 +1071,8 @@ SmartPanel {
anchors.top: parent.top
anchors.right: parent.right
anchors.margins: Style.marginM
width: Math.max(Style.fontSizeM * 2, largeNumberText.implicitWidth + Style.marginM)
height: Style.fontSizeM * 2
width: largeNumberText.implicitWidth + Style.margin2M
height: largeNumberText.implicitHeight + Style.margin2XS
radius: Math.min(Style.radiusM, height / 2)
color: (largeButtonRoot.isSelected || largeButtonRoot.effectiveHover) ? Color.mOnPrimary : Qt.alpha(Color.mSurfaceVariant, 0.7)
border.width: Style.borderS
@@ -1079,12 +1084,11 @@ SmartPanel {
id: largeNumberText
anchors.centerIn: parent
text: largeButtonRoot.keybind
pointSize: Style.fontSizeM
font.weight: Style.fontWeightBold
pointSize: Style.fontSizeS
color: {
if (largeButtonRoot.isSelected || largeButtonRoot.effectiveHover)
return Color.mPrimary;
return Color.mOnSurface;
return Color.mOnSurfaceVariant;
}
Behavior on color {
@@ -20,7 +20,7 @@ NBox {
color: Color.mSurfaceVariant
Layout.fillWidth: true
implicitHeight: content.implicitHeight + Style.marginL * 2
implicitHeight: content.implicitHeight + Style.margin2L
// Helper to get widgets for this screen (ensures override exists)
function _getWidgetsContainer() {
@@ -117,6 +117,7 @@ NBox {
for (var i = 0; i < widgetIds.length; i++) {
var id = widgetIds[i];
var displayName = id;
const badges = [];
if (BarWidgetRegistry.isPluginWidget(id)) {
var pluginId = id.replace("plugin:", "");
var manifest = PluginRegistry.getPluginManifest(pluginId);
@@ -125,10 +126,21 @@ NBox {
} else {
displayName = pluginId;
}
badges.push({
"icon": "plugin",
"color": Color.mSecondary
});
}
if (BarWidgetRegistry.isCpuIntensive(id)) {
badges.push({
"icon": "cpu-intensive",
"color": Color.mSecondary
});
}
availableWidgetsModel.append({
"key": id,
"name": displayName
"name": displayName,
"badges": badges
});
}
}
@@ -1,6 +1,7 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import qs.Commons
import qs.Widgets
@@ -19,12 +20,16 @@ ColumnLayout {
property string valueDisplayMode: widgetData.displayMode !== undefined ? widgetData.displayMode : widgetMetadata.displayMode
property string valueIconColor: widgetData.iconColor !== undefined ? widgetData.iconColor : widgetMetadata.iconColor
property string valueTextColor: widgetData.textColor !== undefined ? widgetData.textColor : widgetMetadata.textColor
property bool valueApplyToAllMonitors: widgetData.applyToAllMonitors !== undefined ? widgetData.applyToAllMonitors : widgetMetadata.applyToAllMonitors
readonly property bool hasMultipleMonitors: (Quickshell.screens || []).length > 1
function saveSettings() {
var settings = Object.assign({}, widgetData || {});
settings.displayMode = valueDisplayMode;
settings.iconColor = valueIconColor;
settings.textColor = valueTextColor;
settings.applyToAllMonitors = valueApplyToAllMonitors;
settingsChanged(settings);
}
@@ -69,4 +74,17 @@ ColumnLayout {
saveSettings();
}
}
NToggle {
visible: hasMultipleMonitors
Layout.fillWidth: true
label: I18n.tr("bar.brightness.apply-all-label")
description: I18n.tr("bar.brightness.apply-all-description")
checked: valueApplyToAllMonitors
onToggled: checked => {
valueApplyToAllMonitors = checked;
saveSettings();
}
defaultValue: widgetMetadata.applyToAllMonitors
}
}
@@ -25,20 +25,7 @@ ColumnLayout {
property string valueFormatVertical: widgetData.formatVertical !== undefined ? widgetData.formatVertical : (widgetMetadata.formatVertical !== undefined ? widgetMetadata.formatVertical : "")
property string valueTooltipFormat: widgetData.tooltipFormat !== undefined ? widgetData.tooltipFormat : (widgetMetadata.tooltipFormat !== undefined ? widgetMetadata.tooltipFormat : "")
readonly property color textColor: {
switch (valueClockColor) {
case "primary":
return Color.mPrimary;
case "secondary":
return Color.mSecondary;
case "tertiary":
return Color.mTertiary;
case "error":
return Color.mError;
default:
return Color.mOnSurface;
}
}
readonly property color textColor: Color.resolveColorKey(valueClockColor)
// Track the currently focused input field
property var focusedInput: null
@@ -24,9 +24,12 @@ ColumnLayout {
property int valueMaxTextLengthVertical: widgetData?.maxTextLength?.vertical ?? widgetMetadata?.maxTextLength?.vertical
property string valueHideMode: (widgetData.hideMode !== undefined) ? widgetData.hideMode : widgetMetadata.hideMode
property bool valueShowIcon: (widgetData.showIcon !== undefined) ? widgetData.showIcon : widgetMetadata.showIcon
property bool valueShowExecTooltip: widgetData.showExecTooltip !== undefined ? widgetData.showExecTooltip : (widgetMetadata.showExecTooltip !== undefined ? widgetMetadata.showExecTooltip : true)
property bool valueShowTextTooltip: widgetData.showTextTooltip !== undefined ? widgetData.showTextTooltip : (widgetMetadata.showTextTooltip !== undefined ? widgetMetadata.showTextTooltip : true)
property bool valueEnableColorization: widgetData.enableColorization || false
property string valueColorizeSystemIcon: widgetData.colorizeSystemIcon !== undefined ? widgetData.colorizeSystemIcon : widgetMetadata.colorizeSystemIcon || "none"
property string valueIpcIdentifier: widgetData.ipcIdentifier !== undefined ? widgetData.ipcIdentifier : widgetMetadata.ipcIdentifier || ""
property string valueGeneralTooltipText: widgetData.generalTooltipText !== undefined ? widgetData.generalTooltipText : widgetMetadata.generalTooltipText || ""
function saveSettings() {
var settings = Object.assign({}, widgetData || {});
@@ -49,6 +52,8 @@ ColumnLayout {
settings.textStream = valueTextStream;
settings.parseJson = valueParseJson;
settings.showIcon = valueShowIcon;
settings.showExecTooltip = valueShowExecTooltip;
settings.showTextTooltip = valueShowTextTooltip;
settings.hideMode = valueHideMode;
settings.maxTextLength = {
"horizontal": valueMaxTextLengthHorizontal,
@@ -58,6 +63,7 @@ ColumnLayout {
settings.enableColorization = valueEnableColorization;
settings.colorizeSystemIcon = valueColorizeSystemIcon;
settings.ipcIdentifier = valueIpcIdentifier;
settings.generalTooltipText = valueGeneralTooltipText;
settingsChanged(settings);
}
@@ -93,8 +99,8 @@ ColumnLayout {
NToggle {
id: showIconToggle
label: I18n.tr("bar.custom-button.show-icon-label", "Show icon")
description: I18n.tr("bar.custom-button.show-icon-description", "Toggles the visibility of the widget's icon.")
label: I18n.tr("bar.custom-button.show-icon-label")
description: I18n.tr("bar.custom-button.show-icon-description")
checked: valueShowIcon
onToggled: checked => {
valueShowIcon = checked;
@@ -124,6 +130,38 @@ ColumnLayout {
}
}
NTextInput {
Layout.fillWidth: true
label: I18n.tr("bar.custom-button.general-tooltip-text-label")
description: I18n.tr("bar.custom-button.general-tooltip-text-description")
placeholderText: I18n.tr("placeholders.enter-tooltip")
text: valueGeneralTooltipText
onTextChanged: valueGeneralTooltipText = text
onEditingFinished: saveSettings()
}
NToggle {
id: showExecTooltipToggle
label: I18n.tr("bar.custom-button.show-exec-tooltip-label")
description: I18n.tr("bar.custom-button.show-exec-tooltip-description")
checked: valueShowExecTooltip
onToggled: checked => {
valueShowExecTooltip = checked;
saveSettings();
}
}
NToggle {
id: showTextTooltipToggle
label: I18n.tr("bar.custom-button.show-text-tooltip-label")
description: I18n.tr("bar.custom-button.show-text-tooltip-description")
checked: valueShowTextTooltip
onToggled: checked => {
valueShowTextTooltip = checked;
saveSettings();
}
}
NTextInput {
Layout.fillWidth: true
label: I18n.tr("bar.custom-button.ipc-identifier-label")
@@ -152,7 +190,7 @@ ColumnLayout {
enabled: !valueTextStream
Layout.alignment: Qt.AlignRight | Qt.AlignBottom
Layout.bottomMargin: Style.marginS
onEntered: TooltipService.show(leftClickUpdateText, I18n.tr("bar.custom-button.left-click-update-text"), "auto")
onEntered: TooltipService.show(leftClickUpdateText, I18n.tr("bar.custom-button.left-click-update-text"))
onExited: TooltipService.hide()
checked: widgetData?.leftClickUpdateText ?? widgetMetadata.leftClickUpdateText
onToggled: isChecked => {
@@ -180,7 +218,7 @@ ColumnLayout {
enabled: !valueTextStream
Layout.alignment: Qt.AlignRight | Qt.AlignBottom
Layout.bottomMargin: Style.marginS
onEntered: TooltipService.show(rightClickUpdateText, I18n.tr("bar.custom-button.right-click-update-text"), "auto")
onEntered: TooltipService.show(rightClickUpdateText, I18n.tr("bar.custom-button.right-click-update-text"))
onExited: TooltipService.hide()
checked: widgetData?.rightClickUpdateText ?? widgetMetadata.rightClickUpdateText
onToggled: isChecked => {
@@ -208,7 +246,7 @@ ColumnLayout {
enabled: !valueTextStream
Layout.alignment: Qt.AlignRight | Qt.AlignBottom
Layout.bottomMargin: Style.marginS
onEntered: TooltipService.show(middleClickUpdateText, I18n.tr("bar.custom-button.middle-click-update-text"), "auto")
onEntered: TooltipService.show(middleClickUpdateText, I18n.tr("bar.custom-button.middle-click-update-text"))
onExited: TooltipService.hide()
checked: widgetData?.middleClickUpdateText ?? widgetMetadata.middleClickUpdateText
onToggled: isChecked => {
@@ -222,8 +260,8 @@ ColumnLayout {
NToggle {
id: separateWheelToggle
Layout.fillWidth: true
label: I18n.tr("bar.custom-button.wheel-mode-separate-label", "Separate wheel commands")
description: I18n.tr("bar.custom-button.wheel-mode-separate-description", "Enable separate commands for wheel up and down")
label: I18n.tr("bar.custom-button.wheel-mode-separate-label")
description: I18n.tr("bar.custom-button.wheel-mode-separate-description")
property bool internalChecked: (widgetData?.wheelMode || widgetMetadata?.wheelMode) === "separate"
checked: internalChecked
onToggled: checked => {
@@ -255,7 +293,7 @@ ColumnLayout {
enabled: !valueTextStream
Layout.alignment: Qt.AlignRight | Qt.AlignBottom
Layout.bottomMargin: Style.marginS
onEntered: TooltipService.show(wheelUpdateText, I18n.tr("bar.custom-button.wheel-update-text"), "auto")
onEntered: TooltipService.show(wheelUpdateText, I18n.tr("bar.custom-button.wheel-update-text"))
onExited: TooltipService.hide()
checked: widgetData?.wheelUpdateText ?? widgetMetadata?.wheelUpdateText
onToggled: isChecked => {
@@ -288,7 +326,7 @@ ColumnLayout {
enabled: !valueTextStream
Layout.alignment: Qt.AlignRight | Qt.AlignBottom
Layout.bottomMargin: Style.marginS
onEntered: TooltipService.show(wheelUpUpdateText, I18n.tr("bar.custom-button.wheel-update-text"), "auto")
onEntered: TooltipService.show(wheelUpUpdateText, I18n.tr("bar.custom-button.wheel-update-text"))
onExited: TooltipService.hide()
checked: (widgetData?.wheelUpUpdateText !== undefined) ? widgetData.wheelUpUpdateText : widgetMetadata?.wheelUpUpdateText
onToggled: isChecked => {
@@ -316,7 +354,7 @@ ColumnLayout {
enabled: !valueTextStream
Layout.alignment: Qt.AlignRight | Qt.AlignBottom
Layout.bottomMargin: Style.marginS
onEntered: TooltipService.show(wheelDownUpdateText, I18n.tr("bar.custom-button.wheel-update-text"), "auto")
onEntered: TooltipService.show(wheelDownUpdateText, I18n.tr("bar.custom-button.wheel-update-text"))
onExited: TooltipService.hide()
checked: (widgetData?.wheelDownUpdateText !== undefined) ? widgetData.wheelDownUpdateText : widgetMetadata?.wheelDownUpdateText
onToggled: isChecked => {
@@ -337,8 +375,8 @@ ColumnLayout {
}
NSpinBox {
label: I18n.tr("bar.custom-button.max-text-length-horizontal-label", "Max text length (horizontal)")
description: I18n.tr("bar.custom-button.max-text-length-horizontal-description", "Maximum number of characters to show in horizontal bar (0 to hide text)")
label: I18n.tr("bar.custom-button.max-text-length-horizontal-label")
description: I18n.tr("bar.custom-button.max-text-length-horizontal-description")
from: 0
to: 100
value: valueMaxTextLengthHorizontal
@@ -349,8 +387,8 @@ ColumnLayout {
}
NSpinBox {
label: I18n.tr("bar.custom-button.max-text-length-vertical-label", "Max text length (vertical)")
description: I18n.tr("bar.custom-button.max-text-length-vertical-description", "Maximum number of characters to show in vertical bar (0 to hide text)")
label: I18n.tr("bar.custom-button.max-text-length-vertical-label")
description: I18n.tr("bar.custom-button.max-text-length-vertical-description")
from: 0
to: 100
value: valueMaxTextLengthVertical
@@ -373,8 +411,8 @@ ColumnLayout {
NToggle {
id: parseJsonInput
label: I18n.tr("bar.custom-button.parse-json-label", "Parse output as JSON")
description: I18n.tr("bar.custom-button.parse-json-description", "Parse the command output as a JSON object to dynamically set text and icon.")
label: I18n.tr("bar.custom-button.parse-json-label")
description: I18n.tr("bar.custom-button.parse-json-description")
checked: valueParseJson
onToggled: checked => {
valueParseJson = checked;
@@ -416,19 +454,19 @@ ColumnLayout {
NComboBox {
id: hideModeComboBox
label: I18n.tr("bar.custom-button.hide-mode-label", "Hide mode")
description: I18n.tr("bar.custom-button.hide-mode-description", "Controls widget visibility when the command has no output.")
label: I18n.tr("bar.custom-button.hide-mode-label")
description: I18n.tr("bar.custom-button.hide-mode-description")
model: [
{
name: I18n.tr("bar.custom-button.hide-mode-always-expanded", "Always expanded"),
name: I18n.tr("bar.custom-button.hide-mode-always-expanded"),
key: "alwaysExpanded"
},
{
name: I18n.tr("bar.custom-button.hide-mode-expand-with-output", "Expand when has output"),
name: I18n.tr("bar.custom-button.hide-mode-expand-with-output"),
key: "expandWithOutput"
},
{
name: I18n.tr("bar.custom-button.hide-mode-max-transparent", "Max expanded but transparent"),
name: I18n.tr("bar.custom-button.hide-mode-max-transparent"),
key: "maxTransparent"
}
]

Some files were not shown because too many files have changed in this diff Show More