mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
Merge remote-tracking branch 'upstream/main'
This commit is contained in:
@@ -1 +1,2 @@
|
||||
buy_me_a_coffee: noctalia
|
||||
ko_fi: noctaliadev
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||
"modules": [
|
||||
"os",
|
||||
"kernel",
|
||||
"title",
|
||||
"host",
|
||||
"uptime",
|
||||
"cpu",
|
||||
"gpu",
|
||||
"memory",
|
||||
"disk",
|
||||
"wm",
|
||||
"packages"
|
||||
]
|
||||
}
|
||||
@@ -153,68 +153,46 @@ body {
|
||||
--purple-5: hsl(267deg, 83%, 70%);
|
||||
}
|
||||
|
||||
.divider__908e2:not(.isUnread__908e2) {
|
||||
border-color: var(--bg-2);
|
||||
/* Dividers (Channel list and messages) */
|
||||
[class*="divider"]:not([class*="isUnread"]) {
|
||||
border-color: var(--bg-2) !important;
|
||||
}
|
||||
|
||||
.bannerButton_de8008, .bannerColor_fb7f94 {
|
||||
color: var(--text-1);
|
||||
/* Profile Banners */
|
||||
[class*="bannerButton"],
|
||||
[class*="bannerColor"] {
|
||||
color: var(--text-1) !important;
|
||||
}
|
||||
|
||||
/* Prevent scaling animation on DMS icon */
|
||||
.wrapper__6e9f8[data-list-item-id='guildsnav___home']:hover > .childWrapper__6e9f8::before,
|
||||
.wrapper__6e9f8[data-list-item-id='guildsnav___home'].selected__6e9f8 > .childWrapper__6e9f8::before {
|
||||
/* Prevent scaling animation on Home/DMS icon */
|
||||
[class*="guildsnav"] [class*="wrapper"][data-list-item-id='guildsnav___home']:hover > [class*="childWrapper"]::before,
|
||||
[class*="guildsnav"] [class*="wrapper"][data-list-item-id='guildsnav___home'][class*="selected"] > [class*="childWrapper"]::before {
|
||||
transform: rotate(-360deg) scale(1) !important;
|
||||
}
|
||||
|
||||
/* Make timestamps use lighter text color */
|
||||
.timestamp_c19a55,
|
||||
.timestampInline_c19a55,
|
||||
.timestamp_c19a55 time,
|
||||
.timestampInline_c19a55 time {
|
||||
color: var(--text-4) !important;
|
||||
}
|
||||
|
||||
/* Make timestamps more readable by overriding inline styles */
|
||||
/* Timestamps */
|
||||
[class*="timestamp"],
|
||||
[class*="timestampInline"],
|
||||
[class*="timestamp"] time {
|
||||
color: var(--text-4) !important;
|
||||
}
|
||||
|
||||
.postTitleText_faa96b {
|
||||
/* Forum/Thread Titles */
|
||||
[class*="postTitleText"],
|
||||
[class*="postTitleText"] [class*="highlight"] {
|
||||
color: var(--text-2) !important;
|
||||
}
|
||||
|
||||
.postTitleText_faa96b .highlight {
|
||||
color: var(--text-2) !important;
|
||||
}
|
||||
|
||||
/* Make thread titles more readable by overriding inline styles */
|
||||
[class*="headerText"] [class*="postTitleText"],
|
||||
[class*="headerText"] h3[class*="postTitleText"] {
|
||||
color: var(--text-2) !important;
|
||||
}
|
||||
|
||||
.messageContent_c19a55,
|
||||
.messageContent_faa96b {
|
||||
color: var(--text-3) !important;
|
||||
}
|
||||
|
||||
.messageContent_c19a55 .highlight,
|
||||
.messageContent_faa96b .highlight {
|
||||
color: var(--text-2) !important;
|
||||
}
|
||||
|
||||
/* Make message content more readable by overriding inline styles */
|
||||
/* Message Content */
|
||||
[class*="messageContent"] {
|
||||
color: var(--text-3) !important;
|
||||
}
|
||||
|
||||
[class*="messageContent"] .highlight {
|
||||
[class*="messageContent"] [class*="highlight"] {
|
||||
color: var(--text-2) !important;
|
||||
}
|
||||
|
||||
/* Make slowmode/cooldown text more readable by overriding inline styles */
|
||||
/* Slowmode/Cooldown Text */
|
||||
[class*="cooldownText"] {
|
||||
color: var(--text-4) !important;
|
||||
}
|
||||
@@ -227,16 +205,16 @@ body {
|
||||
|
||||
[class*="checkboxOption"]:hover [class*="checkboxIndicator"] {
|
||||
background-color: color-mix(in srgb, var(--accent-1) 20%, transparent) !important;
|
||||
border-color: var(--accent-1) !important;
|
||||
border-color: var(--accent-3) !important;
|
||||
}
|
||||
|
||||
[class*="checkboxOption"][data-selected] [class*="checkboxIndicator"] {
|
||||
background-color: var(--accent-1) !important;
|
||||
border-color: var(--accent-1) !important;
|
||||
border-color: var(--accent-3) !important;
|
||||
}
|
||||
|
||||
[class*="checkboxOption"][data-selected]:hover [class*="checkboxIndicator"] {
|
||||
background-color: var(--accent-3) !important;
|
||||
background-color: var(--accent-1) !important;
|
||||
border-color: var(--accent-3) !important;
|
||||
}
|
||||
|
||||
@@ -269,7 +247,7 @@ body {
|
||||
|
||||
/* Inner dot (selected) */
|
||||
[class*="innerDotRadio"] {
|
||||
fill: var(--accent-1) !important; /* contrast dot */
|
||||
fill: var(--accent-3) !important; /* contrast dot */
|
||||
opacity: 0; /* hidden by default */
|
||||
transition: opacity 0.2s ease;
|
||||
}
|
||||
@@ -279,8 +257,8 @@ body {
|
||||
[class*="radioSelection"][data-selected="true"] [class*="innerDotRadio"],
|
||||
[class*="radioSelection"][aria-checked="true"] [class*="outerRadioFill"],
|
||||
[class*="radioSelection"][aria-checked="true"] [class*="innerDotRadio"],
|
||||
.parentSelected__6e9f8 [class*="outerRadioFill"],
|
||||
.parentSelected__6e9f8 [class*="innerDotRadio"] {
|
||||
[class*="parentSelected"] [class*="outerRadioFill"],
|
||||
[class*="parentSelected"] [class*="innerDotRadio"] {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
@@ -303,7 +281,7 @@ body {
|
||||
|
||||
[class*="checkboxOption"][data-selected="true"] [class*="checkStroke"],
|
||||
[class*="checkboxOption"][data-selected="true"] [class*="dot"] {
|
||||
color: var(--accent-1) !important; /* checkmark/dot color */
|
||||
color: var(--accent-3) !important; /* checkmark color */
|
||||
}
|
||||
|
||||
/* Hover effect for selected checkbox */
|
||||
@@ -311,35 +289,82 @@ body {
|
||||
border-color: var(--accent-1) /* keep background consistent on hover */
|
||||
}
|
||||
|
||||
._714a9a7abaf0392a-checkboxOption[data-selected="true"]:hover ._714a9a7abaf0392a-checkStroke,
|
||||
._714a9a7abaf0392a-checkboxOption[data-selected="true"]:hover ._714a9a7abaf0392a-dot {
|
||||
color: var(--accent-1) !important; /* keep checkmark accent color on hover */
|
||||
}
|
||||
|
||||
/* Fix hover color for channel mentions */
|
||||
.channelMention:hover {
|
||||
color: var(--text-1) !important;
|
||||
}
|
||||
|
||||
[class*="unreadTop"],
|
||||
[class*="unreadBottom"],
|
||||
[class*="unreadMentionsIndicator"] {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
[class*="unreadBar"],
|
||||
[class*="unreadMentionsBar"] {
|
||||
background-color: var(--accent-1) !important;
|
||||
border: 1px solid var(--border);
|
||||
}
|
||||
|
||||
[class*="unreadBar"][class*="mention"],
|
||||
[class*="unreadMentionsBar"][class*="mention"] {
|
||||
background-color: var(--accent-1) !important;
|
||||
}
|
||||
|
||||
[class*="unreadBar"][class*="unread"],
|
||||
[class*="unreadMentionsBar"][class*="unread"] {
|
||||
background-color: var(--bg-1) !important;
|
||||
border-color: var(--accent-1) !important;
|
||||
}
|
||||
|
||||
[class*="unreadBar"] [class*="text"],
|
||||
[class*="unreadMentionsBar"] [class*="text"] {
|
||||
color: var(--text-0) !important;
|
||||
color: var(--text-1) !important;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
[class*="unreadMentionsIndicator"] [class*="bar"] {
|
||||
background-color: var(--accent-1) !important;
|
||||
/* Fix polls visibility */
|
||||
[class*="pollContainer_"] [class*="selected__"] [class*="radioForeground_"] {
|
||||
fill: var(--accent-3) !important;
|
||||
}
|
||||
|
||||
[class*="pollContainer_"] [class*="selected__"] {
|
||||
border: 2px solid var(--active) !important;
|
||||
}
|
||||
|
||||
[class*="votedStyles_"] [class*="votePercentageBar_"] {
|
||||
background-color: var(--active-2) !important;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
[class*="pollContainer_"] [class*="answerSelectionIcon_"] circle {
|
||||
fill: var(--accent-3) !important;
|
||||
}
|
||||
|
||||
[class*="pollContainer_"] [class*="votedStyles_"] [class*="answerSelectionIcon_"] path {
|
||||
fill: var(--bg-1) !important;
|
||||
}
|
||||
|
||||
[class*="pollContainer_"] [class*="answer__"]:not([class*="votedStyles_"]) [class*="answerSelectionIcon_"] path {
|
||||
fill: var(--accent-1) !important;
|
||||
}
|
||||
|
||||
[class*="pollContainer_"] [class*="votesData_"] {
|
||||
color: var(--text-2) !important;
|
||||
}
|
||||
|
||||
[class*="pollContainer_"] [class*="votedStyles_"] [class*="answerInner_"] {
|
||||
border: 2px solid var(--active) !important;
|
||||
}
|
||||
|
||||
/* Invite to server button override*/
|
||||
[class*="inviteButton_"] svg path,
|
||||
[class*="actionIcon_"] path[d^="M14.5 8a3 3 0"] {
|
||||
fill: var(--accent-1) !important;
|
||||
color: var(--accent-1) !important;
|
||||
}
|
||||
|
||||
[class*="inviteButton_"]:hover svg path {
|
||||
fill: var(--accent-3) !important;
|
||||
color: var(--accent-3) !important;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
;;; noctalia-theme.el --- Theme using Template SCSS variables
|
||||
;;; noctalia-theme.el --- Theme using Template SCSS variables -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2025
|
||||
|
||||
|
||||
@@ -2,21 +2,25 @@
|
||||
"wallpaper": "{{image}}",
|
||||
"alpha": "100",
|
||||
"colors": {
|
||||
"color0": "{{colors.background.default.hex}}",
|
||||
"color1": "{{colors.surface_container.default.hex}}",
|
||||
"color2": "{{colors.surface_container_highest.default.hex}}",
|
||||
"color3": "",
|
||||
"color0": "{{colors.shadow.default.hex}}",
|
||||
"color1": "",
|
||||
"color2": "",
|
||||
"color3": "{{colors.primary.default.hex}}",
|
||||
"color4": "",
|
||||
"color5": "",
|
||||
"color5": "{{colors.tertiary.default.hex}}",
|
||||
"color6": "",
|
||||
"color7": "",
|
||||
"color7": "{{colors.surface_container_highest.default.hex}}",
|
||||
"color8": "",
|
||||
"color9": "",
|
||||
"color10": "{{colors.primary.default.hex}}",
|
||||
"color11": "{{colors.secondary.default.hex}}",
|
||||
"color12": "{{colors.tertiary.default.hex}}",
|
||||
"color13": "{{colors.surface_bright.default.hex}}",
|
||||
"color11": "",
|
||||
"color12": "",
|
||||
"color13": "{{colors.secondary.default.hex}}",
|
||||
"color14": "",
|
||||
"color15": "{{colors.on_surface.default.hex}}"
|
||||
"color15": "{{colors.on_background.default.hex}}",
|
||||
"color16": "{{colors.on_surface.default.hex}}",
|
||||
"color17": "{{colors.surface_container.default.hex}}",
|
||||
"color18": "",
|
||||
"color19": "{{colors.background.default.hex}}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
## Colours - Based on Material Design 3 Palette
|
||||
set $primary #{{colors.primary.default.hex_stripped}}
|
||||
set $on_primary #{{colors.on_primary.default.hex_stripped}}
|
||||
set $secondary #{{colors.secondary.default.hex_stripped}}
|
||||
set $tertiary #{{colors.tertiary.default.hex_stripped}}
|
||||
set $error #{{colors.error.default.hex_stripped}}
|
||||
set $surface #{{colors.surface.default.hex_stripped}}
|
||||
set $on_surface #{{colors.on_surface.default.hex_stripped}}
|
||||
set $on_surface_variant #{{colors.on_surface_variant.default.hex_stripped}}
|
||||
set $outline #{{colors.outline.default.hex_stripped}}
|
||||
|
||||
## Window Colours
|
||||
# class border backgr. text indicator child_border
|
||||
client.focused $primary $surface $on_surface $secondary $primary
|
||||
client.focused_inactive $outline $surface $on_surface_variant $outline $outline
|
||||
client.unfocused $outline $surface $on_surface_variant $outline $outline
|
||||
client.urgent $error $surface $on_surface $error $error
|
||||
client.placeholder $surface $surface $on_surface_variant $surface $surface
|
||||
client.background $surface
|
||||
@@ -21,4 +21,6 @@ background {{colors.surface.default.hex}}
|
||||
foreground {{colors.on_surface.default.hex}}
|
||||
selection_foreground {{colors.on_surface_variant.default.hex}}
|
||||
selection_background {{colors.surface_variant.default.hex}}
|
||||
active_border_color {{colors.primary.default.hex}}
|
||||
inactive_border_color {{colors.surface_variant.default.hex}}
|
||||
url_color {{colors.primary.default.hex}}
|
||||
|
||||
+209
-70
@@ -31,7 +31,7 @@
|
||||
},
|
||||
"bar": {
|
||||
"active-window": {
|
||||
"colorize-icons-description": "Theme-Farben auf das aktive Fenster-Symbol anwenden.",
|
||||
"colorize-icons-description": "Themenfarben auf das aktive Fenster-Symbol anwenden.",
|
||||
"hide-mode-description": "Steuert das Verhalten des Widgets, wenn kein Fenster aktiv ist.",
|
||||
"scrolling-mode-description": "Steuern, wann Textscrolling für lange Fenstertitel aktiviert ist.",
|
||||
"show-app-icon-description": "Anwendungssymbol neben dem Fenstertitel anzeigen.",
|
||||
@@ -48,11 +48,16 @@
|
||||
"device-default": "Standard (Anzeigegerät)",
|
||||
"device-description": "Wählen Sie das anzuzeigende Akkugerät aus.",
|
||||
"device-label": "Akkugerät",
|
||||
"display-mode-description": "Wählen Sie, wie der Akku in der Leiste angezeigt wird.",
|
||||
"display-mode-graphic": "Grafischer Akku",
|
||||
"display-mode-graphic-clean": "Grafischer Akku (ohne %)",
|
||||
"display-mode-icon-always": "Symbol - Immer % anzeigen",
|
||||
"display-mode-icon-hover": "Symbol - Beim Hover anzeigen",
|
||||
"display-mode-icon-only": "Nur Symbol",
|
||||
"hide-if-idle-description": "Das Widget ausblenden, wenn der Akku nicht geladen oder entladen wird.",
|
||||
"hide-if-idle-label": "Ausblenden, wenn im Leerlauf",
|
||||
"hide-if-not-detected-description": "Widget ausblenden, wenn kein Akku im System erkannt wird.",
|
||||
"hide-if-not-detected-label": "Ausblenden, wenn nicht erkannt",
|
||||
"low-battery-threshold-description": "Warnung anzeigen, wenn Akku unter diesen Prozentsatz fällt.",
|
||||
"low-battery-threshold-label": "Schwellenwert für niedrigen Akkustand",
|
||||
"show-noctalia-performance-description": "Zeige den Noctalia-Leistungsmodus-Schalter im Akku-Panel an.<br>Deaktiviert Schatten und Animationen in Noctalia, um Ressourcen zu sparen.",
|
||||
"show-noctalia-performance-label": "Noctalia-Performance-Schalter anzeigen",
|
||||
@@ -67,18 +72,16 @@
|
||||
"custom-font-placeholder": "Benutzerdefinierte Schriftart auswählen...",
|
||||
"custom-font-search-placeholder": "Schriftarten suchen...",
|
||||
"horizontal-bar-description": "Tipp: Verwenden Sie \\n, um einen Zeilenumbruch zu erstellen.",
|
||||
"horizontal-bar-label": "Horizontale Statusleiste",
|
||||
"horizontal-bar-label": "Horizontale Leiste",
|
||||
"preview": "Vorschau",
|
||||
"tooltip-format-description": "Formatzeichenfolge für den Tooltip, der beim Überfahren der Uhr angezeigt wird. Leer lassen, um den Standard-Tooltip zu verwenden.",
|
||||
"tooltip-format-description": "Formatzeichenfolge für den Tooltip, der beim Bewegen des Mauszeigers über die Uhr angezeigt wird. Leer lassen, um den Standard-Tooltip zu verwenden.",
|
||||
"tooltip-format-label": "Tooltip-Format",
|
||||
"use-custom-font-description": "Überschreibt die Standard-Schriftart mit einer benutzerdefinierten Schriftart für die Uhr.",
|
||||
"use-custom-font-label": "Benutzerdefinierte Schriftart verwenden",
|
||||
"use-monospaced-font-description": "Wenn aktiviert, verwendet die Uhr die Monospace-Schriftart.",
|
||||
"use-monospaced-font-label": "Monospace-Schriftart verwenden",
|
||||
"use-primary-color-description": "Wenn aktiviert, wird die Primärfarbe zur Hervorhebung angewendet.",
|
||||
"use-primary-color-label": "Primärfarbe verwenden",
|
||||
"vertical-bar-description": "Verwenden Sie ein Leerzeichen, um jeden Teil in eine neue Zeile zu trennen.",
|
||||
"vertical-bar-label": "Vertikale Statusleiste"
|
||||
"vertical-bar-label": "Vertikale Leiste"
|
||||
},
|
||||
"control-center": {
|
||||
"browse-file": "Datei durchsuchen",
|
||||
@@ -93,8 +96,7 @@
|
||||
"custom-button": {
|
||||
"collapse-condition-description": "Wenn der Ausgabetext diesem Wert entspricht, wird die Schaltfläche eingeklappt.",
|
||||
"collapse-condition-label": "Einklappbedingung",
|
||||
"color-selection-description": "Designfarben auf Symbol und Text anwenden.",
|
||||
"color-selection-label": "Farbe auswählen",
|
||||
"color-selection-description": "Themenfarben auf Symbol und Text anwenden.",
|
||||
"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.",
|
||||
@@ -181,8 +183,10 @@
|
||||
"hide-widget-when-zero-label": "Symbol bei keinen Benachrichtigungen ausblenden",
|
||||
"hide-widget-when-zero-unread-description": "Benachrichtigungssymbol ausblenden, wenn keine ungelesenen Benachrichtigungen vorhanden sind.",
|
||||
"hide-widget-when-zero-unread-label": "Symbol bei keinen ungelesenen Benachrichtigungen ausblenden",
|
||||
"show-unread-badge-description": "Badge mit der Anzahl ungelesener Benachrichtigungen anzeigen.",
|
||||
"show-unread-badge-label": "Badge für ungelesene Nachrichten anzeigen"
|
||||
"show-unread-badge-description": "Abzeichen mit der Anzahl ungelesener Benachrichtigungen anzeigen.",
|
||||
"show-unread-badge-label": "Ungelesen-Abzeichen anzeigen",
|
||||
"unread-badge-color-description": "Wählen Sie die Farbe für das Abzeichen ungelesener Benachrichtigungen.",
|
||||
"unread-badge-color-label": "Farbe des Ungelesen-Abzeichens"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "Widget auswählen...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "Statistiken als Mini-Balkendiagramme anstelle von Textwerten anzeigen. Verhindert Layoutverschiebungen.",
|
||||
"compact-mode-label": "Kompaktmodus",
|
||||
"cpu-frequency-description": "Die aktuelle CPU-Taktrate in GHz anzeigen.",
|
||||
"cpu-frequency-label": "CPU-Frequenz anzeigen",
|
||||
"cpu-temperature-description": "CPU-Temperaturwerte anzeigen, falls verfügbar.",
|
||||
"cpu-temperature-label": "CPU-Temperatur",
|
||||
"cpu-usage-description": "Aktuelle CPU-Auslastung in Prozent anzeigen.",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "Speicherauslastung",
|
||||
"network-traffic-description": "Upload- und Download-Geschwindigkeiten anzeigen.",
|
||||
"network-traffic-label": "Netzwerkverkehr",
|
||||
"storage-as-percentage-description": "Festplattenspeicher als Prozentsatz statt absoluter Werte anzeigen.",
|
||||
"storage-as-percentage-label": "Festplatte als Prozentsatz",
|
||||
"storage-available-description": "Zeigt an, wie viel Speicherplatz verfügbar ist, anstatt wie viel belegt ist.",
|
||||
"storage-available-label": "Verfügbarer Speicherplatz",
|
||||
"storage-usage-description": "Festplattenspeicher-Nutzungsinformationen anzeigen.",
|
||||
"storage-usage-label": "Datenträgerauslastung",
|
||||
"swap-usage-description": "Swap-Speichernutzung anzeigen.",
|
||||
@@ -217,15 +227,15 @@
|
||||
"use-monospace-font-label": "Schriftart mit fester Breite"
|
||||
},
|
||||
"taskbar": {
|
||||
"colorize-icons-description": "Theme-Farben auf Taskbar-Symbole anwenden.",
|
||||
"colorize-icons-description": "Themenfarben auf Taskbar-Symbole anwenden.",
|
||||
"hide-mode-description": "Steuert das Verhalten des Widgets, wenn keine übereinstimmenden Fenster vorhanden sind.",
|
||||
"hide-mode-label": "Ausblendmodus",
|
||||
"icon-scale-description": "Legt den Skalierungsfaktor für Taskleistensymbole fest.",
|
||||
"icon-scale-label": "Symbolskalierung",
|
||||
"max-width-description": "Maximale Breite der Taskleiste als Prozentsatz der Bildschirmbreite.",
|
||||
"max-width-label": "Maximale Breite",
|
||||
"only-active-workspaces-description": "Zeige nur Apps von aktiven Arbeitsbereichen.",
|
||||
"only-active-workspaces-label": "Nur von aktiven Arbeitsbereichen",
|
||||
"only-active-workspaces-description": "Zeige nur Apps von aktiven Arbeitsflächen.",
|
||||
"only-active-workspaces-label": "Nur von aktiven Arbeitsflächen",
|
||||
"only-same-monitor-description": "Zeige nur Apps von dem Monitor an, auf dem sich die Leiste befindet.",
|
||||
"only-same-monitor-label": "Nur vom selben Monitor",
|
||||
"show-pinned-apps-description": "Angeheftete Apps aus dem Dock in der Taskleiste anzeigen.",
|
||||
@@ -240,7 +250,9 @@
|
||||
"title-width-reset-tooltip": "Titelbreite zurücksetzen"
|
||||
},
|
||||
"tray": {
|
||||
"colorize-icons-description": "Theme-Farben auf Tray-Symbole anwenden.",
|
||||
"chevron-color-description": "Wendet die Themenfarben auf das Pfeilsymbol des Drawers an.",
|
||||
"chevron-color-label": "Pfeil-Farbe",
|
||||
"colorize-icons-description": "Themenfarben auf Tray-Symbole anwenden.",
|
||||
"colorize-icons-label": "Symbole einfärben",
|
||||
"drawer-enabled-description": "Wenn aktiviert, werden nicht angeheftete Tray-Elemente in einem Drawer-Panel angezeigt.<br>Wenn deaktiviert, werden alle Tray-Elemente inline angezeigt.",
|
||||
"drawer-enabled-label": "Drawer aktivieren",
|
||||
@@ -248,25 +260,36 @@
|
||||
"hide-passive-label": "Passive Elemente ausblenden"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "Wählen Sie, wie dieser Wert angezeigt werden soll.",
|
||||
"display-mode-label": "Anzeigemodus"
|
||||
"display-mode-description": "Wählen Sie, wie dieser Wert angezeigt werden soll."
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "Anzahl der Zeichen, die von Arbeitsbereichsnamen angezeigt werden (1-10).",
|
||||
"character-count-description": "Anzahl der Zeichen, die von Arbeitsflächennamen angezeigt werden (1-10).",
|
||||
"character-count-label": "Zeichenanzahl",
|
||||
"enable-scrollwheel-description": "Zwischen Arbeitsbereichen mit dem Mausrad wechseln.",
|
||||
"enable-scrollwheel-label": "Zum Wechseln der Arbeitsbereiche scrollen",
|
||||
"follow-focused-screen-description": "Zeige Arbeitsbereiche vom aktuell fokussierten Bildschirm an, statt vom Bildschirm, auf dem sich die Leiste befindet.",
|
||||
"empty-color-description": "Lege die Hintergrundfarbe für leere Arbeitsflächen fest.",
|
||||
"empty-color-label": "Farbe für leere Arbeitsflächen",
|
||||
"enable-scrollwheel-description": "Zwischen Arbeitsflächen mit dem Mausrad wechseln.",
|
||||
"enable-scrollwheel-label": "Zum Wechseln der Arbeitsflächen scrollen",
|
||||
"focused-color-description": "Lege die Hintergrundfarbe für die fokussierte Arbeitsfläche fest.",
|
||||
"focused-color-label": "Farbe der fokussierten Arbeitsfläche",
|
||||
"follow-focused-screen-description": "Zeige Arbeitsflächen vom aktuell fokussierten Bildschirm an, statt vom Bildschirm, auf dem sich die Leiste befindet.",
|
||||
"follow-focused-screen-label": "Fokussiertem Bildschirm folgen",
|
||||
"grouped-border-opacity-description": "Legen Sie die Deckkraft für Workspace-Container-Rahmen fest.",
|
||||
"grouped-border-opacity-description": "Legen Sie die Deckkraft für Arbeitsflächen-Container-Rahmen fest.",
|
||||
"grouped-border-opacity-label": "Rahmen-Deckkraft",
|
||||
"hide-unoccupied-description": "Arbeitsbereiche ohne Fenster nicht anzeigen.",
|
||||
"hide-unoccupied-description": "Arbeitsflächen ohne Fenster nicht anzeigen.",
|
||||
"hide-unoccupied-label": "Unbesetzte ausblenden",
|
||||
"label-mode-description": "Wählen Sie, wie Arbeitsbereichs-Beschriftungen angezeigt werden.",
|
||||
"label-mode-description": "Wählen Sie, wie Arbeitsflächen-Beschriftungen angezeigt werden.",
|
||||
"label-mode-label": "Beschriftungsmodus",
|
||||
"show-applications-description": "Anwendungssymbole in jedem Arbeitsbereich anzeigen.",
|
||||
"occupied-color-description": "Lege die Hintergrundfarbe für belegte Arbeitsflächen fest.",
|
||||
"occupied-color-label": "Farbe für belegte Arbeitsfläche",
|
||||
"pill-size-description": "Passen Sie die Größe der Arbeitsbereichs-Pillen an (50%-100%).",
|
||||
"pill-size-label": "Pillengröße",
|
||||
"reverse-scrolling-description": "Die Richtung des Arbeitsflächenwechsels beim Scrollen umkehren.",
|
||||
"reverse-scrolling-label": "Scrollen umkehren",
|
||||
"show-applications-description": "Anwendungssymbole in jeder Arbeitsfläche anzeigen.",
|
||||
"show-applications-label": "Anwendungen anzeigen",
|
||||
"show-labels-only-when-occupied-description": "Arbeitsbereichsbezeichnungen nur anzeigen, wenn sie Fenster enthalten.",
|
||||
"show-badge-description": "Zeige die Arbeitsflächennummer als Abzeichen im gruppierten Modus an.",
|
||||
"show-badge-label": "Arbeitsflächen-Abzeichen anzeigen",
|
||||
"show-labels-only-when-occupied-description": "Arbeitsflächenbezeichnungen nur anzeigen, wenn sie Fenster enthalten.",
|
||||
"show-labels-only-when-occupied-label": "Beschriftungen nur anzeigen, wenn belegt",
|
||||
"unfocused-icons-opacity-description": "Transparenzgrad für nicht fokussierte App-Symbole festlegen.",
|
||||
"unfocused-icons-opacity-label": "Deckkraft unscharfer Symbole"
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "Neuinstallation"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "Fehler",
|
||||
"on-surface": "Auf der Oberfläche",
|
||||
"primary": "Primär",
|
||||
"secondary": "Sekundär",
|
||||
"tertiary": "Tertiär"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Aktionen",
|
||||
"add": "Hinzufügen",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "Trennen",
|
||||
"disconnected": "Getrennt",
|
||||
"disconnecting": "Verbindung wird getrennt...",
|
||||
"display-mode": "Anzeigemodus",
|
||||
"download": "Herunterladen",
|
||||
"duration": "Dauer",
|
||||
"dysfunctional": "Dysfunktional",
|
||||
"edit": "Bearbeiten",
|
||||
"enabled": "Aktiviert",
|
||||
"error": "Fehler",
|
||||
"events": "Ereignisse",
|
||||
"execute": "Ausführen",
|
||||
"faithful": "Originalgetreu",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "Installiert",
|
||||
"interface": "Schnittstelle",
|
||||
"internet": "Internet",
|
||||
"keybind": "Tastenbelegung",
|
||||
"language": "Sprache",
|
||||
"loading": "Wird geladen...",
|
||||
"local": "Lokal",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "Nicht gefunden",
|
||||
"notifications": "Benachrichtigungen",
|
||||
"official": "Offiziell",
|
||||
"on-surface": "Auf Oberfläche",
|
||||
"output": "Ausgabe",
|
||||
"pair": "Koppeln",
|
||||
"paired": "Gekoppelt",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "Abfrageintervall",
|
||||
"position": "Position",
|
||||
"previous": "Zurück",
|
||||
"primary": "Primär",
|
||||
"random": "Zufällig",
|
||||
"reboot": "Neu starten",
|
||||
"record": "Aufnahme starten",
|
||||
"refresh": "Aktualisieren",
|
||||
"required": "(erforderlich)",
|
||||
"reset": "Zurücksetzen",
|
||||
"reset-to-default": "Auf Standard zurücksetzen",
|
||||
"result-count": "{count} Ergebnis",
|
||||
"result-count-plural": "{count} Ergebnisse",
|
||||
"resume": "Fortsetzen",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "Scannen...",
|
||||
"screen-corners": "Bildschirmecken",
|
||||
"search": "Suche",
|
||||
"secondary": "Sekundär",
|
||||
"security": "Sicherheit",
|
||||
"select": "Auswählen",
|
||||
"select-color": "Farbe auswählen",
|
||||
"select-color-description": "Wendet Themenfarben zur Hervorhebung an.",
|
||||
"select-icon-color": "Symbolfarbe auswählen",
|
||||
"shortcuts": "Kurzbefehle",
|
||||
"shutdown": "Herunterfahren",
|
||||
"signal": "Signal",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "Quellen",
|
||||
"start": "Start",
|
||||
"stop": "Stopp",
|
||||
"supporters": "Unterstützer",
|
||||
"suspend": "Energie sparen",
|
||||
"templates": "Vorlagen",
|
||||
"tertiary": "Tertiär",
|
||||
"test": "Test",
|
||||
"thresholds": "Schwellenwerte",
|
||||
"title": "Titel",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "Woche",
|
||||
"widgets": "Widgets",
|
||||
"width": "Breite",
|
||||
"windows": "Fenster",
|
||||
"yes": "Ja"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "Beim Hover"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "Automatisch ausblenden",
|
||||
"hidden": "Ausblenden, wenn leer",
|
||||
"idle": "Ausblenden, wenn inaktiv",
|
||||
"non-exclusive": "Nicht-exklusiv",
|
||||
"transparent": "Transparent, wenn leer",
|
||||
"visible": "Immer sichtbar"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "Lade Emojis...",
|
||||
"emoji-loading-description": "Bitte warten",
|
||||
"emoji-no-recent": "Noch keine kürzlich verwendeten Emojis",
|
||||
"emoji-search-description": "Emojis suchen und kopieren"
|
||||
"emoji-search-description": "Emojis suchen und kopieren",
|
||||
"settings-search-description": "Suchen und zu den Einstellungen navigieren",
|
||||
"windows-search-description": "Offene Fenster suchen und fokussieren"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "Kompakt",
|
||||
"density-default": "Standard",
|
||||
"density-mini": "Mini",
|
||||
"density-spacious": "Geräumig"
|
||||
"density-spacious": "Geräumig",
|
||||
"display-mode-always-visible": "Immer sichtbar",
|
||||
"type-floating": "Schwebend",
|
||||
"type-framed": "Gerahmt",
|
||||
"type-simple": "Einfach"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "Klassisch",
|
||||
"quick-settings-style-modern": "Modern"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "Bequem",
|
||||
"compact": "Kompakt",
|
||||
"default": "Standard"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "Gitter",
|
||||
"list": "Liste"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "Immer scrollen",
|
||||
"hover": "Beim Hover scrollen",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "Werde Unterstützer",
|
||||
"changelog": "Änderungsprotokoll anzeigen",
|
||||
"contributors-desc": "Ein Dankeschön an unseren {count} <b>großartigen</b> Mitwirkenden!",
|
||||
"contributors-description": "Ein Dankeschön an unseren {count} <b>großartigen</b> Mitwirkenden!",
|
||||
"contributors-description-plural": "Ein Dankeschön an unsere {count} <b>großartigen</b> Mitwirkenden!",
|
||||
"copy-info": "Informationen kopieren",
|
||||
"info-copied": "Info in die Zwischenablage kopiert",
|
||||
@@ -628,10 +677,14 @@
|
||||
"noctalia-title": "Noctalia Shell",
|
||||
"privacy-policy": "Datenschutzbestimmungen",
|
||||
"support": "Unterstütze uns",
|
||||
"supporter-badge": "Unterstützer",
|
||||
"supporters-desc": "Ein riesiges Dankeschön an unseren großartigen Unterstützer!",
|
||||
"supporters-desc-plural": "Ein riesiges Dankeschön an unsere <b>{count} großartigen</b> Unterstützer!",
|
||||
"supporters-loading": "Supporter werden geladen...",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Festplatte:",
|
||||
"system-gpu": "GPU:",
|
||||
"system-host": "Gastgeber:",
|
||||
"system-host": "Host:",
|
||||
"system-install-hint": "Installieren Sie fastfetch, um Systeminformationen anzuzeigen",
|
||||
"system-kernel": "Kernel:",
|
||||
"system-loading": "Systeminformationen werden geladen...",
|
||||
@@ -692,35 +745,49 @@
|
||||
"volumes-output-volume-description": "Systemweite Lautstärke.",
|
||||
"volumes-step-size-description": "Schrittgröße für Lautstärkeänderungen anpassen (Mausrad, Tastenkürzel).",
|
||||
"volumes-step-size-label": "Lautstärke-Schrittgröße",
|
||||
"volumes-volume-feedback-description": "Einen Feedback-Sound abspielen, wenn die Lautstärke angepasst wird",
|
||||
"volumes-volume-feedback-description": "Einen Feedback-Sound abspielen, wenn die Lautstärke angepasst wird.",
|
||||
"volumes-volume-feedback-label": "Lautstärke-Feedback-Sound abspielen",
|
||||
"volumes-volume-overdrive-description": "Erlaubt das Anheben der Lautstärke über 100%. Wird möglicherweise nicht von aller Hardware unterstützt.",
|
||||
"volumes-volume-overdrive-label": "Lautstärke-Übersteuerung erlauben"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "Zeit, bis die Bar ausgeblendet wird, nachdem die Maus sie verlassen hat.",
|
||||
"appearance-auto-hide-delay-label": "Ausblende-Verzögerung",
|
||||
"appearance-auto-hide-exclusive-note": "Hinweis: Die exklusive Zone wird automatisch deaktiviert, wenn Auto-Hide aktiv ist.",
|
||||
"appearance-auto-show-delay-description": "Zeit, bevor die Bar angezeigt wird, wenn die Maus den Rand betritt.",
|
||||
"appearance-auto-show-delay-label": "Anzeigeverzögerung",
|
||||
"appearance-background-opacity-description": "Legen Sie die Hintergrundtransparenz speziell für die Leiste fest.",
|
||||
"appearance-background-opacity-label": "Leisten-Hintergrundtransparenz",
|
||||
"appearance-capsule-color-description": "Wählen Sie eine Farbe für Leistenkapseln oder keine, um die Standard-Oberflächenfarbe zu verwenden.",
|
||||
"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-density-description": "Innenabstand der Statusleiste für kompaktes oder geräumiges Aussehen anpassen.",
|
||||
"appearance-density-label": "Statusleistendichte",
|
||||
"appearance-desc": "Erscheinungsbild und Position der Statusleiste anpassen.",
|
||||
"appearance-floating-description": "Statusleiste als schwebende 'Pille' anzeigen.",
|
||||
"appearance-floating-label": "Schwebende Statusleiste",
|
||||
"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-frame-radius": "Innenradius",
|
||||
"appearance-frame-settings-description": "Rahmenstärke und inneren Eckenradius anpassen",
|
||||
"appearance-frame-settings-label": "Rahmeneinstellungen",
|
||||
"appearance-frame-thickness": "Stärke",
|
||||
"appearance-hide-on-overview-description": "Die Leiste ausblenden und Panels schließen, wenn die Compositor-Übersicht aktiv ist.",
|
||||
"appearance-hide-on-overview-label": "Leiste in der Übersicht ausblenden",
|
||||
"appearance-margins-description": "Ränder um die schwebende Statusleiste anpassen.",
|
||||
"appearance-margins-description": "Ränder um die schwebende Leiste anpassen.",
|
||||
"appearance-margins-horizontal": "Horizontal",
|
||||
"appearance-margins-label": "Ränder",
|
||||
"appearance-margins-vertical": "Vertikal",
|
||||
"appearance-outer-corners-description": "Nach außen gewölbte Ecken auf der Leiste anzeigen.",
|
||||
"appearance-outer-corners-label": "Äußere Ecken",
|
||||
"appearance-position-description": "Wählen Sie, wo die Statusleiste auf dem Bildschirm platziert werden soll.",
|
||||
"appearance-position-label": "Statusleistenposition",
|
||||
"appearance-position-description": "Wählen Sie, wo die Leiste auf dem Bildschirm platziert werden soll.",
|
||||
"appearance-position-label": "Leistenposition",
|
||||
"appearance-show-capsule-description": "Widget-Hintergründe anzeigen.",
|
||||
"appearance-show-capsule-label": "Kapsel 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",
|
||||
"monitor-configure-widgets": "Widgets konfigurieren",
|
||||
@@ -728,13 +795,13 @@
|
||||
"monitor-override-settings-description": "Benutzerdefinierte Einstellungen für diesen Monitor verwenden.",
|
||||
"monitor-reset-all": "Alles zurücksetzen",
|
||||
"monitor-widgets-title": "Widget-Konfiguration - {monitor}",
|
||||
"monitors-desc": "Statusleiste auf bestimmten Monitoren anzeigen. Standardmäßig auf allen.",
|
||||
"monitors-desc": "Leiste auf bestimmten Monitoren anzeigen. Standardmäßig auf allen.",
|
||||
"monitors-desc-new": "Konfiguriere, welche Monitore die Bar anzeigen und passe die Einstellungen pro Monitor an.",
|
||||
"monitors-title": "Monitor-Anzeige",
|
||||
"title": "Statusleiste",
|
||||
"title": "Leiste",
|
||||
"tray-blacklist-description": "Ausschlussregeln für die Tray-Symbolleiste hinzufügen, unterstützt Platzhalter (*).",
|
||||
"tray-blacklist-label": "Ausschlussliste",
|
||||
"tray-blacklist-placeholder": "z.B., nm-applet, Fcitx*",
|
||||
"tray-blacklist-placeholder": "z.B. nm-applet, Fcitx*",
|
||||
"tray-pin-application": "Anwendung anheften",
|
||||
"tray-unpin-application": "Anheftung aufheben",
|
||||
"use-global-widgets": "Globale Widgets verwenden",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "Farbschemata herunterladen",
|
||||
"method-description": {
|
||||
"content": "Material Design Schema mit hochauflösender Farbextraktion, das die tatsächlichen Farben des Quellinhalts genau wiedergibt.",
|
||||
"dysfunctional": "Wie Faithful, wählt aber die zweitdominanteste Farbfamilie als primär.",
|
||||
"faithful": "Versucht, nah an der Ausgangsfarbe zu bleiben, während gleichzeitig eine harmonische Palette erzeugt wird.",
|
||||
"fruit-salad": "Material Design-Schema, das eine spielerische, lebendige Palette mit vielfältigen Farbtönen erzeugt.",
|
||||
"monochrome": "Material Design-Schema mit einer einfarbigen Grauskala und minimalem Farbanteil.",
|
||||
@@ -793,7 +861,7 @@
|
||||
"title": "Farbschema",
|
||||
"wallpaper-method-description": "Wählen Sie Ihre bevorzugte Methode zur Palettengenerierung.",
|
||||
"wallpaper-method-label": "Methode zur Palettengenerierung",
|
||||
"wallpaper-monitor-source-description": "Wähle den Monitor aus, der für die Extraktion der Wallpaper-Farben verwendet werden soll.",
|
||||
"wallpaper-monitor-source-description": "Wählen Sie den Monitor aus, der für die Extraktion der Wallpaper-Farben verwendet werden soll.",
|
||||
"wallpaper-monitor-source-label": "Quelle der Farbgenerierung"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -816,7 +884,7 @@
|
||||
"shortcuts-custom-button-state-checks-command": "Befehl, der für diese Zustandsprüfung ausgeführt werden soll",
|
||||
"shortcuts-custom-button-state-checks-label": "Zustandsprüfungen",
|
||||
"shortcuts-custom-button-state-checks-remove": "Entfernen",
|
||||
"shortcuts-custom-button-tooltip-description": "Der Tooltip, der angezeigt wird, wenn Sie mit der Maus über die Schaltfläche fahren.",
|
||||
"shortcuts-custom-button-tooltip-description": "Der Tooltip, der beim Bewegen des Mauszeigers über die Schaltfläche angezeigt wird.",
|
||||
"shortcuts-custom-button-tooltip-label": "Tooltip",
|
||||
"shortcuts-title": "Widgets für Kurzbefehle",
|
||||
"system-monitor-disk-path-description": "Wählen Sie, welchen Festplatten-Mountpunkt die Systemmonitor-Karte im Kontrollzentrum überwachen soll.",
|
||||
@@ -866,6 +934,16 @@
|
||||
"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.",
|
||||
"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",
|
||||
"system-stat-layout-side": "Seite",
|
||||
"system-stat-rounded-corners-description": "Abgerundete Ecken für den Widget-Hintergrund verwenden.",
|
||||
"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-label": "Statistiktyp",
|
||||
"title": "Desktop-Widgets",
|
||||
"weather-enabled-description": "Zeige ein Wetter-Widget auf dem Desktop an.",
|
||||
"weather-enabled-label": "Wetter-Widget aktivieren",
|
||||
@@ -907,7 +985,7 @@
|
||||
"appearance-background-opacity-description": "Hintergrundtransparenz des Docks anpassen.",
|
||||
"appearance-border-radius-description": "Den Radius der Dock-Umrandung anpassen.",
|
||||
"appearance-border-radius-label": "Eckenradius",
|
||||
"appearance-colorize-icons-description": "Theme-Farben auf Dock-App-Symbole anwenden (nur nicht fokussierte Apps).",
|
||||
"appearance-colorize-icons-description": "Themenfarben auf Dock-App-Symbole anwenden (nur nicht fokussierte Apps).",
|
||||
"appearance-colorize-icons-label": "Symbole einfärben",
|
||||
"appearance-dead-opacity-description": "Die Deckkraft von App-Symbolen anpassen, die nicht ausgeführt werden.",
|
||||
"appearance-dead-opacity-label": "Tote Opazität",
|
||||
@@ -923,7 +1001,7 @@
|
||||
"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-pinned-static-description": "Gepinnten App-Symbole immer in statischer Reihenfolge nach links schieben.",
|
||||
"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",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "Monospace-Schriftarten suchen...",
|
||||
"fonts-reset-scaling": "Skalierung zurücksetzen",
|
||||
"fonts-title": "Schriftarten",
|
||||
"keybinds-description": "Globale Navigationstasten für Panels und Launcher konfigurieren.",
|
||||
"keybinds-down": "Nach unten verschieben",
|
||||
"keybinds-enter": "Bestätigen / Aktion",
|
||||
"keybinds-escape": "Schließen / Zurück",
|
||||
"keybinds-left": "Links verschieben",
|
||||
"keybinds-right": "Rechts bewegen",
|
||||
"keybinds-title": "Navigations-Tastenkombinationen",
|
||||
"keybinds-up": "Nach oben",
|
||||
"language-desc": "Ändern Sie die Sprache von Noctalia.",
|
||||
"language-select-auto-detect": "Automatisch",
|
||||
"language-select-description": "Wählen Sie die Sprache der Anwendungsoberfläche.",
|
||||
@@ -969,10 +1055,12 @@
|
||||
"screen-corners-radius-reset": "Eckenradius des Bildschirms zurücksetzen",
|
||||
"screen-corners-show-corners-description": "Gerundete Ecken am Rand des Bildschirms anzeigen.",
|
||||
"screen-corners-show-corners-label": "Bildschirmecken anzeigen",
|
||||
"screen-corners-solid-black-description": "Schwarze Ecken anstelle der Statusleisten-Hintergrundfarbe verwenden.",
|
||||
"screen-corners-solid-black-description": "Schwarze Ecken anstelle der Leisten-Hintergrundfarbe verwenden.",
|
||||
"screen-corners-solid-black-label": "Schwarze Ecken",
|
||||
"screen-corners-title": "Bildschirmecken",
|
||||
"settings-copied": "Einstellungen in die Zwischenablage kopiert"
|
||||
"settings-copied": "Einstellungen in die Zwischenablage kopiert",
|
||||
"tab-basics": "Grundlagen",
|
||||
"tab-keybinds": "Tastenkombinationen"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• Befehle werden über Shell ausgeführt (sh -lc)<br>• Befehle laufen im Hintergrund (getrennt)<br>• Test-Buttons führen mit aktuellen Werten aus",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "Zwischenablage-Text umbrechen",
|
||||
"settings-clipboard-history-description": "Zugriff auf zuvor kopierte Elemente über den Launcher.",
|
||||
"settings-clipboard-history-label": "Zwischenablageverlauf aktivieren",
|
||||
"settings-clipboard-watch-image-description": "Vollständiger Befehlsstring, der an wl-paste für Bildänderungen übergeben wird (Neustart erforderlich).",
|
||||
"settings-clipboard-watch-image-label": "Bildüberwachungsbefehl",
|
||||
"settings-clipboard-watch-text-description": "Vollständiger Befehlsstring, der an wl-paste für Textänderungen übergeben wird (Neustart erforderlich).",
|
||||
"settings-clipboard-watch-text-label": "Textüberwachungsbefehl",
|
||||
"settings-custom-launch-prefix-description": "Befehle mit einem benutzerdefinierten Launcher präfixieren (z.B. 'runapp' für systemd-Integration).",
|
||||
"settings-custom-launch-prefix-enabled-description": "Verwenden Sie ein benutzerdefiniertes Präfix zum Starten von Anwendungen anstelle der Standardmethode.",
|
||||
"settings-custom-launch-prefix-enabled-label": "Benutzerdefiniertes Start-Präfix aktivieren",
|
||||
"settings-custom-launch-prefix-label": "Benutzerdefiniertes Start-Präfix",
|
||||
"settings-density-description": "Größe der Anwendungssymbole und Dichte des Launchers anpassen.",
|
||||
"settings-density-label": "Dichte",
|
||||
"settings-desc": "Verhalten und Erscheinungsbild des Starters anpassen.",
|
||||
"settings-enable-settings-search-description": "Einstellungen in den Suchergebnissen des Launchers anzeigen.",
|
||||
"settings-enable-settings-search-label": "Einstellungen-Suche aktivieren",
|
||||
"settings-enable-windows-search-description": "Aktive Fenster suchen und fokussieren.",
|
||||
"settings-enable-windows-search-label": "Fenstersuche aktivieren",
|
||||
"settings-grid-view-description": "Elemente in einem Raster statt in einer Liste anzeigen.",
|
||||
"settings-icon-mode-description": "Verwende native System-Icons anstelle von Tabler-Icons.",
|
||||
"settings-icon-mode-label": "Native Icons verwenden",
|
||||
"settings-ignore-mouse-input-description": "Deaktivieren Sie die Mausinteraktion und das Mausrad im Launcher.",
|
||||
"settings-ignore-mouse-input-label": "Maus-Eingabe ignorieren",
|
||||
"settings-overlay-layer-description": "Zeigt das Startprogramm auf der Überlagerungsebene an, über Vollbildfenstern. Wenn aktiviert, wird das Startprogramm nicht an der Leiste befestigt.",
|
||||
"settings-overlay-layer-label": "Über Vollbild anzeigen",
|
||||
"settings-position-description": "Wählen Sie, wo das Starter-Panel erscheint.",
|
||||
"settings-show-categories-description": "Kategorienregisterkarten zum Filtern von Anwendungen anzeigen.",
|
||||
"settings-show-categories-label": "Kategorien anzeigen",
|
||||
@@ -1050,6 +1148,8 @@
|
||||
"settings-terminal-command-label": "Terminalbefehl",
|
||||
"settings-use-app2unit-description": "Verwendet eine alternative Startmethode zur besseren Verwaltung von App-Prozessen und Problemvermeidung.",
|
||||
"settings-use-app2unit-label": "App2Unit zum Starten von Anwendungen verwenden",
|
||||
"settings-view-mode-description": "Wähle das Layout für die Anwendungsstarter-Einträge.",
|
||||
"settings-view-mode-label": "Ansichtsmodus",
|
||||
"title": "Starter"
|
||||
},
|
||||
"location": {
|
||||
@@ -1057,7 +1157,7 @@
|
||||
"calendar-cards-title": "Kalenderkarten",
|
||||
"calendar-header-label": "Kalenderkopfzeile",
|
||||
"calendar-month-label": "Kalendermonat",
|
||||
"date-time-12hour-format-description": "Zeige die Uhrzeit im 12-Stunden-Format auf dem Sperrbildschirm und im Kalender an. Die Uhr in der Statusleiste hat eigene Einstellungen.",
|
||||
"date-time-12hour-format-description": "Zeige die Uhrzeit im 12-Stunden-Format auf dem Sperrbildschirm und im Kalender an. Die Uhr in der Leiste hat eigene Einstellungen.",
|
||||
"date-time-12hour-format-label": "12-Stunden-Zeitformat benutzen",
|
||||
"date-time-desc": "Anpassen, wie Datum und Zeit erscheinen.",
|
||||
"date-time-first-day-of-week-automatic": "Automatisch (Systemgebietsschema verwenden)",
|
||||
@@ -1066,7 +1166,7 @@
|
||||
"date-time-show-events-description": "Ereignisse im Kalender-Panel anzeigen.",
|
||||
"date-time-show-events-label": "Kalenderereignisse anzeigen",
|
||||
"date-time-title": "Datum & Zeit",
|
||||
"date-time-use-analog-description": "Eine Analoguhr im Kalender-Panel und auf dem Sperrbildschirm anzeigen.",
|
||||
"date-time-use-analog-description": "Zeige eine Analoguhr im Kalenderfenster an.",
|
||||
"date-time-use-analog-label": "Analoge Uhr verwenden",
|
||||
"date-time-week-numbers-description": "Zeige die Woche des Jahres (z.B. Woche 38) im Kalender an.",
|
||||
"date-time-week-numbers-label": "Wochennummern anzeigen",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "Wetter im Kalender anzeigen"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "Wenn fprintd (Fingerabdruck-Authentifizierung) aktiv ist, können Sie mit dieser Option weiterhin Ihr Passwort anstelle eines Fingerabdrucks verwenden.",
|
||||
"allow-password-with-fprintd-label": "Passwort-Anmeldung mit fprintd erlauben",
|
||||
"auto-start-auth-description": "Startet die Fingerabdruckauthentifizierung automatisch, ohne dass ein Tastendruck oder ein Klick erforderlich ist.",
|
||||
"auto-start-auth-label": "Automatische Authentifizierung beim Start",
|
||||
"clock-format-description": "Passe das Uhrformat mit Datums-/Uhrzeit-Syntax-Tokens an.",
|
||||
"clock-format-label": "Uhrenformat",
|
||||
"clock-style-analog": "Analog",
|
||||
"clock-style-custom": "Benutzerdefiniert",
|
||||
"clock-style-description": "Wählen Sie den visuellen Stil der Uhr auf dem Sperrbildschirm.",
|
||||
"clock-style-digital": "Digital",
|
||||
"clock-style-label": "Uhrstil",
|
||||
"compact-lockscreen-description": "Zeige nur die Login-Eingabe und Systemsteuerung, blende Wetter- und Medien-Widgets aus.",
|
||||
"compact-lockscreen-label": "Kompakter Sperrbildschirm",
|
||||
"lock-on-suspend-description": "Den Bildschirm beim Energiesparen automatisch sperren.",
|
||||
"lock-on-suspend-label": "Sperren beim Energiesparen",
|
||||
"lock-screen-animations-description": "Sperrbildschirm-Animationen aktivieren oder deaktivieren.",
|
||||
"lock-screen-animations-label": "Sperrbildschirm-Animationen",
|
||||
"lock-screen-blur-strength-description": "Wendet einen Weichzeichnungseffekt auf das Hintergrundbild des Sperrbildschirms an.",
|
||||
"lock-screen-blur-strength-label": "Sperrbildschirm-Unschärfestärke",
|
||||
"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.",
|
||||
"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.",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "Niedrige Dringlichkeit im Verlauf speichern",
|
||||
"history-normal-urgency-description": "Normale Prioritätsbenachrichtigungen im Verlauf speichern.",
|
||||
"history-normal-urgency-label": "Normale Dringlichkeit im Verlauf speichern",
|
||||
"media-toast-description": "Eine Toast-Benachrichtigung anzeigen, wenn sich der Wiedergabestatus von Medien ändert.",
|
||||
"media-toast-label": "Medien",
|
||||
"monitors-desc": "Benachrichtigungen auf bestimmten Monitoren anzeigen. Standardmäßig werden sie auf allen Monitoren angezeigt.",
|
||||
"settings-always-on-top-description": "Benachrichtigungen über Vollbildfenstern und anderen Ebenen anzeigen.",
|
||||
"settings-background-opacity-description": "Transparenz der Benachrichtigungshintergründe anpassen.",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "Benachrichtigungstöne nicht verfügbar",
|
||||
"sounds-volume-description": "Lautstärke für Benachrichtigungstöne anpassen.",
|
||||
"sounds-volume-label": "Sound-Lautstärke",
|
||||
"toast-battery-description": "Zeige eine Warnung an, wenn der Akkustand unter diesen Prozentsatz fällt.",
|
||||
"toast-battery-label": "Akkuwarnung",
|
||||
"toast-desc": "Konfigurieren Sie das Aussehen und Verhalten von Toast-Benachrichtigungen.",
|
||||
"toast-keyboard-description": "Zeige eine Toast-Benachrichtigung an, wenn sich das Tastaturlayout ändert.",
|
||||
"toast-keyboard-label": "Tastaturlayout"
|
||||
"toast-keyboard-label": "Tastaturlayout",
|
||||
"toast-media-description": "Eine Toast-Benachrichtigung anzeigen, wenn sich der Wiedergabestatus von Medien ändert.",
|
||||
"toast-media-label": "Medien"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "On-Screen Display über Vollbildfenstern und anderen Ebenen anzeigen.",
|
||||
@@ -1202,16 +1322,20 @@
|
||||
"types-volume-label": "Ausgangslautstärke"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "Plugins automatisch aktualisieren",
|
||||
"auto-update-description": "Automatisch alle Plugins aktualisieren, wenn die Shell startet.",
|
||||
"available-description": "Plugins aus konfigurierten Quellen durchsuchen und installieren.",
|
||||
"available-label": "Verfügbare Plugins",
|
||||
"available-no-plugins-description": "Überprüfen Sie Ihre Plugin-Quellen oder aktualisieren Sie die Liste.",
|
||||
"available-no-plugins-label": "Keine Plugins verfügbar",
|
||||
"check-for-updates": "Nach Updates suchen",
|
||||
"checking-for-updates": "Prüfe auf Updates...",
|
||||
"collision-already-installed": "Dieses Plugin ist bereits installiert",
|
||||
"collision-custom-version-exists": "Eine benutzerdefinierte Version von \"{source}\" ist bereits installiert",
|
||||
"collision-official-version-exists": "Die offizielle Version dieses Plugins ist bereits installiert",
|
||||
"filter-downloaded": "Heruntergeladen",
|
||||
"filter-not-downloaded": "Nicht heruntergeladen",
|
||||
"filter-tags-description": "Filter-Plugins nach Kategorie oder Download-Status filtern",
|
||||
"filter-tags-description": "Plugins nach Kategorie oder Download-Status filtern.",
|
||||
"filter-tags-label": "Schlagwörter",
|
||||
"hot-reload-description": "Plugins automatisch neu laden, wenn sich ihre Dateien ändern. Nützlich für die Plugin-Entwicklung.",
|
||||
"hot-reload-label": "Hot Reload (Entwicklermodus)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "Mein cooles Repository",
|
||||
"sources-remove-tooltip": "Plugin-Quelle entfernen",
|
||||
"title": "Plugins",
|
||||
"translations-reloaded": "Übersetzungen neu geladen: {name}",
|
||||
"uninstall-dialog-description": "Sind Sie sicher, dass Sie {plugin} deinstallieren möchten? Dadurch werden alle Plugin-Daten entfernt.",
|
||||
"uninstall-dialog-title": "Plugin deinstallieren",
|
||||
"uninstall-error": "Deinstallation fehlgeschlagen: {error}",
|
||||
@@ -1271,11 +1396,14 @@
|
||||
"entries-desc": "Anpassen, welche Energieaktionen im Sitzungsmenü angezeigt werden und in welcher Reihenfolge.",
|
||||
"entries-title": "Energieaktionen",
|
||||
"entry-settings-command-description": "Benutzerdefinierter Befehl, der für diese Aktion ausgeführt werden soll. Leer lassen, um den Standard-Systembefehl zu verwenden.",
|
||||
"entry-settings-command-placeholder": "systemctl poweroff",
|
||||
"entry-settings-command-placeholder": "z.B. systemctl poweroff",
|
||||
"entry-settings-default-command-lock": "Interner Sperrbildschirm (kein Befehl)",
|
||||
"entry-settings-default-command-logout": "Interne Abmeldung (kein Befehl)",
|
||||
"entry-settings-default-info-description": "Wenn kein benutzerdefinierter Befehl angegeben ist, wird der standardmäßige Systembefehl verwendet.",
|
||||
"entry-settings-default-info-label": "Standardbefehl",
|
||||
"entry-settings-keybind-description": "Weisen Sie eine Tastenkombination zu, um diese Aktion auszulösen, wenn das Sitzungsmenü geöffnet ist.",
|
||||
"entry-settings-keybind-placeholder": "Drücke Aufnehmen, um eine Taste zuzuweisen...",
|
||||
"entry-settings-keybind-recording": "Aufnahme läuft... Drücken Sie eine beliebige Tastenkombination",
|
||||
"entry-settings-title": "Konfiguriere {entry}",
|
||||
"entry-settings-tooltip": "Konfigurationsbefehl",
|
||||
"general-desc": "Konfigurieren Sie das Verhalten und Erscheinungsbild des Sitzungsmenü-Panels.",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kritische Farbe",
|
||||
"custom-highlight-colors-title-label": "Benutzerdefinierte Hervorhebungsfarben",
|
||||
"disk-available-label": "Verfügbarer Speicherplatz",
|
||||
"disk-section-label": "Festplattennutzung",
|
||||
"enable-dgpu-monitoring-description": "Warnung: Dies aktiviert Ihre dedizierte GPU (NVIDIA/AMD), was die Akkulaufzeit von Laptops mit Hybridgrafik erheblich beeinträchtigen kann.",
|
||||
"enable-dgpu-monitoring-label": "Dedizierte GPU-Überwachung aktivieren",
|
||||
@@ -1323,7 +1452,7 @@
|
||||
"box-border-description": "Zeige eine Umrandung um Inhaltsbereiche an.",
|
||||
"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": "Behälterradius",
|
||||
"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",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "Wählen Sie das Layout der Einstellungen (möglicherweise ist ein Neustart erforderlich).",
|
||||
"settings-panel-mode-label": "Einstellungs-Panel-Modus",
|
||||
"shadows-description": "Aktiviert Schlagschatten unter Leisten und Panels.",
|
||||
"shadows-direction-description": "Wählen, aus welcher Richtung der Schatten fällt.",
|
||||
"shadows-direction-description": "Wählen Sie, wohin der Schatten geworfen wird.",
|
||||
"shadows-direction-label": "Schattenrichtung",
|
||||
"shadows-label": "Schlagschatten",
|
||||
"title": "Benutzeroberfläche",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "Unterschiedlichen Hintergrundbild-Ordner für jeden Monitor festlegen.",
|
||||
"settings-monitor-specific-label": "Monitor-spezifische Verzeichnisse",
|
||||
"settings-monitor-specific-tooltip": "Monitor-Hintergrundbild-Ordner",
|
||||
"settings-overview-blur-strength-description": "Wendet die Unschärfestärke auf die Übersicht an.",
|
||||
"settings-overview-blur-strength-label": "Unschärfestärke der Übersicht",
|
||||
"settings-overview-tint-description": "Wendet die Tönungsstärke auf die Übersicht an.",
|
||||
"settings-overview-tint-label": "Stärke der Übersichts-Tönung",
|
||||
"settings-recursive-search-description": "Auch nach Hintergrundbildern in Unterordnern des Hintergrundbild-Verzeichnisses suchen.",
|
||||
"settings-recursive-search-label": "Unterordner durchsuchen",
|
||||
"settings-select-monitor-folder": "Monitor-Hintergrundbild-Ordner auswählen",
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "Fertig!",
|
||||
"appearance": {
|
||||
"subheader": "Wähle Dark Mode und Farbquellen (Wallpaper oder vordefiniert)."
|
||||
"subheader": "Wählen Sie den Dunkelmodus und Farbquellen (Hintergrundbild oder vordefiniert)."
|
||||
},
|
||||
"customize": {
|
||||
"header": "Erlebnis anpassen",
|
||||
@@ -1449,7 +1582,7 @@
|
||||
},
|
||||
"skip-setup": "Einrichtung überspringen",
|
||||
"telemetry-wizard-done": "Verstanden!",
|
||||
"telemetry-wizard-note": "Sie haben die Kontrolle – aktivieren oder deaktivieren Sie dies jederzeit in den Einstellungen",
|
||||
"telemetry-wizard-note": "Sie haben die Kontrolle — aktivieren oder deaktivieren Sie dies jederzeit in den Einstellungen",
|
||||
"telemetry-wizard-subtitle": "Wir haben anonyme Analysen hinzugefügt, um Noctalia zu verbessern",
|
||||
"telemetry-wizard-title": "Datenschutz-Update",
|
||||
"wallpaper": {
|
||||
@@ -1466,7 +1599,7 @@
|
||||
"select-prompt": "Wählen Sie unten ein Hintergrundbild",
|
||||
"subheader": "Bestimmen Sie die Stimmung mit einem schönen Hintergrund."
|
||||
},
|
||||
"welcome-note": "Nur ein paar Grundeinstellungen – alle Optionen befinden sich in den Einstellungen",
|
||||
"welcome-note": "Nur ein paar Grundeinstellungen — alle Optionen befinden sich in den Einstellungen",
|
||||
"welcome-subtitle": "Gestalten wir Ihren Desktop einzigartig",
|
||||
"welcome-title": "Willkommen bei Noctalia!"
|
||||
},
|
||||
@@ -1490,7 +1623,7 @@
|
||||
"disk": "Festplatte",
|
||||
"download-speed": "Download-Speed",
|
||||
"gpu-temp": "GPU-Temperatur",
|
||||
"load-average": "Last-Ø",
|
||||
"load-average": "Lastdurchschnitt",
|
||||
"title": "Systemmonitor",
|
||||
"upload-speed": "Upload-Speed"
|
||||
},
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "Flugmodus"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "Kritischer Akkustand",
|
||||
"critical-desc": "Akku ist bei {percent}% — bitte sofort das Ladegerät anschließen",
|
||||
"low": "Niedriger Akkustand",
|
||||
"low-desc": "Akku ist bei {percent}%. Bitte schließen Sie das Ladegerät an"
|
||||
"low-desc": "Akku ist bei {percent}% — bitte das Ladegerät anschließen"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adresse in die Zwischenablage kopiert",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "Scheibe",
|
||||
"fade": "Überblenden",
|
||||
"honeycomb": "Honigwabe",
|
||||
"pixelate": "Verpixeln",
|
||||
"stripes": "Streifen",
|
||||
"wipe": "Wischen"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "Hintergrundbilder werden geladen...",
|
||||
"no-results": "Keine Hintergrundbilder gefunden. Versuchen Sie eine andere Suchanfrage.",
|
||||
"page": "{current} von {total}"
|
||||
"page": "{current} von {total}",
|
||||
"page-prefix": "Seite",
|
||||
"page-suffix": "von {total}"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
+186
-47
@@ -48,11 +48,16 @@
|
||||
"device-default": "Default (Display Device)",
|
||||
"device-description": "Select which battery device to display.",
|
||||
"device-label": "Battery device",
|
||||
"display-mode-description": "Choose how the battery is displayed in the bar.",
|
||||
"display-mode-graphic": "Graphical battery",
|
||||
"display-mode-graphic-clean": "Graphical battery (no %)",
|
||||
"display-mode-icon-always": "Icon - Always show %",
|
||||
"display-mode-icon-hover": "Icon - Show on hover",
|
||||
"display-mode-icon-only": "Icon only",
|
||||
"hide-if-idle-description": "Hide the widget when the battery is not charging or discharging.",
|
||||
"hide-if-idle-label": "Hide when idle",
|
||||
"hide-if-not-detected-description": "Hide the widget when no battery is detected on the system.",
|
||||
"hide-if-not-detected-label": "Hide when not detected",
|
||||
"low-battery-threshold-description": "Show a warning when battery falls below this percentage.",
|
||||
"low-battery-threshold-label": "Low battery warning threshold",
|
||||
"show-noctalia-performance-description": "Display the Noctalia Performance Mode toggle inside the battery panel.<br>Disables shadows and animations in Noctalia to reduce resource usage.",
|
||||
"show-noctalia-performance-label": "Show Noctalia Performance toggle",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "Use custom font",
|
||||
"use-monospaced-font-description": "When enabled, the clock will use the monospaced font.",
|
||||
"use-monospaced-font-label": "Use monospaced font",
|
||||
"use-primary-color-description": "When enabled, this applies the primary color for emphasis.",
|
||||
"use-primary-color-label": "Use primary color",
|
||||
"vertical-bar-description": "Use a space to separate each part onto a new line.",
|
||||
"vertical-bar-label": "Vertical bar"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"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.",
|
||||
"color-selection-label": "Select Color",
|
||||
"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.",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "Hide the notification icon when there are no unread notifications.",
|
||||
"hide-widget-when-zero-unread-label": "Hide icon when no unread notifications",
|
||||
"show-unread-badge-description": "Display a badge showing the number of unread notifications.",
|
||||
"show-unread-badge-label": "Show unread badge"
|
||||
"show-unread-badge-label": "Show unread badge",
|
||||
"unread-badge-color-description": "Select the color for the unread notification badge.",
|
||||
"unread-badge-color-label": "Unread badge color"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "Select a widget to add...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "Display stats as mini bar charts instead of text values. Prevents layout shifting.",
|
||||
"compact-mode-label": "Compact mode",
|
||||
"cpu-frequency-description": "Display the current CPU clock speed in GHz.",
|
||||
"cpu-frequency-label": "Show CPU frequency",
|
||||
"cpu-temperature-description": "Show CPU temperature readings if available.",
|
||||
"cpu-temperature-label": "CPU temperature",
|
||||
"cpu-usage-description": "Display current CPU usage percentage.",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "Memory usage",
|
||||
"network-traffic-description": "Display network upload and download speeds.",
|
||||
"network-traffic-label": "Network traffic",
|
||||
"storage-as-percentage-description": "Show disk space as percentage instead of absolute values.",
|
||||
"storage-as-percentage-label": "Disk as percentage",
|
||||
"storage-available-description": "Shows how much disk space is available instead of how much is used.",
|
||||
"storage-available-label": "Disk space available",
|
||||
"storage-usage-description": "Show disk space usage information.",
|
||||
"storage-usage-label": "Storage usage",
|
||||
"swap-usage-description": "Show swap memory usage.",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "Reset title width"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "Apply theme colors to the drawer chevron icon.",
|
||||
"chevron-color-label": "Chevron color",
|
||||
"colorize-icons-description": "Apply theme colors to tray icons.",
|
||||
"colorize-icons-label": "Colorize icons",
|
||||
"drawer-enabled-description": "When enabled, unpinned tray items are shown in a drawer panel.<br>When disabled, all tray items are shown inline.",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "Hide passive items"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "Choose how you'd like this value to appear.",
|
||||
"display-mode-label": "Display mode"
|
||||
"display-mode-description": "Choose how you'd like this value to appear."
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "Number of characters to display from workspace names (1-10).",
|
||||
"character-count-label": "Character count",
|
||||
"empty-color-description": "Set the background color for empty workspaces.",
|
||||
"empty-color-label": "Empty workspace color",
|
||||
"enable-scrollwheel-description": "Switch between workspaces using the mouse scroll wheel.",
|
||||
"enable-scrollwheel-label": "Scroll to switch workspaces",
|
||||
"focused-color-description": "Set the background color for the focused workspace.",
|
||||
"focused-color-label": "Focused workspace color",
|
||||
"follow-focused-screen-description": "Display workspaces from the currently focused screen, rather than the screen where the bar is located.",
|
||||
"follow-focused-screen-label": "Follow focused screen",
|
||||
"grouped-border-opacity-description": "Set the opacity level for workspace container borders.",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "Hide unoccupied",
|
||||
"label-mode-description": "Choose how workspace labels are displayed.",
|
||||
"label-mode-label": "Label mode",
|
||||
"occupied-color-description": "Set the background color for occupied workspaces.",
|
||||
"occupied-color-label": "Occupied workspace color",
|
||||
"pill-size-description": "Adjust the size of workspace pills.",
|
||||
"pill-size-label": "Pill size",
|
||||
"reverse-scrolling-description": "Reverse the direction of workspace switching when scrolling.",
|
||||
"reverse-scrolling-label": "Reverse scrolling",
|
||||
"show-applications-description": "Display application icons inside each workspace.",
|
||||
"show-applications-label": "Show applications",
|
||||
"show-badge-description": "Show the workspace number badge in grouped mode.",
|
||||
"show-badge-label": "Show workspace badge",
|
||||
"show-labels-only-when-occupied-description": "Only show workspace labels when they contain windows.",
|
||||
"show-labels-only-when-occupied-label": "Show labels only when occupied",
|
||||
"unfocused-icons-opacity-description": "Set the opacity level for unfocused app icons.",
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "Fresh install"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "Error",
|
||||
"on-surface": "On Surface",
|
||||
"primary": "Primary",
|
||||
"secondary": "Secondary",
|
||||
"tertiary": "Tertiary"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Actions",
|
||||
"add": "Add",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "Disconnect",
|
||||
"disconnected": "Disconnected",
|
||||
"disconnecting": "Disconnecting...",
|
||||
"display-mode": "Display mode",
|
||||
"download": "Download",
|
||||
"duration": "Duration",
|
||||
"dysfunctional": "Dysfunctional",
|
||||
"edit": "Edit",
|
||||
"enabled": "Enabled",
|
||||
"error": "Error",
|
||||
"events": "Events",
|
||||
"execute": "Execute",
|
||||
"faithful": "Faithful",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "Installed",
|
||||
"interface": "Interface",
|
||||
"internet": "Internet",
|
||||
"keybind": "Keybind",
|
||||
"language": "Language",
|
||||
"loading": "Loading...",
|
||||
"local": "Local",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "Not found",
|
||||
"notifications": "Notifications",
|
||||
"official": "Official",
|
||||
"on-surface": "On Surface",
|
||||
"output": "Output",
|
||||
"pair": "Pair",
|
||||
"paired": "Paired",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "Polling",
|
||||
"position": "Position",
|
||||
"previous": "Previous",
|
||||
"primary": "Primary",
|
||||
"random": "Random",
|
||||
"reboot": "Reboot",
|
||||
"record": "Start recording",
|
||||
"refresh": "Refresh",
|
||||
"required": "(required)",
|
||||
"reset": "Reset",
|
||||
"reset-to-default": "Reset to Default",
|
||||
"result-count": "{count} result",
|
||||
"result-count-plural": "{count} results",
|
||||
"resume": "Resume",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "Scanning...",
|
||||
"screen-corners": "Screen Corners",
|
||||
"search": "Search",
|
||||
"secondary": "Secondary",
|
||||
"security": "Security",
|
||||
"select": "Select",
|
||||
"select-color": "Select color",
|
||||
"select-color-description": "Apply theme colors for emphasis.",
|
||||
"select-icon-color": "Select icon color",
|
||||
"shortcuts": "Shortcuts",
|
||||
"shutdown": "Shutdown",
|
||||
"signal": "Signal",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "Sources",
|
||||
"start": "Start",
|
||||
"stop": "Stop",
|
||||
"supporters": "Supporters",
|
||||
"suspend": "Suspend",
|
||||
"templates": "Templates",
|
||||
"tertiary": "Tertiary",
|
||||
"test": "Test",
|
||||
"thresholds": "Thresholds",
|
||||
"title": "Title",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "Week",
|
||||
"widgets": "Widgets",
|
||||
"width": "Width",
|
||||
"windows": "Windows",
|
||||
"yes": "Yes"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "On hover"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "Auto-hide",
|
||||
"hidden": "Hide when empty",
|
||||
"idle": "Hide when idle",
|
||||
"non-exclusive": "Non-exclusive",
|
||||
"transparent": "Transparent when empty",
|
||||
"visible": "Always visible"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "Loading emojis...",
|
||||
"emoji-loading-description": "Please wait",
|
||||
"emoji-no-recent": "No recent emojis yet",
|
||||
"emoji-search-description": "Search and copy emojis"
|
||||
"emoji-search-description": "Search and copy emojis",
|
||||
"settings-search-description": "Search and navigate to settings",
|
||||
"windows-search-description": "Search and focus open windows"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "Compact",
|
||||
"density-default": "Default",
|
||||
"density-mini": "Mini",
|
||||
"density-spacious": "Spacious"
|
||||
"density-spacious": "Spacious",
|
||||
"display-mode-always-visible": "Always Visible",
|
||||
"type-floating": "Floating",
|
||||
"type-framed": "Framed",
|
||||
"type-simple": "Simple"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "Classic",
|
||||
"quick-settings-style-modern": "Modern"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "Comfortable",
|
||||
"compact": "Compact",
|
||||
"default": "Default"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "Grid",
|
||||
"list": "List"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "Scroll always",
|
||||
"hover": "Scroll on hover",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "Become a supporter",
|
||||
"changelog": "View changelog",
|
||||
"contributors-desc": "Shout-out to our {count} <b>awesome</b> contributor!",
|
||||
"contributors-description": "Shout-out to our {count} <b>awesome</b> contributor!",
|
||||
"contributors-description-plural": "Shout-out to our {count} <b>awesome</b> contributors!",
|
||||
"copy-info": "Copy info",
|
||||
"info-copied": "Info copied to clipboard",
|
||||
@@ -628,6 +677,10 @@
|
||||
"noctalia-title": "Noctalia shell",
|
||||
"privacy-policy": "Privacy policy",
|
||||
"support": "Support us",
|
||||
"supporter-badge": "Supporter",
|
||||
"supporters-desc": "A huge thank you to our amazing supporter!",
|
||||
"supporters-desc-plural": "A huge thank you to our <b>{count} amazing</b> supporters!",
|
||||
"supporters-loading": "Loading supporters...",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Disk:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "System-wide volume level.",
|
||||
"volumes-step-size-description": "Adjust the step size for volume changes (scroll wheel, keyboard shortcuts).",
|
||||
"volumes-step-size-label": "Volume step size",
|
||||
"volumes-volume-feedback-description": "Play a feedback sound when adjusting volume",
|
||||
"volumes-volume-feedback-description": "Play a feedback sound when adjusting volume.",
|
||||
"volumes-volume-feedback-label": "Play volume feedback sound",
|
||||
"volumes-volume-overdrive-description": "Allow raising volume above 100%. May not be supported by all hardware.",
|
||||
"volumes-volume-overdrive-label": "Allow volume overdrive"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "Time before bar hides after mouse leaves",
|
||||
"appearance-auto-hide-delay-label": "Hide Delay",
|
||||
"appearance-auto-hide-exclusive-note": "Note: Exclusive zone is automatically disabled when auto-hide is active",
|
||||
"appearance-auto-show-delay-description": "Time before bar shows when mouse enters edge",
|
||||
"appearance-auto-show-delay-label": "Show Delay",
|
||||
"appearance-background-opacity-description": "Set the background opacity specifically for the bar.",
|
||||
"appearance-background-opacity-label": "Bar background opacity",
|
||||
"appearance-capsule-color-description": "Choose a color for bar capsules, or use none for the default surface color.",
|
||||
"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-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-frame-radius": "Inner Radius",
|
||||
"appearance-frame-settings-description": "Adjust frame thickness and inner corner radius",
|
||||
"appearance-frame-settings-label": "Frame Settings",
|
||||
"appearance-frame-thickness": "Thickness",
|
||||
"appearance-hide-on-overview-description": "Hide the bar and close panels when the compositor overview is active.",
|
||||
"appearance-hide-on-overview-label": "Hide bar on overview",
|
||||
"appearance-margins-description": "Adjust the margins around the floating bar.",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-label": "Show capsule",
|
||||
"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",
|
||||
"monitor-configure-widgets": "Configure widgets",
|
||||
@@ -734,7 +801,7 @@
|
||||
"title": "Bar",
|
||||
"tray-blacklist-description": "Add tray exclusion rules, supports wildcards (*).",
|
||||
"tray-blacklist-label": "Blacklist",
|
||||
"tray-blacklist-placeholder": "e.g., nm-applet, Fcitx*",
|
||||
"tray-blacklist-placeholder": "e.g. nm-applet, Fcitx*",
|
||||
"tray-pin-application": "Pin Application",
|
||||
"tray-unpin-application": "Unpin Application",
|
||||
"use-global-widgets": "Use global widgets",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "Download Color Schemes",
|
||||
"method-description": {
|
||||
"content": "Material Design scheme with high-fidelity color extraction that closely matches the source content's actual colors.",
|
||||
"dysfunctional": "Like Faithful but picks the second most dominant color family as primary.",
|
||||
"faithful": "Attempts to stay close to the source color while still generating a harmonious palette.",
|
||||
"fruit-salad": "Material Design scheme that produces a playful, vibrant palette with diverse and varied hues.",
|
||||
"monochrome": "Material Design scheme using a single-hue grayscale with minimal chromatic content.",
|
||||
@@ -866,6 +934,16 @@
|
||||
"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.",
|
||||
"system-stat-layout-bottom": "Bottom",
|
||||
"system-stat-layout-description": "Choose how the legend is displayed relative to the graph.",
|
||||
"system-stat-layout-label": "Layout",
|
||||
"system-stat-layout-side": "Side",
|
||||
"system-stat-rounded-corners-description": "Use rounded corners for the widget background.",
|
||||
"system-stat-rounded-corners-label": "Rounded corners",
|
||||
"system-stat-show-background-description": "Show the background container for the system stat widget.",
|
||||
"system-stat-show-background-label": "Show background",
|
||||
"system-stat-stat-type-description": "Choose which system statistic to display.",
|
||||
"system-stat-stat-type-label": "Statistic Type",
|
||||
"title": "Desktop Widgets",
|
||||
"weather-enabled-description": "Show a weather widget on the desktop.",
|
||||
"weather-enabled-label": "Enable weather widget",
|
||||
@@ -908,7 +986,7 @@
|
||||
"appearance-border-radius-description": "Adjust the dock's border radius.",
|
||||
"appearance-border-radius-label": "Border radius",
|
||||
"appearance-colorize-icons-description": "Apply theme colors to dock app icons (non-focused apps only).",
|
||||
"appearance-colorize-icons-label": "Colorize Icons",
|
||||
"appearance-colorize-icons-label": "Colorize icons",
|
||||
"appearance-dead-opacity-description": "Adjust the opacity of app icons that are not running.",
|
||||
"appearance-dead-opacity-label": "Dead opacity",
|
||||
"appearance-desc": "Customize the dock's behavior and appearance.",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "Search monospace font...",
|
||||
"fonts-reset-scaling": "Reset scaling",
|
||||
"fonts-title": "Fonts",
|
||||
"keybinds-description": "Configure global navigation keys for panels and launcher.",
|
||||
"keybinds-down": "Move Down",
|
||||
"keybinds-enter": "Confirm / Action",
|
||||
"keybinds-escape": "Close / Back",
|
||||
"keybinds-left": "Move Left",
|
||||
"keybinds-right": "Move Right",
|
||||
"keybinds-title": "Navigation Keybinds",
|
||||
"keybinds-up": "Move Up",
|
||||
"language-desc": "Choose your preferred language for the application.",
|
||||
"language-select-auto-detect": "Automatic",
|
||||
"language-select-description": "Select the language used in the application's interface.",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "Use solid black instead of the bar background color.",
|
||||
"screen-corners-solid-black-label": "Solid black corners",
|
||||
"screen-corners-title": "Screen corners",
|
||||
"settings-copied": "Settings copied to clipboard"
|
||||
"settings-copied": "Settings copied to clipboard",
|
||||
"tab-basics": "Basics",
|
||||
"tab-keybinds": "Keybinds"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• Commands are executed via shell (sh -lc)<br>• Commands run in background (detached)<br>• Test buttons execute with current values",
|
||||
@@ -983,30 +1071,30 @@
|
||||
"noctalia-started-placeholder": "e.g. notify-send 'Noctalia Loaded'",
|
||||
"performance-mode-disabled-description": "Command to be executed when Noctalia Performance Mode is disabled.",
|
||||
"performance-mode-disabled-label": "Performance mode disabled",
|
||||
"performance-mode-disabled-placeholder": "e.g., notify-send \"Performance\" \"Mode disabled\"",
|
||||
"performance-mode-disabled-placeholder": "e.g. notify-send \"Performance\" \"Mode disabled\"",
|
||||
"performance-mode-enabled-description": "Command to be executed when Noctalia Performance Mode is enabled.",
|
||||
"performance-mode-enabled-label": "Performance mode enabled",
|
||||
"performance-mode-enabled-placeholder": "e.g., notify-send \"Performance\" \"Mode enabled\"",
|
||||
"screen-lock-description": "Command to be executed when the screen is locked.",
|
||||
"screen-lock-label": "Screen locked",
|
||||
"screen-lock-placeholder": "e.g., notify-send \"Screen\" \"Locked\"",
|
||||
"screen-lock-placeholder": "e.g. notify-send \"Screen\" \"Locked\"",
|
||||
"screen-unlock-description": "Command to be executed when the lock screen is unlocked.",
|
||||
"screen-unlock-label": "Screen unlocked",
|
||||
"screen-unlock-placeholder": "e.g., notify-send \"Screen\" \"Unlocked\"",
|
||||
"screen-unlock-placeholder": "e.g. notify-send \"Screen\" \"Unlocked\"",
|
||||
"session-description": "Command to be executed before shutdown or reboot. Receives action type as $1 (shutdown/reboot).",
|
||||
"session-label": "Session end",
|
||||
"session-placeholder": "e.g., notify-send \"Session\" \"$1\"",
|
||||
"session-placeholder": "e.g. notify-send \"Session\" \"$1\"",
|
||||
"system-hooks-desc": "Configure commands to be executed when system events occur.",
|
||||
"system-hooks-enable-description": "Enable or disable all hook commands.",
|
||||
"system-hooks-enable-label": "Enable hooks",
|
||||
"system-hooks-title": "System hooks",
|
||||
"theme-changed-description": "Command to be executed when theme toggles between Dark and Light Mode.",
|
||||
"theme-changed-label": "Theme changed",
|
||||
"theme-changed-placeholder": "e.g., notify-send \"Theme\" \"Toggled\"",
|
||||
"theme-changed-placeholder": "e.g. notify-send \"Theme\" \"Toggled\"",
|
||||
"title": "Hooks",
|
||||
"wallpaper-changed-description": "Command to be executed when wallpaper changes.",
|
||||
"wallpaper-changed-label": "Wallpaper changed",
|
||||
"wallpaper-changed-placeholder": "e.g., notify-send \"Wallpaper\" \"Changed\""
|
||||
"wallpaper-changed-placeholder": "e.g. notify-send \"Wallpaper\" \"Changed\""
|
||||
},
|
||||
"indicator": {
|
||||
"default-value": "Default: {value}",
|
||||
@@ -1016,7 +1104,7 @@
|
||||
"clipboard-desc": "Access and manage your clipboard history from the launcher.",
|
||||
"execute-desc": "Configure how applications are launched.",
|
||||
"execute-title": "Execution",
|
||||
"settings-annotation-tool-description": "Command to run when clicking the annotate button in clipboard history, The image will be piped to this command.",
|
||||
"settings-annotation-tool-description": "Command to run when clicking the annotate button in clipboard history. The image will be piped to this command.",
|
||||
"settings-annotation-tool-label": "Annotation tool",
|
||||
"settings-annotation-tool-placeholder": "e.g. 'gradia', 'satty -f -'",
|
||||
"settings-auto-paste-description": "Automatically paste the selected clipboard item. Requires wtype.",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "Wrap clipboard text",
|
||||
"settings-clipboard-history-description": "Access previously copied items from the launcher.",
|
||||
"settings-clipboard-history-label": "Enable clipboard history",
|
||||
"settings-custom-launch-prefix-description": "Prefix commands with a custom launcher (e.g., 'runapp' for systemd integration).",
|
||||
"settings-clipboard-watch-image-description": "Full command string passed to wl-paste for image changes. (requires restart)",
|
||||
"settings-clipboard-watch-image-label": "Image watch command",
|
||||
"settings-clipboard-watch-text-description": "Full command string passed to wl-paste for text changes. (requires restart)",
|
||||
"settings-clipboard-watch-text-label": "Text watch command",
|
||||
"settings-custom-launch-prefix-description": "Prefix commands with a custom launcher (e.g. 'runapp' for systemd integration).",
|
||||
"settings-custom-launch-prefix-enabled-description": "Use a custom prefix for launching applications instead of the default method.",
|
||||
"settings-custom-launch-prefix-enabled-label": "Enable custom launch prefix",
|
||||
"settings-custom-launch-prefix-label": "Custom launch prefix",
|
||||
"settings-density-description": "Adjust the size of application icons and the density of the launcher.",
|
||||
"settings-density-label": "Density",
|
||||
"settings-desc": "Customize the launcher's behavior and appearance.",
|
||||
"settings-enable-settings-search-description": "Show settings results when searching in the launcher.",
|
||||
"settings-enable-settings-search-label": "Enable settings search",
|
||||
"settings-enable-windows-search-description": "Search and focus active windows.",
|
||||
"settings-enable-windows-search-label": "Enable windows search",
|
||||
"settings-grid-view-description": "Display items in a grid layout instead of a list.",
|
||||
"settings-icon-mode-description": "Use native system icons instead of Tabler icons.",
|
||||
"settings-icon-mode-label": "Use native icons",
|
||||
"settings-ignore-mouse-input-description": "Disable mouse interaction and scrollwheel in the launcher.",
|
||||
"settings-ignore-mouse-input-label": "Ignore mouse input",
|
||||
"settings-overlay-layer-description": "Display the launcher on the overlay layer, above fullscreen windows. When enabled, the launcher will not attach to the bar.",
|
||||
"settings-overlay-layer-label": "Show above fullscreen",
|
||||
"settings-position-description": "Choose where the launcher panel appears.",
|
||||
"settings-show-categories-description": "Show category tabs for filtering applications.",
|
||||
"settings-show-categories-label": "Show categories",
|
||||
@@ -1046,10 +1144,12 @@
|
||||
"settings-show-icon-background-label": "Show icon background",
|
||||
"settings-sort-by-usage-description": "When enabled, frequently launched apps appear first in the list.",
|
||||
"settings-sort-by-usage-label": "Sort by most used",
|
||||
"settings-terminal-command-description": "Command to launch a terminal. E.g., 'kitty -e' or 'gnome-terminal --'.",
|
||||
"settings-terminal-command-description": "Command to launch a terminal. E.g. 'kitty -e' or 'gnome-terminal --'.",
|
||||
"settings-terminal-command-label": "Terminal command",
|
||||
"settings-use-app2unit-description": "Uses an alternative launch method to better manage app processes and prevent issues.",
|
||||
"settings-use-app2unit-label": "Use App2Unit to launch applications",
|
||||
"settings-view-mode-description": "Choose the layout for the launcher entries.",
|
||||
"settings-view-mode-label": "View mode",
|
||||
"title": "Launcher"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,12 +1166,12 @@
|
||||
"date-time-show-events-description": "Display events in the calendar panel.",
|
||||
"date-time-show-events-label": "Show calendar events",
|
||||
"date-time-title": "Date & time",
|
||||
"date-time-use-analog-description": "Show an analog style clock on the calendar window and lock screen.",
|
||||
"date-time-use-analog-description": "Show an analog style clock on the calendar window.",
|
||||
"date-time-use-analog-label": "Use analog style clock",
|
||||
"date-time-week-numbers-description": "Display the week of the year (e.g., week 38) in the calendar.",
|
||||
"date-time-week-numbers-description": "Display the week of the year (e.g. week 38) in the calendar.",
|
||||
"date-time-week-numbers-label": "Show week numbers",
|
||||
"location-desc": "Get accurate weather and Night Light scheduling by setting your location.",
|
||||
"location-search-description": "e.g., Toronto, ON",
|
||||
"location-search-description": "e.g. Toronto, ON",
|
||||
"location-search-label": "Search for a location",
|
||||
"location-search-placeholder": "Enter the location name",
|
||||
"location-title": "Your location",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "Display weather in calendar"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "When fprintd (fingerprint authentication) is active, this option lets you still login using your password instead of a fingerprint",
|
||||
"allow-password-with-fprintd-label": "Allow password login with fprintd",
|
||||
"auto-start-auth-description": "Automatically starts fingerprint authentication without requiring a key press or button click.",
|
||||
"auto-start-auth-label": "Auto-start authentication",
|
||||
"clock-format-description": "Customize the clock format using date/time syntax tokens.",
|
||||
"clock-format-label": "Clock format",
|
||||
"clock-style-analog": "Analog",
|
||||
"clock-style-custom": "Custom",
|
||||
"clock-style-description": "Choose the visual style of the clock on the lock screen.",
|
||||
"clock-style-digital": "Digital",
|
||||
"clock-style-label": "Clock style",
|
||||
"compact-lockscreen-description": "Show only the login input and system controls, hiding weather and media widgets.",
|
||||
"compact-lockscreen-label": "Compact lock screen",
|
||||
"lock-on-suspend-description": "Automatically lock the screen when suspending the system.",
|
||||
"lock-on-suspend-label": "Lock on suspend",
|
||||
"lock-screen-animations-description": "Enable or disable lockscreen animations.",
|
||||
"lock-screen-animations-label": "Lockscreen animations",
|
||||
"lock-screen-blur-strength-description": "Applies a blur effect to the lock screen wallpaper.",
|
||||
"lock-screen-blur-strength-label": "Lock screen blur strength",
|
||||
"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.",
|
||||
"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.",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "Save low urgency to history",
|
||||
"history-normal-urgency-description": "Save normal priority notifications to history.",
|
||||
"history-normal-urgency-label": "Save normal urgency to history",
|
||||
"media-toast-description": "Show a toast when media playback state changes.",
|
||||
"media-toast-label": "Media",
|
||||
"monitors-desc": "Show notification on specific monitors. Defaults to all if none are chosen.",
|
||||
"settings-always-on-top-description": "Display notifications above fullscreen windows and other layers.",
|
||||
"settings-background-opacity-description": "Adjust the opacity of notification backgrounds.",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "Notification sounds unavailable",
|
||||
"sounds-volume-description": "Adjust the volume level for notification sounds.",
|
||||
"sounds-volume-label": "Sound volume",
|
||||
"toast-battery-description": "Show a warning when the battery level falls below this percentage.",
|
||||
"toast-battery-label": "Battery warning",
|
||||
"toast-desc": "Configure toast appearance and behavior.",
|
||||
"toast-keyboard-description": "Show a toast when the keyboard layout changes.",
|
||||
"toast-keyboard-label": "Keyboard layout"
|
||||
"toast-keyboard-label": "Keyboard layout",
|
||||
"toast-media-description": "Show a toast when media playback state changes.",
|
||||
"toast-media-label": "Media"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "Display OSD above fullscreen windows and other layers.",
|
||||
@@ -1202,16 +1322,20 @@
|
||||
"types-volume-label": "Output volume"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "Auto-update plugins",
|
||||
"auto-update-description": "Automatically update all plugins when the shell starts.",
|
||||
"available-description": "Browse and install plugins from configured sources.",
|
||||
"available-label": "Available plugins",
|
||||
"available-no-plugins-description": "Check your plugin sources or refresh the list.",
|
||||
"available-no-plugins-label": "No plugins available",
|
||||
"check-for-updates": "Check for updates",
|
||||
"checking-for-updates": "Checking for updates...",
|
||||
"collision-already-installed": "This plugin is already installed",
|
||||
"collision-custom-version-exists": "A custom version from \"{source}\" is already installed",
|
||||
"collision-official-version-exists": "The official version of this plugin is already installed",
|
||||
"filter-downloaded": "Downloaded",
|
||||
"filter-not-downloaded": "Not Downloaded",
|
||||
"filter-tags-description": "Filter plugins by category or download status",
|
||||
"filter-tags-description": "Filter plugins by category or download status.",
|
||||
"filter-tags-label": "Tags",
|
||||
"hot-reload-description": "Automatically reload plugins when their files change. Useful for plugin development.",
|
||||
"hot-reload-label": "Hot reload (dev mode)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "My cool repository",
|
||||
"sources-remove-tooltip": "Remove plugin source",
|
||||
"title": "Plugins",
|
||||
"translations-reloaded": "Reloaded translations: {name}",
|
||||
"uninstall-dialog-description": "Are you sure you want to uninstall {plugin}? This will remove all plugin data.",
|
||||
"uninstall-dialog-title": "Uninstall plugin",
|
||||
"uninstall-error": "Failed to uninstall: {error}",
|
||||
@@ -1271,11 +1396,14 @@
|
||||
"entries-desc": "Customize which power actions appear in the session menu and in what order.",
|
||||
"entries-title": "Power actions",
|
||||
"entry-settings-command-description": "Custom command to execute for this action. Leave empty to use the default system command.",
|
||||
"entry-settings-command-placeholder": "e.g., systemctl poweroff",
|
||||
"entry-settings-command-placeholder": "e.g. systemctl poweroff",
|
||||
"entry-settings-default-command-lock": "Internal lock screen (no command)",
|
||||
"entry-settings-default-command-logout": "Internal logout (no command)",
|
||||
"entry-settings-default-info-description": "If no custom command is specified, the default system command will be used.",
|
||||
"entry-settings-default-info-label": "Default command",
|
||||
"entry-settings-keybind-description": "Assign a key combination to trigger this action when the session menu is open.",
|
||||
"entry-settings-keybind-placeholder": "Press Record to assign a key...",
|
||||
"entry-settings-keybind-recording": "Recording... Press any key combination",
|
||||
"entry-settings-title": "Configure {entry}",
|
||||
"entry-settings-tooltip": "Configure command",
|
||||
"general-desc": "Configure the session menu panel behavior and appearance.",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Critical color",
|
||||
"custom-highlight-colors-title-label": "Custom highlight colors",
|
||||
"disk-available-label": "Disk available",
|
||||
"disk-section-label": "Disk usage",
|
||||
"enable-dgpu-monitoring-description": "Warning: This will wake up your discrete GPU (NVIDIA/AMD), which may significantly impact battery life on laptops with hybrid graphics.",
|
||||
"enable-dgpu-monitoring-label": "Enable discrete GPU monitoring",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "Choose settings layout (may require reopening).",
|
||||
"settings-panel-mode-label": "Settings panel mode",
|
||||
"shadows-description": "Enables drop shadows under bars and panels.",
|
||||
"shadows-direction-description": "Choose where the shadow is cast from.",
|
||||
"shadows-direction-description": "Choose where the shadow is cast to.",
|
||||
"shadows-direction-label": "Shadow direction",
|
||||
"shadows-label": "Drop shadows",
|
||||
"title": "User Interface",
|
||||
@@ -1357,7 +1486,7 @@
|
||||
"automation-change-mode-alphabetical": "Alphabetical",
|
||||
"automation-change-mode-description": "Choose how wallpapers are selected when changing automatically.",
|
||||
"automation-change-mode-label": "Change mode",
|
||||
"automation-custom-interval-description": "Enter time as HH:MM (e.g., 01:30).",
|
||||
"automation-custom-interval-description": "Enter time as HH:MM (e.g. 01:30).",
|
||||
"automation-custom-interval-label": "Custom interval",
|
||||
"automation-interval-description": "How often to change wallpapers automatically.",
|
||||
"automation-interval-label": "Wallpaper interval",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "Set a different wallpaper folder for each monitor.",
|
||||
"settings-monitor-specific-label": "Monitor-specific directories",
|
||||
"settings-monitor-specific-tooltip": "Monitor wallpaper folder",
|
||||
"settings-overview-blur-strength-description": "Applies the blur strength to the overview.",
|
||||
"settings-overview-blur-strength-label": "Overview blur strength",
|
||||
"settings-overview-tint-description": "Applies the tint strength to the overview.",
|
||||
"settings-overview-tint-label": "Overview tint strength",
|
||||
"settings-recursive-search-description": "Also search for wallpapers in subfolders of the wallpaper directory.",
|
||||
"settings-recursive-search-label": "Search subfolders",
|
||||
"settings-select-monitor-folder": "Select monitor wallpaper folder",
|
||||
@@ -1407,11 +1540,11 @@
|
||||
"enter-command": "Enter command to execute (app or custom script)",
|
||||
"enter-ipc-identifier": "Enter unique identifier for IPC commands",
|
||||
"enter-path": "Enter path...",
|
||||
"enter-text-to-collapse": "e.g., 'nothing is playing'. Use /regex/ for patterns.",
|
||||
"enter-text-to-collapse": "e.g. 'nothing is playing'. Use /regex/ for patterns.",
|
||||
"enter-tooltip": "Enter tooltip",
|
||||
"enter-width-pixels": "Enter width in pixels",
|
||||
"search": "Search...",
|
||||
"search-icons": "e.g., noctalia, niri, battery, cloud",
|
||||
"search-icons": "e.g. noctalia, niri, battery, cloud",
|
||||
"search-launcher": "Search entries... or use > for commands",
|
||||
"search-wallhaven": "Search Wallhaven...",
|
||||
"search-wallpapers": "Type to filter wallpapers..."
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "All Done!",
|
||||
"appearance": {
|
||||
"subheader": "Choose Dark Mode and color sources (Wallpaper or predefined)."
|
||||
"subheader": "Choose Dark Mode and color sources (wallpaper or predefined)."
|
||||
},
|
||||
"customize": {
|
||||
"header": "Customize your experience",
|
||||
@@ -1449,7 +1582,7 @@
|
||||
},
|
||||
"skip-setup": "Skip Setup",
|
||||
"telemetry-wizard-done": "Got it!",
|
||||
"telemetry-wizard-note": "You're in control — enable or disable this anytime in Settings",
|
||||
"telemetry-wizard-note": "You're in control — enable or disable this anytime in settings",
|
||||
"telemetry-wizard-subtitle": "We've added anonymous analytics to help improve Noctalia",
|
||||
"telemetry-wizard-title": "Privacy Update",
|
||||
"wallpaper": {
|
||||
@@ -1490,7 +1623,7 @@
|
||||
"disk": "Disk",
|
||||
"download-speed": "Download speed",
|
||||
"gpu-temp": "GPU temp",
|
||||
"load-average": "Load avg",
|
||||
"load-average": "Load average",
|
||||
"title": "System Monitor",
|
||||
"upload-speed": "Upload speed"
|
||||
},
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "Airplane Mode"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "Critical battery",
|
||||
"critical-desc": "Battery is at {percent}% — please connect the charger immediately",
|
||||
"low": "Low battery",
|
||||
"low-desc": "Battery is at {percent}%. Please connect the charger"
|
||||
"low-desc": "Battery is at {percent}% — please connect the charger"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Address copied to clipboard",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "Disc",
|
||||
"fade": "Fade",
|
||||
"honeycomb": "Honeycomb",
|
||||
"pixelate": "Pixelate",
|
||||
"stripes": "Stripes",
|
||||
"wipe": "Wipe"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "Loading wallpapers...",
|
||||
"no-results": "No wallpapers found. Try a different search query.",
|
||||
"page": "{current} of {total}"
|
||||
"page": "{current} of {total}",
|
||||
"page-prefix": "Page",
|
||||
"page-suffix": "of {total}"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
+288
-149
File diff suppressed because it is too large
Load Diff
+190
-51
@@ -48,11 +48,16 @@
|
||||
"device-default": "Par défaut (périphérique d'affichage)",
|
||||
"device-description": "Sélectionnez le périphérique de batterie à afficher.",
|
||||
"device-label": "Dispositif à pile",
|
||||
"display-mode-description": "Choisissez comment la batterie est affichée dans la barre.",
|
||||
"display-mode-graphic": "Batterie graphique",
|
||||
"display-mode-graphic-clean": "Batterie graphique (sans %)",
|
||||
"display-mode-icon-always": "Icône - Toujours afficher %",
|
||||
"display-mode-icon-hover": "Icône - Afficher au survol",
|
||||
"display-mode-icon-only": "Icône seulement",
|
||||
"hide-if-idle-description": "Masquer le widget lorsque la batterie n'est ni en charge ni en décharge.",
|
||||
"hide-if-idle-label": "Masquer en cas d'inactivité",
|
||||
"hide-if-not-detected-description": "Masquer le widget lorsqu'aucune batterie n'est détectée sur le système.",
|
||||
"hide-if-not-detected-label": "Caché si non détecté",
|
||||
"low-battery-threshold-description": "Afficher un avertissement lorsque la batterie tombe en dessous de ce pourcentage.",
|
||||
"low-battery-threshold-label": "Seuil d'avertissement de batterie faible",
|
||||
"show-noctalia-performance-description": "Afficher le basculement du mode performance Noctalia dans le panneau batterie.<br>Désactive les ombres et les animations dans Noctalia pour réduire l'utilisation des ressources.",
|
||||
"show-noctalia-performance-label": "Afficher le basculement Noctalia Performance",
|
||||
@@ -75,8 +80,6 @@
|
||||
"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-primary-color-description": "Lorsque cette option est activée, la couleur principale est utilisée pour la mise en évidence.",
|
||||
"use-primary-color-label": "Utiliser la couleur principale",
|
||||
"vertical-bar-description": "Utilisez un espace pour séparer chaque partie sur une nouvelle ligne.",
|
||||
"vertical-bar-label": "Barre verticale"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"collapse-condition-description": "Si le texte de sortie correspond à cette valeur, le bouton se repliera.",
|
||||
"collapse-condition-label": "Condition d’effondrement",
|
||||
"color-selection-description": "Appliquer les couleurs du thème à l'icône et au texte.",
|
||||
"color-selection-label": "Sélectionner la couleur",
|
||||
"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.",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "Masquer l’icône de notification lorsqu’il n’y a aucune notification non lue.",
|
||||
"hide-widget-when-zero-unread-label": "Masquer l’icône sans notifications non lues",
|
||||
"show-unread-badge-description": "Afficher un badge montrant le nombre de notifications non lues.",
|
||||
"show-unread-badge-label": "Afficher le badge non lu"
|
||||
"show-unread-badge-label": "Afficher le badge non lu",
|
||||
"unread-badge-color-description": "Sélectionnez la couleur pour le badge de notification non lue.",
|
||||
"unread-badge-color-label": "Couleur du badge non lu"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "Sélectionnez un widget à ajouter...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "Afficher les statistiques sous forme de mini-graphiques à barres au lieu de valeurs textuelles. Empêche les décalages de mise en page.",
|
||||
"compact-mode-label": "Mode compact",
|
||||
"cpu-frequency-description": "Afficher la vitesse d'horloge actuelle du CPU en GHz.",
|
||||
"cpu-frequency-label": "Afficher la fréquence du CPU",
|
||||
"cpu-temperature-description": "Afficher les lectures de température du CPU si disponibles.",
|
||||
"cpu-temperature-label": "Température du CPU",
|
||||
"cpu-usage-description": "Afficher le pourcentage d'utilisation actuel du CPU.",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "Utilisation de la mémoire",
|
||||
"network-traffic-description": "Afficher les vitesses de téléchargement et de téléversement du réseau.",
|
||||
"network-traffic-label": "Trafic réseau",
|
||||
"storage-as-percentage-description": "Afficher l'espace disque en pourcentage au lieu des valeurs absolues.",
|
||||
"storage-as-percentage-label": "Disque en pourcentage",
|
||||
"storage-available-description": "Affiche l'espace disque disponible au lieu de l'espace utilisé.",
|
||||
"storage-available-label": "Espace disque disponible",
|
||||
"storage-usage-description": "Afficher les informations d'utilisation de l'espace disque.",
|
||||
"storage-usage-label": "Utilisation du stockage",
|
||||
"swap-usage-description": "Afficher l'utilisation de la mémoire swap.",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "Réinitialiser la largeur du titre"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "Appliquer les couleurs du thème à l'icône chevron du tiroir.",
|
||||
"chevron-color-label": "Couleur du chevron",
|
||||
"colorize-icons-description": "Appliquer les couleurs du thème aux icônes de la barre système.",
|
||||
"colorize-icons-label": "Coloriser les icônes",
|
||||
"drawer-enabled-description": "Lorsqu'elle est activée, les éléments de la barre système non épinglés sont affichés dans un panneau tiroir.<br>Lorsqu'elle est désactivée, tous les éléments de la barre système sont affichés en ligne.",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "Masquer les objets passifs"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "Choisissez comment vous souhaitez que cette valeur apparaisse.",
|
||||
"display-mode-label": "Mode d'affichage"
|
||||
"display-mode-description": "Choisissez comment vous souhaitez que cette valeur apparaisse."
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "Nombre de caractères à afficher des noms d'espaces de travail (1-10).",
|
||||
"character-count-label": "Nombre de caractères",
|
||||
"empty-color-description": "Définir la couleur d'arrière-plan pour les Workspaces vides.",
|
||||
"empty-color-label": "Couleur d'espace de travail vide",
|
||||
"enable-scrollwheel-description": "Basculer entre les espaces de travail avec la molette de la souris.",
|
||||
"enable-scrollwheel-label": "Faites défiler pour changer d'espace de travail",
|
||||
"focused-color-description": "Définir la couleur d'arrière-plan pour l'espace de travail sélectionné.",
|
||||
"focused-color-label": "Couleur de l'espace de travail sélectionné",
|
||||
"follow-focused-screen-description": "Afficher les espaces de travail de l'écran actuellement ciblé, plutôt que de l'écran où se trouve la barre.",
|
||||
"follow-focused-screen-label": "Suivre l'écran ciblé",
|
||||
"grouped-border-opacity-description": "Définir le niveau d'opacité des bordures des conteneurs d'espace de travail.",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "Masquer les inoccupés",
|
||||
"label-mode-description": "Choisir comment les étiquettes d'espace de travail sont affichées.",
|
||||
"label-mode-label": "Mode d'étiquette",
|
||||
"occupied-color-description": "Définir la couleur d'arrière-plan pour les Workspaces occupés.",
|
||||
"occupied-color-label": "Couleur de l'espace de travail occupé",
|
||||
"pill-size-description": "Ajustez la taille des pilules d'espace de travail (50%-100%).",
|
||||
"pill-size-label": "Taille de la pilule",
|
||||
"reverse-scrolling-description": "Inverser la direction du changement d'espace de travail lors du défilement.",
|
||||
"reverse-scrolling-label": "Défilement inversé",
|
||||
"show-applications-description": "Afficher les icônes des applications dans chaque espace de travail.",
|
||||
"show-applications-label": "Afficher les applications",
|
||||
"show-badge-description": "Afficher le badge du numéro d'espace de travail en mode groupé.",
|
||||
"show-badge-label": "Afficher le badge de l'espace de travail",
|
||||
"show-labels-only-when-occupied-description": "Afficher uniquement les étiquettes d'espace de travail lorsqu'elles contiennent des fenêtres.",
|
||||
"show-labels-only-when-occupied-label": "Afficher les étiquettes uniquement lorsque le champ est occupé",
|
||||
"unfocused-icons-opacity-description": "Définir le niveau d'opacité des icônes d'applications non focalisées.",
|
||||
@@ -327,18 +350,11 @@
|
||||
"version-new-user": "Nouvelle installation"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "Erreur",
|
||||
"on-surface": "Sur la surface",
|
||||
"primary": "Primaire",
|
||||
"secondary": "Secondaire",
|
||||
"tertiary": "Tertiaire"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Actions",
|
||||
"add": "Ajouter",
|
||||
"appearance": "Apparence",
|
||||
"apply": "Postuler",
|
||||
"apply": "Appliquer",
|
||||
"automation": "Automatisation",
|
||||
"available": "Disponible",
|
||||
"back": "Retour",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "Déconnecter",
|
||||
"disconnected": "Déconnecté",
|
||||
"disconnecting": "Déconnexion...",
|
||||
"display-mode": "Mode d'affichage",
|
||||
"download": "Télécharger",
|
||||
"duration": "Durée",
|
||||
"dysfunctional": "Dysfonctionnel",
|
||||
"edit": "Modifier",
|
||||
"enabled": "Activé",
|
||||
"error": "Erreur",
|
||||
"events": "Événements",
|
||||
"execute": "Exécuter",
|
||||
"faithful": "Fidèle",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "Installé",
|
||||
"interface": "Interface",
|
||||
"internet": "Internet",
|
||||
"keybind": "Raccourci clavier",
|
||||
"language": "Langue",
|
||||
"loading": "Chargement...",
|
||||
"local": "Local",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "Non trouvé",
|
||||
"notifications": "Notifications",
|
||||
"official": "Officiel",
|
||||
"on-surface": "Sur la surface",
|
||||
"output": "Sortie",
|
||||
"pair": "Appairer",
|
||||
"paired": "Apparié",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "Interrogation",
|
||||
"position": "Position",
|
||||
"previous": "Précédent",
|
||||
"primary": "Primaire",
|
||||
"random": "Aléatoire",
|
||||
"reboot": "Redémarrer",
|
||||
"record": "Démarrer l'enregistrement",
|
||||
"refresh": "Actualiser",
|
||||
"required": "(requis)",
|
||||
"reset": "Réinitialiser",
|
||||
"reset-to-default": "Réinitialiser par Défaut",
|
||||
"result-count": "{count} résultat",
|
||||
"result-count-plural": "{count} résultats",
|
||||
"resume": "Reprendrer",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "Analyse en cours...",
|
||||
"screen-corners": "Coins d'écran",
|
||||
"search": "Rechercher",
|
||||
"secondary": "Secondaire",
|
||||
"security": "Sécurité",
|
||||
"select": "Sélectionner",
|
||||
"select-color": "Sélectionner une couleur",
|
||||
"select-color-description": "Appliquer les couleurs du thème pour mettre en valeur.",
|
||||
"select-icon-color": "Sélectionner la couleur de l'icône",
|
||||
"shortcuts": "Raccourcis",
|
||||
"shutdown": "Éteindre",
|
||||
"signal": "Signal",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "Sources",
|
||||
"start": "Commencer",
|
||||
"stop": "Arrêtez",
|
||||
"supporters": "Soutiens",
|
||||
"suspend": "Mettre en veille",
|
||||
"templates": "Modèles",
|
||||
"tertiary": "Tertiaire",
|
||||
"test": "Test",
|
||||
"thresholds": "Seuils",
|
||||
"title": "Titre",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "Semaine",
|
||||
"widgets": "Widgets",
|
||||
"width": "Largeur",
|
||||
"windows": "Fenêtres",
|
||||
"yes": "Oui"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "Au survol"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "Masquer automatiquement ",
|
||||
"hidden": "Masquer quand vide",
|
||||
"idle": "Masquer quand inactif",
|
||||
"non-exclusive": "Non exclusif",
|
||||
"transparent": "Transparent quand vide",
|
||||
"visible": "Toujours visible"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "Chargement des émojis...",
|
||||
"emoji-loading-description": "Veuillez patienter",
|
||||
"emoji-no-recent": "Aucun emoji récent pour le moment",
|
||||
"emoji-search-description": "Rechercher et copier des émojis"
|
||||
"emoji-search-description": "Rechercher et copier des émojis",
|
||||
"settings-search-description": "Trouvez et explorez les paramètres",
|
||||
"windows-search-description": "Rechercher et focaliser les fenêtres ouvertes"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "Compact",
|
||||
"density-default": "Défaut",
|
||||
"density-mini": "Mini",
|
||||
"density-spacious": "Spacieux"
|
||||
"density-spacious": "Spacieux",
|
||||
"display-mode-always-visible": "Toujours Visible",
|
||||
"type-floating": "Flottante",
|
||||
"type-framed": "Encadrée",
|
||||
"type-simple": "Simple"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "Classique",
|
||||
"quick-settings-style-modern": "Moderne"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "Confortable",
|
||||
"compact": "Compact",
|
||||
"default": "Par défaut"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "Grille",
|
||||
"list": "Liste"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "Défiler toujours",
|
||||
"hover": "Défiler au survol",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "Devenir un soutien",
|
||||
"changelog": "Afficher le journal des modifications",
|
||||
"contributors-desc": "Un grand merci à notre {count} <b>super</b> contributeur !",
|
||||
"contributors-description": "Un grand merci à notre {count} <b>super</b> contributeur !",
|
||||
"contributors-description-plural": "Un grand merci à nos {count} <b>super</b> contributeurs !",
|
||||
"copy-info": "Copier les informations",
|
||||
"info-copied": "Info copiée dans le presse-papiers",
|
||||
@@ -628,6 +677,10 @@
|
||||
"noctalia-title": "Shell Noctalia",
|
||||
"privacy-policy": "Politique de confidentialité",
|
||||
"support": "Soutenez-nous",
|
||||
"supporter-badge": "Soutien",
|
||||
"supporters-desc": "Un immense merci à notre incroyable soutien !",
|
||||
"supporters-desc-plural": "Un grand merci à nos <b>{count} incroyables</b> supporters !",
|
||||
"supporters-loading": "Chargement des contributeurs...",
|
||||
"system-cpu": "Processeur :",
|
||||
"system-disk": "Disque :",
|
||||
"system-gpu": "GPU :",
|
||||
@@ -636,7 +689,7 @@
|
||||
"system-kernel": "Noyau :",
|
||||
"system-loading": "Chargement des informations système...",
|
||||
"system-memory": "Mémoire :",
|
||||
"system-monitor": "Moniteur",
|
||||
"system-monitor": "Moniteur :",
|
||||
"system-not-installed": "fastfetch n'est pas installé",
|
||||
"system-os": "Système d'exploitation :",
|
||||
"system-packages": "Paquets :",
|
||||
@@ -672,7 +725,7 @@
|
||||
"media-frame-rate-label": "Fréquence d'images",
|
||||
"media-primary-player-description": "Entrez un mot-clé pour identifier votre lecteur principal.",
|
||||
"media-primary-player-label": "Lecteur principal",
|
||||
"media-primary-player-placeholder": "ex. spotify, vlc, mpv",
|
||||
"media-primary-player-placeholder": "ex : spotify, vlc, mpv",
|
||||
"media-scrolling-speed-description": "Temps en secondes pour que le titre défile du début à la fin.",
|
||||
"media-scrolling-speed-label": "Vitesse de défilement",
|
||||
"media-scrolling-title-description": "Activer le défilement continu pour les titres multimédias longs.",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "Niveau de volume de l'ensemble du système.",
|
||||
"volumes-step-size-description": "Ajustez l'incrément pour les changements de volume (molette de la souris, raccourcis clavier).",
|
||||
"volumes-step-size-label": "Incrément de volume",
|
||||
"volumes-volume-feedback-description": "Émettre un son de retour lors du réglage du volume",
|
||||
"volumes-volume-feedback-description": "Émettre un son de retour lors du réglage du volume.",
|
||||
"volumes-volume-feedback-label": "Jouer le son de retour de volume",
|
||||
"volumes-volume-overdrive-description": "Permet d'augmenter le volume au-delà de 100 %. Cette fonctionnalité peut ne pas être prise en charge par tout le matériel.",
|
||||
"volumes-volume-overdrive-label": "Autoriser le dépassement du volume"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "Délai avant que la barre ne se masque après le départ de la souris",
|
||||
"appearance-auto-hide-delay-label": "Délai de masquage ",
|
||||
"appearance-auto-hide-exclusive-note": "Remarque : La zone exclusive est automatiquement désactivée lorsque le masquage automatique est actif",
|
||||
"appearance-auto-show-delay-description": "Délai avant que la barre ne s’affiche lorsque la souris entre en bordure",
|
||||
"appearance-auto-show-delay-label": "Délai d’apparition ",
|
||||
"appearance-background-opacity-description": "Définir l'opacité de l'arrière-plan spécifiquement pour la barre.",
|
||||
"appearance-background-opacity-label": "Opacité de l'arrière-plan de la barre",
|
||||
"appearance-capsule-color-description": "Choisissez une couleur pour les capsules de la barre, ou n'en utilisez aucune pour la couleur de surface par défaut.",
|
||||
"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-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-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",
|
||||
"appearance-frame-thickness": "Épaisseur",
|
||||
"appearance-hide-on-overview-description": "Masquer la barre et fermer les panneaux lorsque l'aperçu du compositeur est actif.",
|
||||
"appearance-hide-on-overview-label": "Masquer la barre dans l'aperçu",
|
||||
"appearance-margins-description": "Ajustez les marges autour de la barre flottante.",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-label": "Afficher la capsule",
|
||||
"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",
|
||||
"monitor-configure-widgets": "Configurer les widgets",
|
||||
@@ -734,7 +801,7 @@
|
||||
"title": "Barre",
|
||||
"tray-blacklist-description": "Ajouter des règles d'exclusion pour la boîte à miniatures, prend en charge les caractères génériques (*).",
|
||||
"tray-blacklist-label": "Liste noire",
|
||||
"tray-blacklist-placeholder": "ex: nm-applet, Fcitx*",
|
||||
"tray-blacklist-placeholder": "ex : nm-applet, Fcitx*",
|
||||
"tray-pin-application": "Épingler l'application",
|
||||
"tray-unpin-application": "Désépingler l'application",
|
||||
"use-global-widgets": "Utiliser les widgets globaux",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "Télécharger des jeux de couleurs",
|
||||
"method-description": {
|
||||
"content": "Schéma Material Design avec extraction de couleurs haute fidélité qui correspond étroitement aux couleurs réelles du contenu source.",
|
||||
"dysfunctional": "Comme Faithful, mais choisit la deuxième famille de couleurs la plus dominante comme principale.",
|
||||
"faithful": "Tente de rester proche de la couleur source tout en générant une palette harmonieuse.",
|
||||
"fruit-salad": "Schéma Material Design qui produit une palette ludique et vibrante avec des teintes diverses et variées.",
|
||||
"monochrome": "Schéma Material Design utilisant une échelle de gris à teinte unique avec un contenu chromatique minimal.",
|
||||
@@ -866,6 +934,16 @@
|
||||
"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.",
|
||||
"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",
|
||||
"system-stat-layout-side": "Côté",
|
||||
"system-stat-rounded-corners-description": "Utiliser des coins arrondis pour l'arrière-plan du widget.",
|
||||
"system-stat-rounded-corners-label": "Coins Arrondis",
|
||||
"system-stat-show-background-description": "Afficher le conteneur d'arrière-plan pour le widget de statistiques système.",
|
||||
"system-stat-show-background-label": "Afficher l'arrière-plan",
|
||||
"system-stat-stat-type-description": "Choisis quelle statistique système afficher.",
|
||||
"system-stat-stat-type-label": "Type de Statistique",
|
||||
"title": "Widgets de bureau",
|
||||
"weather-enabled-description": "Afficher un widget météo sur le bureau.",
|
||||
"weather-enabled-label": "Activer le widget météo",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "Rechercher des polices à chasse fixe...",
|
||||
"fonts-reset-scaling": "Réinitialiser l'échelle",
|
||||
"fonts-title": "Polices",
|
||||
"keybinds-description": "Configurez les touches de navigation globales pour les panneaux et le lanceur.",
|
||||
"keybinds-down": "Déplacer vers le bas",
|
||||
"keybinds-enter": "Confirmer / Action",
|
||||
"keybinds-escape": "Fermer / Retour",
|
||||
"keybinds-left": "Déplacer à Gauche",
|
||||
"keybinds-right": "Déplacer à droite",
|
||||
"keybinds-title": "Raccourcis Clavier de Navigation",
|
||||
"keybinds-up": "Déplacer vers le haut",
|
||||
"language-desc": "Choisissez votre langue préférée pour l'application.",
|
||||
"language-select-auto-detect": "Automatique",
|
||||
"language-select-description": "Sélectionnez la langue utilisée dans l'interface de l'application.",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "Utilisez du noir uni au lieu de la couleur de fond de la barre.",
|
||||
"screen-corners-solid-black-label": "Coins noirs unis",
|
||||
"screen-corners-title": "Coins de l'écran",
|
||||
"settings-copied": "Paramètres copiés dans le presse-papier"
|
||||
"settings-copied": "Paramètres copiés dans le presse-papier",
|
||||
"tab-basics": "Bases",
|
||||
"tab-keybinds": "Raccourcis Clavier"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• Les commandes sont exécutées via le shell (sh -lc)<br>• Les commandes s'exécutent en arrière-plan (détachées)<br>• Les boutons de test s'exécutent avec les valeurs actuelles",
|
||||
@@ -980,33 +1068,33 @@
|
||||
"info-parameters-label": "Paramètres disponibles",
|
||||
"noctalia-started-description": "Commande à exécuter lorsque Noctalia a fini de charger.",
|
||||
"noctalia-started-label": "Noctalia démarré",
|
||||
"noctalia-started-placeholder": "p. ex. notify-send 'Noctalia chargé'",
|
||||
"noctalia-started-placeholder": "ex : notify-send 'Noctalia chargé'",
|
||||
"performance-mode-disabled-description": "Commande à exécuter lorsque le mode performance Noctalia est désactivé.",
|
||||
"performance-mode-disabled-label": "mode performance désactivé",
|
||||
"performance-mode-disabled-placeholder": "ex: notify-send \"Performance\" \"Mode désactivé\"",
|
||||
"performance-mode-disabled-placeholder": "ex : notify-send \"Performance\" \"Mode désactivé\"",
|
||||
"performance-mode-enabled-description": "Commande à exécuter lorsque le mode performance Noctalia est activé.",
|
||||
"performance-mode-enabled-label": "Mode performance activé",
|
||||
"performance-mode-enabled-placeholder": "ex: notify-send \"Performance\" \"Mode activé\"",
|
||||
"performance-mode-enabled-placeholder": "ex : notify-send \"Performance\" \"Mode activé\"",
|
||||
"screen-lock-description": "Commande à exécuter lorsque l'écran est verrouillé.",
|
||||
"screen-lock-label": "Écran verrouillé",
|
||||
"screen-lock-placeholder": "ex: notify-send \"Écran\" \"Verrouillé\"",
|
||||
"screen-lock-placeholder": "ex : notify-send \"Écran\" \"Verrouillé\"",
|
||||
"screen-unlock-description": "Commande à exécuter lorsque l'écran est déverrouillé.",
|
||||
"screen-unlock-label": "Écran déverrouillé",
|
||||
"screen-unlock-placeholder": "ex: notify-send \"Écran\" \"Déverrouillé\"",
|
||||
"screen-unlock-placeholder": "ex : notify-send \"Écran\" \"Déverrouillé\"",
|
||||
"session-description": "Commande à exécuter avant l'arrêt ou le redémarrage. Reçoit le type d'action comme $1 (arrêt/redémarrage).",
|
||||
"session-label": "Fin de session",
|
||||
"session-placeholder": "p. ex., notify-send \"Session\" \"$1\"",
|
||||
"session-placeholder": "ex : notify-send \"Session\" \"$1\"",
|
||||
"system-hooks-desc": "Configurez des commandes à exécuter lors d'événements système.",
|
||||
"system-hooks-enable-description": "Activer ou désactiver toutes les commandes de hook.",
|
||||
"system-hooks-enable-label": "Activer les hooks",
|
||||
"system-hooks-title": "Hooks système",
|
||||
"theme-changed-description": "Commande à exécuter lorsque le thème bascule entre le mode sombre et clair.",
|
||||
"theme-changed-label": "Thème changé",
|
||||
"theme-changed-placeholder": "ex: notify-send \"Thème\" \"Basculé\"",
|
||||
"theme-changed-placeholder": "ex : notify-send \"Thème\" \"Basculé\"",
|
||||
"title": "Hooks",
|
||||
"wallpaper-changed-description": "Commande à exécuter lorsque le fond d'écran change.",
|
||||
"wallpaper-changed-label": "Fond d'écran changé",
|
||||
"wallpaper-changed-placeholder": "ex: notify-send \"Fond d'écran\" \"Changé\""
|
||||
"wallpaper-changed-placeholder": "ex : notify-send \"Fond d'écran\" \"Changé\""
|
||||
},
|
||||
"indicator": {
|
||||
"default-value": "Par défaut : {value}",
|
||||
@@ -1018,7 +1106,7 @@
|
||||
"execute-title": "Exécution",
|
||||
"settings-annotation-tool-description": "Commande à exécuter lorsque l'on clique sur le bouton d'annotation dans l'historique du presse-papiers. L'image sera envoyée à cette commande.",
|
||||
"settings-annotation-tool-label": "Outil d'annotation",
|
||||
"settings-annotation-tool-placeholder": "ex. 'gradia', 'satty -f -'",
|
||||
"settings-annotation-tool-placeholder": "ex : 'gradia', 'satty -f -'",
|
||||
"settings-auto-paste-description": "Coller automatiquement l'élément sélectionné du presse-papiers. Nécessite wtype.",
|
||||
"settings-auto-paste-label": "Collage automatique",
|
||||
"settings-clip-preview-description": "Afficher un aperçu du contenu du presse-papiers lors de l'utilisation de la commande >clip.",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "Envelopper le texte du presse-papiers",
|
||||
"settings-clipboard-history-description": "Accédez aux éléments précédemment copiés depuis le lanceur.",
|
||||
"settings-clipboard-history-label": "Activer l'historique du presse-papiers",
|
||||
"settings-custom-launch-prefix-description": "Préfixer les commandes avec un lanceur personnalisé (ex. 'runapp' pour l'intégration systemd).",
|
||||
"settings-clipboard-watch-image-description": "Chaîne de commande complète passée à wl-paste pour les changements d'image (redémarrage requis).",
|
||||
"settings-clipboard-watch-image-label": "Commande de Surveillance d'Images",
|
||||
"settings-clipboard-watch-text-description": "Chaîne de commande complète passée à wl-paste pour les changements de texte (nécessite un redémarrage).",
|
||||
"settings-clipboard-watch-text-label": "Commande de surveillance de texte",
|
||||
"settings-custom-launch-prefix-description": "Préfixer les commandes avec un lanceur personnalisé (ex : 'runapp' pour l'intégration systemd).",
|
||||
"settings-custom-launch-prefix-enabled-description": "Utiliser un préfixe personnalisé pour lancer les applications au lieu de la méthode par défaut.",
|
||||
"settings-custom-launch-prefix-enabled-label": "Activer le préfixe de lancement personnalisé",
|
||||
"settings-custom-launch-prefix-label": "Préfixe de lancement personnalisé",
|
||||
"settings-density-description": "Ajustez la taille des icônes d'application et la densité du Launcher.",
|
||||
"settings-density-label": "Densité",
|
||||
"settings-desc": "Personnalisez le comportement et l'apparence du lanceur.",
|
||||
"settings-enable-settings-search-description": "Afficher les résultats des paramètres lors de la recherche dans le lanceur.",
|
||||
"settings-enable-settings-search-label": "Activer la recherche dans les paramètres",
|
||||
"settings-enable-windows-search-description": "Rechercher et focaliser les fenêtres actives.",
|
||||
"settings-enable-windows-search-label": "Activer la recherche de fenêtres",
|
||||
"settings-grid-view-description": "Afficher les éléments dans une grille au lieu d'une liste.",
|
||||
"settings-icon-mode-description": "Utiliser les icônes natives du système au lieu des icônes Tabler.",
|
||||
"settings-icon-mode-label": "Utiliser les icônes natives",
|
||||
"settings-ignore-mouse-input-description": "Désactiver l'interaction de la souris et la molette de défilement dans le lanceur.",
|
||||
"settings-ignore-mouse-input-label": "Ignorer l'entrée de la souris",
|
||||
"settings-overlay-layer-description": "Affiche le lanceur sur la couche de superposition, au-dessus des fenêtres en plein écran. Lorsqu'il est activé, le lanceur ne s'attachera pas à la barre.",
|
||||
"settings-overlay-layer-label": "Afficher au-dessus du plein écran",
|
||||
"settings-position-description": "Choisissez où le panneau du lanceur apparaît.",
|
||||
"settings-show-categories-description": "Afficher les onglets de catégories pour filtrer les applications.",
|
||||
"settings-show-categories-label": "Afficher les catégories",
|
||||
@@ -1046,10 +1144,12 @@
|
||||
"settings-show-icon-background-label": "Afficher l'arrière-plan de l'icône",
|
||||
"settings-sort-by-usage-description": "Lorsque cette option est activée, les applications fréquemment lancées apparaissent en premier dans la liste.",
|
||||
"settings-sort-by-usage-label": "Trier par les plus utilisés",
|
||||
"settings-terminal-command-description": "Commande pour lancer un terminal. Ex: 'kitty -e' ou 'gnome-terminal --'.",
|
||||
"settings-terminal-command-description": "Commande pour lancer un terminal. Ex : 'kitty -e' ou 'gnome-terminal --'.",
|
||||
"settings-terminal-command-label": "Commande du terminal",
|
||||
"settings-use-app2unit-description": "Utilise une méthode de lancement alternative pour mieux gérer les processus des applications et prévenir les problèmes.",
|
||||
"settings-use-app2unit-label": "Utiliser App2Unit pour lancer les applications",
|
||||
"settings-view-mode-description": "Choisis la disposition des entrées du Lanceur.",
|
||||
"settings-view-mode-label": "Mode d'affichage",
|
||||
"title": "Lanceur"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,12 +1166,12 @@
|
||||
"date-time-show-events-description": "Afficher les événements dans le panneau du calendrier.",
|
||||
"date-time-show-events-label": "Afficher les événements du calendrier",
|
||||
"date-time-title": "Date & heure",
|
||||
"date-time-use-analog-description": "Afficher une horloge de style analogique dans la fenêtre du calendrier et sur l'écran de verrouillage.",
|
||||
"date-time-use-analog-description": "Afficher une horloge de style analogique sur la fenêtre du calendrier.",
|
||||
"date-time-use-analog-label": "Utiliser une horloge de style analogique",
|
||||
"date-time-week-numbers-description": "Afficher la semaine de l'année (ex: Semaine 38) dans le calendrier.",
|
||||
"date-time-week-numbers-description": "Afficher la semaine de l'année (ex : Semaine 38) dans le calendrier.",
|
||||
"date-time-week-numbers-label": "Afficher les numéros de semaine",
|
||||
"location-desc": "Obtenez une météo et une planification de l'éclairage nocturne précises en définissant votre emplacement.",
|
||||
"location-search-description": "ex: Toronto, ON",
|
||||
"location-search-description": "ex : Toronto, ON",
|
||||
"location-search-label": "Rechercher un emplacement",
|
||||
"location-search-placeholder": "Entrez le nom de l'emplacement",
|
||||
"location-title": "Votre emplacement",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "Afficher la météo dans le calendrier"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "Lorsque fprintd (authentification par empreinte digitale) est actif, cette option vous permet de vous connecter avec votre mot de passe au lieu d'une empreinte digitale.",
|
||||
"allow-password-with-fprintd-label": "Autoriser la connexion par mot de passe avec fprintd",
|
||||
"auto-start-auth-description": "Démarre automatiquement l'authentification par empreinte digitale sans nécessiter de pression sur une touche ou un clic de bouton.",
|
||||
"auto-start-auth-label": "Authentification au démarrage automatique",
|
||||
"clock-format-description": "Personnalisez le format de l'horloge en utilisant les jetons de syntaxe de date/heure.",
|
||||
"clock-format-label": "Format de l'horloge",
|
||||
"clock-style-analog": "Analogique",
|
||||
"clock-style-custom": "Personnalisé",
|
||||
"clock-style-description": "Choisissez le style visuel de l'horloge sur l'écran de verrouillage.",
|
||||
"clock-style-digital": "Numérique",
|
||||
"clock-style-label": "Style de l'Horloge",
|
||||
"compact-lockscreen-description": "Afficher uniquement le champ de saisie de connexion et les commandes système, en masquant les widgets météo et multimédia.",
|
||||
"compact-lockscreen-label": "Écran de verrouillage compact",
|
||||
"lock-on-suspend-description": "Verrouiller automatiquement l'écran lors de la mise en veille du système.",
|
||||
"lock-on-suspend-label": "Verrouiller à la suspension",
|
||||
"lock-screen-animations-description": "Activer ou désactiver les animations de l'écran de verrouillage.",
|
||||
"lock-screen-animations-label": "Animations de l'Écran de Verrouillage",
|
||||
"lock-screen-blur-strength-description": "Applique un effet de flou au fond d'écran de l'écran de verrouillage.",
|
||||
"lock-screen-blur-strength-label": "Intensité du flou de l'écran de verrouillage",
|
||||
"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.",
|
||||
"show-hibernate-description": "Afficher l’option 'hiberner' dans les commandes d'alimentation.",
|
||||
"show-hibernate-label": "Afficher l’hibernation",
|
||||
"show-session-buttons-description": "Autoriser l'accès aux paramètres d'alimentation depuis l'écran de verrouillage.",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "Enregistrer l'urgence faible dans l'historique",
|
||||
"history-normal-urgency-description": "Enregistrer les notifications de priorité normale dans l'historique.",
|
||||
"history-normal-urgency-label": "Enregistrer l'urgence normale dans l'historique",
|
||||
"media-toast-description": "Afficher une notification toast lorsque l'état de lecture du média change.",
|
||||
"media-toast-label": "Média",
|
||||
"monitors-desc": "Afficher les notifications sur des moniteurs spécifiques. Par défaut, sur tous si aucun n'est choisi.",
|
||||
"settings-always-on-top-description": "Afficher les notifications au-dessus des fenêtres en plein écran et des autres applications.",
|
||||
"settings-background-opacity-description": "Ajuster l'opacité des arrière-plans de notifications.",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "Sons de notification non disponibles",
|
||||
"sounds-volume-description": "Ajuster le niveau de volume pour les sons de notification.",
|
||||
"sounds-volume-label": "Volume sonore",
|
||||
"toast-battery-description": "Afficher un avertissement lorsque le niveau de batterie descend en dessous de ce pourcentage.",
|
||||
"toast-battery-label": "Avertissement de batterie",
|
||||
"toast-desc": "Configurer l'apparence et le comportement des notifications toast.",
|
||||
"toast-keyboard-description": "Afficher une notification lorsque la disposition du clavier change.",
|
||||
"toast-keyboard-label": "Disposition du clavier"
|
||||
"toast-keyboard-label": "Disposition du clavier",
|
||||
"toast-media-description": "Afficher une notification toast lorsque l'état de lecture du média change.",
|
||||
"toast-media-label": "Média"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "Afficher l'OSD au-dessus des fenêtres plein écran et autres couches.",
|
||||
@@ -1202,16 +1322,20 @@
|
||||
"types-volume-label": "Volume de sortie"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "Mettre à jour les plugins automatiquement",
|
||||
"auto-update-description": "Mettre à jour automatiquement tous les plugins au démarrage de la 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...",
|
||||
"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",
|
||||
"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 extensions 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-label": "Rechargement à chaud (mode développement)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "Mon dépôt cool",
|
||||
"sources-remove-tooltip": "Supprimer la source du plugin",
|
||||
"title": "Modules d'extension",
|
||||
"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}",
|
||||
@@ -1271,11 +1396,14 @@
|
||||
"entries-desc": "Personnaliser les actions d'alimentation qui apparaissent dans le menu de session et leur ordre.",
|
||||
"entries-title": "Actions d'alimentation",
|
||||
"entry-settings-command-description": "Commande personnalisée à exécuter pour cette action. Laisser vide pour utiliser la commande système par défaut.",
|
||||
"entry-settings-command-placeholder": "systemctl poweroff",
|
||||
"entry-settings-command-placeholder": "ex : systemctl poweroff",
|
||||
"entry-settings-default-command-lock": "Écran de verrouillage interne (sans commande)",
|
||||
"entry-settings-default-command-logout": "Déconnexion interne (sans commande)",
|
||||
"entry-settings-default-info-description": "Si aucune commande personnalisée n'est spécifiée, la commande système par défaut sera utilisée.",
|
||||
"entry-settings-default-info-label": "Commande par défaut",
|
||||
"entry-settings-keybind-description": "Attribuez une combinaison de touches pour déclencher cette action lorsque le menu de session est ouvert.",
|
||||
"entry-settings-keybind-placeholder": "Appuyez sur Enregistrer pour assigner une touche...",
|
||||
"entry-settings-keybind-recording": "Enregistrement... Appuyez sur n'importe quelle combinaison de touches",
|
||||
"entry-settings-title": "Configurer {entry}",
|
||||
"entry-settings-tooltip": "Configurer la commande",
|
||||
"general-desc": "Configurer le comportement et l'apparence du panneau du menu de session.",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Couleur critique",
|
||||
"custom-highlight-colors-title-label": "Couleurs de surbrillance personnalisées",
|
||||
"disk-available-label": "Espace disque disponible",
|
||||
"disk-section-label": "Utilisation disque",
|
||||
"enable-dgpu-monitoring-description": "Attention : Ceci va activer votre GPU dédié (NVIDIA/AMD), ce qui peut avoir un impact significatif sur l'autonomie de la batterie des ordinateurs portables dotés de cartes graphiques hybrides.",
|
||||
"enable-dgpu-monitoring-label": "Activer la surveillance du GPU dédié",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"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",
|
||||
"shadows-description": "Active les ombres portées sous les barres et les panneaux.",
|
||||
"shadows-direction-description": "Choisissez d’où vient l’ombre.",
|
||||
"shadows-direction-description": "Choisissez où l'ombre est projetée.",
|
||||
"shadows-direction-label": "Direction de l’ombre",
|
||||
"shadows-label": "Ombres portées",
|
||||
"title": "Interface utilisateur",
|
||||
@@ -1357,7 +1486,7 @@
|
||||
"automation-change-mode-alphabetical": "Alphabétique",
|
||||
"automation-change-mode-description": "Choisissez comment les fonds d'écran sont sélectionnés lors du changement automatique.",
|
||||
"automation-change-mode-label": "Mode de changement",
|
||||
"automation-custom-interval-description": "Entrez l'heure au format HH:MM (ex: 01:30).",
|
||||
"automation-custom-interval-description": "Entrez l'heure au format HH:MM (ex : 01:30).",
|
||||
"automation-custom-interval-label": "Intervalle personnalisé",
|
||||
"automation-interval-description": "Fréquence de changement automatique des fonds d'écran.",
|
||||
"automation-interval-label": "Intervalle du fond d'écran",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "Définissez un dossier de fond d'écran différent pour chaque moniteur.",
|
||||
"settings-monitor-specific-label": "Dossiers spécifiques au moniteur",
|
||||
"settings-monitor-specific-tooltip": "Dossier des fonds d'écran du moniteur",
|
||||
"settings-overview-blur-strength-description": "Applique la force du flou à l'aperçu.",
|
||||
"settings-overview-blur-strength-label": "Force du flou de l'aperçu",
|
||||
"settings-overview-tint-description": "Applique la force de la teinte à l'aperçu.",
|
||||
"settings-overview-tint-label": "Force de la teinte de l'aperçu",
|
||||
"settings-recursive-search-description": "Rechercher également des fonds d'écran dans les sous-dossiers du répertoire des fonds d'écran.",
|
||||
"settings-recursive-search-label": "Rechercher dans les sous-dossiers",
|
||||
"settings-select-monitor-folder": "Sélectionner le dossier des fonds d'écran du moniteur",
|
||||
@@ -1407,11 +1540,11 @@
|
||||
"enter-command": "Entrez la commande à exécuter (application ou script personnalisé)",
|
||||
"enter-ipc-identifier": "Entrez un identifiant unique pour les commandes IPC",
|
||||
"enter-path": "Entrez le chemin...",
|
||||
"enter-text-to-collapse": "par ex., 'rien n’est en lecture'. Utilisez /regex/ pour les modèles.",
|
||||
"enter-text-to-collapse": "ex : 'rien n’est en lecture'. Utilisez /regex/ pour les modèles.",
|
||||
"enter-tooltip": "Entrer l'infobulle",
|
||||
"enter-width-pixels": "Entrez la largeur en pixels",
|
||||
"search": "Rechercher...",
|
||||
"search-icons": "ex: noctalia, niri, batterie, nuage",
|
||||
"search-icons": "ex : noctalia, niri, batterie, nuage",
|
||||
"search-launcher": "Rechercher des entrées... ou utilisez > pour les commandes",
|
||||
"search-wallhaven": "Rechercher sur Wallhaven...",
|
||||
"search-wallpapers": "Tapez pour filtrer les fonds d'écran..."
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "Terminé !",
|
||||
"appearance": {
|
||||
"subheader": "Choisissez le Dark Mode et les sources de couleurs (Fond d'écran ou prédéfinies)."
|
||||
"subheader": "Choisissez le mode sombre et les sources de couleur (fond d'écran ou prédéfinies)."
|
||||
},
|
||||
"customize": {
|
||||
"header": "Personnaliser votre expérience",
|
||||
@@ -1449,7 +1582,7 @@
|
||||
},
|
||||
"skip-setup": "Ignorer la configuration",
|
||||
"telemetry-wizard-done": "Bien reçu !",
|
||||
"telemetry-wizard-note": "Vous avez le contrôle : activez ou désactivez cette option à tout moment dans les Paramètres",
|
||||
"telemetry-wizard-note": "Vous avez le contrôle — activez ou désactivez cette option à tout moment dans les paramètres",
|
||||
"telemetry-wizard-subtitle": "Nous avons ajouté des analyses anonymes pour aider à améliorer Noctalia",
|
||||
"telemetry-wizard-title": "Mise à jour de la confidentialité",
|
||||
"wallpaper": {
|
||||
@@ -1490,7 +1623,7 @@
|
||||
"disk": "Disque",
|
||||
"download-speed": "Vitesse de téléchargement",
|
||||
"gpu-temp": "Température du GPU",
|
||||
"load-average": "Charge moy.",
|
||||
"load-average": "Charge moyenne",
|
||||
"title": "Moniteur système",
|
||||
"upload-speed": "Vitesse d’envoi"
|
||||
},
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "Mode avion"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "Batterie critique",
|
||||
"critical-desc": "Batterie à {percent}% — veuillez connecter le chargeur immédiatement",
|
||||
"low": "Batterie faible",
|
||||
"low-desc": "La batterie est à {percent}%. Veuillez brancher le chargeur"
|
||||
"low-desc": "Batterie à {percent}% — veuillez connecter le chargeur"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adresse copiée dans le presse-papiers",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "Disque",
|
||||
"fade": "Fondu",
|
||||
"honeycomb": "Nid d'abeille",
|
||||
"pixelate": "Pixéliser",
|
||||
"stripes": "Rayures",
|
||||
"wipe": "Balayage"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "Chargement des fonds d'écran...",
|
||||
"no-results": "Aucun fond d'écran trouvé. Essayez une autre requête de recherche.",
|
||||
"page": "{current} sur {total}"
|
||||
"page": "{current} sur {total}",
|
||||
"page-prefix": "Page",
|
||||
"page-suffix": "de {total}"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"toast": {
|
||||
"donation-opened": "दान पृष्ठ आपके ब्राउज़र में खुला"
|
||||
}
|
||||
}
|
||||
+171
-32
@@ -48,11 +48,16 @@
|
||||
"device-default": "Alapértelmezett (Megjelenítő eszköz)",
|
||||
"device-description": "Válassza ki, melyik akkumulátor eszközt jelenítse meg.",
|
||||
"device-label": "Akkumulátor eszköz",
|
||||
"display-mode-description": "Válassza ki, hogyan jelenjen meg az akkumulátor a sávban.",
|
||||
"display-mode-graphic": "Grafikus akkumulátor",
|
||||
"display-mode-graphic-clean": "Grafikus akkumulátor (százalék nélkül)",
|
||||
"display-mode-icon-always": "Ikon - Mindig mutassa a %-ot",
|
||||
"display-mode-icon-hover": "Ikon - Rámutatásra megjelenik",
|
||||
"display-mode-icon-only": "Csak ikon",
|
||||
"hide-if-idle-description": "Widget elrejtése, ha az akkumulátor nincs töltés alatt vagy lemerülőben.",
|
||||
"hide-if-idle-label": "Elrejtés tétlenség esetén",
|
||||
"hide-if-not-detected-description": "Widget elrejtése, ha a rendszer nem észlel akkumulátort.",
|
||||
"hide-if-not-detected-label": "Elrejtés, ha nincs észlelve",
|
||||
"low-battery-threshold-description": "Figyelmeztetés megjelenítése, ha az akkumulátor töltöttsége e százalék alá esik.",
|
||||
"low-battery-threshold-label": "Alacsony akkumulátor töltöttségi figyelmeztetési küszöb",
|
||||
"show-noctalia-performance-description": "A Noctalia teljesítménymód kapcsoló megjelenítése az akkumulátor panelen belül.<br>Kikapcsolja az árnyékokat és animációkat a Noctalia-ban az erőforrás-felhasználás csökkentése érdekében.",
|
||||
"show-noctalia-performance-label": "Noctalia teljesítménymód kapcsoló",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "Egyéni betűtípus használata",
|
||||
"use-monospaced-font-description": "Ha engedélyezve van, az óra a monospace betűtípust fogja használni.",
|
||||
"use-monospaced-font-label": "Monospace betűtípus használata",
|
||||
"use-primary-color-description": "Ha engedélyezve van, ez az elsődleges színt alkalmazza a hangsúlyozáshoz.",
|
||||
"use-primary-color-label": "Elsődleges szín használata",
|
||||
"vertical-bar-description": "Használjon szóközt az egyes részek új sorba való elkülönítéséhez.",
|
||||
"vertical-bar-label": "Függőleges sáv"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"collapse-condition-description": "Ha a kimeneti szöveg megegyezik ezzel az értékkel, a gomb összecsukódik.",
|
||||
"collapse-condition-label": "Összecsukási feltétel",
|
||||
"color-selection-description": "Témák színeinek alkalmazása az ikonra és a szövegre.",
|
||||
"color-selection-label": "Szín kiválasztása",
|
||||
"display-command-output-description": "Adjon meg egy parancsot, amelyet rendszeres időközönként futtatni szeretne. A kimenetének első sora szövegként jelenik meg.",
|
||||
"display-command-output-label": "Parancs kimenetének megjelenítése",
|
||||
"display-command-output-stream-description": "Adjon meg egy parancsot, amelyet folyamatosan futtatni szeretne.",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "Az értesítési ikon elrejtése, ha nincs olvasatlan értesítés.",
|
||||
"hide-widget-when-zero-unread-label": "Ikon elrejtése, amikor nincs olvasatlan értesítés",
|
||||
"show-unread-badge-description": "Jelenítsen meg egy jelvényt, amely mutatja az olvasatlan értesítések számát.",
|
||||
"show-unread-badge-label": "Olvasatlan jelvény megjelenítése"
|
||||
"show-unread-badge-label": "Olvasatlan jelvény megjelenítése",
|
||||
"unread-badge-color-description": "Válaszd ki az olvasatlan értesítési jelvény színét.",
|
||||
"unread-badge-color-label": "Olvasatlan jelvény színe"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "Válasszon hozzáadandó widgetet...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "A statisztikákat mini sávdiagramokként jelenítse meg a szöveges értékek helyett. Megakadályozza az elrendezés eltolódását.",
|
||||
"compact-mode-label": "Kompakt mód",
|
||||
"cpu-frequency-description": "Az aktuális CPU órajel megjelenítése GHz-ben.",
|
||||
"cpu-frequency-label": "CPU frekvencia megjelenítése",
|
||||
"cpu-temperature-description": "CPU hőmérséklet-adatok megjelenítése, ha elérhetőek.",
|
||||
"cpu-temperature-label": "CPU hőmérséklet",
|
||||
"cpu-usage-description": "Jelenítse meg az aktuális CPU-használati százalékot.",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "Memóriahasználat",
|
||||
"network-traffic-description": "Hálózati feltöltési és letöltési sebességek megjelenítése.",
|
||||
"network-traffic-label": "Hálózati forgalom",
|
||||
"storage-as-percentage-description": "Lemezterület megjelenítése százalékban abszolút értékek helyett.",
|
||||
"storage-as-percentage-label": "Lemez százalékban",
|
||||
"storage-available-description": "Azt mutatja, mennyi lemezterület áll rendelkezésre, ahelyett, hogy mennyit használnak.",
|
||||
"storage-available-label": "Rendelkezésre álló lemezterület",
|
||||
"storage-usage-description": "Lemezterület-használati információk megjelenítése.",
|
||||
"storage-usage-label": "Tárhelyhasználat",
|
||||
"swap-usage-description": "Cserehely memória használatának megjelenítése.",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "Cím szélességének alaphelyzetbe állítása"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "Alkalmazza a témaszíneket a fiók nyíl ikonjára.",
|
||||
"chevron-color-label": "Nyíl színe",
|
||||
"colorize-icons-description": "Témaszínek alkalmazása a tálcaikonokra.",
|
||||
"colorize-icons-label": "Ikonok színezése",
|
||||
"drawer-enabled-description": "Ha be van kapcsolva, a nem rögzített tálcaelemek egy fiókpanelen jelennek meg.<br>Kikapcsolva az összes tálcaelem sorban jelenik meg.",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "Passzív elemek elrejtése"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "Válassza ki, hogyan jelenjen meg ez az érték.",
|
||||
"display-mode-label": "Megjelenítési mód"
|
||||
"display-mode-description": "Válassza ki, hogyan jelenjen meg ez az érték."
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "A munkaterületnevekből megjelenítendő karakterek száma (1-10).",
|
||||
"character-count-label": "Karakterek száma",
|
||||
"empty-color-description": "Üres Workspaces háttérszínének beállítása.",
|
||||
"empty-color-label": "Üres munkafelület színe",
|
||||
"enable-scrollwheel-description": "Váltás a munkaterületek között az egérgörgővel.",
|
||||
"enable-scrollwheel-label": "Görgetés a munkaterületek váltásához",
|
||||
"focused-color-description": "Állítsd be a fókuszált Workspace háttérszínét.",
|
||||
"focused-color-label": "Fókuszált munkaterület színe",
|
||||
"follow-focused-screen-description": "Munkaterületek megjelenítése az aktuálisan fókuszált képernyőről, nem arról a képernyőről, ahol a sáv található.",
|
||||
"follow-focused-screen-label": "Fókuszált képernyő követése",
|
||||
"grouped-border-opacity-description": "A munkaterület-konténerek szegélyeinek átlátszósági szintjének beállítása.",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "Foglalatlan elrejtése",
|
||||
"label-mode-description": "Válassza ki, hogyan jelenjenek meg a munkaterület címkéi.",
|
||||
"label-mode-label": "Címke mód",
|
||||
"occupied-color-description": "A foglalt Workspaces háttérszínének beállítása.",
|
||||
"occupied-color-label": "Foglalt munkaterület színe",
|
||||
"pill-size-description": "Állítsa be a munkaterület-jelzők méretét (50%-100%).",
|
||||
"pill-size-label": "Pill méret",
|
||||
"reverse-scrolling-description": "Görgetéskor fordított irányba váltson a munkaterületek között.",
|
||||
"reverse-scrolling-label": "Görgetés megfordítása",
|
||||
"show-applications-description": "Alkalmazásikonok megjelenítése minden munkaterületen belül.",
|
||||
"show-applications-label": "Alkalmazások megjelenítése",
|
||||
"show-badge-description": "Munkaterület számának jelzése csoportosított módban.",
|
||||
"show-badge-label": "Munkafelület jelvény megjelenítése",
|
||||
"show-labels-only-when-occupied-description": "Csak akkor jelenítse meg a munkaterület címkéket, ha azok tartalmaznak ablakokat.",
|
||||
"show-labels-only-when-occupied-label": "Címkék megjelenítése csak foglalt állapotban",
|
||||
"unfocused-icons-opacity-description": "Állítsa be a nem fókuszált alkalmazásikonok átlátszóságának szintjét.",
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "Új telepítés"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "Hiba",
|
||||
"on-surface": "A felszínen",
|
||||
"primary": "Elsődleges",
|
||||
"secondary": "Másodlagos",
|
||||
"tertiary": "Harmadlagos"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Műveletek",
|
||||
"add": "Hozzáadás",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "Kapcsolat bontása",
|
||||
"disconnected": "Kapcsolat bontva",
|
||||
"disconnecting": "Kapcsolat bontása...",
|
||||
"display-mode": "Kijelző mód",
|
||||
"download": "Letöltés",
|
||||
"duration": "Időtartam",
|
||||
"dysfunctional": "Diszfunkcionális",
|
||||
"edit": "Szerkesztés",
|
||||
"enabled": "Engedélyezve",
|
||||
"error": "Hiba",
|
||||
"events": "Események",
|
||||
"execute": "Végrehajt",
|
||||
"faithful": "Hű",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "Telepítve",
|
||||
"interface": "Felület",
|
||||
"internet": "Internet",
|
||||
"keybind": "Billentyűkombináció",
|
||||
"language": "Nyelv",
|
||||
"loading": "Betöltés...",
|
||||
"local": "Helyi",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "Nem található",
|
||||
"notifications": "Értesítések",
|
||||
"official": "Hivatalos",
|
||||
"on-surface": "Felületen",
|
||||
"output": "Kimenet",
|
||||
"pair": "Párosítás",
|
||||
"paired": "Párosítva",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "Lekérdezés",
|
||||
"position": "Pozíció",
|
||||
"previous": "Előző",
|
||||
"primary": "Elsődleges",
|
||||
"random": "Véletlen",
|
||||
"reboot": "Újraindítás",
|
||||
"record": "Felvétel indítása",
|
||||
"refresh": "Frissítés",
|
||||
"required": "(kötelező)",
|
||||
"reset": "Visszaállítás",
|
||||
"reset-to-default": "Visszaállítás Alapértelmezettre",
|
||||
"result-count": "{count} eredmény",
|
||||
"result-count-plural": "eredmények",
|
||||
"resume": "Folytatás",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "Szkennelés...",
|
||||
"screen-corners": "Képernyő sarkok",
|
||||
"search": "Keresés",
|
||||
"secondary": "Másodlagos",
|
||||
"security": "Biztonság",
|
||||
"select": "Kiválasztás",
|
||||
"select-color": "Szín kiválasztása",
|
||||
"select-color-description": "Alkalmazza a témaszíneket a kiemeléshez.",
|
||||
"select-icon-color": "Ikon színének kiválasztása",
|
||||
"shortcuts": "Gyorsbillentyűk",
|
||||
"shutdown": "Leállítás",
|
||||
"signal": "Jelzés",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "Források",
|
||||
"start": "Kezdés",
|
||||
"stop": "Állj",
|
||||
"supporters": "Támogatók",
|
||||
"suspend": "Felfüggesztés",
|
||||
"templates": "Sablonok",
|
||||
"tertiary": "Harmadlagos",
|
||||
"test": "Teszt",
|
||||
"thresholds": "Küszöbértékek",
|
||||
"title": "Cím",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "Hét",
|
||||
"widgets": "Widgetek",
|
||||
"width": "Szélesség",
|
||||
"windows": "Ablakok",
|
||||
"yes": "Igen"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "Rámutatáskor"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "Automatikus elrejtés",
|
||||
"hidden": "Elrejtés, ha üres",
|
||||
"idle": "Elrejtés, ha tétlen",
|
||||
"non-exclusive": "Nem kizárólagos",
|
||||
"transparent": "Átlátszó, ha üres",
|
||||
"visible": "Mindig látható"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "Emojik betöltése...",
|
||||
"emoji-loading-description": "Kis türelmet",
|
||||
"emoji-no-recent": "Nincsenek még legutóbbi emojik",
|
||||
"emoji-search-description": "Emojik keresése és másolása"
|
||||
"emoji-search-description": "Emojik keresése és másolása",
|
||||
"settings-search-description": "Keresés és navigálás a beállításokhoz",
|
||||
"windows-search-description": "Nyitott ablakok keresése és fókuszálása"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "Kompakt",
|
||||
"density-default": "Alapértelmezett",
|
||||
"density-mini": "Mini",
|
||||
"density-spacious": "Tágas"
|
||||
"density-spacious": "Tágas",
|
||||
"display-mode-always-visible": "Mindig látható",
|
||||
"type-floating": "Lebegő",
|
||||
"type-framed": "Keretes",
|
||||
"type-simple": "Egyszerű"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "Klasszikus",
|
||||
"quick-settings-style-modern": "Modern"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "Kényelmes",
|
||||
"compact": "Kompakt",
|
||||
"default": "Alapértelmezett"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "Rács",
|
||||
"list": "Lista"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "Mindig görgetés",
|
||||
"hover": "Görgetés rámutatáskor",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "Legyél támogató",
|
||||
"changelog": "Változások megtekintése",
|
||||
"contributors-desc": "Köszönet a(z) {count} <b>fantasztikus</b> közreműködőnknek!",
|
||||
"contributors-description": "Köszönet a(z) {count} <b>fantasztikus</b> közreműködőnknek!",
|
||||
"contributors-description-plural": "Köszönet a(z) {count} <b>fantasztikus</b> közreműködőnknek!",
|
||||
"copy-info": "Információk másolása",
|
||||
"info-copied": "Információ a vágólapra másolva",
|
||||
@@ -628,6 +677,10 @@
|
||||
"noctalia-title": "Noctalia shell",
|
||||
"privacy-policy": "Adatvédelmi irányelvek",
|
||||
"support": "Támogasson minket",
|
||||
"supporter-badge": "Támogató",
|
||||
"supporters-desc": "Hatalmas köszönet csodálatos támogatóinknak!",
|
||||
"supporters-desc-plural": "Hatalmas köszönet a <b>{count} csodálatos</b> támogatóinknak!",
|
||||
"supporters-loading": "Támogatók betöltése...",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Lemez:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "Rendszerszintű hangerőszint.",
|
||||
"volumes-step-size-description": "Beállítja a hangerő változtatásának lépésméretét (görgő, billentyűparancsok).",
|
||||
"volumes-step-size-label": "Hangerő lépésmérete",
|
||||
"volumes-volume-feedback-description": "Hangerő állításakor visszajelző hang lejátszása",
|
||||
"volumes-volume-feedback-description": "Hangerő állításakor visszajelző hang lejátszása.",
|
||||
"volumes-volume-feedback-label": "Hangerő visszajelző hang lejátszása",
|
||||
"volumes-volume-overdrive-description": "Engedélyezi a hangerő 100% fölé emelését. Előfordulhat, hogy nem minden hardver támogatja.",
|
||||
"volumes-volume-overdrive-label": "Hangerő túllépésének engedélyezése"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "Idő, amíg a Bar elrejtőzik, miután az egér elhagyja.",
|
||||
"appearance-auto-hide-delay-label": "Elrejtési késleltetés",
|
||||
"appearance-auto-hide-exclusive-note": "Megjegyzés: Az exkluzív zóna automatikusan letiltásra kerül, ha az automatikus elrejtés aktív.",
|
||||
"appearance-auto-show-delay-description": "Idő, mielőtt a sáv megjelenik, ha az egér a szélre kerül.",
|
||||
"appearance-auto-show-delay-label": "Megjelenítési Késleltetés",
|
||||
"appearance-background-opacity-description": "Állítsa be a sáv háttér átlátszóságát.",
|
||||
"appearance-background-opacity-label": "Sáv háttér átlátszósága",
|
||||
"appearance-capsule-color-description": "Válassz színt a sávkapszulákhoz, vagy ne használj semmit az alapértelmezett felületszínhez.",
|
||||
"appearance-capsule-color-label": "Kapszula színe",
|
||||
"appearance-capsule-opacity-description": "Beállítja a widget hátterének átlátszósági szintjét, amikor a kapszula megjelenik.",
|
||||
"appearance-capsule-opacity-label": "Kapszula átlátszósága",
|
||||
"appearance-density-description": "Beállítja a sáv belső margóit a kompakt vagy tágas megjelenés érdekében.",
|
||||
"appearance-density-label": "Sáv sűrűsége",
|
||||
"appearance-desc": "A sáv megjelenésének és pozíciójának testreszabása.",
|
||||
"appearance-display-mode-description": "Válassza ki, mikor látható a sáv.",
|
||||
"appearance-floating-description": "Megjeleníti a sávot lebegő „pirulaként”.",
|
||||
"appearance-floating-label": "Lebegő sáv",
|
||||
"appearance-frame-radius": "Belső sugár",
|
||||
"appearance-frame-settings-description": "Állítsa be a keret vastagságát és a belső sarok sugarát",
|
||||
"appearance-frame-settings-label": "Keret beállításai",
|
||||
"appearance-frame-thickness": "Vastagság",
|
||||
"appearance-hide-on-overview-description": "A sáv elrejtése és a panelek bezárása, amikor a kompozitor áttekintése aktív.",
|
||||
"appearance-hide-on-overview-label": "Sáv elrejtése az áttekintésben",
|
||||
"appearance-margins-description": "Beállítja a lebegő sáv körüli margókat.",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-label": "Kapszula megjelenítése",
|
||||
"appearance-show-outline-description": "Látható szegély megjelenítése minden widget körül.",
|
||||
"appearance-show-outline-label": "Widget körvonalak megjelenítése",
|
||||
"appearance-type-description": "Válassza ki a sáv stílusát: Egyszerű, Lebegő vagy Keretes.",
|
||||
"appearance-type-label": "Sáv típusa",
|
||||
"appearance-use-separate-opacity-description": "Lehetővé teszi egy külön átlátszatlansági érték használatát a sáv hátteréhez.",
|
||||
"appearance-use-separate-opacity-label": "Külön oszlop átlátszóság használata",
|
||||
"monitor-configure-widgets": "Widgetek konfigurálása",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "Színsémák letöltése",
|
||||
"method-description": {
|
||||
"content": "Material Design séma nagy pontosságú színkivonással, amely szorosan illeszkedik a forrás tartalom tényleges színeihez.",
|
||||
"dysfunctional": "Mint a Faithful, de a második legdominánsabb színcsaládot választja elsődlegesnek.",
|
||||
"faithful": "Igyekszik közel maradni a forrásszínhez, miközben harmonikus palettát generál.",
|
||||
"fruit-salad": "Material Design séma, amely játékos, élénk palettát hoz létre változatos árnyalatokkal.",
|
||||
"monochrome": "Material Design séma egyszínű szürkeskálával, minimális színtartalommal.",
|
||||
@@ -866,6 +934,16 @@
|
||||
"media-player-show-buttons-label": "Gombok megjelenítése",
|
||||
"media-player-show-visualizer-description": "Audiovizuális megjelenítő fedvény megjelenítése.",
|
||||
"media-player-visualizer-type-description": "Válasszon vizualizációs típust az asztali média lejátszó hátteréhez.",
|
||||
"system-stat-layout-bottom": "Lent",
|
||||
"system-stat-layout-description": "Válassza ki, hogyan jelenjen meg a jelmagyarázat a grafikonhoz képest.",
|
||||
"system-stat-layout-label": "Elrendezés",
|
||||
"system-stat-layout-side": "Oldal",
|
||||
"system-stat-rounded-corners-description": "Lekerekített sarkok használata a widget hátteréhez.",
|
||||
"system-stat-rounded-corners-label": "Lekerekített Sarkok",
|
||||
"system-stat-show-background-description": "Mutassa a háttérkonténert a rendszerstatisztika Widgethez.",
|
||||
"system-stat-show-background-label": "Háttér megjelenítése",
|
||||
"system-stat-stat-type-description": "Válaszd ki, melyik rendszerstatisztikát jelenítsd meg.",
|
||||
"system-stat-stat-type-label": "Statisztika Típusa",
|
||||
"title": "Asztali Widgetek",
|
||||
"weather-enabled-description": "Időjárás widget megjelenítése az asztalon.",
|
||||
"weather-enabled-label": "Időjárás widget engedélyezése",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "Monospace betűtípus keresése...",
|
||||
"fonts-reset-scaling": "Méretezés visszaállítása",
|
||||
"fonts-title": "Betűtípusok",
|
||||
"keybinds-description": "Globális navigációs billentyűk beállítása a panelekhez és az indítóhoz.",
|
||||
"keybinds-down": "Lejjebb mozgatás",
|
||||
"keybinds-enter": "Megerősítés / Művelet",
|
||||
"keybinds-escape": "Bezárás / Vissza",
|
||||
"keybinds-left": "Balra mozgat",
|
||||
"keybinds-right": "Mozgatás jobbra",
|
||||
"keybinds-title": "Navigációs Billentyűparancsok",
|
||||
"keybinds-up": "Feljebb",
|
||||
"language-desc": "Válassza ki az alkalmazás előnyben részesített nyelvét.",
|
||||
"language-select-auto-detect": "Automatikus",
|
||||
"language-select-description": "Válassza ki az alkalmazás felületén használt nyelvet.",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "Használjon egyszínű feketét a sáv háttérszíne helyett.",
|
||||
"screen-corners-solid-black-label": "Tömör fekete sarkok",
|
||||
"screen-corners-title": "Képernyősarkok",
|
||||
"settings-copied": "Beállítások a vágólapra másolva"
|
||||
"settings-copied": "Beállítások a vágólapra másolva",
|
||||
"tab-basics": "Alapok",
|
||||
"tab-keybinds": "Billentyűparancsok"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• A parancsok shellen keresztül futnak (sh -lc)<br>• A parancsok a háttérben futnak (leválasztva)<br>• A tesztgombok az aktuális értékekkel futnak le",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "Clipboard szöveg becsomagolása",
|
||||
"settings-clipboard-history-description": "Hozzáférés a korábban másolt elemekhez az indítóból.",
|
||||
"settings-clipboard-history-label": "Vágólapelőzmények engedélyezése",
|
||||
"settings-clipboard-watch-image-description": "A wl-paste-nek átadott teljes parancssor képmódosításokhoz (újraindítás szükséges).",
|
||||
"settings-clipboard-watch-image-label": "Képfigyelő Parancs",
|
||||
"settings-clipboard-watch-text-description": "A wl-paste-nek átadott teljes parancssor a szövegváltozásokhoz (újraindítást szükséges).",
|
||||
"settings-clipboard-watch-text-label": "Szövegfigyelő parancs",
|
||||
"settings-custom-launch-prefix-description": "Előtagolja a parancsokat egyéni indítóval (pl. 'runapp' a systemd integrációhoz).",
|
||||
"settings-custom-launch-prefix-enabled-description": "Használjon egyéni előtagot az alkalmazások indításához az alapértelmezett módszer helyett.",
|
||||
"settings-custom-launch-prefix-enabled-label": "Egyéni indítási előtag engedélyezése",
|
||||
"settings-custom-launch-prefix-label": "Egyéni indítási előtag",
|
||||
"settings-density-description": "Állítsd be az alkalmazásikonok méretét és a Launcher sűrűségét.",
|
||||
"settings-density-label": "Sűrűség",
|
||||
"settings-desc": "Az indító viselkedésének és megjelenésének testreszabása.",
|
||||
"settings-enable-settings-search-description": "Beállítások megjelenítése a találatok között az indítón belül.",
|
||||
"settings-enable-settings-search-label": "Beállítások keresésének engedélyezése",
|
||||
"settings-enable-windows-search-description": "Aktív ablakok keresése és fókuszálása.",
|
||||
"settings-enable-windows-search-label": "Ablakkeresés engedélyezése",
|
||||
"settings-grid-view-description": "Elemek megjelenítése rács elrendezésben lista helyett.",
|
||||
"settings-icon-mode-description": "Használjon natív rendszerikonokat a Tabler ikonok helyett.",
|
||||
"settings-icon-mode-label": "Natív ikonok használata",
|
||||
"settings-ignore-mouse-input-description": "A launcherben tiltsd le az egérműveleteket és a görgőt.",
|
||||
"settings-ignore-mouse-input-label": "Egérbemenet figyelmen kívül hagyása",
|
||||
"settings-overlay-layer-description": "Jelenítse meg az indítót az átfedő rétegen, a teljes képernyős ablakok felett. Ha engedélyezve van, az indító nem fog a sávhoz csatlakozni.",
|
||||
"settings-overlay-layer-label": "Megjelenítés teljes képernyő felett",
|
||||
"settings-position-description": "Hol jelenjen meg az indító panel.",
|
||||
"settings-show-categories-description": "Kategóriafülek megjelenítése az alkalmazások szűréséhez.",
|
||||
"settings-show-categories-label": "Kategóriák megjelenítése",
|
||||
@@ -1046,10 +1144,12 @@
|
||||
"settings-show-icon-background-label": "Ikon háttér megjelenítése",
|
||||
"settings-sort-by-usage-description": "Ha engedélyezve van, a gyakran indított alkalmazások jelennek meg először a listán.",
|
||||
"settings-sort-by-usage-label": "Rendezés gyakoriság szerint",
|
||||
"settings-terminal-command-description": "Parancs a terminál indításához. Pl.: 'kitty -e' vagy 'gnome-terminal --'.",
|
||||
"settings-terminal-command-description": "Parancs a terminál indításához. Pl. 'kitty -e' vagy 'gnome-terminal --'.",
|
||||
"settings-terminal-command-label": "Terminál parancs",
|
||||
"settings-use-app2unit-description": "Alternatív indítási módszert használ az alkalmazásfolyamatok jobb kezelésére és a problémák megelőzésére.",
|
||||
"settings-use-app2unit-label": "App2Unit használata alkalmazások indításához",
|
||||
"settings-view-mode-description": "Válaszd ki az indító bejegyzések elrendezését.",
|
||||
"settings-view-mode-label": "Nézet mód",
|
||||
"title": "Indító"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,7 +1166,7 @@
|
||||
"date-time-show-events-description": "Események megjelenítése a naptár panelen.",
|
||||
"date-time-show-events-label": "Naptáresemények megjelenítése",
|
||||
"date-time-title": "Dátum és idő",
|
||||
"date-time-use-analog-description": "Analóg stílusú óra megjelenítése a naptár ablakon és a zárképernyőn.",
|
||||
"date-time-use-analog-description": "Analóg stílusú óra megjelenítése a naptár ablakon.",
|
||||
"date-time-use-analog-label": "Analóg stílusú óra használata",
|
||||
"date-time-week-numbers-description": "Az év hetének megjelenítése (pl. 38. hét) a naptárban.",
|
||||
"date-time-week-numbers-label": "Hét számok megjelenítése",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "Időjárás megjelenítése a naptárban"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "Ha az fprintd (ujjlenyomat-hitelesítés) aktív, ez az opció lehetővé teszi, hogy továbbra is jelszóval jelentkezzen be ujjlenyomat helyett.",
|
||||
"allow-password-with-fprintd-label": "Jelszavas bejelentkezés engedélyezése fprintd-vel",
|
||||
"auto-start-auth-description": "Automatikusan elindítja az ujjlenyomat-hitelesítést anélkül, hogy billentyűt kellene megnyomni vagy gombra kellene kattintani.",
|
||||
"auto-start-auth-label": "Automatikus hitelesítés indításkor",
|
||||
"clock-format-description": "Testreszabhatja az óra formátumát dátum/idő szintaxis tokenek használatával.",
|
||||
"clock-format-label": "Óraformátum",
|
||||
"clock-style-analog": "Analóg",
|
||||
"clock-style-custom": "Egyéni",
|
||||
"clock-style-description": "Válaszd ki az óra vizuális stílusát a zárolási képernyőn.",
|
||||
"clock-style-digital": "Digitális",
|
||||
"clock-style-label": "Óra stílus",
|
||||
"compact-lockscreen-description": "Csak a bejelentkezési beviteli mező és a rendszervezérlők megjelenítése, elrejtve az időjárás és média widgeteket.",
|
||||
"compact-lockscreen-label": "Kompakt zárolási képernyő",
|
||||
"lock-on-suspend-description": "A képernyő automatikus zárolása a rendszer felfüggesztésekor.",
|
||||
"lock-on-suspend-label": "Zárolás felfüggesztéskor",
|
||||
"lock-screen-animations-description": "A zárolási képernyő animációinak engedélyezése vagy letiltása.",
|
||||
"lock-screen-animations-label": "Zárolási Képernyő Animációk",
|
||||
"lock-screen-blur-strength-description": "Homályosító effektust alkalmaz a zárolási képernyő háttérképére.",
|
||||
"lock-screen-blur-strength-label": "Zárolási képernyő elmosásának erőssége",
|
||||
"lock-screen-tint-strength-description": "Színezett átfedést alkalmaz a zárolási képernyő háttérképére.",
|
||||
"lock-screen-tint-strength-label": "Zárolási képernyő árnyalatának erőssége",
|
||||
"monitors-desc": "Zárolási képernyő megjelenítése meghatározott monitorokon. Alapértelmezetten mindegyiken megjelenik, ha nincs kiválasztva.",
|
||||
"show-hibernate-description": "A 'hibernálás' lehetőség megjelenítése az energiakezelési műveletek között.",
|
||||
"show-hibernate-label": "Hibernálás megjelenítése",
|
||||
"show-session-buttons-description": "Engedélyezi a hozzáférést az energiabeállításokhoz a zárolási képernyőről.",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "Alacsony sürgősség mentése az előzményekbe",
|
||||
"history-normal-urgency-description": "Normál prioritású értesítések mentése az előzményekbe.",
|
||||
"history-normal-urgency-label": "Normál sürgősség mentése az előzményekbe",
|
||||
"media-toast-description": "Toast üzenet megjelenítése a média lejátszási állapotának változásakor.",
|
||||
"media-toast-label": "Média",
|
||||
"monitors-desc": "Értesítés megjelenítése meghatározott monitorokon. Alapértelmezetten mindegyiken, ha nincs kiválasztva.",
|
||||
"settings-always-on-top-description": "Értesítések megjelenítése teljes képernyős ablakok és más rétegek felett.",
|
||||
"settings-background-opacity-description": "Az értesítési hátterek átlátszóságának beállítása.",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "Értesítési hangok nem érhetők el",
|
||||
"sounds-volume-description": "Az értesítési hangok hangerejének beállítása.",
|
||||
"sounds-volume-label": "Hangerő",
|
||||
"toast-battery-description": "Figyelmeztetés megjelenítése, ha az akkumulátor töltöttségi szintje ez alá a százalék alá esik.",
|
||||
"toast-battery-label": "Akkumulátor figyelmeztetés",
|
||||
"toast-desc": "Felugró üzenet megjelenésének és viselkedésének beállítása.",
|
||||
"toast-keyboard-description": "Felugró üzenet megjelenítése a billentyűzetkiosztás változásakor.",
|
||||
"toast-keyboard-label": "Billentyűzetkiosztás"
|
||||
"toast-keyboard-label": "Billentyűzetkiosztás",
|
||||
"toast-media-description": "Toast üzenet megjelenítése a média lejátszási állapotának változásakor.",
|
||||
"toast-media-label": "Média"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "Képernyőn megjelenő kijelző megjelenítése teljes képernyős ablakok és más rétegek felett.",
|
||||
@@ -1202,16 +1322,20 @@
|
||||
"types-volume-label": "Kimeneti hangerő"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "Beépülők automatikus frissítése",
|
||||
"auto-update-description": "Automatikusan frissítse az összes plugint a shell indításakor.",
|
||||
"available-description": "Bővítmények böngészése és telepítése a beállított forrásokból.",
|
||||
"available-label": "Elérhető bővítmények",
|
||||
"available-no-plugins-description": "Ellenőrizze a bővítményforrásokat, vagy frissítse a listát.",
|
||||
"available-no-plugins-label": "Nincsenek elérhető bővítmények",
|
||||
"check-for-updates": "Frissítések keresése",
|
||||
"checking-for-updates": "Frissítések keresése...",
|
||||
"collision-already-installed": "Ez a bővítmény már telepítve van",
|
||||
"collision-custom-version-exists": "Egyéni verzió a következő helyről: \"{source}\" már telepítve van",
|
||||
"collision-official-version-exists": "A plugin hivatalos verziója már telepítve van",
|
||||
"filter-downloaded": "Letöltött",
|
||||
"filter-not-downloaded": "Nincs letöltve",
|
||||
"filter-tags-description": "Bővítmények szűrése kategória vagy letöltési állapot szerint",
|
||||
"filter-tags-description": "Bővítmények szűrése kategória vagy letöltési állapot szerint.",
|
||||
"filter-tags-label": "Címkék",
|
||||
"hot-reload-description": "Automatikusan újratölti a bővítményeket, amikor a fájljaik megváltoznak. Hasznos a bővítményfejlesztéshez.",
|
||||
"hot-reload-label": "Gyors újratöltés (fejlesztői mód)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "Saját menő tárolóm",
|
||||
"sources-remove-tooltip": "Bővítményforrás eltávolítása",
|
||||
"title": "Bővítmények",
|
||||
"translations-reloaded": "Fordítások újratöltve: {name}",
|
||||
"uninstall-dialog-description": "Biztosan el szeretné távolítani a(z) {plugin} bővítményt? Ez eltávolítja az összes bővítményadatot.",
|
||||
"uninstall-dialog-title": "Bővítmény eltávolítása",
|
||||
"uninstall-error": "Sikertelen eltávolítás: {error}",
|
||||
@@ -1276,6 +1401,9 @@
|
||||
"entry-settings-default-command-logout": "Belső kijelentkezés (nincs parancs)",
|
||||
"entry-settings-default-info-description": "Ha nincs megadva egyéni parancs, az alapértelmezett rendszerparancs kerül felhasználásra.",
|
||||
"entry-settings-default-info-label": "Alapértelmezett parancs",
|
||||
"entry-settings-keybind-description": "Rendeljen hozzá billentyűkombinációt ezen művelet elindításához, amikor a munkamenet menü nyitva van.",
|
||||
"entry-settings-keybind-placeholder": "Nyomja meg a Felvétel gombot egy billentyű hozzárendeléséhez...",
|
||||
"entry-settings-keybind-recording": "Felvétel... Nyomjon meg bármilyen billentyűkombinációt",
|
||||
"entry-settings-title": "{entry} konfigurálása",
|
||||
"entry-settings-tooltip": "Parancs konfigurálása",
|
||||
"general-desc": "A munkamenet menüpanel viselkedésének és megjelenésének konfigurálása.",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kritikus szín",
|
||||
"custom-highlight-colors-title-label": "Egyéni kiemelőszínek",
|
||||
"disk-available-label": "Rendelkezésre álló lemezterület",
|
||||
"disk-section-label": "Lemezhasználat",
|
||||
"enable-dgpu-monitoring-description": "Figyelem: Ez felébreszti a dedikált GPU-t (NVIDIA/AMD), ami jelentősen befolyásolhatja az akkumulátor élettartamát a hibrid grafikával rendelkező laptopokon.",
|
||||
"enable-dgpu-monitoring-label": "Dedikált GPU figyelés engedélyezése",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "Válassza ki a beállítások elrendezését (újraindítást igényelhet).",
|
||||
"settings-panel-mode-label": "Beállítási panel mód",
|
||||
"shadows-description": "Engedélyezi az árnyékokat a sávok és panelek alatt.",
|
||||
"shadows-direction-description": "Válassza ki, honnan vetüljön az árnyék.",
|
||||
"shadows-direction-description": "Válassza ki, hová vetődjön az árnyék.",
|
||||
"shadows-direction-label": "Árnyék iránya",
|
||||
"shadows-label": "Árnyékok",
|
||||
"title": "Felhasználói felület",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "Külön háttérkép mappa beállítása minden monitorhoz.",
|
||||
"settings-monitor-specific-label": "Monitor-specifikus könyvtárak",
|
||||
"settings-monitor-specific-tooltip": "Monitor háttérkép mappa",
|
||||
"settings-overview-blur-strength-description": "Alkalmazza az elmosás erősségét az áttekintésre.",
|
||||
"settings-overview-blur-strength-label": "Áttekintés elmosásának erőssége",
|
||||
"settings-overview-tint-description": "Alkalmazza az árnyalat erősségét az áttekintésre.",
|
||||
"settings-overview-tint-label": "Áttekintés árnyalatának erőssége",
|
||||
"settings-recursive-search-description": "Keressen háttérképeket a háttérkép könyvtár alkönyvtáraiban is.",
|
||||
"settings-recursive-search-label": "Alkönyvtárak keresése",
|
||||
"settings-select-monitor-folder": "Monitor háttérkép mappa kiválasztása",
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "Kész!",
|
||||
"appearance": {
|
||||
"subheader": "Válassza ki a Sötét módot és a színforrásokat (háttérkép vagy előre definiált)."
|
||||
"subheader": "Válaszd ki a sötét módot és a színforrásokat (háttérkép vagy előre meghatározott)."
|
||||
},
|
||||
"customize": {
|
||||
"header": "Tapasztalat testreszabása",
|
||||
@@ -1449,7 +1582,7 @@
|
||||
},
|
||||
"skip-setup": "Beállítás kihagyása",
|
||||
"telemetry-wizard-done": "Értettem!",
|
||||
"telemetry-wizard-note": "Te irányítasz – bármikor engedélyezheted vagy letilthatod a Beállításokban",
|
||||
"telemetry-wizard-note": "Te irányítasz — bármikor engedélyezheted vagy letilthatod a beállításokban",
|
||||
"telemetry-wizard-subtitle": "Anonim analitikát adtunk hozzá, hogy segítsük a Noctalia fejlesztését",
|
||||
"telemetry-wizard-title": "Adatvédelmi frissítés",
|
||||
"wallpaper": {
|
||||
@@ -1466,7 +1599,7 @@
|
||||
"select-prompt": "Válasszon egy háttérképet alább",
|
||||
"subheader": "Teremtsen hangulatot egy gyönyörű háttérrel."
|
||||
},
|
||||
"welcome-note": "Csak néhány alapvető dolog az induláshoz – a teljes beállítási lehetőség a beállításokban található",
|
||||
"welcome-note": "Csak néhány alapvető dolog az induláshoz — a teljes beállítási lehetőség a beállításokban található",
|
||||
"welcome-subtitle": "Tegyük egyedivé az asztalod",
|
||||
"welcome-title": "Üdvözöl a Noctalia!"
|
||||
},
|
||||
@@ -1490,7 +1623,7 @@
|
||||
"disk": "Lemez",
|
||||
"download-speed": "Letöltési sebesség",
|
||||
"gpu-temp": "GPU hőmérséklet",
|
||||
"load-average": "Terhelési átlag",
|
||||
"load-average": "Átlagos terhelés",
|
||||
"title": "Rendszerfigyelő",
|
||||
"upload-speed": "Feltöltési sebesség"
|
||||
},
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "Repülőgép üzemmód"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "Kritikus akkumulátor",
|
||||
"critical-desc": "Az akkumulátor {percent}%-on van — kérjük, azonnal csatlakoztassa a töltőt",
|
||||
"low": "Alacsony akkumulátor",
|
||||
"low-desc": "Az akkumulátor {percent}%-on van. Csatlakoztassa a töltőt"
|
||||
"low-desc": "Az akkumulátor {percent}%-on van — kérjük, csatlakoztassa a töltőt"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Cím a vágólapra másolva",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "Korong",
|
||||
"fade": "Halványítás",
|
||||
"honeycomb": "Méhsejt",
|
||||
"pixelate": "Pixelezés",
|
||||
"stripes": "Csíkok",
|
||||
"wipe": "Törlés"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "Háttérképek betöltése...",
|
||||
"no-results": "Nincs háttérkép. Próbáljon másik keresést.",
|
||||
"page": "{current} / {total}"
|
||||
"page": "{current} / {total}",
|
||||
"page-prefix": "Oldal",
|
||||
"page-suffix": "{total} közül"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
+234
-95
@@ -48,11 +48,16 @@
|
||||
"device-default": "デフォルト(表示デバイス)",
|
||||
"device-description": "表示するバッテリーデバイスを選択します。",
|
||||
"device-label": "バッテリーデバイス",
|
||||
"display-mode-description": "バッテリーをバーにどのように表示するかを選択します。",
|
||||
"display-mode-graphic": "グラフィックバッテリー",
|
||||
"display-mode-graphic-clean": "グラフィカルバッテリー (パーセント表示なし)",
|
||||
"display-mode-icon-always": "アイコン - 常に%を表示",
|
||||
"display-mode-icon-hover": "アイコン - ホバー時に表示",
|
||||
"display-mode-icon-only": "アイコンのみ",
|
||||
"hide-if-idle-description": "バッテリーが充電または放電していないときは、ウィジェットを非表示にします。",
|
||||
"hide-if-idle-label": "アイドル時に隠す",
|
||||
"hide-if-not-detected-description": "システムでバッテリーが検出されない場合は、ウィジェットを非表示にします。",
|
||||
"hide-if-not-detected-label": "検出されなければ隠れる",
|
||||
"low-battery-threshold-description": "バッテリー残量がこのパーセンテージを下回ると警告を表示します。",
|
||||
"low-battery-threshold-label": "低バッテリー警告の閾値",
|
||||
"show-noctalia-performance-description": "バッテリーパネルに Noctalia パフォーマンスモードのトグルを表示します。<br>Noctalia のシャドウとアニメーションを無効にしてリソース使用量を削減します。",
|
||||
"show-noctalia-performance-label": "Noctalia パフォーマンストグルを表示",
|
||||
@@ -66,7 +71,7 @@
|
||||
"custom-font-label": "カスタムフォント",
|
||||
"custom-font-placeholder": "カスタムフォントを選択...",
|
||||
"custom-font-search-placeholder": "フォントを検索...",
|
||||
"horizontal-bar-description": "ヒント: \\n を使用すると改行できます。",
|
||||
"horizontal-bar-description": "ヒント:\\n を使用すると改行できます。",
|
||||
"horizontal-bar-label": "水平バー",
|
||||
"preview": "プレビュー",
|
||||
"tooltip-format-description": "時計にマウスを合わせたときに表示されるツールチップのフォーマット文字列。デフォルトのツールチップを使用するには空のままにします。",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "カスタムフォントを使用",
|
||||
"use-monospaced-font-description": "有効にすると、時計に等幅フォントを使用します。",
|
||||
"use-monospaced-font-label": "等幅フォントを使用",
|
||||
"use-primary-color-description": "有効にすると、強調のためにプライマリカラーが適用されます。",
|
||||
"use-primary-color-label": "プライマリカラーを使用",
|
||||
"vertical-bar-description": "各パーツを新しい行に分けるにはスペースを使用してください。",
|
||||
"vertical-bar-label": "垂直バー"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"collapse-condition-description": "出力テキストがこの値と一致する場合、ボタンを折りたたみます。",
|
||||
"collapse-condition-label": "折りたたみ条件",
|
||||
"color-selection-description": "テーマカラーをアイコンとテキストに適用します。",
|
||||
"color-selection-label": "色を選択",
|
||||
"display-command-output-description": "定期的に実行するコマンドを入力します。出力の最初の行がテキストとして表示されます。",
|
||||
"display-command-output-label": "コマンド出力を表示",
|
||||
"display-command-output-stream-description": "継続的に実行するコマンドを入力します。",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "未読の通知がない場合に通知アイコンを非表示にします。",
|
||||
"hide-widget-when-zero-unread-label": "未読なしでアイコンを非表示",
|
||||
"show-unread-badge-description": "未読通知の数を表示するバッジを表示します。",
|
||||
"show-unread-badge-label": "未読バッジを表示"
|
||||
"show-unread-badge-label": "未読バッジを表示",
|
||||
"unread-badge-color-description": "未読の通知バッジの色を選択してください。",
|
||||
"unread-badge-color-label": "未読バッジの色"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "追加するウィジェットを選択...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "テキスト値の代わりに、ミニ棒グラフとして統計を表示します。レイアウトのずれを防ぎます。",
|
||||
"compact-mode-label": "コンパクトモード",
|
||||
"cpu-frequency-description": "現在のCPUクロック速度をGHzで表示します。",
|
||||
"cpu-frequency-label": "CPU周波数を表示",
|
||||
"cpu-temperature-description": "利用可能な場合、CPU 温度を表示します。",
|
||||
"cpu-temperature-label": "CPU 温度",
|
||||
"cpu-usage-description": "現在の CPU 使用率を表示します。",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "メモリ使用量",
|
||||
"network-traffic-description": "ネットワークのアップロード・ダウンロード速度を表示します。",
|
||||
"network-traffic-label": "ネットワークトラフィック",
|
||||
"storage-as-percentage-description": "ディスク容量を絶対値ではなくパーセンテージで表示する。",
|
||||
"storage-as-percentage-label": "ディスクをパーセンテージで",
|
||||
"storage-available-description": "使用量ではなく、利用可能なディスク容量を表示します。",
|
||||
"storage-available-label": "利用可能なディスク容量",
|
||||
"storage-usage-description": "ストレージの使用状況を表示します。",
|
||||
"storage-usage-label": "ストレージ使用量",
|
||||
"swap-usage-description": "スワップメモリの使用状況を表示します。",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "タイトルの幅をリセット"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "ドロワーのシェブロンアイコンにテーマの色を適用します。",
|
||||
"chevron-color-label": "矢印の色",
|
||||
"colorize-icons-description": "トレイのアイコンにテーマカラーを適用します。",
|
||||
"colorize-icons-label": "テーマカラーの適用",
|
||||
"drawer-enabled-description": "有効にすると、ピン留めされていないトレイ項目をドロワーパネル内に表示します。<br>無効にすると、すべての項目をインラインで表示します。",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "パッシブ項目を非表示"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "値の表示方法を選択します。",
|
||||
"display-mode-label": "表示モード"
|
||||
"display-mode-description": "値の表示方法を選択します。"
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "ワークスペース名から表示する文字数 (1-10)。",
|
||||
"character-count-label": "文字数",
|
||||
"empty-color-description": "空のWorkspaceの背景色を設定します。",
|
||||
"empty-color-label": "空のワークスペースの色",
|
||||
"enable-scrollwheel-description": "マウスホイールを使用してワークスペースを切り替えます。",
|
||||
"enable-scrollwheel-label": "スクロールでワークスペースを切り替え",
|
||||
"focused-color-description": "フォーカスされたWorkspaceの背景色を設定します。",
|
||||
"focused-color-label": "フォーカスされたワークスペースの色",
|
||||
"follow-focused-screen-description": "バーが配置されている画面ではなく、現在フォーカスされている画面のワークスペースを表示します。",
|
||||
"follow-focused-screen-label": "フォーカス中の画面に追従",
|
||||
"grouped-border-opacity-description": "ワークスペースコンテナのボーダーの不透明度を設定します。",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "空のワークスペースを隠す",
|
||||
"label-mode-description": "ワークスペースラベルの表示方法を選択します。",
|
||||
"label-mode-label": "ラベルモード",
|
||||
"occupied-color-description": "使用中のWorkspaceの背景色を設定します。",
|
||||
"occupied-color-label": "使用中のワークスペースの色",
|
||||
"pill-size-description": "ワークスペースピルのサイズを調整します (50%-100%)。",
|
||||
"pill-size-label": "ピルサイズ",
|
||||
"reverse-scrolling-description": "スクロール時のワークスペース切り替え方向を反転する。",
|
||||
"reverse-scrolling-label": "スクロール方向を反転",
|
||||
"show-applications-description": "各ワークスペース内にアプリアイコンを表示します。",
|
||||
"show-applications-label": "アプリアイコンを表示",
|
||||
"show-badge-description": "グループ化モードでワークスペース番号バッジを表示します。",
|
||||
"show-badge-label": "ワークスペースバッジを表示",
|
||||
"show-labels-only-when-occupied-description": "ウィンドウが開いているワークスペースにのみラベルを表示します。",
|
||||
"show-labels-only-when-occupied-label": "ウィンドウがある時のみラベルを表示",
|
||||
"unfocused-icons-opacity-description": "フォーカスされていないアプリのアイコンの不透明度を設定します。",
|
||||
@@ -275,16 +298,16 @@
|
||||
"battery": {
|
||||
"battery-health": "バッテリーの状態",
|
||||
"battery-level": "バッテリー残量",
|
||||
"capacity-level": "容量: {level}",
|
||||
"charging-rate": "充電速度: {rate} W",
|
||||
"discharging-rate": "放電速度: {rate} W",
|
||||
"health": "状態: {percent}%",
|
||||
"capacity-level": "容量:{level}",
|
||||
"charging-rate": "充電速度:{rate} W",
|
||||
"discharging-rate": "放電速度:{rate} W",
|
||||
"health": "状態:{percent}%",
|
||||
"inhibit-idle-description": "システムがスリープ状態になるのを防ぎます。",
|
||||
"no-battery-detected": "バッテリーが見つかりません",
|
||||
"plugged-in": "電源接続中",
|
||||
"power-profile": "電源プロファイル",
|
||||
"time-left": "残り時間: {time}",
|
||||
"time-until-full": "充電完了まで: {time}"
|
||||
"time-left": "残り時間:{time}",
|
||||
"time-until-full": "充電完了まで:{time}"
|
||||
},
|
||||
"bluetooth": {
|
||||
"panel": {
|
||||
@@ -300,9 +323,9 @@
|
||||
"paired-devices": "ペアリングされたデバイス",
|
||||
"pairing-mode": "デバイスがペアリングモードになっていることを確認してください。",
|
||||
"scanning": "デバイスをスキャン中...",
|
||||
"signal-text-excellent": "信号: 良好",
|
||||
"signal-text-excellent": "信号:良好",
|
||||
"signal-text-fair": "合図:可",
|
||||
"signal-text-good": "信号: 良し",
|
||||
"signal-text-good": "信号:良し",
|
||||
"signal-text-poor": "信号:弱い",
|
||||
"signal-text-unknown": "信号:不明",
|
||||
"signal-text-very-poor": "信号:非常に悪い"
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "新規インストール"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "エラー",
|
||||
"on-surface": "表面上",
|
||||
"primary": "主要",
|
||||
"secondary": "二次的",
|
||||
"tertiary": "第三紀"
|
||||
},
|
||||
"common": {
|
||||
"actions": "アクション",
|
||||
"add": "追加",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "切断",
|
||||
"disconnected": "切断済み",
|
||||
"disconnecting": "切断中...",
|
||||
"display-mode": "表示モード",
|
||||
"download": "ダウンロード",
|
||||
"duration": "期間",
|
||||
"dysfunctional": "機能不全",
|
||||
"edit": "編集",
|
||||
"enabled": "有効",
|
||||
"error": "エラー",
|
||||
"events": "イベント",
|
||||
"execute": "実行",
|
||||
"faithful": "忠実",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "インストール済み",
|
||||
"interface": "インターフェース",
|
||||
"internet": "インターネット",
|
||||
"keybind": "キーバインド",
|
||||
"language": "言語",
|
||||
"loading": "読み込み中...",
|
||||
"local": "ローカル",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "見つかりませんでした",
|
||||
"notifications": "通知",
|
||||
"official": "公式",
|
||||
"on-surface": "表面上",
|
||||
"output": "出力",
|
||||
"pair": "ペアリング",
|
||||
"paired": "ペアリング済み",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "ポーリング",
|
||||
"position": "位置",
|
||||
"previous": "前へ",
|
||||
"primary": "プライマリ",
|
||||
"random": "ランダム",
|
||||
"reboot": "再起動",
|
||||
"record": "録画を開始",
|
||||
"refresh": "更新",
|
||||
"required": "(必須)",
|
||||
"reset": "リセット",
|
||||
"reset-to-default": "デフォルトにリセット",
|
||||
"result-count": "{count} 結果",
|
||||
"result-count-plural": "{count} 結果",
|
||||
"resume": "再開",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "スキャン中...",
|
||||
"screen-corners": "画面の隅",
|
||||
"search": "検索",
|
||||
"secondary": "セカンダリー",
|
||||
"security": "セキュリティ",
|
||||
"select": "選択",
|
||||
"select-color": "色を選択",
|
||||
"select-color-description": "強調のためにテーマの色を適用します。",
|
||||
"select-icon-color": "アイコンの色を選択",
|
||||
"shortcuts": "ショートカット",
|
||||
"shutdown": "シャットダウン",
|
||||
"signal": "信号",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "ソース",
|
||||
"start": "開始",
|
||||
"stop": "停止",
|
||||
"supporters": "サポーター",
|
||||
"suspend": "サスペンド",
|
||||
"templates": "テンプレート",
|
||||
"tertiary": "第三",
|
||||
"test": "テスト",
|
||||
"thresholds": "しきい値",
|
||||
"title": "タイトル",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "週",
|
||||
"widgets": "ウィジェット",
|
||||
"width": "幅",
|
||||
"windows": "ウィンドウ",
|
||||
"yes": "はい"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "マウスオーバー時"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "自動非表示",
|
||||
"hidden": "空の場合に非表示",
|
||||
"idle": "アイドル時に非表示",
|
||||
"non-exclusive": "非独占",
|
||||
"transparent": "空の時は透明",
|
||||
"visible": "常に表示"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "絵文字を読み込み中...",
|
||||
"emoji-loading-description": "お待ちください",
|
||||
"emoji-no-recent": "まだ最近使った絵文字はありません",
|
||||
"emoji-search-description": "絵文字を検索してコピー"
|
||||
"emoji-search-description": "絵文字を検索してコピー",
|
||||
"settings-search-description": "設定を検索して移動",
|
||||
"windows-search-description": "開いているウィンドウを検索してフォーカスする"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "コンパクト",
|
||||
"density-default": "標準",
|
||||
"density-mini": "ミニ",
|
||||
"density-spacious": "広々とした"
|
||||
"density-spacious": "広々とした",
|
||||
"display-mode-always-visible": "常に表示",
|
||||
"type-floating": "フローティング",
|
||||
"type-framed": "フレーム",
|
||||
"type-simple": "シンプル"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "クラシック",
|
||||
"quick-settings-style-modern": "モダン"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "快適",
|
||||
"compact": "コンパクト",
|
||||
"default": "デフォルト"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "グリッド",
|
||||
"list": "リスト"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "常にスクロール",
|
||||
"hover": "ホバー時にスクロール",
|
||||
@@ -616,34 +664,39 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "サポーターになる",
|
||||
"changelog": "変更履歴を見る",
|
||||
"contributors-desc": "{count}人の<b>素晴らしい</b>コントリビューターに感謝!",
|
||||
"contributors-description": "{count}人の<b>素晴らしい</b>コントリビューターに感謝!",
|
||||
"contributors-description-plural": "{count}人の<b>素晴らしい</b>コントリビューターに感謝!",
|
||||
"copy-info": "情報をコピー",
|
||||
"info-copied": "クリップボードにコピーしました",
|
||||
"noctalia-desc": "Wayland のために丁寧に作り込まれた、Quickshell 製の洗練されたミニマルなデスクトップシェル。",
|
||||
"noctalia-git-commit": "Git コミット:",
|
||||
"noctalia-installed-version": "現在のバージョン:",
|
||||
"noctalia-latest-version": "最新のバージョン:",
|
||||
"noctalia-git-commit": "Git コミット:",
|
||||
"noctalia-installed-version": "現在のバージョン:",
|
||||
"noctalia-latest-version": "最新のバージョン:",
|
||||
"noctalia-title": "Noctalia shell",
|
||||
"privacy-policy": "プライバシーポリシー",
|
||||
"support": "支援する",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "ディスク",
|
||||
"supporter-badge": "サポーター",
|
||||
"supporters-desc": "素晴らしいサポーターに心からの感謝を!",
|
||||
"supporters-desc-plural": "<b>{count}名の素晴らしい</b>サポーターの皆様に心より感謝いたします!",
|
||||
"supporters-loading": "サポーターを読み込み中...",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "ディスク:",
|
||||
"system-gpu": "GPU:",
|
||||
"system-host": "ホスト:",
|
||||
"system-install-hint": "fastfetch をインストールしてシステム情報を表示する",
|
||||
"system-kernel": "カーネル",
|
||||
"system-kernel": "カーネル:",
|
||||
"system-loading": "システム情報を読み込み中...",
|
||||
"system-memory": "メモリ:",
|
||||
"system-monitor": "モニター",
|
||||
"system-memory": "メモリ:",
|
||||
"system-monitor": "モニター:",
|
||||
"system-not-installed": "fastfetch がインストールされていません",
|
||||
"system-os": "OS:",
|
||||
"system-os": "OS:",
|
||||
"system-packages": "パッケージ:",
|
||||
"system-product": "製品:",
|
||||
"system-product": "製品:",
|
||||
"system-title": "システム情報",
|
||||
"system-uptime": "稼働時間:",
|
||||
"system-wm": "WM:",
|
||||
"system-uptime": "稼働時間:",
|
||||
"system-wm": "WM:",
|
||||
"telemetry-data-copied": "テレメトリーデータをクリップボードにコピーしました。",
|
||||
"telemetry-desc": "匿名システム情報(画面解像度、コンポジター、ディストリビューション)を共有して、Noctaliaの改善にご協力ください。起動時に一度送信され、追跡は行われず、データは30日後に自動的に削除されます。",
|
||||
"telemetry-enabled": "匿名でシステム情報を送信する",
|
||||
@@ -672,7 +725,7 @@
|
||||
"media-frame-rate-label": "フレームレート",
|
||||
"media-primary-player-description": "メインのプレーヤーを識別するためのキーワードを入力します。",
|
||||
"media-primary-player-label": "優先プレーヤー",
|
||||
"media-primary-player-placeholder": "例: spotify, vlc, mpv",
|
||||
"media-primary-player-placeholder": "例:spotify, vlc, mpv",
|
||||
"media-scrolling-speed-description": "タイトルが端から端までスクロールするのにかかる時間(秒)。",
|
||||
"media-scrolling-speed-label": "スクロール速度",
|
||||
"media-scrolling-title-description": "長いメディアタイトルを連続スクロールさせます。",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "システム全体の音量レベル。",
|
||||
"volumes-step-size-description": "音量の変化量(スクロールホイールやショートカットキー)を調整します。",
|
||||
"volumes-step-size-label": "ボリューム調整ステップ",
|
||||
"volumes-volume-feedback-description": "音量を調整するときにフィードバック音を再生する",
|
||||
"volumes-volume-feedback-description": "音量を調整するときにフィードバック音を再生する。",
|
||||
"volumes-volume-feedback-label": "音量フィードバックサウンドを再生",
|
||||
"volumes-volume-overdrive-description": "音量を100%以上に上げることを許可します。すべてのハードウェアでサポートされているとは限りません。",
|
||||
"volumes-volume-overdrive-label": "100%以上の音量を許可"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "マウスカーソルがBarから離れた後、Barが非表示になるまでの時間",
|
||||
"appearance-auto-hide-delay-label": "非表示遅延",
|
||||
"appearance-auto-hide-exclusive-note": "注:自動非表示が有効な場合、排他ゾーンは自動的に無効になります。",
|
||||
"appearance-auto-show-delay-description": "マウスが端に到達したときにバーが表示されるまでの時間。",
|
||||
"appearance-auto-show-delay-label": "表示遅延",
|
||||
"appearance-background-opacity-description": "バーの背景の不透明度を特に設定します。",
|
||||
"appearance-background-opacity-label": "バーの背景の不透明度",
|
||||
"appearance-capsule-color-description": "バーのカプセルの色を選択するか、デフォルトの表面色には色を使用しない。",
|
||||
"appearance-capsule-color-label": "カプセルの色",
|
||||
"appearance-capsule-opacity-description": "カプセル表示時のウィジェット背景の不透明度を設定します。",
|
||||
"appearance-capsule-opacity-label": "カプセルの不透明度",
|
||||
"appearance-density-description": "バーの余白を調整し、コンパクトまたはゆったりとした外観にします。",
|
||||
"appearance-density-label": "バーの密度",
|
||||
"appearance-desc": "バーの外観や位置をカスタマイズします。",
|
||||
"appearance-display-mode-description": "バーの表示タイミングを選択してください。",
|
||||
"appearance-floating-description": "バーを浮かせて、カプセル型で表示します。",
|
||||
"appearance-floating-label": "フローティングバー",
|
||||
"appearance-frame-radius": "内側の半径",
|
||||
"appearance-frame-settings-description": "フレームの太さと内側の半径を調整します",
|
||||
"appearance-frame-settings-label": "フレーム設定",
|
||||
"appearance-frame-thickness": "太さ",
|
||||
"appearance-hide-on-overview-description": "コンポジタの概要がアクティブなときは、バーを非表示にしてパネルを閉じます。",
|
||||
"appearance-hide-on-overview-label": "概要のバーを非表示にする",
|
||||
"appearance-margins-description": "フローティングバーの周囲の余白を調整します。",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-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": "バーの不透明度を個別に設定",
|
||||
"monitor-configure-widgets": "ウィジェットを設定",
|
||||
@@ -734,7 +801,7 @@
|
||||
"title": "バー",
|
||||
"tray-blacklist-description": "トレイから除外するルールを追加します。ワイルドカード (*) に対応しています。",
|
||||
"tray-blacklist-label": "ブラックリスト",
|
||||
"tray-blacklist-placeholder": "例: nm-applet, Fcitx*",
|
||||
"tray-blacklist-placeholder": "例:nm-applet, Fcitx*",
|
||||
"tray-pin-application": "アプリをピン留め",
|
||||
"tray-unpin-application": "ピン留めを解除",
|
||||
"use-global-widgets": "グローバルウィジェットを使用する",
|
||||
@@ -756,12 +823,12 @@
|
||||
"download-button": "さらにダウンロード",
|
||||
"download-downloading": "ダウンロード中...",
|
||||
"download-empty": "利用可能な配色がありません",
|
||||
"download-error-api-error": "API エラー: {status}",
|
||||
"download-error-api-error": "API エラー:{status}",
|
||||
"download-error-description": "{scheme} のダウンロードに失敗しました",
|
||||
"download-error-download-failed": "ダウンロードに失敗しました(終了コード: {code})",
|
||||
"download-error-download-failed": "ダウンロードに失敗しました(終了コード:{code})",
|
||||
"download-error-invalid-response": "無効なAPIレスポンス形式",
|
||||
"download-error-no-files": "スキームのファイルが見つかりません",
|
||||
"download-error-parse-failed": "APIレスポンスの解析に失敗しました: {error}",
|
||||
"download-error-parse-failed": "APIレスポンスの解析に失敗しました:{error}",
|
||||
"download-error-rate-limit": "GitHub APIのレート制限を超えました",
|
||||
"download-error-title": "ダウンロード失敗",
|
||||
"download-fetching": "利用可能な配色を取得中...",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "配色のダウンロード",
|
||||
"method-description": {
|
||||
"content": "ソースコンテンツの実際の色と厳密に一致する、高忠実度の色抽出を備えたMaterial Designスキーム。",
|
||||
"dysfunctional": "Faithfulのように、2番目に支配的な色族をプライマリとして選択します。",
|
||||
"faithful": "調和のとれたパレットを生成しながら、ソースカラーにできるだけ近い色を維持しようとします。",
|
||||
"fruit-salad": "多様で多彩な色合いを持つ、遊び心のある鮮やかなパレットを生み出すMaterial Designスキーム。",
|
||||
"monochrome": "単一色相のグレースケールと最小限の彩度コンテンツを使用した Material Design スキーム。",
|
||||
@@ -789,7 +857,7 @@
|
||||
"templates-misc-user-templates-description": "操作方法を理解している場合のみ有効にしてください。オンラインドキュメントを参照してください。",
|
||||
"templates-misc-user-templates-label": "ユーザーテンプレートを有効化",
|
||||
"templates-none-detected": "検出されませんでした",
|
||||
"templates-write-path": "書き込み先: {filepath}",
|
||||
"templates-write-path": "書き込み先:{filepath}",
|
||||
"title": "配色",
|
||||
"wallpaper-method-description": "お好みのパレット生成方法を選択してください。",
|
||||
"wallpaper-method-label": "パレット生成方法",
|
||||
@@ -866,6 +934,16 @@
|
||||
"media-player-show-buttons-label": "ボタンを表示",
|
||||
"media-player-show-visualizer-description": "オーディオビジュアライザーのオーバーレイを表示する。",
|
||||
"media-player-visualizer-type-description": "デスクトップメディアプレーヤーの背景に使用するビジュアライザーの種類を選択します。",
|
||||
"system-stat-layout-bottom": "下",
|
||||
"system-stat-layout-description": "凡例がグラフに対してどのように表示されるかを選択します。",
|
||||
"system-stat-layout-label": "レイアウト",
|
||||
"system-stat-layout-side": "側",
|
||||
"system-stat-rounded-corners-description": "ウィジェットの背景に丸い角を使用する。",
|
||||
"system-stat-rounded-corners-label": "角丸",
|
||||
"system-stat-show-background-description": "システム統計ウィジェットの背景コンテナを表示します。",
|
||||
"system-stat-show-background-label": "背景を表示",
|
||||
"system-stat-stat-type-description": "表示するシステム統計を選択してください。",
|
||||
"system-stat-stat-type-label": "統計の種類",
|
||||
"title": "デスクトップウィジェット",
|
||||
"weather-enabled-description": "デスクトップに天気ウィジェットを表示します。",
|
||||
"weather-enabled-label": "天気ウィジェットを有効化",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "等幅フォントを検索...",
|
||||
"fonts-reset-scaling": "サイズ設定をリセット",
|
||||
"fonts-title": "フォント",
|
||||
"keybinds-description": "パネルとランチャーのグローバルナビゲーションキーを設定します。",
|
||||
"keybinds-down": "下に移動",
|
||||
"keybinds-enter": "確認 / アクション",
|
||||
"keybinds-escape": "閉じる / 戻る",
|
||||
"keybinds-left": "左へ移動",
|
||||
"keybinds-right": "右へ移動",
|
||||
"keybinds-title": "ナビゲーションのキーバインド",
|
||||
"keybinds-up": "上へ移動",
|
||||
"language-desc": "アプリケーションで使用する言語を選択します。",
|
||||
"language-select-auto-detect": "自動検出",
|
||||
"language-select-description": "アプリケーションのインターフェースで使用する言語を選択します。",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "バーの背景色の代わりに、黒一色を使用します。",
|
||||
"screen-corners-solid-black-label": "角を黒く塗りつぶす",
|
||||
"screen-corners-title": "画面の角",
|
||||
"settings-copied": "設定をクリップボードにコピーしました"
|
||||
"settings-copied": "設定をクリップボードにコピーしました",
|
||||
"tab-basics": "基本",
|
||||
"tab-keybinds": "キーバインド"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• コマンドはシェル (sh -lc) 経由で実行されます<br>• コマンドはバックグラウンドで実行されます<br>• テストボタンは現在の設定値を使って実行されます",
|
||||
@@ -983,16 +1071,16 @@
|
||||
"noctalia-started-placeholder": "例:notify-send 'Noctalia 読み込み完了'",
|
||||
"performance-mode-disabled-description": "Noctalia パフォーマンスモードが無効になった際に実行されるコマンド。",
|
||||
"performance-mode-disabled-label": "パフォーマンスモード無効時",
|
||||
"performance-mode-disabled-placeholder": "例: notify-send \"Performance\" \"Mode disabled\"",
|
||||
"performance-mode-disabled-placeholder": "例:notify-send \"Performance\" \"Mode disabled\"",
|
||||
"performance-mode-enabled-description": "Noctalia パフォーマンスモードが有効になった際に実行されるコマンド。",
|
||||
"performance-mode-enabled-label": "パフォーマンスモード有効時",
|
||||
"performance-mode-enabled-placeholder": "例: notify-send \"Performance\" \"Mode enabled\"",
|
||||
"performance-mode-enabled-placeholder": "例:notify-send \"Performance\" \"Mode enabled\"",
|
||||
"screen-lock-description": "画面がロックされた際に実行されるコマンド。",
|
||||
"screen-lock-label": "画面ロック時",
|
||||
"screen-lock-placeholder": "例: notify-send \"Screen\" \"Locked\"",
|
||||
"screen-lock-placeholder": "例:notify-send \"Screen\" \"Locked\"",
|
||||
"screen-unlock-description": "画面ロックが解除された際に実行されるコマンド。",
|
||||
"screen-unlock-label": "画面ロック解除時",
|
||||
"screen-unlock-placeholder": "例: notify-send \"Screen\" \"Unlocked\"",
|
||||
"screen-unlock-placeholder": "例:notify-send \"Screen\" \"Unlocked\"",
|
||||
"session-description": "シャットダウンまたは再起動の前に実行されるコマンド。アクションタイプを $1 (シャットダウン/再起動) として受け取ります。",
|
||||
"session-label": "セッション終了",
|
||||
"session-placeholder": "例:notify-send \"Session\" \"$1\"",
|
||||
@@ -1002,14 +1090,14 @@
|
||||
"system-hooks-title": "システムフック",
|
||||
"theme-changed-description": "ダークモードとライトモードが切り替わった際に実行されるコマンド。",
|
||||
"theme-changed-label": "テーマ変更時",
|
||||
"theme-changed-placeholder": "例: notify-send \"Theme\" \"Toggled\"",
|
||||
"theme-changed-placeholder": "例:notify-send \"Theme\" \"Toggled\"",
|
||||
"title": "フック",
|
||||
"wallpaper-changed-description": "壁紙が変更された際に実行されるコマンド。",
|
||||
"wallpaper-changed-label": "壁紙変更時",
|
||||
"wallpaper-changed-placeholder": "例: notify-send \"Wallpaper\" \"Changed\""
|
||||
"wallpaper-changed-placeholder": "例:notify-send \"Wallpaper\" \"Changed\""
|
||||
},
|
||||
"indicator": {
|
||||
"default-value": "デフォルト: {value}",
|
||||
"default-value": "デフォルト:{value}",
|
||||
"system-default": "システムのデフォルト"
|
||||
},
|
||||
"launcher": {
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "クリップボードのテキストを折り返す",
|
||||
"settings-clipboard-history-description": "以前コピーした項目にランチャーからアクセスできるようにします。",
|
||||
"settings-clipboard-history-label": "クリップボード履歴を有効化",
|
||||
"settings-custom-launch-prefix-description": "コマンドの先頭にカスタムランチャーを付与します(例: systemd 連携用の 'runapp')。",
|
||||
"settings-clipboard-watch-image-description": "画像変更のためにwl-pasteに渡される完全なコマンド文字列(再起動が必要)。",
|
||||
"settings-clipboard-watch-image-label": "画像監視コマンド",
|
||||
"settings-clipboard-watch-text-description": "テキスト変更のために wl-paste に渡される完全なコマンド文字列(再起動が必要)。",
|
||||
"settings-clipboard-watch-text-label": "テキスト監視コマンド",
|
||||
"settings-custom-launch-prefix-description": "コマンドの先頭にカスタムランチャーを付与します(例:systemd 連携用の 'runapp')。",
|
||||
"settings-custom-launch-prefix-enabled-description": "デフォルトの方法の代わりに、カスタムプレフィックスを使用してアプリを起動します。",
|
||||
"settings-custom-launch-prefix-enabled-label": "カスタム起動プレフィックスを有効化",
|
||||
"settings-custom-launch-prefix-label": "カスタム起動プレフィックス",
|
||||
"settings-density-description": "アプリケーションアイコンのサイズとLauncherの密度を調整します。",
|
||||
"settings-density-label": "密度",
|
||||
"settings-desc": "ランチャーの挙動と外観をカスタマイズします。",
|
||||
"settings-enable-settings-search-description": "ランチャーで検索する際に設定結果を表示する。",
|
||||
"settings-enable-settings-search-label": "設定検索を有効にする",
|
||||
"settings-enable-windows-search-description": "アクティブなウィンドウを検索してフォーカスします。",
|
||||
"settings-enable-windows-search-label": "ウィンドウ検索を有効にする",
|
||||
"settings-grid-view-description": "リスト形式の代わりに、グリッド(格子状)レイアウトで項目を表示します。",
|
||||
"settings-icon-mode-description": "Tablerアイコンではなく、ネイティブのシステムアイコンを使用します。",
|
||||
"settings-icon-mode-label": "ネイティブアイコンを使用",
|
||||
"settings-ignore-mouse-input-description": "ランチャーでのマウス操作とスクロールホイールを無効にする。",
|
||||
"settings-ignore-mouse-input-label": "マウス入力を無視する",
|
||||
"settings-overlay-layer-description": "ランチャーをオーバーレイレイヤーに、全画面ウィンドウの上に表示します。有効にすると、ランチャーはバーにアタッチされません。",
|
||||
"settings-overlay-layer-label": "フルスクリーンより上に表示",
|
||||
"settings-position-description": "ランチャーパネルの表示位置を選択します。",
|
||||
"settings-show-categories-description": "アプリケーションを絞り込むためのカテゴリタブを表示します。",
|
||||
"settings-show-categories-label": "カテゴリを表示",
|
||||
@@ -1046,10 +1144,12 @@
|
||||
"settings-show-icon-background-label": "アイコンの背景を表示",
|
||||
"settings-sort-by-usage-description": "有効にすると、よく使うアプリがリストの上位に表示されます。",
|
||||
"settings-sort-by-usage-label": "使用頻度順に並べ替え",
|
||||
"settings-terminal-command-description": "ターミナルを起動するためのコマンド(例: 'kitty -e' or 'gnome-terminal --')。",
|
||||
"settings-terminal-command-description": "ターミナルを起動するためのコマンド(例:'kitty -e' or 'gnome-terminal --')。",
|
||||
"settings-terminal-command-label": "ターミナル起動コマンド",
|
||||
"settings-use-app2unit-description": "アプリのプロセス管理を改善し、問題を回避するために代替の起動方法を使用します。",
|
||||
"settings-use-app2unit-label": "App2Unit を使用して起動",
|
||||
"settings-view-mode-description": "ランチャーのエントリのレイアウトを選択してください。",
|
||||
"settings-view-mode-label": "表示モード",
|
||||
"title": "ランチャー"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,12 +1166,12 @@
|
||||
"date-time-show-events-description": "カレンダーパネルにイベント(予定)を表示します。",
|
||||
"date-time-show-events-label": "カレンダーのイベントを表示",
|
||||
"date-time-title": "日付と時刻",
|
||||
"date-time-use-analog-description": "カレンダーウィンドウとロック画面にアナログ時計を表示します。",
|
||||
"date-time-use-analog-description": "カレンダーウィンドウにアナログスタイルの時計を表示します。",
|
||||
"date-time-use-analog-label": "アナログ時計を使用",
|
||||
"date-time-week-numbers-description": "カレンダーに週番号(例: 第38週)を表示します。",
|
||||
"date-time-week-numbers-description": "カレンダーに週番号(例:第38週)を表示します。",
|
||||
"date-time-week-numbers-label": "週番号を表示",
|
||||
"location-desc": "場所を設定して、正確な天気情報や夜間モードのスケジュールを取得します。",
|
||||
"location-search-description": "例: Toronto, ON",
|
||||
"location-search-description": "例:東京、日本",
|
||||
"location-search-label": "場所を検索",
|
||||
"location-search-placeholder": "地名を入力",
|
||||
"location-title": "場所の設定",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "カレンダー"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "fprintd(指紋認証)が有効な場合、このオプションを使用すると、指紋の代わりにパスワードでログインできます。",
|
||||
"allow-password-with-fprintd-label": "fprintd でパスワードログインを許可する",
|
||||
"auto-start-auth-description": "たとえば、キーを押したりボタンをクリックしたりしなくても、指紋認証が自動的に開始されます。",
|
||||
"auto-start-auth-label": "自動認証を開始",
|
||||
"clock-format-description": "日付/時刻の構文トークンを使用して時計のフォーマットをカスタマイズします。",
|
||||
"clock-format-label": "時計の形式",
|
||||
"clock-style-analog": "アナログ",
|
||||
"clock-style-custom": "カスタム",
|
||||
"clock-style-description": "ロック画面の時計の表示スタイルを選択してください。",
|
||||
"clock-style-digital": "デジタル",
|
||||
"clock-style-label": "時計のスタイル",
|
||||
"compact-lockscreen-description": "天気やメディアウィジェットを隠し、ログイン入力とシステムコントロールのみを表示します。",
|
||||
"compact-lockscreen-label": "コンパクトなロック画面",
|
||||
"lock-on-suspend-description": "システムのサスペンド時に、自動的に画面をロックします。",
|
||||
"lock-on-suspend-label": "サスペンド時にロック",
|
||||
"lock-screen-animations-description": "ロック画面のアニメーションを有効または無効にする。",
|
||||
"lock-screen-animations-label": "ロック画面のアニメーション",
|
||||
"lock-screen-blur-strength-description": "ロック画面の壁紙にぼかし効果を適用します。",
|
||||
"lock-screen-blur-strength-label": "ロック画面のぼかし強度",
|
||||
"lock-screen-tint-strength-description": "ロック画面の壁紙に色合いのオーバーレイを適用します。",
|
||||
"lock-screen-tint-strength-label": "ロック画面の着色強度",
|
||||
"monitors-desc": "ロック画面を特定のモニターに表示します。何も選択されていない場合、デフォルトですべてに表示されます。",
|
||||
"show-hibernate-description": "電源操作に「ハイバネート(休止状態)」のオプションを表示します。",
|
||||
"show-hibernate-label": "ハイバネートを表示",
|
||||
"show-session-buttons-description": "ロック画面から電源操作を行えるようにします。",
|
||||
@@ -1109,25 +1227,23 @@
|
||||
},
|
||||
"notifications": {
|
||||
"duration-critical-urgency-description": "緊急度「重大」の通知が表示され続ける時間。",
|
||||
"duration-critical-urgency-label": "緊急度: 重大",
|
||||
"duration-critical-urgency-label": "緊急度:重大",
|
||||
"duration-desc": "緊急度レベルに基づいて、通知の表示時間を設定します。",
|
||||
"duration-low-urgency-description": "緊急度「低」の通知が表示され続ける時間。",
|
||||
"duration-low-urgency-label": "緊急度: 低",
|
||||
"duration-low-urgency-label": "緊急度:低",
|
||||
"duration-normal-urgency-description": "緊急度「通常」の通知が表示され続ける時間。",
|
||||
"duration-normal-urgency-label": "緊急度: 通常",
|
||||
"duration-normal-urgency-label": "緊急度:通常",
|
||||
"duration-reset": "表示時間をリセット",
|
||||
"duration-respect-expire-description": "通知自体に設定された有効期限(タイムアウト)を使用します。",
|
||||
"duration-respect-expire-label": "通知指定の期限に従う",
|
||||
"duration-title": "通知の表示時間",
|
||||
"history-critical-urgency-description": "緊急優先度の通知を履歴に保存します。",
|
||||
"history-critical-urgency-label": "緊急度: 重大を履歴に保存",
|
||||
"history-critical-urgency-label": "緊急度:重大を履歴に保存",
|
||||
"history-desc": "緊急度レベルに基づいて、履歴に保存する通知を制御します。",
|
||||
"history-low-urgency-description": "低優先度の通知を履歴に保存します。",
|
||||
"history-low-urgency-label": "低緊急度を履歴に保存",
|
||||
"history-normal-urgency-description": "通常優先度の通知を履歴に保存します。",
|
||||
"history-normal-urgency-label": "通常緊急度を履歴に保存",
|
||||
"media-toast-description": "メディアの再生状態が変化したときにトーストを表示します。",
|
||||
"media-toast-label": "メディア",
|
||||
"monitors-desc": "通知を表示するディスプレイを選択します。未選択の場合は全てに表示されます。",
|
||||
"settings-always-on-top-description": "全画面ウィンドウや他のレイヤーよりも手前に通知を表示します。",
|
||||
"settings-background-opacity-description": "通知の背景の不透明度を調整します。",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "通知音を利用できません",
|
||||
"sounds-volume-description": "通知音の音量レベルを調整します。",
|
||||
"sounds-volume-label": "通知音量",
|
||||
"toast-battery-description": "バッテリー残量がこの割合を下回った場合に警告を表示します。",
|
||||
"toast-battery-label": "バッテリー警告",
|
||||
"toast-desc": "トースト通知の外観と挙動を設定します。",
|
||||
"toast-keyboard-description": "キーボードレイアウトの変更時にトーストを表示します。",
|
||||
"toast-keyboard-label": "キーボードレイアウト"
|
||||
"toast-keyboard-label": "キーボードレイアウト",
|
||||
"toast-media-description": "メディアの再生状態が変化したときにトーストを表示します。",
|
||||
"toast-media-label": "メディア"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "全画面ウィンドウや他のレイヤーよりも手前に OSD を表示します。",
|
||||
@@ -1202,21 +1322,25 @@
|
||||
"types-volume-label": "出力音量"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "プラグインを自動更新",
|
||||
"auto-update-description": "シェル起動時にすべてのプラグインを自動的に更新します。",
|
||||
"available-description": "設定されたソースからプラグインを参照してインストールします。",
|
||||
"available-label": "利用可能なプラグイン",
|
||||
"available-no-plugins-description": "プラグインのソースを確認するか、リストを更新してください。",
|
||||
"available-no-plugins-label": "利用可能なプラグインはありません",
|
||||
"check-for-updates": "アップデートを確認",
|
||||
"checking-for-updates": "アップデートを確認しています...",
|
||||
"collision-already-installed": "このプラグインはすでにインストールされています",
|
||||
"collision-custom-version-exists": "「{source}」 発 の カスタム版 は 既に インストール されています",
|
||||
"collision-official-version-exists": "このプラグインの公式バージョンはすでにインストールされています",
|
||||
"filter-downloaded": "ダウンロード済み",
|
||||
"filter-not-downloaded": "未ダウンロード",
|
||||
"filter-tags-description": "カテゴリーまたはダウンロード状況でプラグインを絞り込む",
|
||||
"filter-tags-description": "カテゴリーまたはダウンロード状況でプラグインを絞り込む。",
|
||||
"filter-tags-label": "タグ",
|
||||
"hot-reload-description": "ファイルの変更時にプラグインを自動的にリロードします。プラグイン開発に便利です。",
|
||||
"hot-reload-label": "ホットリロード(開発モード)",
|
||||
"hot-reloaded": "プラグインをリロードしました: {name}",
|
||||
"install-error": "インストールに失敗しました: {error}",
|
||||
"hot-reloaded": "プラグインをリロードしました:{name}",
|
||||
"install-error": "インストールに失敗しました:{error}",
|
||||
"install-incompatible": "{plugin} には Noctalia v{version} 以降が必要です",
|
||||
"install-success": "{plugin} をインストールしました",
|
||||
"installed-description": "ローカルにインストールされたすべてのプラグインを管理・設定します。",
|
||||
@@ -1245,16 +1369,17 @@
|
||||
"sources-placeholder": "マイリポジトリ",
|
||||
"sources-remove-tooltip": "プラグインソースを削除",
|
||||
"title": "プラグイン",
|
||||
"translations-reloaded": "翻訳をリロードしました:{name}",
|
||||
"uninstall-dialog-description": "本当に {plugin} をアンインストールしますか?すべてのプラグインデータが削除されます。",
|
||||
"uninstall-dialog-title": "プラグインのアンインストール",
|
||||
"uninstall-error": "アンインストールに失敗しました: {error}",
|
||||
"uninstall-error": "アンインストールに失敗しました:{error}",
|
||||
"uninstall-success": "{plugin} をアンインストールしました",
|
||||
"uninstalling": "{plugin} をアンインストール中...",
|
||||
"update-all": "すべてアップデート ({count})",
|
||||
"update-all-success": "すべてのプラグインをアップデートしました",
|
||||
"update-available": "新しいプラグインアップデートがあります",
|
||||
"update-available-plural": "新しいプラグインアップデートがあります({count}個)",
|
||||
"update-error": "プラグインのアップデートに失敗しました: {plugin}: {error}",
|
||||
"update-error": "プラグインのアップデートに失敗しました:{plugin}:{error}",
|
||||
"update-pending": "v{current} → v{new} (Noctalia v{required}が必要です)",
|
||||
"update-success": "{plugin} を v{version} にアップデートしました",
|
||||
"update-version": "v{current} → v{new}",
|
||||
@@ -1271,11 +1396,14 @@
|
||||
"entries-desc": "セッションメニューに表示される電源操作と、その表示順序をカスタマイズします。",
|
||||
"entries-title": "電源操作",
|
||||
"entry-settings-command-description": "このアクションのために実行するカスタムコマンド。空欄にするとデフォルトのシステムコマンドを使用します。",
|
||||
"entry-settings-command-placeholder": "例: systemctl poweroff",
|
||||
"entry-settings-command-placeholder": "例:systemctl poweroff",
|
||||
"entry-settings-default-command-lock": "内部ロック画面(コマンドなし)",
|
||||
"entry-settings-default-command-logout": "内部ログアウト(コマンドなし)",
|
||||
"entry-settings-default-info-description": "カスタムコマンドが指定されていない場合、デフォルトのシステムコマンドが使用されます。",
|
||||
"entry-settings-default-info-label": "デフォルトのコマンド",
|
||||
"entry-settings-keybind-description": "セッションメニューが開いているときに、このアクションをトリガーするキーの組み合わせを割り当てます。",
|
||||
"entry-settings-keybind-placeholder": "キーを割り当てるには、記録を押してください...",
|
||||
"entry-settings-keybind-recording": "録音中... 任意のキーの組み合わせを押してください",
|
||||
"entry-settings-title": "「{entry}」の設定",
|
||||
"entry-settings-tooltip": "コマンドを設定",
|
||||
"general-desc": "セッションメニューパネルの動作と外観を設定します。",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "危険時の色",
|
||||
"custom-highlight-colors-title-label": "カスタムハイライト色",
|
||||
"disk-available-label": "利用可能なディスク容量",
|
||||
"disk-section-label": "ストレージ使用量",
|
||||
"enable-dgpu-monitoring-description": "警告: これにより外部GPU (NVIDIA/AMD) が起動状態になるため、ハイブリッドグラフィックス搭載のノート PC ではバッテリー駆動時間に大きな影響を与える可能性があります。",
|
||||
"enable-dgpu-monitoring-label": "外部GPUモニタリングを有効にする",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "設定画面の表示形式を選択します (再起動が必要な場合があります)。",
|
||||
"settings-panel-mode-label": "設定パネルの表示モード",
|
||||
"shadows-description": "バーやパネルの下にドロップシャドウ(影)を表示します。",
|
||||
"shadows-direction-description": "影が落ちる方向を設定します。",
|
||||
"shadows-direction-description": "影を落とす場所を選択してください。",
|
||||
"shadows-direction-label": "影の方向",
|
||||
"shadows-label": "ドロップシャドウ",
|
||||
"title": "ユーザーインターフェース",
|
||||
@@ -1357,7 +1486,7 @@
|
||||
"automation-change-mode-alphabetical": "アルファベット順",
|
||||
"automation-change-mode-description": "自動変更時に壁紙を選択する方法を選択します。",
|
||||
"automation-change-mode-label": "変更モード",
|
||||
"automation-custom-interval-description": "時間を HH:MM 形式で入力してください(例: 01:30)。",
|
||||
"automation-custom-interval-description": "時間を HH:MM 形式で入力してください(例:01:30)。",
|
||||
"automation-custom-interval-label": "カスタム間隔",
|
||||
"automation-interval-description": "壁紙を自動的に切り替える頻度。",
|
||||
"automation-interval-label": "変更間隔",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "ディスプレイごとに異なる壁紙フォルダを設定します。",
|
||||
"settings-monitor-specific-label": "ディスプレイ別の壁紙フォルダ",
|
||||
"settings-monitor-specific-tooltip": "ディスプレイ別の壁紙フォルダ",
|
||||
"settings-overview-blur-strength-description": "概要にぼかしの強度を適用します。",
|
||||
"settings-overview-blur-strength-label": "概要のぼかし強度",
|
||||
"settings-overview-tint-description": "概要に色合いの強さを適用します。",
|
||||
"settings-overview-tint-label": "オーバービューの着色強度",
|
||||
"settings-recursive-search-description": "壁紙フォルダのサブフォルダ内も検索対象にします。",
|
||||
"settings-recursive-search-label": "サブフォルダも検索",
|
||||
"settings-select-monitor-folder": "ディスプレイ別の壁紙フォルダを選択",
|
||||
@@ -1397,7 +1530,7 @@
|
||||
"settings-view-mode-description": "ディレクトリから壁紙をどのように表示するかを選択します。",
|
||||
"settings-view-mode-label": "表示モード",
|
||||
"view-mode-browse": "ディレクトリを参照",
|
||||
"view-mode-cycle-tooltip": "表示モード: {mode} (クリックして変更)",
|
||||
"view-mode-cycle-tooltip": "表示モード:{mode} (クリックして変更)",
|
||||
"view-mode-recursive": "フラット化されたサブディレクトリ",
|
||||
"view-mode-single": "ルートディレクトリ"
|
||||
}
|
||||
@@ -1407,11 +1540,11 @@
|
||||
"enter-command": "実行するコマンドを入力(アプリまたはスクリプト)",
|
||||
"enter-ipc-identifier": "IPCコマンドの一意の識別子を入力してください",
|
||||
"enter-path": "パスを入力してください...",
|
||||
"enter-text-to-collapse": "例: 'nothing is playing'。正規表現 (/.../) も使用できます。",
|
||||
"enter-text-to-collapse": "例:'nothing is playing'。正規表現 (/.../) も使用できます。",
|
||||
"enter-tooltip": "ツールチップを入力",
|
||||
"enter-width-pixels": "幅を入力(ピクセル)",
|
||||
"search": "検索...",
|
||||
"search-icons": "例: noctalia, niri, battery, cloud",
|
||||
"search-icons": "例:noctalia, niri, battery, cloud",
|
||||
"search-launcher": "項目を検索...(または > でコマンド実行)",
|
||||
"search-wallhaven": "Wallhaven で検索...",
|
||||
"search-wallpapers": "壁紙を検索して絞り込む..."
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "完了!",
|
||||
"appearance": {
|
||||
"subheader": "Dark Modeと色のソース(壁紙または定義済み)を選択します。"
|
||||
"subheader": "ダークモードと色のソース(壁紙または事前定義)を選択します。"
|
||||
},
|
||||
"customize": {
|
||||
"header": "自分好みにカスタマイズ",
|
||||
@@ -1460,7 +1593,7 @@
|
||||
"dir-select-title": "壁紙フォルダを選択",
|
||||
"header": "壁紙を選択",
|
||||
"no-dir": "壁紙フォルダが選択されていません",
|
||||
"no-valid": "有効な画像ファイルが見つかりませんでした: {dir}",
|
||||
"no-valid": "有効な画像ファイルが見つかりませんでした:{dir}",
|
||||
"none-in-dir": "ディレクトリに壁紙が見つかりませんでした",
|
||||
"preview-error": "画像を読み込めませんでした",
|
||||
"select-prompt": "以下から壁紙を選択します",
|
||||
@@ -1479,7 +1612,7 @@
|
||||
"scaling-percentage": "{percentage}%",
|
||||
"signal-strength": "{signal}%",
|
||||
"unknown-app": "不明なアプリ",
|
||||
"uptime": "稼働時間: {uptime}",
|
||||
"uptime": "稼働時間:{uptime}",
|
||||
"user-requested": "ユーザーの要求",
|
||||
"welcome-back": "おかえりなさい、",
|
||||
"widget-settings-title": "{widget} の設定"
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "機内モード"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "バッテリー残量低下",
|
||||
"critical-desc": "バッテリー残量 {percent}% — すぐに充電器を接続してください",
|
||||
"low": "バッテリー残量低下",
|
||||
"low-desc": "バッテリー残量が {percent}% です。充電器を接続してください"
|
||||
"low-desc": "バッテリー残量 {percent}% — 充電器を接続してください"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "アドレスをクリップボードにコピーしました",
|
||||
@@ -1544,8 +1679,8 @@
|
||||
"not-installed": "wlsunset がインストールされていません"
|
||||
},
|
||||
"noctalia-performance": {
|
||||
"disabled": "パフォーマンスモード: 無効",
|
||||
"enabled": "パフォーマンスモード: 有効",
|
||||
"disabled": "パフォーマンスモード:無効",
|
||||
"enabled": "パフォーマンスモード:有効",
|
||||
"label": "Noctalia パフォーマンス"
|
||||
},
|
||||
"power-profile": {
|
||||
@@ -1561,8 +1696,8 @@
|
||||
"disconnected": "{name} から切断しました"
|
||||
},
|
||||
"wallpaper-colors": {
|
||||
"disabled": "壁紙配色の生成: 無効",
|
||||
"enabled": "壁紙配色の生成: 有効",
|
||||
"disabled": "壁紙配色の生成:無効",
|
||||
"enabled": "壁紙配色の生成:有効",
|
||||
"label": "壁紙配色の生成"
|
||||
},
|
||||
"wifi": {
|
||||
@@ -1577,7 +1712,7 @@
|
||||
"tooltips": {
|
||||
"add-widget": "ウィジェットを追加",
|
||||
"bluetooth-devices": "Bluetooth デバイス",
|
||||
"brightness-at": "画面の明るさ: {brightness}%",
|
||||
"brightness-at": "画面の明るさ:{brightness}%",
|
||||
"click-to-start-recording": "画面録画(録画開始)",
|
||||
"click-to-stop-recording": "画面録画(録画停止)",
|
||||
"collapse": "サイドバーを折りたたむ",
|
||||
@@ -1592,12 +1727,12 @@
|
||||
"home": "ホームディレクトリ",
|
||||
"input-muted": "入力ミュート切り替え",
|
||||
"keep-awake": "スリープ防止",
|
||||
"keyboard-layout": "キーボードレイアウト: {layout}",
|
||||
"keyboard-layout": "キーボードレイアウト:{layout}",
|
||||
"list-view": "リスト表示",
|
||||
"manage-vpn": "VPN 接続",
|
||||
"manage-wifi": "Wi-Fi",
|
||||
"max-widgets-reached": "ウィジェットの最大数に達しました",
|
||||
"microphone-volume-at": "マイク音量: {volume}%",
|
||||
"microphone-volume-at": "マイク音量:{volume}%",
|
||||
"move-to-section": "{section} に移動",
|
||||
"mute": "ミュート",
|
||||
"next-media": "次のトラック",
|
||||
@@ -1610,7 +1745,7 @@
|
||||
"open-settings": "設定",
|
||||
"open-tray-dropdown": "システムトレイ",
|
||||
"output-muted": "出力ミュート切り替え",
|
||||
"power-profile": "電源プロファイル: {profile}",
|
||||
"power-profile": "電源プロファイル:{profile}",
|
||||
"previous-media": "前のトラック",
|
||||
"previous-month": "前月",
|
||||
"refresh-devices": "デバイスを更新",
|
||||
@@ -1624,7 +1759,7 @@
|
||||
"switch-to-light-mode": "ライトモード",
|
||||
"unmute": "ミュート解除",
|
||||
"up": "親ディレクトリ",
|
||||
"volume-at": "出力音量: {volume}%",
|
||||
"volume-at": "出力音量:{volume}%",
|
||||
"wallpaper-selector": "壁紙選択パネル"
|
||||
},
|
||||
"wallpaper": {
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "ディスク",
|
||||
"fade": "フェード",
|
||||
"honeycomb": "ハニカム",
|
||||
"pixelate": "ピクセル化",
|
||||
"stripes": "ストライプ",
|
||||
"wipe": "ワイプ"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "壁紙を読み込み中...",
|
||||
"no-results": "壁紙が見つかりません。別の検索条件を試してください。",
|
||||
"page": "{current} / {total}"
|
||||
"page": "{current} / {total}",
|
||||
"page-prefix": "ページ",
|
||||
"page-suffix": "{total}件中"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
@@ -1722,16 +1861,16 @@
|
||||
"common-us-date": "米国形式の日付(月/日/年)",
|
||||
"common-weekday-date": "曜日と日付",
|
||||
"common-weekday-month-day": "曜日、月、日",
|
||||
"day-abbreviated": "曜日の短縮名(例: 火)",
|
||||
"day-full": "曜日の完全名(例: 月曜日)",
|
||||
"day-abbreviated": "曜日の短縮名(例:火)",
|
||||
"day-full": "曜日の完全名(例:月曜日)",
|
||||
"day-leading-zero": "ゼロ埋めありの日付 (01-31)",
|
||||
"day-no-leading-zero": "ゼロ埋めなしの日付 (1-31)",
|
||||
"hour-leading-zero": "ゼロ埋めありの時間 (00-23) — 24時間表記",
|
||||
"hour-no-leading-zero": "ゼロ埋めなしの時間 (0-23) — 24時間表記",
|
||||
"minute-leading-zero": "ゼロ埋めありの分 (00-59)",
|
||||
"minute-no-leading-zero": "ゼロ埋めなしの分 (0-59)",
|
||||
"month-abbreviated": "月の短縮名(例: 1月/Jan)",
|
||||
"month-full": "月の完全名(例: 1月/January)",
|
||||
"month-abbreviated": "月の短縮名(例:1月/Jan)",
|
||||
"month-full": "月の完全名(例:1月/January)",
|
||||
"month-number-leading-zero": "ゼロ埋めありの月 (01-12)",
|
||||
"month-number-no-zero": "ゼロ埋めなしの月 (1-12)",
|
||||
"second-leading-zero": "ゼロ埋めありの秒 (00-59)",
|
||||
@@ -1747,7 +1886,7 @@
|
||||
"select-current": "現在のフォルダを選択する",
|
||||
"select-file": "ファイルを選択する",
|
||||
"select-folder": "フォルダを選択する",
|
||||
"selected": "選択済み:",
|
||||
"selected": "選択済み:",
|
||||
"title": "ファイル選択"
|
||||
},
|
||||
"file-picker-title": "ファイルを選択してください",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+308
-252
File diff suppressed because it is too large
Load Diff
+173
-34
@@ -48,11 +48,16 @@
|
||||
"device-default": "Standaard (weergaveapparaat)",
|
||||
"device-description": "Selecteer welk accuapparaat u wilt weergeven.",
|
||||
"device-label": "Accuapparaat",
|
||||
"display-mode-description": "Kies hoe de batterij wordt weergegeven in de balk.",
|
||||
"display-mode-graphic": "Grafische accu",
|
||||
"display-mode-graphic-clean": "Grafische accu (geen %)",
|
||||
"display-mode-icon-always": "Pictogram - Altijd % tonen",
|
||||
"display-mode-icon-hover": "Icoon - Tonen bij hover",
|
||||
"display-mode-icon-only": "Alleen pictogram",
|
||||
"hide-if-idle-description": "Verberg de widget wanneer de accu niet wordt opgeladen of ontladen.",
|
||||
"hide-if-idle-label": "Verbergen indien inactief",
|
||||
"hide-if-not-detected-description": "Verberg de widget als er geen accu op het systeem wordt gedetecteerd.",
|
||||
"hide-if-not-detected-label": "Verbergen indien niet gedetecteerd",
|
||||
"low-battery-threshold-description": "Toon een waarschuwing wanneer de accu onder dit percentage komt.",
|
||||
"low-battery-threshold-label": "Waarschuwingsdrempel voor lage accu",
|
||||
"show-noctalia-performance-description": "Toon de Noctalia-prestatiemodus-schakelaar in het accupaneel.<br>Schakelt schaduwen en animaties in Noctalia uit om het resourcegebruik te verminderen.",
|
||||
"show-noctalia-performance-label": "Noctalia-Performance-schakelaar tonen",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "Aangepast lettertype gebruiken",
|
||||
"use-monospaced-font-description": "Indien ingeschakeld gebruikt de klok het monospace-lettertype.",
|
||||
"use-monospaced-font-label": "Monospace-lettertype gebruiken",
|
||||
"use-primary-color-description": "Indien ingeschakeld wordt de primaire kleur gebruikt voor nadruk.",
|
||||
"use-primary-color-label": "Primaire kleur gebruiken",
|
||||
"vertical-bar-description": "Gebruik een spatie om elk deel op een nieuwe regel te plaatsen.",
|
||||
"vertical-bar-label": "Verticale balk"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"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.",
|
||||
"color-selection-label": "Kleur selecteren",
|
||||
"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.",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "Het meldingspictogram verbergen wanneer er geen ongelezen meldingen zijn.",
|
||||
"hide-widget-when-zero-unread-label": "Pictogram verbergen zonder ongelezen meldingen",
|
||||
"show-unread-badge-description": "Toon een badge met het aantal ongelezen meldingen.",
|
||||
"show-unread-badge-label": "Ongelezen-badge tonen"
|
||||
"show-unread-badge-label": "Ongelezen-badge tonen",
|
||||
"unread-badge-color-description": "Selecteer de kleur voor de badge van ongelezen meldingen.",
|
||||
"unread-badge-color-label": "Kleur van de ongelezen badge"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "Selecteer een widget om toe te voegen...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "Statistieken weergeven als mini-staafdiagrammen in plaats van tekstwaarden. Voorkomt lay-outverschuiving.",
|
||||
"compact-mode-label": "Compacte modus",
|
||||
"cpu-frequency-description": "De huidige CPU-kloksnelheid in GHz weergeven.",
|
||||
"cpu-frequency-label": "CPU-frequentie weergeven",
|
||||
"cpu-temperature-description": "Toon CPU-temperatuur indien beschikbaar.",
|
||||
"cpu-temperature-label": "CPU-temperatuur",
|
||||
"cpu-usage-description": "Toon het huidige CPU-gebruik in procent.",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "Geheugengebruik",
|
||||
"network-traffic-description": "Toon uploadsnelheid en downloadsnelheid van het netwerk.",
|
||||
"network-traffic-label": "Netwerkverkeer",
|
||||
"storage-as-percentage-description": "Toon schijfruimte als percentage in plaats van absolute waarden.",
|
||||
"storage-as-percentage-label": "Schijf als percentage",
|
||||
"storage-available-description": "Toont hoeveel schijfruimte beschikbaar is in plaats van hoeveel er wordt gebruikt.",
|
||||
"storage-available-label": "Beschikbare schijfruimte",
|
||||
"storage-usage-description": "Toon informatie over schijfruimtegebruik.",
|
||||
"storage-usage-label": "Opslaggebruik",
|
||||
"swap-usage-description": "Toon swap geheugengebruik.",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "Titelbreedte resetten"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "Themakleuren toepassen op het pijl-icoon van de lade.",
|
||||
"chevron-color-label": "Pijlkleur",
|
||||
"colorize-icons-description": "Pas themakleuren toe op systeemvakpictogrammen.",
|
||||
"colorize-icons-label": "Pictogrammen inkleuren",
|
||||
"drawer-enabled-description": "Indien ingeschakeld worden niet-vastgemaakte systeemvakitems in een lade weergegeven.<br>Indien uitgeschakeld worden alle items inline getoond.",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "Verberg passieve items"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "Kies hoe je wilt dat deze waarde wordt weergegeven.",
|
||||
"display-mode-label": "Weergavemodus"
|
||||
"display-mode-description": "Kies hoe je wilt dat deze waarde wordt weergegeven."
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "Aantal tekens dat wordt weergegeven van werkruimtenamen (1-10).",
|
||||
"character-count-label": "Aantal tekens",
|
||||
"empty-color-description": "Stel de achtergrondkleur in voor lege Workspaces.",
|
||||
"empty-color-label": "Kleur van lege Workspace",
|
||||
"enable-scrollwheel-description": "Schakel tussen werkruimtes met het muiswiel.",
|
||||
"enable-scrollwheel-label": "Scroll om tussen werkruimtes te schakelen",
|
||||
"focused-color-description": "Stel de achtergrondkleur in voor de gefocuste Workspace.",
|
||||
"focused-color-label": "Kleur van de gefocuste Workspace",
|
||||
"follow-focused-screen-description": "Werkruimten weergeven van het momenteel gefocuste scherm, in plaats van het scherm waar de balk zich bevindt.",
|
||||
"follow-focused-screen-label": "Gefocust scherm volgen",
|
||||
"grouped-border-opacity-description": "Stel het dekkingsniveau in voor de randen van de werkruimtecontainer.",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "Ongebruikte verbergen",
|
||||
"label-mode-description": "Kies hoe labels van werkruimten worden weergegeven.",
|
||||
"label-mode-label": "Labelmodus",
|
||||
"occupied-color-description": "Stel de achtergrondkleur in voor bezette Workspaces.",
|
||||
"occupied-color-label": "Kleur van bezette workspace",
|
||||
"pill-size-description": "Pas de grootte van de werkruimte-pillen aan (50%-100%).",
|
||||
"pill-size-label": "Pilgrootte",
|
||||
"reverse-scrolling-description": "Keer de richting van het wisselen van werkruimtes om bij het scrollen.",
|
||||
"reverse-scrolling-label": "Omgekeerd scrollen",
|
||||
"show-applications-description": "Toon applicatiepictogrammen in elke werkruimte.",
|
||||
"show-applications-label": "Toon applicaties",
|
||||
"show-badge-description": "Toon de werkomgevingnummerbadge in gegroepeerde modus.",
|
||||
"show-badge-label": "Werkruimtebadge weergeven",
|
||||
"show-labels-only-when-occupied-description": "Toon alleen werkruimtelabels wanneer ze vensters bevatten.",
|
||||
"show-labels-only-when-occupied-label": "Toon labels alleen wanneer bezet",
|
||||
"unfocused-icons-opacity-description": "Stel het dekkingsniveau in voor app-pictogrammen die niet in focus zijn.",
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "Nieuwe installatie"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "Fout",
|
||||
"on-surface": "Op oppervlak",
|
||||
"primary": "Primair",
|
||||
"secondary": "Secundair",
|
||||
"tertiary": "Tertiair"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Acties",
|
||||
"add": "Toevoegen",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "Verbreek de verbinding",
|
||||
"disconnected": "Verbinding verbroken",
|
||||
"disconnecting": "Verbinding verbroken...",
|
||||
"display-mode": "Weergavemodus",
|
||||
"download": "Downloaden",
|
||||
"duration": "Duur",
|
||||
"dysfunctional": "Dysfunctioneel",
|
||||
"edit": "Bewerken",
|
||||
"enabled": "Ingeschakeld",
|
||||
"error": "Fout",
|
||||
"events": "Evenementen",
|
||||
"execute": "Uitvoeren",
|
||||
"faithful": "Getrouw",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "Geïnstalleerd",
|
||||
"interface": "Interface",
|
||||
"internet": "Internet",
|
||||
"keybind": "Toetsencombinatie",
|
||||
"language": "Taal",
|
||||
"loading": "Laden...",
|
||||
"local": "Lokaal",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "Niet gevonden",
|
||||
"notifications": "Meldingen",
|
||||
"official": "Officieel",
|
||||
"on-surface": "Op oppervlak",
|
||||
"output": "Uitvoer",
|
||||
"pair": "Koppelen",
|
||||
"paired": "Gekoppeld",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "Polling",
|
||||
"position": "Positie",
|
||||
"previous": "Vorige",
|
||||
"primary": "Primair",
|
||||
"random": "Willekeurig",
|
||||
"reboot": "Herstarten",
|
||||
"record": "Opname starten",
|
||||
"refresh": "Vernieuwen",
|
||||
"required": "(vereist)",
|
||||
"reset": "Resetten",
|
||||
"reset-to-default": "Herstellen naar Standaard",
|
||||
"result-count": "{count} resultaat",
|
||||
"result-count-plural": "{count} resultaten",
|
||||
"resume": "Hervatten",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "Scannen...",
|
||||
"screen-corners": "Schermhoeken",
|
||||
"search": "Zoeken",
|
||||
"secondary": "Secundair",
|
||||
"security": "Beveiliging",
|
||||
"select": "Selecteer",
|
||||
"select-color": "Kleur selecteren",
|
||||
"select-color-description": "Themakleuren toepassen voor nadruk.",
|
||||
"select-icon-color": "Icoonkleur selecteren",
|
||||
"shortcuts": "Snelkoppelingen",
|
||||
"shutdown": "Afsluiten",
|
||||
"signal": "Signaal",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "Bronnen",
|
||||
"start": "Begin",
|
||||
"stop": "Stop",
|
||||
"supporters": "Ondersteuners",
|
||||
"suspend": "Onderbreken",
|
||||
"templates": "Sjablonen",
|
||||
"tertiary": "Tertiair",
|
||||
"test": "Test",
|
||||
"thresholds": "Drempels",
|
||||
"title": "Titel",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "Week",
|
||||
"widgets": "Widgets",
|
||||
"width": "Breedte",
|
||||
"windows": "Vensters",
|
||||
"yes": "Ja"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "Bij hover"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "Automatisch verbergen",
|
||||
"hidden": "Verbergen indien leeg",
|
||||
"idle": "Verbergen indien inactief",
|
||||
"non-exclusive": "Niet-exclusief",
|
||||
"transparent": "Transparant wanneer leeg",
|
||||
"visible": "Altijd zichtbaar"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "Emoji's laden...",
|
||||
"emoji-loading-description": "Even geduld",
|
||||
"emoji-no-recent": "Nog geen recente emoji's",
|
||||
"emoji-search-description": "Zoek en kopieer emoji's"
|
||||
"emoji-search-description": "Zoek en kopieer emoji's",
|
||||
"settings-search-description": "Zoeken en navigeren naar instellingen",
|
||||
"windows-search-description": "Zoek en focus open vensters"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "Compact",
|
||||
"density-default": "Standaard",
|
||||
"density-mini": "Mini",
|
||||
"density-spacious": "Ruim"
|
||||
"density-spacious": "Ruim",
|
||||
"display-mode-always-visible": "Altijd zichtbaar",
|
||||
"type-floating": "Zwevend",
|
||||
"type-framed": "Omkaderd",
|
||||
"type-simple": "Eenvoudig"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "Klassiek",
|
||||
"quick-settings-style-modern": "Modern"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "Comfortabel",
|
||||
"compact": "Compact",
|
||||
"default": "Standaard"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "Raster",
|
||||
"list": "Lijst"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "Altijd scrollen",
|
||||
"hover": "Scrollen bij hover",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "Word supporter",
|
||||
"changelog": "Bekijk wijzigingslogboek",
|
||||
"contributors-desc": "Een shout-out naar onze {count} <b>geweldige</b> bijdrager!",
|
||||
"contributors-description": "Een shout-out naar onze {count} <b>geweldige</b> bijdrager!",
|
||||
"contributors-description-plural": "Een shout-out naar onze {count} <b>geweldige</b> bijdragers!",
|
||||
"copy-info": "Kopieer info",
|
||||
"info-copied": "Info gekopieerd naar klembord",
|
||||
@@ -628,10 +677,14 @@
|
||||
"noctalia-title": "Noctalia-shell",
|
||||
"privacy-policy": "Privacybeleid",
|
||||
"support": "Steun ons",
|
||||
"supporter-badge": "Supporter",
|
||||
"supporters-desc": "Een enorme dank aan onze geweldige supporter!",
|
||||
"supporters-desc-plural": "Enorm bedankt aan onze <b>{count} geweldige</b> supporters!",
|
||||
"supporters-loading": "Donateurs laden...",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Schijf:",
|
||||
"system-gpu": "GPU:",
|
||||
"system-host": "Gastheer/Gastvrouw:",
|
||||
"system-host": "Host:",
|
||||
"system-install-hint": "Installeer fastfetch om systeeminformatie te bekijken",
|
||||
"system-kernel": "Kernel:",
|
||||
"system-loading": "Systeeminformatie laden...",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "Systeembreed volumeniveau.",
|
||||
"volumes-step-size-description": "Pas de stapgrootte voor volumewijzigingen aan (scrollwiel, sneltoetsen).",
|
||||
"volumes-step-size-label": "Volumestapgrootte",
|
||||
"volumes-volume-feedback-description": "Een feedbackgeluid afspelen bij het aanpassen van het volume",
|
||||
"volumes-volume-feedback-description": "Een feedbackgeluid afspelen bij het aanpassen van het volume.",
|
||||
"volumes-volume-feedback-label": "Volume feedback geluid afspelen",
|
||||
"volumes-volume-overdrive-description": "Sta toe dat het volume boven 100% wordt verhoogd. Mogelijk niet door alle hardware ondersteund.",
|
||||
"volumes-volume-overdrive-label": "Volume-overdrive toestaan"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "Tijd voordat de Bar verdwijnt nadat de muis deze verlaat.",
|
||||
"appearance-auto-hide-delay-label": "Verbergvertraging",
|
||||
"appearance-auto-hide-exclusive-note": "Opmerking: De exclusieve zone wordt automatisch uitgeschakeld wanneer automatisch verbergen actief is.",
|
||||
"appearance-auto-show-delay-description": "Tijd voordat de balk verschijnt wanneer de muis de rand bereikt.",
|
||||
"appearance-auto-show-delay-label": "Toonvertraging",
|
||||
"appearance-background-opacity-description": "Stel de achtergronddoorzichtigheid specifiek in voor de balk.",
|
||||
"appearance-background-opacity-label": "Balk achtergronddoorzichtigheid",
|
||||
"appearance-capsule-color-description": "Kies een kleur voor balkcapsules, of gebruik geen kleur voor de standaard oppervlaktekleur.",
|
||||
"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-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-frame-radius": "Binnenradius",
|
||||
"appearance-frame-settings-description": "Pas de kaderdikte en binnenste hoekradius aan",
|
||||
"appearance-frame-settings-label": "Kaderinstellingen",
|
||||
"appearance-frame-thickness": "Dikte",
|
||||
"appearance-hide-on-overview-description": "Verberg de balk en sluit panelen wanneer het compositoroverzicht actief is.",
|
||||
"appearance-hide-on-overview-label": "Balk verbergen in overzicht",
|
||||
"appearance-margins-description": "Pas de marges rond de zwevende balk aan.",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-label": "Capsules tonen",
|
||||
"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",
|
||||
"monitor-configure-widgets": "Widgets configureren",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "Kleurenschema's downloaden",
|
||||
"method-description": {
|
||||
"content": "Material Design-schema met high-fidelity kleurextractie die nauw aansluit bij de werkelijke kleuren van de broninhoud.",
|
||||
"dysfunctional": "Zoals Faithful, maar kiest de op één na meest dominante kleurenfamilie als primair.",
|
||||
"faithful": "Probeert dicht bij de bronkleur te blijven en tegelijkertijd een harmonieus palet te genereren.",
|
||||
"fruit-salad": "Material Design-schema dat een speels, levendig palet produceert met diverse en gevarieerde tinten.",
|
||||
"monochrome": "Material Design-schema met een grijswaarde met één tint en minimale chromatische inhoud.",
|
||||
@@ -866,6 +934,16 @@
|
||||
"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.",
|
||||
"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",
|
||||
"system-stat-layout-side": "Zijde",
|
||||
"system-stat-rounded-corners-description": "Afgeronde hoeken gebruiken voor de widget-achtergrond.",
|
||||
"system-stat-rounded-corners-label": "Afgeronde Hoeken",
|
||||
"system-stat-show-background-description": "Toon de achtergrondcontainer voor de systeemstatistieken-widget.",
|
||||
"system-stat-show-background-label": "Achtergrond weergeven",
|
||||
"system-stat-stat-type-description": "Kies welke systeemstatistiek weer te geven.",
|
||||
"system-stat-stat-type-label": "Statistiektype",
|
||||
"title": "Desktopwidgets",
|
||||
"weather-enabled-description": "Toon een weerwidget op het bureaublad.",
|
||||
"weather-enabled-label": "Weerwidget inschakelen",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "Monospace-lettertype zoeken...",
|
||||
"fonts-reset-scaling": "Schaling resetten",
|
||||
"fonts-title": "Lettertypes",
|
||||
"keybinds-description": "Globale navigatietoetsen voor panelen en de starter configureren.",
|
||||
"keybinds-down": "Naar beneden verplaatsen",
|
||||
"keybinds-enter": "Bevestigen / Actie",
|
||||
"keybinds-escape": "Sluiten / Terug",
|
||||
"keybinds-left": "Naar links verplaatsen",
|
||||
"keybinds-right": "Naar rechts verplaatsen",
|
||||
"keybinds-title": "Navigatietoetsencombinaties",
|
||||
"keybinds-up": "Omhoog verplaatsen",
|
||||
"language-desc": "Kies je voorkeurstaal voor de applicatie.",
|
||||
"language-select-auto-detect": "Automatisch",
|
||||
"language-select-description": "Selecteer de taal die in de interface van de applicatie wordt gebruikt.",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "Gebruik effen zwart in plaats van de achtergrondkleur van de balk.",
|
||||
"screen-corners-solid-black-label": "Effen zwarte hoeken",
|
||||
"screen-corners-title": "Schermhoeken",
|
||||
"settings-copied": "Instellingen gekopieerd naar klembord"
|
||||
"settings-copied": "Instellingen gekopieerd naar klembord",
|
||||
"tab-basics": "Basis",
|
||||
"tab-keybinds": "Toetsencombinaties"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• Commando's worden uitgevoerd via shell (sh -lc)<br>• Commando's draaien op de achtergrond (losgekoppeld)<br>• Testknoppen worden uitgevoerd met de huidige waarden",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "Klembordtekst omwikkelen",
|
||||
"settings-clipboard-history-description": "Toegang tot eerder gekopieerde items vanuit de launcher.",
|
||||
"settings-clipboard-history-label": "Klembordgeschiedenis inschakelen",
|
||||
"settings-clipboard-watch-image-description": "Volledige commandoreeks die aan wl-paste wordt doorgegeven voor afbeeldingswijzigingen (herstart vereist).",
|
||||
"settings-clipboard-watch-image-label": "Afbeelding Bewakingscommando",
|
||||
"settings-clipboard-watch-text-description": "Volledige commandoreeks die aan wl-paste wordt doorgegeven voor tekstwijzigingen (vereist herstart).",
|
||||
"settings-clipboard-watch-text-label": "Tekst volgcommando",
|
||||
"settings-custom-launch-prefix-description": "Voorzie commando's van een aangepaste launcher-prefix (bijv. 'runapp' voor systemd-integratie).",
|
||||
"settings-custom-launch-prefix-enabled-description": "Gebruik een aangepaste prefix om applicaties te starten in plaats van de standaardmethode.",
|
||||
"settings-custom-launch-prefix-enabled-label": "Aangepaste startprefix inschakelen",
|
||||
"settings-custom-launch-prefix-label": "Aangepaste startprefix",
|
||||
"settings-density-description": "Pas de grootte van applicatiepictogrammen en de dichtheid van de Launcher aan.",
|
||||
"settings-density-label": "Dichtheid",
|
||||
"settings-desc": "Pas het gedrag en uiterlijk van de launcher aan.",
|
||||
"settings-enable-settings-search-description": "Toon instellingen in de zoekresultaten van de Launcher.",
|
||||
"settings-enable-settings-search-label": "Instellingen zoeken inschakelen",
|
||||
"settings-enable-windows-search-description": "Actieve vensters zoeken en focussen.",
|
||||
"settings-enable-windows-search-label": "Vensterzoekfunctie inschakelen",
|
||||
"settings-grid-view-description": "Items in een raster weergeven in plaats van een lijst.",
|
||||
"settings-icon-mode-description": "Gebruik native systeemiconen in plaats van Tabler-iconen.",
|
||||
"settings-icon-mode-label": "Gebruik native iconen",
|
||||
"settings-ignore-mouse-input-description": "Schakel muisinteractie en scrollwiel uit in de launcher.",
|
||||
"settings-ignore-mouse-input-label": "Negeer muisinvoer",
|
||||
"settings-overlay-layer-description": "Toon de starter op de overlaylaag, boven vensters op volledig scherm. Indien ingeschakeld, wordt de starter niet aan de balk bevestigd.",
|
||||
"settings-overlay-layer-label": "Boven volledig scherm weergeven",
|
||||
"settings-position-description": "Kies waar het launcherpaneel verschijnt.",
|
||||
"settings-show-categories-description": "Categorieën-tabbladen weergeven voor het filteren van applicaties.",
|
||||
"settings-show-categories-label": "Categorieën weergeven",
|
||||
@@ -1050,6 +1148,8 @@
|
||||
"settings-terminal-command-label": "Terminalcommando",
|
||||
"settings-use-app2unit-description": "Gebruikt een alternatieve startmethode om app-processen beter te beheren en problemen te voorkomen.",
|
||||
"settings-use-app2unit-label": "App2Unit gebruiken om applicaties te starten",
|
||||
"settings-view-mode-description": "Kies de indeling voor de starter-items.",
|
||||
"settings-view-mode-label": "Weergavemodus",
|
||||
"title": "Launcher"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,7 +1166,7 @@
|
||||
"date-time-show-events-description": "Toon gebeurtenissen in het kalenderpaneel.",
|
||||
"date-time-show-events-label": "Kalendergebeurtenissen tonen",
|
||||
"date-time-title": "Datum & tijd",
|
||||
"date-time-use-analog-description": "Toon een analoge klok in het kalendervenster en op het vergrendelscherm.",
|
||||
"date-time-use-analog-description": "Toon een analoge klok op het kalendervenster.",
|
||||
"date-time-use-analog-label": "Analoge klok gebruiken",
|
||||
"date-time-week-numbers-description": "Toon het weeknummer van het jaar (bijv. week 38) in de kalender.",
|
||||
"date-time-week-numbers-label": "Weeknummers tonen",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "Weer in kalender weergeven"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "Wanneer fprintd (vingerafdrukauthenticatie) actief is, kunt u met deze optie nog steeds inloggen met uw wachtwoord in plaats van een vingerafdruk.",
|
||||
"allow-password-with-fprintd-label": "Wachtwoordlogin toestaan met fprintd",
|
||||
"auto-start-auth-description": "Start bijvoorbeeld automatisch de vingerafdrukauthenticatie zonder dat er een toetsaanslag of klik nodig is.",
|
||||
"auto-start-auth-label": "Automatische authenticatie bij opstarten",
|
||||
"clock-format-description": "Pas het klokformaat aan met datum-/tijd-syntaxtokens.",
|
||||
"clock-format-label": "Klokformaat",
|
||||
"clock-style-analog": "Analoog",
|
||||
"clock-style-custom": "Aangepast",
|
||||
"clock-style-description": "Kies de visuele stijl van de klok op het vergrendelscherm.",
|
||||
"clock-style-digital": "Digitaal",
|
||||
"clock-style-label": "Klokstijl",
|
||||
"compact-lockscreen-description": "Toon alleen de logininvoer en systeemknoppen, verberg weer- en mediawidgets.",
|
||||
"compact-lockscreen-label": "Compact vergrendelscherm",
|
||||
"lock-on-suspend-description": "Vergrendel het scherm automatisch wanneer het systeem wordt onderbroken.",
|
||||
"lock-on-suspend-label": "Vergrendelen bij onderbreken",
|
||||
"lock-screen-animations-description": "Vergrendelschermanimaties in- of uitschakelen.",
|
||||
"lock-screen-animations-label": "Vergrendelschermanimaties",
|
||||
"lock-screen-blur-strength-description": "Past een vervagingseffect toe op de achtergrond van het vergrendelscherm.",
|
||||
"lock-screen-blur-strength-label": "Sterkte van de vervaging van het vergrendelscherm",
|
||||
"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.",
|
||||
"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.",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "Lage urgentie opslaan in geschiedenis",
|
||||
"history-normal-urgency-description": "Meldingen met normale prioriteit opslaan in de geschiedenis.",
|
||||
"history-normal-urgency-label": "Normale urgentie opslaan in geschiedenis",
|
||||
"media-toast-description": "Een toast weergeven wanneer de afspeelstatus van media verandert.",
|
||||
"media-toast-label": "Media",
|
||||
"monitors-desc": "Meldingen op specifieke monitoren tonen. Standaard op alle als er geen zijn gekozen.",
|
||||
"settings-always-on-top-description": "Toon meldingen boven fullscreen-vensters en andere lagen.",
|
||||
"settings-background-opacity-description": "Pas de dekking van meldingsachtergronden aan.",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "Meldingsgeluiden niet beschikbaar",
|
||||
"sounds-volume-description": "Pas het volumeniveau aan voor meldingsgeluiden.",
|
||||
"sounds-volume-label": "Geluidsvolume",
|
||||
"toast-battery-description": "Toon een waarschuwing wanneer het accuniveau onder dit percentage zakt.",
|
||||
"toast-battery-label": "Accuwaarschuwing",
|
||||
"toast-desc": "Configureer het uiterlijk en gedrag van toasts.",
|
||||
"toast-keyboard-description": "Toon een toastmelding wanneer de toetsenbordindeling verandert.",
|
||||
"toast-keyboard-label": "Toetsenbordindeling"
|
||||
"toast-keyboard-label": "Toetsenbordindeling",
|
||||
"toast-media-description": "Een toast weergeven wanneer de afspeelstatus van media verandert.",
|
||||
"toast-media-label": "Media"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "Toon OSD boven fullscreen-vensters en andere lagen.",
|
||||
@@ -1202,16 +1322,20 @@
|
||||
"types-volume-label": "Uitvoervolume"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "Plugins automatisch bijwerken",
|
||||
"auto-update-description": "Update automatisch alle plugins wanneer de shell start.",
|
||||
"available-description": "Blader door en installeer plugins vanuit geconfigureerde bronnen.",
|
||||
"available-label": "Beschikbare plug-ins",
|
||||
"available-no-plugins-description": "Controleer je plugin-bronnen of vernieuw de lijst.",
|
||||
"available-no-plugins-label": "Geen plug-ins beschikbaar",
|
||||
"check-for-updates": "Controleren op updates",
|
||||
"checking-for-updates": "Controleren op updates...",
|
||||
"collision-already-installed": "Deze plugin is al geïnstalleerd",
|
||||
"collision-custom-version-exists": "Er is al een aangepaste versie van \"{source}\" geïnstalleerd",
|
||||
"collision-official-version-exists": "De officiële versie van deze plugin is al geïnstalleerd",
|
||||
"filter-downloaded": "Gedownload",
|
||||
"filter-not-downloaded": "Niet gedownload",
|
||||
"filter-tags-description": "Filter plug-ins op categorie of downloadstatus",
|
||||
"filter-tags-description": "Filter plug-ins op categorie of downloadstatus.",
|
||||
"filter-tags-label": "Tags",
|
||||
"hot-reload-description": "Laad plugins automatisch opnieuw wanneer hun bestanden veranderen. Handig voor plugin-ontwikkeling.",
|
||||
"hot-reload-label": "Hot reload (ontwikkelmodus)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "Mijn coole repository",
|
||||
"sources-remove-tooltip": "Pluginbron verwijderen",
|
||||
"title": "Plugins",
|
||||
"translations-reloaded": "Vertalingen opnieuw geladen: {name}",
|
||||
"uninstall-dialog-description": "Weet je zeker dat je {plugin} wilt verwijderen? Hiermee worden alle plugin-gegevens verwijderd.",
|
||||
"uninstall-dialog-title": "Plugin verwijderen",
|
||||
"uninstall-error": "Verwijderen mislukt: {error}",
|
||||
@@ -1271,11 +1396,14 @@
|
||||
"entries-desc": "Aanpassen welke energieacties in het sessiemenu verschijnen en in welke volgorde.",
|
||||
"entries-title": "Energieacties",
|
||||
"entry-settings-command-description": "Aangepast commando om uit te voeren voor deze actie. Laat leeg om het standaard systeemcommando te gebruiken.",
|
||||
"entry-settings-command-placeholder": "systemctl poweroff",
|
||||
"entry-settings-command-placeholder": "bijv. systemctl poweroff",
|
||||
"entry-settings-default-command-lock": "Intern vergrendelscherm (geen commando)",
|
||||
"entry-settings-default-command-logout": "Interne afmelding (geen commando)",
|
||||
"entry-settings-default-info-description": "Als er geen aangepast commando is opgegeven, wordt het standaard systeemcommando gebruikt.",
|
||||
"entry-settings-default-info-label": "Standaardopdracht",
|
||||
"entry-settings-keybind-description": "Wijs een toetscombinatie toe om deze actie te activeren wanneer het sessiemenu geopend is.",
|
||||
"entry-settings-keybind-placeholder": "Druk op Opnemen om een toets toe te wijzen...",
|
||||
"entry-settings-keybind-recording": "Opname... Druk op een willekeurige toetscombinatie",
|
||||
"entry-settings-title": "Configureer {entry}",
|
||||
"entry-settings-tooltip": "Configureer opdracht",
|
||||
"general-desc": "Configureer het gedrag en uiterlijk van het sessiemenupaneel.",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kritische kleur",
|
||||
"custom-highlight-colors-title-label": "Aangepaste markeerkleuren",
|
||||
"disk-available-label": "Beschikbare schijfruimte",
|
||||
"disk-section-label": "Schijfgebruik",
|
||||
"enable-dgpu-monitoring-description": "Waarschuwing: Dit zal uw dedicated GPU (NVIDIA/AMD) activeren, wat een aanzienlijke impact kan hebben op de accuduur van laptops met hybride grafische kaarten.",
|
||||
"enable-dgpu-monitoring-label": "Dedicated GPU-monitoring inschakelen",
|
||||
@@ -1323,7 +1452,7 @@
|
||||
"box-border-description": "Toon een omlijning rond inhoudsgebieden.",
|
||||
"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": "Container Radius",
|
||||
"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",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "Kies lay-out voor instellingen (mogelijk opnieuw openen vereist).",
|
||||
"settings-panel-mode-label": "Instellingenpaneelmodus",
|
||||
"shadows-description": "Schakelt slagschaduwen onder balken en panelen in.",
|
||||
"shadows-direction-description": "Kies vanaf waar de schaduw wordt geworpen.",
|
||||
"shadows-direction-description": "Kies waar de schaduw wordt geworpen.",
|
||||
"shadows-direction-label": "Richting van schaduw",
|
||||
"shadows-label": "Slagschaduwen",
|
||||
"title": "Gebruikersinterface",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "Stel een andere achtergrondmap in voor elke monitor.",
|
||||
"settings-monitor-specific-label": "Monitor-specifieke mappen",
|
||||
"settings-monitor-specific-tooltip": "Monitor-achtergrondmap",
|
||||
"settings-overview-blur-strength-description": "Past de vervagingssterkte toe op het overzicht.",
|
||||
"settings-overview-blur-strength-label": "Vervagingssterkte van het overzicht",
|
||||
"settings-overview-tint-description": "Past de tintsterkte toe op het overzicht.",
|
||||
"settings-overview-tint-label": "Overzichtstintsterkte",
|
||||
"settings-recursive-search-description": "Zoek ook naar achtergronden in submappen van de achtergrondmap.",
|
||||
"settings-recursive-search-label": "Submappen doorzoeken",
|
||||
"settings-select-monitor-folder": "Achtergrondmap voor monitor selecteren",
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "Klaar!",
|
||||
"appearance": {
|
||||
"subheader": "Kies Dark Mode en kleurbronnen (Wallpaper of vooraf gedefinieerd)."
|
||||
"subheader": "Kies donkere modus en kleurbronnen (achtergrond of voorgedefinieerd)."
|
||||
},
|
||||
"customize": {
|
||||
"header": "Pas je ervaring aan",
|
||||
@@ -1449,7 +1582,7 @@
|
||||
},
|
||||
"skip-setup": "Setup overslaan",
|
||||
"telemetry-wizard-done": "Begrepen!",
|
||||
"telemetry-wizard-note": "Je hebt de controle - schakel dit op elk moment in of uit in de Instellingen",
|
||||
"telemetry-wizard-note": "Je hebt de controle — schakel dit op elk moment in of uit in de instellingen",
|
||||
"telemetry-wizard-subtitle": "We hebben anonieme analyses toegevoegd om Noctalia te helpen verbeteren",
|
||||
"telemetry-wizard-title": "Privacy-update",
|
||||
"wallpaper": {
|
||||
@@ -1466,7 +1599,7 @@
|
||||
"select-prompt": "Selecteer hieronder een achtergrond",
|
||||
"subheader": "Zet de toon met een mooie achtergrond."
|
||||
},
|
||||
"welcome-note": "Een paar basisinstellingen om je op weg te helpen – alle opties vind je in instellingen",
|
||||
"welcome-note": "Een paar basisinstellingen om je op weg te helpen — alle opties vind je in instellingen",
|
||||
"welcome-subtitle": "Laten we uw bureaublad uniek maken",
|
||||
"welcome-title": "Welkom bij Noctalia!"
|
||||
},
|
||||
@@ -1490,7 +1623,7 @@
|
||||
"disk": "Schijf",
|
||||
"download-speed": "Downloadsnelheid",
|
||||
"gpu-temp": "GPU-temperatuur",
|
||||
"load-average": "Belasting Ø",
|
||||
"load-average": "Gem. belasting",
|
||||
"title": "Systeemmonitor",
|
||||
"upload-speed": "Uploadsnelheid"
|
||||
},
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "Vliegtuigmodus"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "Kritiek accuniveau",
|
||||
"critical-desc": "Accu is {percent}% — sluit de oplader onmiddellijk aan",
|
||||
"low": "Accu bijna leeg",
|
||||
"low-desc": "De accu is op {percent}%. Sluit de oplader aan"
|
||||
"low-desc": "Accu is op {percent}% — sluit de oplader aan"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adres gekopieerd naar klembord",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "Schijf",
|
||||
"fade": "Vervagen",
|
||||
"honeycomb": "Honingraat",
|
||||
"pixelate": "Pixeliseren",
|
||||
"stripes": "Strepen",
|
||||
"wipe": "Vegen"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "Achtergronden laden...",
|
||||
"no-results": "Geen achtergronden gevonden. Probeer een andere zoekopdracht.",
|
||||
"page": "{current} van {total}"
|
||||
"page": "{current} van {total}",
|
||||
"page-prefix": "Pagina",
|
||||
"page-suffix": "van {total}"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"actions": {
|
||||
"clear-history": "Tøm tidefar",
|
||||
"close-app": "Steng {app}",
|
||||
"connect-vpn": "Få samband med {name}",
|
||||
"cycle-visualizer": "Skift framsyning",
|
||||
"disable-bluetooth": "Slå av Blåtann",
|
||||
"disable-dnd": "Slå av \"Ikkje skjepla\"",
|
||||
"disable-wifi": "Slå av trådlaust net",
|
||||
"disconnect-vpn": "Enda samband med {name}",
|
||||
"enable-bluetooth": "Slå på Blåtann",
|
||||
"enable-dnd": "Slå på \"Ikkje skjepla\"",
|
||||
"enable-wifi": "Slå på trådlaust net",
|
||||
"launcher-settings": "Innstillingar for nøytendeveljar",
|
||||
"lower-to-bottom": "Send til botnar",
|
||||
"open-calendar": "Opna almanakka",
|
||||
"open-display-settings": "Syn innstillingar",
|
||||
"open-launcher": "Opna nøytendeveljar",
|
||||
"open-settings": "Opna innstillingar",
|
||||
"raise-to-top": "Send til toppen",
|
||||
"random-wallpaper": "Slumpebilæte",
|
||||
"run-custom-command": "Køyr sjølvgjort styrebod",
|
||||
"show-active-only": "Syn berre verksam",
|
||||
"show-all": "Syn alt",
|
||||
"toggle-mute": "Ljodsløkkjing på/av",
|
||||
"widget-settings": "Nøytelinnstillingar"
|
||||
},
|
||||
"authentication": {
|
||||
"error": "Sanningsmistak",
|
||||
"failed": "Sanningsmistak"
|
||||
},
|
||||
"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.",
|
||||
"show-app-icon-description": "Syn nøytendefråmerke attmed rutenamn.",
|
||||
"show-app-icon-label": "Syn nøytendefråmerke"
|
||||
},
|
||||
"audio-visualizer": {
|
||||
"color-name-description": "Kjos lìten på framsyningi.",
|
||||
"color-name-label": "Fyllelìt",
|
||||
"hide-when-idle-description": "Framsyningi løynest når dette er på, minder noko spelar av.",
|
||||
"hide-when-idle-label": "Løyn når ingen ting spelar av",
|
||||
"width-description": "Sjølvvald lutbreidd."
|
||||
},
|
||||
"battery": {
|
||||
"device-default": "Fyrevald syningsambod",
|
||||
"device-description": "Kjos batteriambod du vil syna fram.",
|
||||
"device-label": "Batteriambod",
|
||||
"display-mode-description": "Vel korleîs batteriet er synt fram på radi.",
|
||||
"display-mode-graphic": "Upplysande batteriteikn",
|
||||
"display-mode-graphic-clean": "Upplysande batteriteikn (ingen %)",
|
||||
"display-mode-icon-always": "Fråmerke - syn % stødt",
|
||||
"display-mode-icon-hover": "Fråmerke - syn ved sviv",
|
||||
"display-mode-icon-only": "Einast teikn",
|
||||
"hide-if-idle-description": "Løyn nøytelen når batteriet ikkje ladar og ikkje gjev straum.",
|
||||
"hide-if-idle-label": "Løyn når uverksam",
|
||||
"hide-if-not-detected-description": "Løyn nøytelen når kjernen ikkje finn eit batteri.",
|
||||
"hide-if-not-detected-label": "Løyn når ikkje funne",
|
||||
"low-battery-threshold-label": "Åtvaringstreskald for lågt batteri",
|
||||
"show-noctalia-performance-description": "Syn brjotaren for Ytestoda frå Noctalia i batterifjøli.<br>Slær av skuggar og bilætrørslor i Noctalia for å minka emnebruk.",
|
||||
"show-noctalia-performance-label": "Syn brjotaren for Ytestoda frå Noctalia",
|
||||
"show-power-profile-description": "Syn veljaren for straumhått i batterifjøli.",
|
||||
"show-power-profile-label": "Syn straumhåttstoli"
|
||||
},
|
||||
"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",
|
||||
"custom-font-description": "Kjos skriftkynd til klokka.",
|
||||
"custom-font-label": "Skriftkynd",
|
||||
"custom-font-placeholder": "Vel skriftkynd ...",
|
||||
"custom-font-search-placeholder": "Leita i skriftkynder ...",
|
||||
"horizontal-bar-description": "Råd: Du kann nytta \\n til å skifta til ny lina.",
|
||||
"horizontal-bar-label": "Vassbein rad",
|
||||
"preview": "Vis fyreåt",
|
||||
"tooltip-format-description": "Snidstreng for vitringi som kjem upp når du sviv yver klokka. Haldt tom for fyrevald vitring.",
|
||||
"tooltip-format-label": "Vitringssnid",
|
||||
"use-custom-font-description": "Sjå burt frå skriftkyndi elles og nytta ei onnor skriftkynd til klokka.",
|
||||
"use-custom-font-label": "Nytta onnor skriftkynd",
|
||||
"use-monospaced-font-description": "Klokka nyttar fastbreiddeskrift når dette er på.",
|
||||
"use-monospaced-font-label": "Nytta fastbreiddeskrift",
|
||||
"vertical-bar-description": "Skriv inn eit millomrom for å skifta kvar lut til ei ny lina.",
|
||||
"vertical-bar-label": "Loddbein rad"
|
||||
},
|
||||
"control-center": {
|
||||
"browse-file": "Leita etter fil",
|
||||
"browse-library": "Leita i samning",
|
||||
"color-selection-description": "Lita nøytelfråmerke med hamlitene.",
|
||||
"enable-colorization-description": "Lita merket til styreromet med hamlitene.",
|
||||
"icon-description": "Kjos fråmerke frå samningi eller ei onnor fil.",
|
||||
"select-custom-icon": "Kjos anna fråmerke",
|
||||
"use-distro-logo-description": "Nytta fråmerket til Linuxavbrigdet ditt helder en eit anna teikn.",
|
||||
"use-distro-logo-label": "Nytta avbrigdesfråmerke"
|
||||
},
|
||||
"custom-button": {
|
||||
"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.",
|
||||
"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",
|
||||
"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",
|
||||
"hide-mode-label": "Løyndarluna",
|
||||
"hide-mode-max-transparent": "Vidka heilt men klår",
|
||||
"icon-description": "Kjos fråmerke frå samningi.",
|
||||
"ipc-identifier-description": "Sermerke for IPC-styrebod. Nytta dette merket med 'qs -c noctalia-shell ipc call cb [gjerning] [merke]' for å styra knappen med IPC.",
|
||||
"ipc-identifier-label": "IPC-sermerke",
|
||||
"left-click-description": "Styrebod som køyrer ved vinstretrykk.",
|
||||
"left-click-label": "Vinstretrykk",
|
||||
"left-click-update-text": "Før upp ny tekst ved vinstretrykk",
|
||||
"max-text-length-horizontal-description": "Øvre grensa på teikn som kann synast på vassbein rad (0 for å løyna).",
|
||||
"max-text-length-horizontal-label": "Øvre grensa på tekstlengd (vassbein)",
|
||||
"max-text-length-vertical-description": "Øvre grensa på teikn som kann synast på loddbein rad (0 for å løyna).",
|
||||
"max-text-length-vertical-label": "Øvre grensa på tekstlengd (loddbein)",
|
||||
"middle-click-description": "Styrebod som køyrer ved midtrykk.",
|
||||
"middle-click-label": "Midtrykk",
|
||||
"middle-click-update-text": "Før upp ny tekst ved midtrykk",
|
||||
"parse-json-description": "Tyd utfall frå styrebodet som JSON-likam for å stjorna tekst og fråmerke kvikt.",
|
||||
"parse-json-label": "Tyd utfall som JSON",
|
||||
"refresh-interval-description": "Bil i millisekundar.",
|
||||
"refresh-interval-label": "Nykveikjingsbil",
|
||||
"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-icon-description": "Skifter um nøytelfråmerket er synlegt eller ikkje.",
|
||||
"show-icon-label": "Syn fråmerke",
|
||||
"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-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-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"
|
||||
},
|
||||
"keyboard-layout": {
|
||||
"show-icon-description": "Syn merket for knappefjøluppsett."
|
||||
},
|
||||
"lock-keys": {
|
||||
"hide-when-off-description": "Løyn sermerket når knappen ikkje er verksam.",
|
||||
"hide-when-off-label": "Løyn når av",
|
||||
"show-caps-lock-description": "Syn storlåshåtten",
|
||||
"show-caps-lock-label": "Storlås",
|
||||
"show-num-lock-description": "Syn tallåshåtten",
|
||||
"show-num-lock-label": "Tallås",
|
||||
"show-scroll-lock-description": "Syn bladlåshåtten",
|
||||
"show-scroll-lock-label": "Bladlås"
|
||||
},
|
||||
"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.",
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"select-color-description": "Lita med hamlitene for tyngd."
|
||||
}
|
||||
}
|
||||
+1818
-18
File diff suppressed because it is too large
Load Diff
+172
-33
@@ -48,11 +48,16 @@
|
||||
"device-default": "Domyślne (urządzenie wyświetlające)",
|
||||
"device-description": "Wybierz, które urządzenie baterii ma być wyświetlane.",
|
||||
"device-label": "Urządzenie baterii",
|
||||
"display-mode-description": "Wybierz, jak bateria jest wyświetlana na pasku.",
|
||||
"display-mode-graphic": "Graficzna bateria",
|
||||
"display-mode-graphic-clean": "Graficzna bateria (bez %)",
|
||||
"display-mode-icon-always": "Ikona - Zawsze pokazuj %",
|
||||
"display-mode-icon-hover": "Ikona - Pokaż po najechaniu",
|
||||
"display-mode-icon-only": "Tylko ikona",
|
||||
"hide-if-idle-description": "Ukryj widżet, gdy bateria nie jest ładowana ani rozładowywana.",
|
||||
"hide-if-idle-label": "Ukryj, gdy bezczynny",
|
||||
"hide-if-not-detected-description": "Ukryj widżet, gdy w systemie nie zostanie wykryta bateria.",
|
||||
"hide-if-not-detected-label": "Ukryj się, jeśli nie wykryto",
|
||||
"low-battery-threshold-description": "Pokaż ostrzeżenie, gdy poziom baterii spadnie poniżej tego procentu.",
|
||||
"low-battery-threshold-label": "Próg ostrzegania o niskim poziomie baterii",
|
||||
"show-noctalia-performance-description": "Wyświetl przełącznik trybu wydajności Noctalia w panelu baterii.<br>Wyłącza cienie i animacje w Noctalia, aby zmniejszyć zużycie zasobów.",
|
||||
"show-noctalia-performance-label": "Pokaż przełącznik wydajności Noctalia",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "Użyj niestandardowej czcionki",
|
||||
"use-monospaced-font-description": "Gdy włączone, zegar będzie używał czcionki o stałej szerokości.",
|
||||
"use-monospaced-font-label": "Użyj czcionki monospaced",
|
||||
"use-primary-color-description": "Gdy włączone, stosuje kolor podstawowy dla podkreślenia.",
|
||||
"use-primary-color-label": "Użyj koloru podstawowego",
|
||||
"vertical-bar-description": "Użyj spacji, aby oddzielić każdą część w nowej linii.",
|
||||
"vertical-bar-label": "Pasek pionowy"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"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.",
|
||||
"color-selection-label": "Wybierz kolor",
|
||||
"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.",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "Ukryj ikonę powiadomień, gdy nie ma nieprzeczytanych powiadomień.",
|
||||
"hide-widget-when-zero-unread-label": "Ukryj ikonę bez nieprzeczytanych",
|
||||
"show-unread-badge-description": "Wyświetl plakietkę z liczbą nieprzeczytanych powiadomień.",
|
||||
"show-unread-badge-label": "Pokaż plakietkę nieprzeczytanych"
|
||||
"show-unread-badge-label": "Pokaż plakietkę nieprzeczytanych",
|
||||
"unread-badge-color-description": "Wybierz kolor dla plakietki nieprzeczytanych powiadomień.",
|
||||
"unread-badge-color-label": "Kolor plakietki nieprzeczytanych"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "Wybierz widżet do dodania...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "Wyświetlaj statystyki jako mini wykresy słupkowe zamiast wartości tekstowych. Zapobiega przesunięciom układu.",
|
||||
"compact-mode-label": "Tryb kompaktowy",
|
||||
"cpu-frequency-description": "Wyświetl aktualną prędkość zegara CPU w GHz.",
|
||||
"cpu-frequency-label": "Pokaż częstotliwość CPU",
|
||||
"cpu-temperature-description": "Pokaż odczyty temperatury procesora (jeśli dostępne).",
|
||||
"cpu-temperature-label": "Temperatura CPU",
|
||||
"cpu-usage-description": "Wyświetl aktualne użycie procesora w procentach.",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "Użycie pamięci",
|
||||
"network-traffic-description": "Wyświetl prędkość wysyłania i pobierania danych w sieci.",
|
||||
"network-traffic-label": "Ruch sieciowy",
|
||||
"storage-as-percentage-description": "Wyświetlaj miejsce na dysku jako procent zamiast wartości bezwzględnych.",
|
||||
"storage-as-percentage-label": "Dysk jako procent",
|
||||
"storage-available-description": "Pokazuje, ile miejsca na dysku jest dostępne, zamiast ile jest używane.",
|
||||
"storage-available-label": "Dostępne miejsce na dysku",
|
||||
"storage-usage-description": "Pokaż informacje o użyciu miejsca na dysku.",
|
||||
"storage-usage-label": "Użycie dysku",
|
||||
"swap-usage-description": "Pokaż użycie pamięci wymiany.",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "Resetuj szerokość tytułu"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "Zastosuj kolory motywu do ikony strzałki szuflady.",
|
||||
"chevron-color-label": "Kolor strzałki",
|
||||
"colorize-icons-description": "Zastosuj kolory motywu do ikon zasobnika.",
|
||||
"colorize-icons-label": "Koloryzuj ikony",
|
||||
"drawer-enabled-description": "Gdy włączone, nieprzypięte elementy zasobnika są pokazywane w panelu szuflady.<br>Gdy wyłączone, wszystkie elementy są pokazywane w linii.",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "Ukryj pasywne elementy"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "Wybierz sposób wyświetlania tej wartości.",
|
||||
"display-mode-label": "Tryb wyświetlania"
|
||||
"display-mode-description": "Wybierz sposób wyświetlania tej wartości."
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "Liczba znaków do wyświetlenia z nazw obszarów roboczych (1-10).",
|
||||
"character-count-label": "Liczba znaków",
|
||||
"empty-color-description": "Ustaw kolor tła dla pustych Workspaceów.",
|
||||
"empty-color-label": "Kolor pustego obszaru roboczego",
|
||||
"enable-scrollwheel-description": "Przełączaj między obszarami roboczymi za pomocą kółka myszy.",
|
||||
"enable-scrollwheel-label": "Przewiń, aby przełączyć obszary",
|
||||
"focused-color-description": "Ustaw kolor tła dla aktywnego Workspace.",
|
||||
"focused-color-label": "Kolor aktywnego obszaru roboczego",
|
||||
"follow-focused-screen-description": "Wyświetl obszary robocze z aktualnie aktywnego ekranu, zamiast ekranu, na którym znajduje się pasek.",
|
||||
"follow-focused-screen-label": "Podążaj za skupionym ekranem",
|
||||
"grouped-border-opacity-description": "Ustaw poziom krycia dla obramowań kontenerów obszaru roboczego.",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "Ukryj nieobsadzone",
|
||||
"label-mode-description": "Wybierz sposób wyświetlania etykiet obszarów roboczych.",
|
||||
"label-mode-label": "Tryb etykiet",
|
||||
"occupied-color-description": "Ustaw kolor tła dla zajętych Workspace'ów.",
|
||||
"occupied-color-label": "Kolor zajętego obszaru roboczego",
|
||||
"pill-size-description": "Dostosuj rozmiar pigułek obszaru roboczego (50%-100%).",
|
||||
"pill-size-label": "Rozmiar pigułki",
|
||||
"reverse-scrolling-description": "Odwróć kierunek przełączania obszarów roboczych podczas przewijania.",
|
||||
"reverse-scrolling-label": "Odwróć przewijanie",
|
||||
"show-applications-description": "Wyświetl ikony aplikacji wewnątrz każdego obszaru roboczego.",
|
||||
"show-applications-label": "Pokaż aplikacje",
|
||||
"show-badge-description": "Pokaż plakietkę z numerem obszaru roboczego w trybie grupowym.",
|
||||
"show-badge-label": "Pokaż odznakę obszaru roboczego",
|
||||
"show-labels-only-when-occupied-description": "Pokazuj etykiety obszarów roboczych tylko wtedy, gdy zawierają okna.",
|
||||
"show-labels-only-when-occupied-label": "Pokaż etykiety tylko gdy obsadzone",
|
||||
"unfocused-icons-opacity-description": "Ustaw poziom przezroczystości dla ikon nieaktywnych aplikacji.",
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "Nowa instalacja"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "Błąd",
|
||||
"on-surface": "Na powierzchni",
|
||||
"primary": "Podstawowy",
|
||||
"secondary": "Wtórny",
|
||||
"tertiary": "Trzeciorzędowy"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Akcje",
|
||||
"add": "Dodaj",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "Rozłącz",
|
||||
"disconnected": "Rozłączone",
|
||||
"disconnecting": "Rozłączanie...",
|
||||
"display-mode": "Tryb wyświetlania",
|
||||
"download": "Pobierz",
|
||||
"duration": "Czas trwania",
|
||||
"dysfunctional": "Dysfunkcyjny",
|
||||
"edit": "Edytuj",
|
||||
"enabled": "Włączone",
|
||||
"error": "Błąd",
|
||||
"events": "Wydarzenia",
|
||||
"execute": "Wykonaj",
|
||||
"faithful": "Wierny",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "Zainstalowano",
|
||||
"interface": "Interfejs",
|
||||
"internet": "Internet",
|
||||
"keybind": "Skrót klawiszowy",
|
||||
"language": "Język",
|
||||
"loading": "Ładowanie...",
|
||||
"local": "Lokalny",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "Nie znaleziono",
|
||||
"notifications": "Powiadomienia",
|
||||
"official": "Oficjalne",
|
||||
"on-surface": "Na powierzchni",
|
||||
"output": "Wyjście",
|
||||
"pair": "Paruj",
|
||||
"paired": "Sparowane",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "Odpytywanie",
|
||||
"position": "Pozycja",
|
||||
"previous": "Poprzedni",
|
||||
"primary": "Podstawowy",
|
||||
"random": "Losowy",
|
||||
"reboot": "Restart",
|
||||
"record": "Rozpocznij nagrywanie",
|
||||
"refresh": "Odśwież",
|
||||
"required": "(wymagane)",
|
||||
"reset": "Zresetuj",
|
||||
"reset-to-default": "Przywróć do Domyślnych",
|
||||
"result-count": "{count} wynik",
|
||||
"result-count-plural": "{count} wyniki",
|
||||
"resume": "Wznów",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "Skanowanie...",
|
||||
"screen-corners": "Narożniki ekranu",
|
||||
"search": "Szukaj",
|
||||
"secondary": "Dodatkowy",
|
||||
"security": "Bezpieczeństwo",
|
||||
"select": "Wybierz",
|
||||
"select-color": "Wybierz kolor",
|
||||
"select-color-description": "Zastosuj kolory motywu dla podkreślenia.",
|
||||
"select-icon-color": "Wybierz kolor ikony",
|
||||
"shortcuts": "Skróty",
|
||||
"shutdown": "Wyłącz",
|
||||
"signal": "Sygnał",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "Źródła",
|
||||
"start": "Start",
|
||||
"stop": "Stop",
|
||||
"supporters": "Wspierający",
|
||||
"suspend": "Wstrzymaj",
|
||||
"templates": "Szablony",
|
||||
"tertiary": "Trzeciorzędowy",
|
||||
"test": "Test",
|
||||
"thresholds": "Progi",
|
||||
"title": "Tytuł",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "Tydzień",
|
||||
"widgets": "Widżety",
|
||||
"width": "Szerokość",
|
||||
"windows": "Okna",
|
||||
"yes": "Tak"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "Po najechaniu kursorem"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "Automatyczne ukrywanie",
|
||||
"hidden": "Ukryj, gdy puste",
|
||||
"idle": "Ukryj, gdy bezczynny",
|
||||
"non-exclusive": "Niewyłączny",
|
||||
"transparent": "Przezroczysty, gdy pusty",
|
||||
"visible": "Zawsze widoczny"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "Ładowanie emoji...",
|
||||
"emoji-loading-description": "Proszę czekać",
|
||||
"emoji-no-recent": "Brak ostatnich emoji",
|
||||
"emoji-search-description": "Szukaj i kopiuj emoji"
|
||||
"emoji-search-description": "Szukaj i kopiuj emoji",
|
||||
"settings-search-description": "Szukaj i przejdź do ustawień",
|
||||
"windows-search-description": "Wyszukaj i aktywuj otwarte okna"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "Kompaktowy",
|
||||
"density-default": "Domyślny",
|
||||
"density-mini": "Mini",
|
||||
"density-spacious": "Przestronny"
|
||||
"density-spacious": "Przestronny",
|
||||
"display-mode-always-visible": "Zawsze widoczne",
|
||||
"type-floating": "Pływający",
|
||||
"type-framed": "Obramowany",
|
||||
"type-simple": "Prosty"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "Klasyczny",
|
||||
"quick-settings-style-modern": "Nowoczesny"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "Komfortowy",
|
||||
"compact": "Kompaktowy",
|
||||
"default": "Domyślny"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "Siatka",
|
||||
"list": "Lista"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "Zawsze przewijaj",
|
||||
"hover": "Przewijaj po najechaniu",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "Zostań wspierającym",
|
||||
"changelog": "Zobacz dziennik zmian",
|
||||
"contributors-desc": "Podziękowania dla naszego {count} <b>niesamowitego</b> współtwórcy!",
|
||||
"contributors-description": "Podziękowania dla naszego {count} <b>niesamowitego</b> współtwórcy!",
|
||||
"contributors-description-plural": "Podziękowania dla naszych {count} <b>niesamowitych</b> współtwórców!",
|
||||
"copy-info": "Kopiuj informacje",
|
||||
"info-copied": "Informacje skopiowane do schowka",
|
||||
@@ -628,6 +677,10 @@
|
||||
"noctalia-title": "Noctalia shell",
|
||||
"privacy-policy": "Polityka prywatności",
|
||||
"support": "Wesprzyj nas",
|
||||
"supporter-badge": "Wspierający",
|
||||
"supporters-desc": "Ogromne podziękowania dla naszego wspaniałego wspierającego!",
|
||||
"supporters-desc-plural": "Ogromne podziękowania dla naszych <b>{count} wspaniałych</b> wspierających!",
|
||||
"supporters-loading": "Ładowanie wspierających...",
|
||||
"system-cpu": "Procesor:",
|
||||
"system-disk": "Dysk:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -636,7 +689,7 @@
|
||||
"system-kernel": "Jądro:",
|
||||
"system-loading": "Ładowanie informacji o systemie...",
|
||||
"system-memory": "Pamięć:",
|
||||
"system-monitor": "Monitor: Monitor",
|
||||
"system-monitor": "Monitor:",
|
||||
"system-not-installed": "fastfetch nie jest zainstalowany",
|
||||
"system-os": "System operacyjny:",
|
||||
"system-packages": "Paczki:",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "Poziom głośności całego systemu.",
|
||||
"volumes-step-size-description": "Dostosuj skok zmiany głośności (kółko myszy, skróty klawiszowe).",
|
||||
"volumes-step-size-label": "Skok głośności",
|
||||
"volumes-volume-feedback-description": "Odtwarzaj dźwięk zwrotny podczas regulacji głośności",
|
||||
"volumes-volume-feedback-description": "Odtwarzaj dźwięk zwrotny podczas regulacji głośności.",
|
||||
"volumes-volume-feedback-label": "Odtwórz dźwięk sprzężenia zwrotnego głośności",
|
||||
"volumes-volume-overdrive-description": "Pozwól na zwiększenie głośności powyżej 100%. Może nie być obsługiwane przez każdy sprzęt.",
|
||||
"volumes-volume-overdrive-label": "Zezwalaj na wzmocnienie głośności (overdrive)"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "Czas, po którym Bar zniknie po opuszczeniu go przez mysz.",
|
||||
"appearance-auto-hide-delay-label": "Opóźnienie ukrywania",
|
||||
"appearance-auto-hide-exclusive-note": "Uwaga: Strefa wyłączna jest automatycznie wyłączana, gdy autoukrywanie jest aktywne.",
|
||||
"appearance-auto-show-delay-description": "Czas, zanim pasek pojawi się, gdy mysz wejdzie na krawędź.",
|
||||
"appearance-auto-show-delay-label": "Opóźnienie Wyświetlania",
|
||||
"appearance-background-opacity-description": "Ustaw przezroczystość tła konkretnie dla paska.",
|
||||
"appearance-background-opacity-label": "Krycie tła paska",
|
||||
"appearance-capsule-color-description": "Wybierz kolor dla kapsuł paska, lub nie używaj żadnego dla domyślnego koloru powierzchni.",
|
||||
"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-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-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",
|
||||
"appearance-frame-thickness": "Grubość",
|
||||
"appearance-hide-on-overview-description": "Ukryj pasek i zamknij panele, gdy aktywny jest przegląd kompozytora.",
|
||||
"appearance-hide-on-overview-label": "Ukryj pasek w przeglądzie",
|
||||
"appearance-margins-description": "Dostosuj marginesy wokół pływającego paska.",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-label": "Pokaż kapsułę",
|
||||
"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",
|
||||
"monitor-configure-widgets": "Skonfiguruj widżety",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "Pobierz schematy kolorów",
|
||||
"method-description": {
|
||||
"content": "Schemat Material Design z ekstrakcją kolorów o wysokiej wierności, która ściśle odpowiada rzeczywistym kolorom treści źródłowej.",
|
||||
"dysfunctional": "Jak Faithful, ale wybiera drugą najbardziej dominującą rodzinę kolorów jako główną.",
|
||||
"faithful": "Próbuje pozostać blisko koloru źródłowego, jednocześnie generując harmonijną paletę.",
|
||||
"fruit-salad": "Schemat Material Design, który tworzy radosną, żywą paletę z różnorodnymi odcieniami.",
|
||||
"monochrome": "Schemat Material Design wykorzystujący jednobarwną skalę szarości z minimalną zawartością chromatyczną.",
|
||||
@@ -866,6 +934,16 @@
|
||||
"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.",
|
||||
"system-stat-layout-bottom": "Dół",
|
||||
"system-stat-layout-description": "Wybierz, jak legenda jest wyświetlana względem wykresu.",
|
||||
"system-stat-layout-label": "Układ",
|
||||
"system-stat-layout-side": "Strona",
|
||||
"system-stat-rounded-corners-description": "Użyj zaokrąglonych rogów dla tła widżetu.",
|
||||
"system-stat-rounded-corners-label": "Zaokrąglone Narożniki",
|
||||
"system-stat-show-background-description": "Pokaż kontener tła dla widżetu statystyk systemowych.",
|
||||
"system-stat-show-background-label": "Pokaż tło",
|
||||
"system-stat-stat-type-description": "Wybierz, którą statystykę systemową wyświetlić.",
|
||||
"system-stat-stat-type-label": "Typ Statystyki",
|
||||
"title": "Widżety pulpitu",
|
||||
"weather-enabled-description": "Pokaż widżet pogody na pulpicie.",
|
||||
"weather-enabled-label": "Włącz widżet pogody",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "Szukaj czcionki monospace...",
|
||||
"fonts-reset-scaling": "Resetuj skalowanie",
|
||||
"fonts-title": "Czcionki",
|
||||
"keybinds-description": "Skonfiguruj globalne klawisze nawigacyjne dla paneli i launchera.",
|
||||
"keybinds-down": "Przenieś w dół",
|
||||
"keybinds-enter": "Potwierdź / Akcja",
|
||||
"keybinds-escape": "Zamknij / Wstecz",
|
||||
"keybinds-left": "Przesuń w lewo",
|
||||
"keybinds-right": "Przesuń w prawo",
|
||||
"keybinds-title": "Skróty Klawiszowe Nawigacji",
|
||||
"keybinds-up": "Przenieś w górę",
|
||||
"language-desc": "Wybierz preferowany język aplikacji.",
|
||||
"language-select-auto-detect": "Automatyczny",
|
||||
"language-select-description": "Wybierz język używany w interfejsie aplikacji.",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "Użyj jednolitej czerni zamiast koloru tła paska.",
|
||||
"screen-corners-solid-black-label": "Jednolicie czarne narożniki",
|
||||
"screen-corners-title": "Narożniki ekranu",
|
||||
"settings-copied": "Ustawienia skopiowane do schowka"
|
||||
"settings-copied": "Ustawienia skopiowane do schowka",
|
||||
"tab-basics": "Podstawy",
|
||||
"tab-keybinds": "Skróty Klawiszowe"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• Polecenia są wykonywane przez powłokę (sh -lc)<br>• Polecenia działają w tle (detached)<br>• Przyciski testowe wykonują się z aktualnymi wartościami",
|
||||
@@ -983,10 +1071,10 @@
|
||||
"noctalia-started-placeholder": "np. notify-send 'Noctalia załadowany'",
|
||||
"performance-mode-disabled-description": "Komenda do wykonania, gdy tryb wydajności Noctalia zostanie wyłączony.",
|
||||
"performance-mode-disabled-label": "Tryb wydajności wyłączony",
|
||||
"performance-mode-disabled-placeholder": "notify-send \"Wydajność\" \"Tryb wyłączony\"",
|
||||
"performance-mode-disabled-placeholder": "np. notify-send \"Wydajność\" \"Tryb wyłączony\"",
|
||||
"performance-mode-enabled-description": "Komenda do wykonania, gdy tryb wydajności Noctalia jest włączony.",
|
||||
"performance-mode-enabled-label": "Tryb wydajności włączony",
|
||||
"performance-mode-enabled-placeholder": "notify-send \"Wydajność\" \"Tryb włączony\"",
|
||||
"performance-mode-enabled-placeholder": "np. notify-send \"Wydajność\" \"Tryb włączony\"",
|
||||
"screen-lock-description": "Polecenie do wykonania, gdy ekran zostanie zablokowany.",
|
||||
"screen-lock-label": "Ekran zablokowany",
|
||||
"screen-lock-placeholder": "np. notify-send \"Ekran\" \"Zablokowany\"",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "Zawijaj tekst ze schowka",
|
||||
"settings-clipboard-history-description": "Dostęp do wcześniej skopiowanych elementów z poziomu launchera.",
|
||||
"settings-clipboard-history-label": "Włącz historię schowka",
|
||||
"settings-clipboard-watch-image-description": "Pełny ciąg poleceń przekazywany do wl-paste dla zmian obrazu (wymaga ponownego uruchomienia).",
|
||||
"settings-clipboard-watch-image-label": "Polecenie Monitorowania Obrazów",
|
||||
"settings-clipboard-watch-text-description": "Pełny ciąg poleceń przekazywany do wl-paste dla zmian tekstu (wymaga ponownego uruchomienia).",
|
||||
"settings-clipboard-watch-text-label": "Polecenie monitorowania tekstu",
|
||||
"settings-custom-launch-prefix-description": "Poprzedzaj polecenia własnym prefiksem (np. 'runapp' dla integracji z systemd).",
|
||||
"settings-custom-launch-prefix-enabled-description": "Używaj własnego prefiksu do uruchamiania aplikacji zamiast metody domyślnej.",
|
||||
"settings-custom-launch-prefix-enabled-label": "Włącz własny prefiks",
|
||||
"settings-custom-launch-prefix-label": "Własny prefiks uruchamiania",
|
||||
"settings-density-description": "Dostosuj rozmiar ikon aplikacji i gęstość Launchera.",
|
||||
"settings-density-label": "Gęstość",
|
||||
"settings-desc": "Dostosuj zachowanie i wygląd launchera.",
|
||||
"settings-enable-settings-search-description": "Wyświetlaj wyniki ustawień podczas wyszukiwania w Launcherze.",
|
||||
"settings-enable-settings-search-label": "Włącz wyszukiwanie w ustawieniach",
|
||||
"settings-enable-windows-search-description": "Wyszukaj i skup aktywne okna.",
|
||||
"settings-enable-windows-search-label": "Włącz wyszukiwanie okien",
|
||||
"settings-grid-view-description": "Wyświetlaj elementy w układzie siatki zamiast listy.",
|
||||
"settings-icon-mode-description": "Używaj natywnych ikon systemowych zamiast ikon Tabler.",
|
||||
"settings-icon-mode-label": "Używaj natywnych ikon",
|
||||
"settings-ignore-mouse-input-description": "Wyłącz interakcję myszy i kółko przewijania w launcherze.",
|
||||
"settings-ignore-mouse-input-label": "Ignoruj dane wejściowe myszy",
|
||||
"settings-overlay-layer-description": "Wyświetl program uruchamiający na warstwie nakładki, nad oknami pełnoekranowymi. Po włączeniu program uruchamiający nie zostanie przypięty do paska.",
|
||||
"settings-overlay-layer-label": "Pokaż nad pełnym ekranem",
|
||||
"settings-position-description": "Wybierz, gdzie pojawia się panel launchera.",
|
||||
"settings-show-categories-description": "Pokaż karty kategorii do filtrowania aplikacji.",
|
||||
"settings-show-categories-label": "Pokaż kategorie",
|
||||
@@ -1050,6 +1148,8 @@
|
||||
"settings-terminal-command-label": "Polecenie terminala",
|
||||
"settings-use-app2unit-description": "Używa alternatywnej metody uruchamiania, aby lepiej zarządzać procesami i zapobiegać problemom.",
|
||||
"settings-use-app2unit-label": "Użyj App2Unit do uruchamiania aplikacji",
|
||||
"settings-view-mode-description": "Wybierz układ dla wpisów programu uruchamiającego.",
|
||||
"settings-view-mode-label": "Tryb widoku",
|
||||
"title": "Launcher"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,7 +1166,7 @@
|
||||
"date-time-show-events-description": "Wyświetlaj wydarzenia w panelu kalendarza.",
|
||||
"date-time-show-events-label": "Pokaż wydarzenia kalendarza",
|
||||
"date-time-title": "Data i czas",
|
||||
"date-time-use-analog-description": "Pokaż zegar analogowy w oknie kalendarza i na ekranie blokady.",
|
||||
"date-time-use-analog-description": "Pokaż zegar w stylu analogowym w oknie kalendarza.",
|
||||
"date-time-use-analog-label": "Użyj zegara analogowego",
|
||||
"date-time-week-numbers-description": "Wyświetlaj numer tygodnia w roku (np. tydzień 38) w kalendarzu.",
|
||||
"date-time-week-numbers-label": "Pokaż numery tygodni",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "Wyświetlaj pogodę w kalendarzu"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "Gdy fprintd (uwierzytelnianie odciskiem palca) jest aktywne, ta opcja pozwala nadal logować się za pomocą hasła zamiast odcisku palca.",
|
||||
"allow-password-with-fprintd-label": "Zezwól na logowanie hasłem za pomocą fprintd",
|
||||
"auto-start-auth-description": "Automatycznie uruchamia uwierzytelnianie odciskiem palca bez konieczności naciskania klawisza lub klikania przycisku.",
|
||||
"auto-start-auth-label": "Automatyczne uruchamianie uwierzytelniania",
|
||||
"clock-format-description": "Dostosuj format zegara, używając tokenów składni daty/czasu.",
|
||||
"clock-format-label": "Format zegara",
|
||||
"clock-style-analog": "Analogowy",
|
||||
"clock-style-custom": "Niestandardowy",
|
||||
"clock-style-description": "Wybierz styl wizualny zegara na ekranie blokady.",
|
||||
"clock-style-digital": "Cyfrowy",
|
||||
"clock-style-label": "Styl Zegara",
|
||||
"compact-lockscreen-description": "Pokaż tylko logowanie i kontrolki systemowe, ukrywając widżety pogody i mediów.",
|
||||
"compact-lockscreen-label": "Kompaktowy ekran blokady",
|
||||
"lock-on-suspend-description": "Automatycznie blokuj ekran podczas uśpienia systemu.",
|
||||
"lock-on-suspend-label": "Blokuj przy uśpieniu",
|
||||
"lock-screen-animations-description": "Włącz lub wyłącz animacje ekranu blokady.",
|
||||
"lock-screen-animations-label": "Animacje Ekranu Blokady",
|
||||
"lock-screen-blur-strength-description": "Stosuje efekt rozmycia do tapety ekranu blokady.",
|
||||
"lock-screen-blur-strength-label": "Siła rozmycia ekranu blokady",
|
||||
"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.",
|
||||
"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.",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "Odeślij niską pilność do historii",
|
||||
"history-normal-urgency-description": "Zapisuj powiadomienia o normalnym priorytecie w historii.",
|
||||
"history-normal-urgency-label": "Zapisz normalny priorytet do historii",
|
||||
"media-toast-description": "Wyświetl toast, gdy zmieni się stan odtwarzania multimediów.",
|
||||
"media-toast-label": "Media",
|
||||
"monitors-desc": "Pokazuj powiadomienia na konkretnych monitorach. Domyślnie na wszystkich.",
|
||||
"settings-always-on-top-description": "Wyświetlaj powiadomienia nad oknami pełnoekranowymi i innymi warstwami.",
|
||||
"settings-background-opacity-description": "Dostosuj przezroczystość tła powiadomień.",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "Dźwięki powiadomień niedostępne",
|
||||
"sounds-volume-description": "Dostosuj poziom głośności dźwięków powiadomień.",
|
||||
"sounds-volume-label": "Głośność dźwięku",
|
||||
"toast-battery-description": "Wyświetl ostrzeżenie, gdy poziom baterii spadnie poniżej tego procentu.",
|
||||
"toast-battery-label": "Ostrzeżenie o baterii",
|
||||
"toast-desc": "Konfiguruj wygląd i zachowanie dymków powiadomień.",
|
||||
"toast-keyboard-description": "Pokaż dymek (toast), gdy zmieni się układ klawiatury.",
|
||||
"toast-keyboard-label": "Układ klawiatury"
|
||||
"toast-keyboard-label": "Układ klawiatury",
|
||||
"toast-media-description": "Wyświetl toast, gdy zmieni się stan odtwarzania multimediów.",
|
||||
"toast-media-label": "Media"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "Wyświetlaj OSD nad oknami pełnoekranowymi i innymi warstwami.",
|
||||
@@ -1202,16 +1322,20 @@
|
||||
"types-volume-label": "Głośność wyjściowa"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "Automatyczna aktualizacja wtyczek",
|
||||
"auto-update-description": "Automatycznie aktualizuj wszystkie wtyczki po uruchomieniu shella.",
|
||||
"available-description": "Przeglądaj i instaluj wtyczki ze skonfigurowanych źródeł.",
|
||||
"available-label": "Dostępne wtyczki",
|
||||
"available-no-plugins-description": "Sprawdź źródła wtyczek lub odśwież listę.",
|
||||
"available-no-plugins-label": "Brak dostępnych wtyczek",
|
||||
"check-for-updates": "Sprawdź aktualizacje",
|
||||
"checking-for-updates": "Sprawdzanie aktualizacji...",
|
||||
"collision-already-installed": "Ta wtyczka jest już zainstalowana",
|
||||
"collision-custom-version-exists": "Niestandardowa wersja z \"{source}\" jest już zainstalowana",
|
||||
"collision-official-version-exists": "Oficjalna wersja tej wtyczki jest już zainstalowana",
|
||||
"filter-downloaded": "Pobrane",
|
||||
"filter-not-downloaded": "Niepobrane",
|
||||
"filter-tags-description": "Filtruj wtyczki według kategorii lub statusu pobierania",
|
||||
"filter-tags-description": "Filtruj wtyczki według kategorii lub statusu pobierania.",
|
||||
"filter-tags-label": "Tagi",
|
||||
"hot-reload-description": "Automatycznie przeładuj wtyczki przy zmianie ich plików. Przydatne przy tworzeniu wtyczek.",
|
||||
"hot-reload-label": "Gorące przeładowanie (tryb deweloperski)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "Moje fajne repozytorium",
|
||||
"sources-remove-tooltip": "Usuń źródło wtyczek",
|
||||
"title": "Wtyczki",
|
||||
"translations-reloaded": "Przeładowano tłumaczenia: {name}",
|
||||
"uninstall-dialog-description": "Czy na pewno chcesz odinstalować {plugin}? Spowoduje to usunięcie wszystkich danych wtyczki.",
|
||||
"uninstall-dialog-title": "Odinstaluj wtyczkę",
|
||||
"uninstall-error": "Błąd odinstalowywania: {error}",
|
||||
@@ -1276,6 +1401,9 @@
|
||||
"entry-settings-default-command-logout": "Wewnętrzne wylogowanie (brak polecenia)",
|
||||
"entry-settings-default-info-description": "Jeśli nie podano własnego polecenia, zostanie użyte domyślne polecenie systemowe.",
|
||||
"entry-settings-default-info-label": "Domyślne polecenie",
|
||||
"entry-settings-keybind-description": "Przypisz kombinację klawiszy, aby wywołać tę akcję, gdy menu sesji jest otwarte.",
|
||||
"entry-settings-keybind-placeholder": "Naciśnij Nagraj, aby przypisać klawisz...",
|
||||
"entry-settings-keybind-recording": "Nagrywanie... Naciśnij dowolną kombinację klawiszy",
|
||||
"entry-settings-title": "Konfiguruj {entry}",
|
||||
"entry-settings-tooltip": "Konfiguruj polecenie",
|
||||
"general-desc": "Konfiguruj zachowanie i wygląd panelu menu sesji.",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kolor krytyczny",
|
||||
"custom-highlight-colors-title-label": "Własne kolory podświetlenia",
|
||||
"disk-available-label": "Dostępne miejsce na dysku",
|
||||
"disk-section-label": "Użycie dysku",
|
||||
"enable-dgpu-monitoring-description": "Ostrzeżenie: To obudzi twoją dedykowaną kartę graficzną (NVIDIA/AMD), co może znacząco wpłynąć na żywotność baterii w laptopach z hybrydową grafiką.",
|
||||
"enable-dgpu-monitoring-label": "Włącz monitorowanie dedykowanej karty graficznej",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "Wybierz układ ustawień (może wymagać ponownego otwarcia).",
|
||||
"settings-panel-mode-label": "Tryb panelu ustawień",
|
||||
"shadows-description": "Włącza cienie pod paskami i panelami.",
|
||||
"shadows-direction-description": "Wybierz, w którą stronę rzucany jest cień.",
|
||||
"shadows-direction-description": "Wybierz, gdzie rzucany jest cień.",
|
||||
"shadows-direction-label": "Kierunek cienia",
|
||||
"shadows-label": "Cienie",
|
||||
"title": "Interfejs użytkownika",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "Ustaw inny folder tapet dla każdego monitora.",
|
||||
"settings-monitor-specific-label": "Katalogi per-monitor",
|
||||
"settings-monitor-specific-tooltip": "Folder tapet monitora",
|
||||
"settings-overview-blur-strength-description": "Stosuje siłę rozmycia do przeglądu.",
|
||||
"settings-overview-blur-strength-label": "Siła rozmycia przeglądu",
|
||||
"settings-overview-tint-description": "Stosuje siłę odcienia do przeglądu.",
|
||||
"settings-overview-tint-label": "Siła zabarwienia przeglądu",
|
||||
"settings-recursive-search-description": "Szukaj tapet również w podfolderach katalogu głównego.",
|
||||
"settings-recursive-search-label": "Przeszukuj podfoldery",
|
||||
"settings-select-monitor-folder": "Wybierz folder tapet monitora",
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "Gotowe!",
|
||||
"appearance": {
|
||||
"subheader": "Wybierz Dark Mode i źródła kolorów (Tapeta lub predefiniowane)."
|
||||
"subheader": "Wybierz tryb ciemny i źródła kolorów (tapeta lub predefiniowane)."
|
||||
},
|
||||
"customize": {
|
||||
"header": "Dostosuj swoje doświadczenie",
|
||||
@@ -1449,7 +1582,7 @@
|
||||
},
|
||||
"skip-setup": "Pomiń konfigurację",
|
||||
"telemetry-wizard-done": "Rozumiem!",
|
||||
"telemetry-wizard-note": "Masz kontrolę – możesz to włączyć lub wyłączyć w dowolnym momencie w Ustawieniach",
|
||||
"telemetry-wizard-note": "Masz kontrolę — możesz to włączyć lub wyłączyć w dowolnym momencie w ustawieniach",
|
||||
"telemetry-wizard-subtitle": "Dodaliśmy anonimowe analizy, aby pomóc w ulepszaniu Noctalia",
|
||||
"telemetry-wizard-title": "Aktualizacja prywatności",
|
||||
"wallpaper": {
|
||||
@@ -1490,7 +1623,7 @@
|
||||
"disk": "Dysk",
|
||||
"download-speed": "Prędkość pobierania",
|
||||
"gpu-temp": "Temperatura GPU",
|
||||
"load-average": "Obciąż. śr.",
|
||||
"load-average": "Śr. obciążenie",
|
||||
"title": "Monitor systemu",
|
||||
"upload-speed": "Prędkość wysyłania"
|
||||
},
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "Tryb samolotowy"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "Krytyczny poziom baterii",
|
||||
"critical-desc": "Bateria naładowana w {percent}% — proszę natychmiast podłączyć ładowarkę",
|
||||
"low": "Słaba bateria",
|
||||
"low-desc": "Poziom baterii wynosi {percent}%. Podłącz ładowarkę"
|
||||
"low-desc": "Bateria naładowana w {percent}% — proszę podłączyć ładowarkę"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adres skopiowany do schowka",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "Dysk",
|
||||
"fade": "Zanikanie",
|
||||
"honeycomb": "Plaster miodu",
|
||||
"pixelate": "Pikselizuj",
|
||||
"stripes": "Paski",
|
||||
"wipe": "Wycieranie"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "Ładowanie tapet...",
|
||||
"no-results": "Nie znaleziono tapet. Spróbuj innego zapytania.",
|
||||
"page": "{current} z {total}"
|
||||
"page": "{current} z {total}",
|
||||
"page-prefix": "Strona",
|
||||
"page-suffix": "z {total}"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
+192
-53
@@ -48,11 +48,16 @@
|
||||
"device-default": "Padrão (Dispositivo de exibição)",
|
||||
"device-description": "Selecione qual dispositivo de bateria exibir.",
|
||||
"device-label": "Dispositivo de bateria",
|
||||
"display-mode-description": "Escolha como a bateria é exibida na barra.",
|
||||
"display-mode-graphic": "Bateria gráfica",
|
||||
"display-mode-graphic-clean": "Bateria gráfica (sem %)",
|
||||
"display-mode-icon-always": "Ícone - Sempre mostrar %",
|
||||
"display-mode-icon-hover": "Ícone - Mostrar ao passar",
|
||||
"display-mode-icon-only": "Apenas ícone",
|
||||
"hide-if-idle-description": "Ocultar o widget quando a bateria não estiver carregando ou descarregando.",
|
||||
"hide-if-idle-label": "Ocultar quando inativo",
|
||||
"hide-if-not-detected-description": "Oculte o widget quando nenhuma bateria for detectada no sistema.",
|
||||
"hide-if-not-detected-label": "Ocultar se não detectado",
|
||||
"low-battery-threshold-description": "Mostrar um aviso quando a bateria cair abaixo desta porcentagem.",
|
||||
"low-battery-threshold-label": "Limite de aviso de bateria fraca",
|
||||
"show-noctalia-performance-description": "Exibir o interruptor do modo de desempenho Noctalia no painel da bateria.<br>Desativa sombras e animações no Noctalia para reduzir o uso de recursos.",
|
||||
"show-noctalia-performance-label": "Mostrar alternância de Noctalia Desempenho",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "Usar fonte personalizada",
|
||||
"use-monospaced-font-description": "Quando ativado, o relógio usará a fonte monoespaçada.",
|
||||
"use-monospaced-font-label": "Usar fonte monoespaçada",
|
||||
"use-primary-color-description": "Quando ativado, aplica a cor primária para dar ênfase.",
|
||||
"use-primary-color-label": "Usar cor primária",
|
||||
"vertical-bar-description": "Use um espaço para separar cada parte em uma nova linha.",
|
||||
"vertical-bar-label": "Barra vertical"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"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.",
|
||||
"color-selection-label": "Selecionar cor",
|
||||
"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.",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "Ocultar o ícone de notificações quando não houver notificações não lidas.",
|
||||
"hide-widget-when-zero-unread-label": "Ocultar ícone sem notificações não lidas",
|
||||
"show-unread-badge-description": "Exibir um distintivo mostrando o número de notificações não lidas.",
|
||||
"show-unread-badge-label": "Mostrar distintivo de não lidos"
|
||||
"show-unread-badge-label": "Mostrar distintivo de não lidos",
|
||||
"unread-badge-color-description": "Selecione a cor para o emblema de notificação não lida.",
|
||||
"unread-badge-color-label": "Cor do distintivo de não lido"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "Selecione um widget para adicionar...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "Exibir as estatísticas como mini gráficos de barras em vez de valores de texto. Evita mudanças no layout.",
|
||||
"compact-mode-label": "Modo compacto",
|
||||
"cpu-frequency-description": "Exibir a velocidade de clock atual da CPU em GHz.",
|
||||
"cpu-frequency-label": "Mostrar frequência da CPU",
|
||||
"cpu-temperature-description": "Mostrar as leituras de temperatura da CPU se disponíveis.",
|
||||
"cpu-temperature-label": "Temperatura da CPU",
|
||||
"cpu-usage-description": "Exibir o percentual atual de uso da CPU.",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "Uso de memória",
|
||||
"network-traffic-description": "Exibir as velocidades de upload e download da rede.",
|
||||
"network-traffic-label": "Tráfego de rede",
|
||||
"storage-as-percentage-description": "Mostrar o espaço em disco como percentagem em vez de valores absolutos.",
|
||||
"storage-as-percentage-label": "Disco como percentagem",
|
||||
"storage-available-description": "Mostra quanto espaço em disco está disponível em vez de quanto é usado.",
|
||||
"storage-available-label": "Espaço em disco disponível",
|
||||
"storage-usage-description": "Mostrar as informações de uso do espaço em disco.",
|
||||
"storage-usage-label": "Uso de armazenamento",
|
||||
"swap-usage-description": "Mostrar o uso da memória swap.",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "Redefinir largura do título"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "Aplicar as cores do tema ao ícone de seta da gaveta.",
|
||||
"chevron-color-label": "Cor da seta",
|
||||
"colorize-icons-description": "Aplicar cores do tema aos ícones da bandeja do sistema.",
|
||||
"colorize-icons-label": "Colorir ícones",
|
||||
"drawer-enabled-description": "Quando habilitado, os itens da bandeja não fixados são exibidos em um painel gaveta.<br>Quando desabilitado, todos os itens da bandeja são exibidos inline.",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "Ocultar itens passivos"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "Escolha como você gostaria que este valor aparecesse.",
|
||||
"display-mode-label": "Modo de exibição"
|
||||
"display-mode-description": "Escolha como você gostaria que este valor aparecesse."
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "Número de caracteres a exibir dos nomes de espaços de trabalho (1-10).",
|
||||
"character-count-label": "Número de caracteres",
|
||||
"empty-color-description": "Definir a cor de fundo para Workspaces vazios.",
|
||||
"empty-color-label": "Cor do espaço de trabalho vazio",
|
||||
"enable-scrollwheel-description": "Alternar entre áreas de trabalho usando a roda do mouse.",
|
||||
"enable-scrollwheel-label": "Role para alternar entre áreas de trabalho",
|
||||
"focused-color-description": "Definir a cor de fundo para o Workspace focado.",
|
||||
"focused-color-label": "Cor do workspace focado",
|
||||
"follow-focused-screen-description": "Exibir áreas de trabalho da tela atualmente em foco, em vez da tela onde a barra está localizada.",
|
||||
"follow-focused-screen-label": "Seguir tela em foco",
|
||||
"grouped-border-opacity-description": "Definir o nível de opacidade para as bordas do contêiner do espaço de trabalho.",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "Ocultar desocupados",
|
||||
"label-mode-description": "Escolher como os rótulos de espaço de trabalho são exibidos.",
|
||||
"label-mode-label": "Modo de rótulo",
|
||||
"occupied-color-description": "Definir a cor de fundo para Workspaces ocupados.",
|
||||
"occupied-color-label": "Cor do espaço de trabalho ocupado",
|
||||
"pill-size-description": "Ajuste o tamanho das pílulas da área de trabalho (50%-100%).",
|
||||
"pill-size-label": "Tamanho da pílula",
|
||||
"reverse-scrolling-description": "Inverter a direção da troca de áreas de trabalho ao rolar.",
|
||||
"reverse-scrolling-label": "Rolagem invertida",
|
||||
"show-applications-description": "Exibir ícones de aplicativos dentro de cada espaço de trabalho.",
|
||||
"show-applications-label": "Mostrar aplicativos",
|
||||
"show-badge-description": "Mostrar o selo do número da área de trabalho no modo agrupado.",
|
||||
"show-badge-label": "Mostrar selo da área de trabalho",
|
||||
"show-labels-only-when-occupied-description": "Mostrar rótulos de área de trabalho apenas quando contiverem janelas.",
|
||||
"show-labels-only-when-occupied-label": "Mostrar rótulos apenas quando ocupado",
|
||||
"unfocused-icons-opacity-description": "Definir o nível de opacidade para ícones de aplicativos não focados.",
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "Nova instalação"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "Erro",
|
||||
"on-surface": "Na superfície",
|
||||
"primary": "Primário",
|
||||
"secondary": "Secundário",
|
||||
"tertiary": "Terciário"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Ações",
|
||||
"add": "Adicionar",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "Desconectar",
|
||||
"disconnected": "Desconectado(a)",
|
||||
"disconnecting": "Desconectando...",
|
||||
"display-mode": "Modo de exibição",
|
||||
"download": "Baixar",
|
||||
"duration": "Duração",
|
||||
"dysfunctional": "Disfuncional",
|
||||
"edit": "Editar",
|
||||
"enabled": "Ativado",
|
||||
"error": "Erro",
|
||||
"events": "Eventos",
|
||||
"execute": "Executar",
|
||||
"faithful": "Fiel",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "Instalado",
|
||||
"interface": "Interface",
|
||||
"internet": "Internet",
|
||||
"keybind": "Atalho de teclado",
|
||||
"language": "Linguagem",
|
||||
"loading": "Carregando...",
|
||||
"local": "Local",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "Não encontrado",
|
||||
"notifications": "Notificações",
|
||||
"official": "Oficial",
|
||||
"on-surface": "Na Superfície",
|
||||
"output": "Saída",
|
||||
"pair": "Emparelhar",
|
||||
"paired": "Emparelhado",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "Sondagem",
|
||||
"position": "Posição",
|
||||
"previous": "Anterior",
|
||||
"primary": "Primário",
|
||||
"random": "Aleatório",
|
||||
"reboot": "Reiniciar",
|
||||
"record": "Iniciar gravação",
|
||||
"refresh": "Atualizar",
|
||||
"required": "(obrigatório)",
|
||||
"reset": "Reiniciar",
|
||||
"reset-to-default": "Redefinir para o Padrão",
|
||||
"result-count": "{count} resultado",
|
||||
"result-count-plural": "{count} resultados",
|
||||
"resume": "Retomar",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "A digitalização está em andamento...",
|
||||
"screen-corners": "Cantos da tela",
|
||||
"search": "Pesquisar",
|
||||
"secondary": "Secundário",
|
||||
"security": "Segurança",
|
||||
"select": "Selecionar",
|
||||
"select-color": "Selecionar cor",
|
||||
"select-color-description": "Aplicar cores do tema para enfatizar.",
|
||||
"select-icon-color": "Selecionar cor do ícone",
|
||||
"shortcuts": "Atalhos",
|
||||
"shutdown": "Desligar",
|
||||
"signal": "Sinal",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "Fontes",
|
||||
"start": "Começar",
|
||||
"stop": "Pare",
|
||||
"supporters": "Apoiadores",
|
||||
"suspend": "Suspender",
|
||||
"templates": "Modelos",
|
||||
"tertiary": "Terciário",
|
||||
"test": "Teste",
|
||||
"thresholds": "Limiares",
|
||||
"title": "Título",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "Semana",
|
||||
"widgets": "Widgets",
|
||||
"width": "Largura",
|
||||
"windows": "Janelas",
|
||||
"yes": "Sim"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "Ao passar"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "Ocultar automaticamente",
|
||||
"hidden": "Ocultar quando vazio",
|
||||
"idle": "Ocultar quando inativo",
|
||||
"non-exclusive": "Não exclusivo",
|
||||
"transparent": "Transparente quando vazio",
|
||||
"visible": "Sempre visível"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "Carregando emojis...",
|
||||
"emoji-loading-description": "Por favor, aguarde",
|
||||
"emoji-no-recent": "Ainda não há emojis recentes",
|
||||
"emoji-search-description": "Buscar e copiar emojis"
|
||||
"emoji-search-description": "Buscar e copiar emojis",
|
||||
"settings-search-description": "Pesquisar e navegar para as configurações",
|
||||
"windows-search-description": "Pesquisar e focar janelas abertas"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "Compacta",
|
||||
"density-default": "Padrão",
|
||||
"density-mini": "Mini",
|
||||
"density-spacious": "Espaçoso(a)"
|
||||
"density-spacious": "Espaçoso(a)",
|
||||
"display-mode-always-visible": "Sempre Visível",
|
||||
"type-floating": "Flutuante",
|
||||
"type-framed": "Emoldurada",
|
||||
"type-simple": "Simples"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "Clássico",
|
||||
"quick-settings-style-modern": "Moderno"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "Confortável",
|
||||
"compact": "Compacto",
|
||||
"default": "Padrão"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "Grade",
|
||||
"list": "Lista"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "Rolar sempre",
|
||||
"hover": "Rolar ao passar",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "Torne-se um apoiador",
|
||||
"changelog": "Ver histórico de alterações",
|
||||
"contributors-desc": "Agradecimentos ao nosso <b>incrível</b> colaborador!",
|
||||
"contributors-description": "Agradecimentos ao nosso <b>incrível</b> colaborador!",
|
||||
"contributors-description-plural": "Agradecimentos aos nossos {count} <b>incríveis</b> colaboradores!",
|
||||
"copy-info": "Copiar informações",
|
||||
"info-copied": "Informação copiada para a área de transferência",
|
||||
@@ -628,10 +677,14 @@
|
||||
"noctalia-title": "Shell Noctalia",
|
||||
"privacy-policy": "Política de privacidade",
|
||||
"support": "Apoie-nos",
|
||||
"supporter-badge": "Apoiador",
|
||||
"supporters-desc": "Um enorme obrigado ao nosso incrível apoiador!",
|
||||
"supporters-desc-plural": "Um enorme obrigado aos nossos <b>{count} incríveis</b> apoiadores!",
|
||||
"supporters-loading": "Carregando apoiadores...",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "Disco:",
|
||||
"system-gpu": "GPU:",
|
||||
"system-host": "Anfitrião(ã):",
|
||||
"system-host": "Host:",
|
||||
"system-install-hint": "Instale o fastfetch para visualizar informações do sistema",
|
||||
"system-kernel": "Kernel:",
|
||||
"system-loading": "Carregando informações do sistema...",
|
||||
@@ -672,7 +725,7 @@
|
||||
"media-frame-rate-label": "Taxa de quadros",
|
||||
"media-primary-player-description": "Digite uma palavra-chave para identificar seu reprodutor principal.",
|
||||
"media-primary-player-label": "Reprodutor principal",
|
||||
"media-primary-player-placeholder": "ex: spotify, vlc, mpv",
|
||||
"media-primary-player-placeholder": "p. ex. spotify, vlc, mpv",
|
||||
"media-scrolling-speed-description": "Tempo em segundos para o título rolar do início ao fim.",
|
||||
"media-scrolling-speed-label": "Velocidade de rolagem",
|
||||
"media-scrolling-title-description": "Ativar rolagem contínua para títulos de mídia longos.",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "Nível de volume de todo o sistema.",
|
||||
"volumes-step-size-description": "Ajuste o tamanho do passo para alterações de volume (roda do mouse, atalhos de teclado).",
|
||||
"volumes-step-size-label": "Tamanho do passo do volume",
|
||||
"volumes-volume-feedback-description": "Reproduzir um som de feedback ao ajustar o volume",
|
||||
"volumes-volume-feedback-description": "Reproduzir um som de feedback ao ajustar o volume.",
|
||||
"volumes-volume-feedback-label": "Reproduzir som de feedback de volume",
|
||||
"volumes-volume-overdrive-description": "Permite aumentar o volume para além dos 100%. Poderá não ser suportado por todo o hardware.",
|
||||
"volumes-volume-overdrive-label": "Permitir volume acima de 100%"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "Tempo até a Bar se ocultar depois que o rato a deixa.",
|
||||
"appearance-auto-hide-delay-label": "Atraso para Ocultar",
|
||||
"appearance-auto-hide-exclusive-note": "Nota: A zona exclusiva é automaticamente desativada quando o auto-ocultar está ativo.",
|
||||
"appearance-auto-show-delay-description": "Tempo até a barra aparecer quando o mouse entra na borda.",
|
||||
"appearance-auto-show-delay-label": "Atraso de Exibição",
|
||||
"appearance-background-opacity-description": "Defina a opacidade do fundo especificamente para a barra.",
|
||||
"appearance-background-opacity-label": "Opacidade do fundo da barra",
|
||||
"appearance-capsule-color-description": "Escolha uma cor para as cápsulas da barra, ou não use nenhuma para a cor de superfície padrão.",
|
||||
"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-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-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",
|
||||
"appearance-frame-thickness": "Espessura",
|
||||
"appearance-hide-on-overview-description": "Ocultar a barra e fechar os painéis quando a visão geral do compositor estiver ativa.",
|
||||
"appearance-hide-on-overview-label": "Ocultar barra na visão geral",
|
||||
"appearance-margins-description": "Ajuste as margens ao redor da barra flutuante.",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-label": "Mostrar cápsula",
|
||||
"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",
|
||||
"monitor-configure-widgets": "Configurar widgets",
|
||||
@@ -734,7 +801,7 @@
|
||||
"title": "Barra",
|
||||
"tray-blacklist-description": "Adicione regras de exclusão para a bandeja do sistema, suporta curingas (*).",
|
||||
"tray-blacklist-label": "Lista Negra",
|
||||
"tray-blacklist-placeholder": "ex: nm-applet, Fcitx*",
|
||||
"tray-blacklist-placeholder": "p. ex. nm-applet, Fcitx*",
|
||||
"tray-pin-application": "Fixar aplicativo",
|
||||
"tray-unpin-application": "Desfixar aplicativo",
|
||||
"use-global-widgets": "Usar widgets globais",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "Baixar esquemas de cores",
|
||||
"method-description": {
|
||||
"content": "Esquema de Material Design com extração de cores de alta fidelidade que corresponde de perto às cores reais do conteúdo de origem.",
|
||||
"dysfunctional": "Como Faithful, mas escolhe a segunda família de cores mais dominante como primária.",
|
||||
"faithful": "Tenta manter-se próximo da cor de origem, enquanto gera uma paleta harmoniosa.",
|
||||
"fruit-salad": "Esquema de Material Design que produz uma paleta divertida e vibrante com tons diversos e variados.",
|
||||
"monochrome": "Esquema de Material Design usando uma escala de cinza de tom único com conteúdo cromático mínimo.",
|
||||
@@ -866,6 +934,16 @@
|
||||
"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.",
|
||||
"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",
|
||||
"system-stat-layout-side": "Lado",
|
||||
"system-stat-rounded-corners-description": "Usar cantos arredondados para o fundo do widget.",
|
||||
"system-stat-rounded-corners-label": "Cantos Arredondados",
|
||||
"system-stat-show-background-description": "Mostrar o contêiner de fundo para o widget de estatísticas do sistema.",
|
||||
"system-stat-show-background-label": "Mostrar plano de fundo",
|
||||
"system-stat-stat-type-description": "Escolhe qual estatística do sistema exibir.",
|
||||
"system-stat-stat-type-label": "Tipo de Estatística",
|
||||
"title": "Widgets da área de trabalho",
|
||||
"weather-enabled-description": "Mostrar um widget de clima na área de trabalho.",
|
||||
"weather-enabled-label": "Ativar widget de clima",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "Pesquisar fontes monoespaçadas...",
|
||||
"fonts-reset-scaling": "Redefinir escala",
|
||||
"fonts-title": "Fontes",
|
||||
"keybinds-description": "Configure as teclas de navegação globais para painéis e o lançador.",
|
||||
"keybinds-down": "Mover para baixo",
|
||||
"keybinds-enter": "Confirmar / Ação",
|
||||
"keybinds-escape": "Fechar / Voltar",
|
||||
"keybinds-left": "Mover para a Esquerda",
|
||||
"keybinds-right": "Mover para a direita",
|
||||
"keybinds-title": "Atalhos de Teclado de Navegação",
|
||||
"keybinds-up": "Mover Para Cima",
|
||||
"language-desc": "Escolha o seu idioma preferido para a aplicação.",
|
||||
"language-select-auto-detect": "Automático",
|
||||
"language-select-description": "Selecione o idioma usado na interface da aplicação.",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "Use preto sólido em vez da cor de fundo da barra.",
|
||||
"screen-corners-solid-black-label": "Cantos pretos sólidos",
|
||||
"screen-corners-title": "Cantos da tela",
|
||||
"settings-copied": "Configurações copiadas para a área de transferência"
|
||||
"settings-copied": "Configurações copiadas para a área de transferência",
|
||||
"tab-basics": "Básico",
|
||||
"tab-keybinds": "Atalhos de Teclado"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• Comandos são executados via shell (sh -lc)<br>• Comandos rodam em segundo plano (desanexados)<br>• Botões de teste executam com os valores atuais",
|
||||
@@ -983,30 +1071,30 @@
|
||||
"noctalia-started-placeholder": "p. ex. notify-send 'Noctalia Carregado'",
|
||||
"performance-mode-disabled-description": "Comando a ser executado quando o modo de desempenho Noctalia é desabilitado.",
|
||||
"performance-mode-disabled-label": "Modo de desempenho desabilitado",
|
||||
"performance-mode-disabled-placeholder": "ex., notify-send \"Desempenho\" \"Modo desabilitado\"",
|
||||
"performance-mode-disabled-placeholder": "p. ex. notify-send \"Desempenho\" \"Modo desabilitado\"",
|
||||
"performance-mode-enabled-description": "Comando a ser executado quando o modo de desempenho Noctalia é habilitado.",
|
||||
"performance-mode-enabled-label": "Modo de desempenho habilitado",
|
||||
"performance-mode-enabled-placeholder": "ex., notify-send \"Desempenho\" \"Modo habilitado\"",
|
||||
"performance-mode-enabled-placeholder": "p. ex. notify-send \"Desempenho\" \"Modo habilitado\"",
|
||||
"screen-lock-description": "Comando a ser executado quando a tela é bloqueada.",
|
||||
"screen-lock-label": "Tela bloqueada",
|
||||
"screen-lock-placeholder": "ex., notify-send \"Tela\" \"Bloqueada\"",
|
||||
"screen-lock-placeholder": "p. ex. notify-send \"Tela\" \"Bloqueada\"",
|
||||
"screen-unlock-description": "Comando a ser executado quando a tela é desbloqueada.",
|
||||
"screen-unlock-label": "Tela desbloqueada",
|
||||
"screen-unlock-placeholder": "ex., notify-send \"Tela\" \"Desbloqueada\"",
|
||||
"screen-unlock-placeholder": "p. ex. notify-send \"Tela\" \"Desbloqueada\"",
|
||||
"session-description": "Comando a ser executado antes do desligamento ou reinicialização. Recebe o tipo de ação como $1 (desligamento/reinicialização).",
|
||||
"session-label": "Fim da sessão",
|
||||
"session-placeholder": "p. ex., notify-send \"Session\" \"$1\"",
|
||||
"session-placeholder": "p. ex. notify-send \"Session\" \"$1\"",
|
||||
"system-hooks-desc": "Configure comandos para serem executados quando eventos do sistema ocorrerem.",
|
||||
"system-hooks-enable-description": "Ativa ou desativa todos os comandos de hook.",
|
||||
"system-hooks-enable-label": "Ativar hooks",
|
||||
"system-hooks-title": "Ganchos do sistema",
|
||||
"theme-changed-description": "Comando a ser executado quando o tema alterna entre modo escuro e claro.",
|
||||
"theme-changed-label": "Tema alterado",
|
||||
"theme-changed-placeholder": "ex., notify-send \"Tema\" \"Alternado\"",
|
||||
"theme-changed-placeholder": "p. ex. notify-send \"Tema\" \"Alternado\"",
|
||||
"title": "Hooks",
|
||||
"wallpaper-changed-description": "Comando a ser executado quando o papel de parede muda.",
|
||||
"wallpaper-changed-label": "Papel de parede alterado",
|
||||
"wallpaper-changed-placeholder": "ex., notify-send \"Papel de parede\" \"Alterado\""
|
||||
"wallpaper-changed-placeholder": "p. ex. notify-send \"Papel de parede\" \"Alterado\""
|
||||
},
|
||||
"indicator": {
|
||||
"default-value": "Padrão: {value}",
|
||||
@@ -1018,7 +1106,7 @@
|
||||
"execute-title": "Execução",
|
||||
"settings-annotation-tool-description": "Comando para executar ao clicar no botão de anotação no histórico da área de transferência. A imagem será enviada para este comando.",
|
||||
"settings-annotation-tool-label": "Ferramenta de anotação",
|
||||
"settings-annotation-tool-placeholder": "p.ex. 'gradia', 'satty -f -'",
|
||||
"settings-annotation-tool-placeholder": "p. ex. 'gradia', 'satty -f -'",
|
||||
"settings-auto-paste-description": "Colar automaticamente o item selecionado da área de transferência. Requer wtype.",
|
||||
"settings-auto-paste-label": "Colar automaticamente",
|
||||
"settings-clip-preview-description": "Mostra uma pré-visualização do conteúdo da área de transferência ao usar o comando >clip.",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "Quebrar texto da área de transferência",
|
||||
"settings-clipboard-history-description": "Acesse itens copiados anteriormente a partir do lançador.",
|
||||
"settings-clipboard-history-label": "Ativar histórico da área de transferência",
|
||||
"settings-custom-launch-prefix-description": "Prefixar comandos com um inicializador personalizado (ex. 'runapp' para integração systemd).",
|
||||
"settings-clipboard-watch-image-description": "Cadeia de comando completa passada para wl-paste para alterações de imagem (requer reinício).",
|
||||
"settings-clipboard-watch-image-label": "Comando de Vigilância de Imagens",
|
||||
"settings-clipboard-watch-text-description": "Cadeia de comando completa passada para wl-paste para alterações de texto (requer reinício).",
|
||||
"settings-clipboard-watch-text-label": "Comando de observação de texto",
|
||||
"settings-custom-launch-prefix-description": "Prefixar comandos com um inicializador personalizado (p. ex. 'runapp' para integração systemd).",
|
||||
"settings-custom-launch-prefix-enabled-description": "Usar um prefixo personalizado para inicializar aplicativos em vez do método padrão.",
|
||||
"settings-custom-launch-prefix-enabled-label": "Habilitar prefixo de inicialização personalizado",
|
||||
"settings-custom-launch-prefix-label": "Prefixo de inicialização personalizado",
|
||||
"settings-density-description": "Ajuste o tamanho dos ícones de aplicativos e a densidade do Launcher.",
|
||||
"settings-density-label": "Densidade",
|
||||
"settings-desc": "Personalize o comportamento e a aparência do lançador.",
|
||||
"settings-enable-settings-search-description": "Mostrar os resultados das configurações ao pesquisar no Launcher.",
|
||||
"settings-enable-settings-search-label": "Ativar pesquisa nas configurações",
|
||||
"settings-enable-windows-search-description": "Pesquisar e focar janelas ativas.",
|
||||
"settings-enable-windows-search-label": "Ativar pesquisa de janelas",
|
||||
"settings-grid-view-description": "Exibir itens em uma grade em vez de uma lista.",
|
||||
"settings-icon-mode-description": "Use ícones nativos do sistema em vez de ícones Tabler.",
|
||||
"settings-icon-mode-label": "Usar ícones nativos",
|
||||
"settings-ignore-mouse-input-description": "Desativar a interação do mouse e a roda de rolagem no iniciador.",
|
||||
"settings-ignore-mouse-input-label": "Ignorar entrada do mouse",
|
||||
"settings-overlay-layer-description": "Exibe o lançador na camada de sobreposição, acima de janelas em tela cheia. Quando ativado, o lançador não será anexado à barra.",
|
||||
"settings-overlay-layer-label": "Mostrar acima da tela cheia",
|
||||
"settings-position-description": "Escolha onde o painel do lançador aparece.",
|
||||
"settings-show-categories-description": "Mostrar abas de categorias para filtrar aplicativos.",
|
||||
"settings-show-categories-label": "Mostrar categorias",
|
||||
@@ -1046,10 +1144,12 @@
|
||||
"settings-show-icon-background-label": "Mostrar fundo do ícone",
|
||||
"settings-sort-by-usage-description": "Quando ativado, os aplicativos mais usados aparecem primeiro na lista.",
|
||||
"settings-sort-by-usage-label": "Ordenar por mais usados",
|
||||
"settings-terminal-command-description": "Comando para iniciar um terminal. Ex: 'kitty -e' ou 'gnome-terminal --'.",
|
||||
"settings-terminal-command-description": "Comando para iniciar um terminal. P. ex. 'kitty -e' ou 'gnome-terminal --'.",
|
||||
"settings-terminal-command-label": "Comando do terminal",
|
||||
"settings-use-app2unit-description": "Usa um método de inicialização alternativo para gerenciar melhor os processos de aplicativos e evitar problemas.",
|
||||
"settings-use-app2unit-label": "Usar App2Unit para iniciar aplicativos",
|
||||
"settings-view-mode-description": "Escolha o layout para as entradas do Lançador.",
|
||||
"settings-view-mode-label": "Modo de visualização",
|
||||
"title": "Lançador"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,12 +1166,12 @@
|
||||
"date-time-show-events-description": "Exibir eventos no painel do calendário.",
|
||||
"date-time-show-events-label": "Mostrar eventos do calendário",
|
||||
"date-time-title": "Data e hora",
|
||||
"date-time-use-analog-description": "Mostrar um relógio estilo analógico na janela do calendário e na tela de bloqueio.",
|
||||
"date-time-use-analog-description": "Mostrar um relógio de estilo analógico na janela do calendário.",
|
||||
"date-time-use-analog-label": "Use um relógio de estilo analógico",
|
||||
"date-time-week-numbers-description": "Exibe a semana do ano (ex., Semana 38) no calendário.",
|
||||
"date-time-week-numbers-description": "Exibe a semana do ano (p. ex. Semana 38) no calendário.",
|
||||
"date-time-week-numbers-label": "Mostrar números da semana",
|
||||
"location-desc": "Obtenha previsão do tempo e agendamento de luz noturna precisos definindo sua localização.",
|
||||
"location-search-description": "ex., São Paulo, SP",
|
||||
"location-search-description": "p. ex. São Paulo, SP",
|
||||
"location-search-label": "Procurar por uma localização",
|
||||
"location-search-placeholder": "Digite o nome da localização",
|
||||
"location-title": "Sua localização",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "Exibir clima no calendário"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "Quando o fprintd (autenticação por impressão digital) está ativo, esta opção permite-lhe iniciar sessão com a sua palavra-passe em vez de uma impressão digital.",
|
||||
"allow-password-with-fprintd-label": "Permitir login por senha com fprintd",
|
||||
"auto-start-auth-description": "Inicia automaticamente a autenticação de impressão digital sem exigir uma pressão de tecla ou um clique de botão.",
|
||||
"auto-start-auth-label": "Autenticação de início automático",
|
||||
"clock-format-description": "Personalize o formato do relógio usando tokens de sintaxe de data/hora.",
|
||||
"clock-format-label": "Formato do relógio",
|
||||
"clock-style-analog": "Analógico",
|
||||
"clock-style-custom": "Personalizado",
|
||||
"clock-style-description": "Escolha o estilo visual do relógio na Tela de Bloqueio.",
|
||||
"clock-style-digital": "Digital",
|
||||
"clock-style-label": "Estilo do Relógio",
|
||||
"compact-lockscreen-description": "Mostrar apenas a entrada de login e os controles do sistema, ocultando os widgets de clima e mídia.",
|
||||
"compact-lockscreen-label": "Tela de bloqueio compacta",
|
||||
"lock-on-suspend-description": "Bloquear a tela automaticamente ao suspender o sistema.",
|
||||
"lock-on-suspend-label": "Bloquear ao suspender",
|
||||
"lock-screen-animations-description": "Ativar ou desativar as animações do ecrã de bloqueio.",
|
||||
"lock-screen-animations-label": "Animações da Tela de Bloqueio",
|
||||
"lock-screen-blur-strength-description": "Aplica um efeito de desfoque ao papel de parede da tela de bloqueio.",
|
||||
"lock-screen-blur-strength-label": "Intensidade do desfoque da tela de bloqueio",
|
||||
"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.",
|
||||
"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.",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "Salvar urgência baixa no histórico",
|
||||
"history-normal-urgency-description": "Salvar notificações de prioridade normal no histórico.",
|
||||
"history-normal-urgency-label": "Salvar urgência normal no histórico",
|
||||
"media-toast-description": "Mostrar um toast quando o estado de reprodução de mídia mudar.",
|
||||
"media-toast-label": "Multimédia",
|
||||
"monitors-desc": "Mostra a notificação em monitores específicos. O padrão é todos, se nenhum for escolhido.",
|
||||
"settings-always-on-top-description": "Exibe notificações acima de janelas em tela cheia e outras camadas.",
|
||||
"settings-background-opacity-description": "Ajustar a opacidade dos fundos das notificações.",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "Sons de notificação indisponíveis",
|
||||
"sounds-volume-description": "Ajustar o nível de volume para sons de notificação.",
|
||||
"sounds-volume-label": "Volume do som",
|
||||
"toast-battery-description": "Mostrar um aviso quando o nível da bateria cair abaixo desta percentagem.",
|
||||
"toast-battery-label": "Aviso de bateria",
|
||||
"toast-desc": "Configurar a aparência e o comportamento do toast.",
|
||||
"toast-keyboard-description": "Mostrar uma notificação quando o layout do teclado mudar.",
|
||||
"toast-keyboard-label": "Layout do teclado"
|
||||
"toast-keyboard-label": "Layout do teclado",
|
||||
"toast-media-description": "Mostrar um toast quando o estado de reprodução de mídia mudar.",
|
||||
"toast-media-label": "Multimédia"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "Exibir OSD acima de janelas em tela cheia e outras camadas.",
|
||||
@@ -1202,16 +1322,20 @@
|
||||
"types-volume-label": "Volume de saída"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "Atualizar plugins automaticamente",
|
||||
"auto-update-description": "Atualizar automaticamente todos os plugins quando a shell iniciar.",
|
||||
"available-description": "Navegue e instale plugins a partir de fontes configuradas.",
|
||||
"available-label": "Plugins disponíveis",
|
||||
"available-no-plugins-description": "Verifique as fontes do seu plugin ou atualize a lista.",
|
||||
"available-no-plugins-label": "Nenhum plugin disponível",
|
||||
"check-for-updates": "Verificar atualizações",
|
||||
"checking-for-updates": "Verificando atualizações...",
|
||||
"collision-already-installed": "Este plugin já está instalado",
|
||||
"collision-custom-version-exists": "Uma versão personalizada de \"{source}\" já está instalada",
|
||||
"collision-official-version-exists": "A versão oficial deste plugin já está instalada",
|
||||
"filter-downloaded": "Baixado",
|
||||
"filter-not-downloaded": "Não baixado",
|
||||
"filter-tags-description": "Filtrar plugins por categoria ou estado de download",
|
||||
"filter-tags-description": "Filtrar plugins por categoria ou estado de download.",
|
||||
"filter-tags-label": "Etiquetas",
|
||||
"hot-reload-description": "Recarrega automaticamente os plugins quando seus arquivos são alterados. Útil para o desenvolvimento de plugins.",
|
||||
"hot-reload-label": "Recarga a quente (modo de desenvolvimento)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "Meu repositório legal",
|
||||
"sources-remove-tooltip": "Remover código fonte do plugin",
|
||||
"title": "Plugins",
|
||||
"translations-reloaded": "Traduções recarregadas: {name}",
|
||||
"uninstall-dialog-description": "Tem certeza de que deseja desinstalar {plugin}? Isso removerá todos os dados do plugin.",
|
||||
"uninstall-dialog-title": "Desinstalar plugin",
|
||||
"uninstall-error": "Falha ao desinstalar: {error}",
|
||||
@@ -1271,11 +1396,14 @@
|
||||
"entries-desc": "Personalizar quais ações de energia aparecem no menu de sessão e em que ordem.",
|
||||
"entries-title": "Ações de energia",
|
||||
"entry-settings-command-description": "Comando personalizado para executar para esta ação. Deixe vazio para usar o comando padrão do sistema.",
|
||||
"entry-settings-command-placeholder": "systemctl poweroff",
|
||||
"entry-settings-command-placeholder": "p. ex. systemctl poweroff",
|
||||
"entry-settings-default-command-lock": "Tela de bloqueio interna (sem comando)",
|
||||
"entry-settings-default-command-logout": "Logout interno (sem comando)",
|
||||
"entry-settings-default-info-description": "Se nenhum comando personalizado for especificado, o comando padrão do sistema será usado.",
|
||||
"entry-settings-default-info-label": "Comando padrão",
|
||||
"entry-settings-keybind-description": "Atribua uma combinação de teclas para acionar esta ação quando o menu de sessão estiver aberto.",
|
||||
"entry-settings-keybind-placeholder": "Pressione Gravar para atribuir uma tecla...",
|
||||
"entry-settings-keybind-recording": "Gravando... Pressione qualquer combinação de teclas",
|
||||
"entry-settings-title": "Configurar {entry}",
|
||||
"entry-settings-tooltip": "Configurar comando",
|
||||
"general-desc": "Configurar o comportamento e a aparência do painel do menu de sessão.",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Cor crítica",
|
||||
"custom-highlight-colors-title-label": "Cores de destaque personalizadas",
|
||||
"disk-available-label": "Espaço em disco disponível",
|
||||
"disk-section-label": "Uso do disco",
|
||||
"enable-dgpu-monitoring-description": "Atenção: Isto irá ativar sua GPU dedicada (NVIDIA/AMD), o que pode impactar significativamente a duração da bateria em laptops com gráficos híbridos.",
|
||||
"enable-dgpu-monitoring-label": "Ativar o monitoramento da GPU dedicada",
|
||||
@@ -1323,7 +1452,7 @@
|
||||
"box-border-description": "Exibe um contorno ao redor das áreas de conteúdo.",
|
||||
"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-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",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"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",
|
||||
"shadows-description": "Ativa sombras projetadas sob barras e painéis.",
|
||||
"shadows-direction-description": "Escolha de onde a sombra é projetada.",
|
||||
"shadows-direction-description": "Escolha onde a sombra é projetada.",
|
||||
"shadows-direction-label": "Direção da sombra",
|
||||
"shadows-label": "Sombras projetadas",
|
||||
"title": "Interface do usuário",
|
||||
@@ -1357,7 +1486,7 @@
|
||||
"automation-change-mode-alphabetical": "Alfabético",
|
||||
"automation-change-mode-description": "Escolha como os papéis de parede são selecionados ao alterar automaticamente.",
|
||||
"automation-change-mode-label": "Modo de alteração",
|
||||
"automation-custom-interval-description": "Digite o tempo como HH:MM (ex., 01:30).",
|
||||
"automation-custom-interval-description": "Digite o tempo como HH:MM (p. ex. 01:30).",
|
||||
"automation-custom-interval-label": "Intervalo personalizado",
|
||||
"automation-interval-description": "Com que frequência alterar os papéis de parede automaticamente.",
|
||||
"automation-interval-label": "Intervalo do papel de parede",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "Defina uma pasta de papel de parede diferente para cada monitor.",
|
||||
"settings-monitor-specific-label": "Diretórios específicos por monitor",
|
||||
"settings-monitor-specific-tooltip": "Pasta de papéis de parede do monitor",
|
||||
"settings-overview-blur-strength-description": "Aplica a intensidade do desfoque à Visão Geral.",
|
||||
"settings-overview-blur-strength-label": "Intensidade do desfoque da visão geral",
|
||||
"settings-overview-tint-description": "Aplica a intensidade da tonalidade à visão geral.",
|
||||
"settings-overview-tint-label": "Intensidade da tonalidade da visão geral",
|
||||
"settings-recursive-search-description": "Também buscar papéis de parede em subpastas do diretório de papéis de parede.",
|
||||
"settings-recursive-search-label": "Buscar em subpastas",
|
||||
"settings-select-monitor-folder": "Selecionar pasta de papéis de parede do monitor",
|
||||
@@ -1407,11 +1540,11 @@
|
||||
"enter-command": "Digite o comando para executar (app ou script personalizado)",
|
||||
"enter-ipc-identifier": "Introduza um identificador exclusivo para comandos IPC",
|
||||
"enter-path": "Digite o caminho...",
|
||||
"enter-text-to-collapse": "por exemplo, 'nada está sendo reproduzido'. Use /regex/ para padrões.",
|
||||
"enter-text-to-collapse": "p. ex. 'nada está sendo reproduzido'. Use /regex/ para padrões.",
|
||||
"enter-tooltip": "Inserir dica de ferramenta",
|
||||
"enter-width-pixels": "Digite a largura em pixels",
|
||||
"search": "Pesquisar...",
|
||||
"search-icons": "ex., noctalia, niri, battery, cloud",
|
||||
"search-icons": "p. ex. noctalia, niri, battery, cloud",
|
||||
"search-launcher": "Pesquisar entradas... ou use > para comandos",
|
||||
"search-wallhaven": "Pesquisar no Wallhaven...",
|
||||
"search-wallpapers": "Digite para filtrar papéis de parede..."
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "Concluído!",
|
||||
"appearance": {
|
||||
"subheader": "Escolha o Dark Mode e as fontes de cor (Wallpaper ou predefinidas)."
|
||||
"subheader": "Escolha o modo escuro e as fontes de cor (papel de parede ou predefinidas)."
|
||||
},
|
||||
"customize": {
|
||||
"header": "Personalizar a sua experiência",
|
||||
@@ -1449,7 +1582,7 @@
|
||||
},
|
||||
"skip-setup": "Ignorar configuração",
|
||||
"telemetry-wizard-done": "Entendi!",
|
||||
"telemetry-wizard-note": "Você está no controle — ative ou desative isso a qualquer momento nas Configurações",
|
||||
"telemetry-wizard-note": "Você está no controle — ative ou desative isso a qualquer momento nas configurações",
|
||||
"telemetry-wizard-subtitle": "Adicionámos análises anónimas para ajudar a melhorar o Noctalia",
|
||||
"telemetry-wizard-title": "Atualização de privacidade",
|
||||
"wallpaper": {
|
||||
@@ -1466,7 +1599,7 @@
|
||||
"select-prompt": "Selecione um papel de parede abaixo",
|
||||
"subheader": "Defina o ambiente com um belo fundo."
|
||||
},
|
||||
"welcome-note": "Apenas alguns ajustes básicos para começar - o restante está em configurações",
|
||||
"welcome-note": "Apenas alguns ajustes básicos para começar — o restante está em configurações",
|
||||
"welcome-subtitle": "Vamos tornar o seu ambiente de trabalho único",
|
||||
"welcome-title": "Bem-vindo ao Noctalia!"
|
||||
},
|
||||
@@ -1490,7 +1623,7 @@
|
||||
"disk": "Disco",
|
||||
"download-speed": "Velocidade de download",
|
||||
"gpu-temp": "Temperatura da GPU",
|
||||
"load-average": "Carga méd.",
|
||||
"load-average": "Carga média",
|
||||
"title": "Monitor do sistema",
|
||||
"upload-speed": "Velocidade de upload"
|
||||
},
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "Modo avião"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "Bateria crítica",
|
||||
"critical-desc": "Bateria a {percent}% — por favor, conecte o carregador imediatamente",
|
||||
"low": "Bateria fraca",
|
||||
"low-desc": "A bateria está em {percent}%. Por favor, conecte o carregador"
|
||||
"low-desc": "Bateria está em {percent}% — por favor, conecte o carregador"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Endereço copiado para a área de transferência",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "Disco",
|
||||
"fade": "Esmaecer",
|
||||
"honeycomb": "Favo de mel",
|
||||
"pixelate": "Pixelizar",
|
||||
"stripes": "Listras",
|
||||
"wipe": "Limpar"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "Carregando papéis de parede...",
|
||||
"no-results": "Nenhum papel de parede encontrado. Tente uma busca diferente.",
|
||||
"page": "{current} de {total}"
|
||||
"page": "{current} de {total}",
|
||||
"page-prefix": "Página",
|
||||
"page-suffix": "de {total}"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
@@ -1726,8 +1865,8 @@
|
||||
"day-full": "Nome completo do dia",
|
||||
"day-leading-zero": "Dia com zero à esquerda (01-31)",
|
||||
"day-no-leading-zero": "Dia sem zero à esquerda (1-31)",
|
||||
"hour-leading-zero": "Hora com zero à esquerda (00-23) - formato de 24 horas",
|
||||
"hour-no-leading-zero": "Hora sem zero à esquerda (0-23) - formato de 24 horas",
|
||||
"hour-leading-zero": "Hora com zero à esquerda (00-23) — formato de 24 horas",
|
||||
"hour-no-leading-zero": "Hora sem zero à esquerda (0-23) — formato de 24 horas",
|
||||
"minute-leading-zero": "Minuto com zero à esquerda (00-59)",
|
||||
"minute-no-leading-zero": "Minuto sem zero à esquerda (0-59)",
|
||||
"month-abbreviated": "Nome do mês abreviado",
|
||||
|
||||
+207
-68
@@ -48,11 +48,16 @@
|
||||
"device-default": "Устройство отображения по умолчанию",
|
||||
"device-description": "Выберите устройство для отображения состояния батареи.",
|
||||
"device-label": "Устройство с батареей",
|
||||
"display-mode-description": "Выберите, как отображается батарея на панели.",
|
||||
"display-mode-graphic": "Графическая батарея",
|
||||
"display-mode-graphic-clean": "Графическая батарея (без %)",
|
||||
"display-mode-icon-always": "Значок - Всегда показывать %",
|
||||
"display-mode-icon-hover": "Иконка - Показать при наведении",
|
||||
"display-mode-icon-only": "Только значок",
|
||||
"hide-if-idle-description": "Скрыть виджет, когда батарея не заряжается и не разряжается.",
|
||||
"hide-if-idle-label": "Скрывать в режиме простоя",
|
||||
"hide-if-not-detected-description": "Скрыть виджет, если в системе не обнаружена батарея.",
|
||||
"hide-if-not-detected-label": "Скрывать при отсутствии батареи",
|
||||
"low-battery-threshold-description": "Показывать предупреждение, когда уровень заряда батареи падает ниже этого процента.",
|
||||
"low-battery-threshold-label": "Порог предупреждения о низком заряде батареи",
|
||||
"show-noctalia-performance-description": "Отображать переключатель режима производительности Noctalia в панели батареи.<br>Отключает тени и анимации в Noctalia для снижения использования ресурсов.",
|
||||
"show-noctalia-performance-label": "Показывать переключатель Производительность Noctalia",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "Использовать пользовательский шрифт",
|
||||
"use-monospaced-font-description": "Если включено, часы будут использовать моноширинный шрифт.",
|
||||
"use-monospaced-font-label": "Использовать моноширинный шрифт",
|
||||
"use-primary-color-description": "Если включено, будет использован основной цвет для отображения часов.",
|
||||
"use-primary-color-label": "Использовать основной цвет",
|
||||
"vertical-bar-description": "Используйте пробел, чтобы разделить каждую часть на новую строку.",
|
||||
"vertical-bar-label": "Вертикальная панель"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"collapse-condition-description": "Если выходной текст соответствует этому значению, кнопка будет скрыта.",
|
||||
"collapse-condition-label": "Условие скрытия",
|
||||
"color-selection-description": "Применить цвета темы к значку и тексту.",
|
||||
"color-selection-label": "Выбрать цвет",
|
||||
"display-command-output-description": "Введите команду для регулярного выполнения. Первая строка её вывода будет отображаться как текст.",
|
||||
"display-command-output-label": "Вывод команды",
|
||||
"display-command-output-stream-description": "Введите команду для непрерывного выполнения.",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "Скрывать значок уведомлений, если нет непрочитанных.",
|
||||
"hide-widget-when-zero-unread-label": "Скрывать значок без непрочитанных",
|
||||
"show-unread-badge-description": "Отображать значок, показывающий количество непрочитанных уведомлений.",
|
||||
"show-unread-badge-label": "Показывать значок непрочитанных"
|
||||
"show-unread-badge-label": "Показывать значок непрочитанных",
|
||||
"unread-badge-color-description": "Выберите цвет для значка непрочитанных уведомлений.",
|
||||
"unread-badge-color-label": "Цвет значка непрочитанных"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "Выберите виджет для добавления...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "Отображать статистику в виде мини-диаграмм вместо текстовых значений. Предотвращает сдвиг макета.",
|
||||
"compact-mode-label": "Компактный режим",
|
||||
"cpu-frequency-description": "Отобразить текущую тактовую частоту CPU в ГГц.",
|
||||
"cpu-frequency-label": "Показать частоту CPU",
|
||||
"cpu-temperature-description": "Показывать показания температуры процессора, если доступны.",
|
||||
"cpu-temperature-label": "Температура CPU",
|
||||
"cpu-usage-description": "Отображать текущий процент использования CPU.",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "Использование памяти",
|
||||
"network-traffic-description": "Отображать скорости загрузки и скачивания по сети.",
|
||||
"network-traffic-label": "Сетевой трафик",
|
||||
"storage-as-percentage-description": "Показывать место на диске в процентах вместо абсолютных значений.",
|
||||
"storage-as-percentage-label": "Диск в процентах",
|
||||
"storage-available-description": "Показывает, сколько места на диске доступно, вместо того, сколько используется.",
|
||||
"storage-available-label": "Доступное место на диске",
|
||||
"storage-usage-description": "Показывать информацию об использовании дискового пространства.",
|
||||
"storage-usage-label": "Использование хранилища",
|
||||
"swap-usage-description": "Показать использование swap-памяти.",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "Сбросить ширину заголовка"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "Применить цвета темы к иконке шеврона выдвижной панели.",
|
||||
"chevron-color-label": "Цвет стрелки",
|
||||
"colorize-icons-description": "Применить цвета темы к иконкам трея.",
|
||||
"colorize-icons-label": "Раскрасить иконки",
|
||||
"drawer-enabled-description": "Если включено, незакрепленные элементы трея отображаются во всплывающей панели.<br>Если отключено, все элементы трея отображаются в строку.",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "Скрыть пассивные предметы"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "Выберите, как это значение должно отображаться.",
|
||||
"display-mode-label": "Режим отображения"
|
||||
"display-mode-description": "Выберите, как это значение должно отображаться."
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "Количество символов для отображения из имён рабочих пространств (1-10).",
|
||||
"character-count-label": "Количество символов",
|
||||
"empty-color-description": "Установить цвет фона для пустых рабочих пространств.",
|
||||
"empty-color-label": "Цвет пустого рабочего пространства",
|
||||
"enable-scrollwheel-description": "Переключайтесь между рабочими пространствами с помощью колеса прокрутки мыши.",
|
||||
"enable-scrollwheel-label": "Прокрутите, чтобы переключить рабочие столы",
|
||||
"enable-scrollwheel-label": "Прокрутите, чтобы переключить рабочие пространства",
|
||||
"focused-color-description": "Установить цвет фона для активного рабочего пространства.",
|
||||
"focused-color-label": "Цвет активного рабочего пространства",
|
||||
"follow-focused-screen-description": "Отображать рабочие пространства с текущего активного экрана, а не с экрана, на котором расположена панель.",
|
||||
"follow-focused-screen-label": "Следовать за активным экраном",
|
||||
"grouped-border-opacity-description": "Установить уровень прозрачности для границ контейнера рабочей области.",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "Скрыть незанятые",
|
||||
"label-mode-description": "Выберите, как отображаются метки рабочих пространств.",
|
||||
"label-mode-label": "Режим метки",
|
||||
"occupied-color-description": "Установить цвет фона для занятых рабочих пространств.",
|
||||
"occupied-color-label": "Цвет занятого рабочего пространства",
|
||||
"pill-size-description": "Отрегулируйте размер индикаторов рабочих пространств (50%-100%).",
|
||||
"pill-size-label": "Размер капсулы",
|
||||
"reverse-scrolling-description": "Изменить направление переключения рабочих пространств при прокрутке.",
|
||||
"reverse-scrolling-label": "Обратная прокрутка",
|
||||
"show-applications-description": "Отображать значки приложений внутри каждого рабочего пространства.",
|
||||
"show-applications-label": "Показать приложения",
|
||||
"show-badge-description": "Показывать значок номера рабочего пространства в сгруппированном режиме.",
|
||||
"show-badge-label": "Показывать значок рабочего стола",
|
||||
"show-labels-only-when-occupied-description": "Показывать метки рабочих пространств только тогда, когда они содержат окна.",
|
||||
"show-labels-only-when-occupied-label": "Показывать метки только при наличии содержимого",
|
||||
"unfocused-icons-opacity-description": "Установить уровень прозрачности для неактивных значков приложений.",
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "Новая установка"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "Ошибка",
|
||||
"on-surface": "На поверхности",
|
||||
"primary": "Первичный",
|
||||
"secondary": "Вторичный",
|
||||
"tertiary": "Третичный"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Действия",
|
||||
"add": "Добавить",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "Отключить",
|
||||
"disconnected": "Отключено",
|
||||
"disconnecting": "Отключение...",
|
||||
"display-mode": "Режим oтображения",
|
||||
"download": "Скачать",
|
||||
"duration": "Продолжительность",
|
||||
"dysfunctional": "Дисфункциональный",
|
||||
"edit": "Редактировать",
|
||||
"enabled": "Включено",
|
||||
"error": "Ошибка",
|
||||
"events": "События",
|
||||
"execute": "Выполнить",
|
||||
"faithful": "Верный",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "Установлено",
|
||||
"interface": "Интерфейс",
|
||||
"internet": "Интернет",
|
||||
"keybind": "Привязка клавиш",
|
||||
"language": "Язык",
|
||||
"loading": "Загрузка...",
|
||||
"local": "Местный",
|
||||
@@ -402,7 +422,7 @@
|
||||
"lock": "Заблокировать",
|
||||
"logout": "Выйти",
|
||||
"look": "Внешний вид",
|
||||
"media": "СМИ",
|
||||
"media": "Плеер",
|
||||
"media-player": "Медиаплеер",
|
||||
"memory": "Память",
|
||||
"monitors": "Мониторы",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "Не найдено",
|
||||
"notifications": "Уведомления",
|
||||
"official": "Официальный",
|
||||
"on-surface": "На поверхности",
|
||||
"output": "Вывод",
|
||||
"pair": "Спарить",
|
||||
"paired": "Спарено",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "Опрашивание",
|
||||
"position": "Позиция",
|
||||
"previous": "Предыдущий",
|
||||
"primary": "Основной",
|
||||
"random": "Случайный",
|
||||
"reboot": "Перезагрузить",
|
||||
"record": "Начать запись",
|
||||
"refresh": "Обновить",
|
||||
"required": "(обязательно)",
|
||||
"reset": "Сброс",
|
||||
"reset-to-default": "Сбросить по Умолчанию",
|
||||
"result-count": "{count} результат",
|
||||
"result-count-plural": "{count} результаты",
|
||||
"resume": "Продолжить",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "Сканирование...",
|
||||
"screen-corners": "Углы экрана",
|
||||
"search": "Поиск",
|
||||
"secondary": "Вторичный",
|
||||
"security": "Безопасность",
|
||||
"select": "Выбрать",
|
||||
"select-color": "Выбрать цвет",
|
||||
"select-color-description": "Применить цвета темы для выделения.",
|
||||
"select-icon-color": "Выбрать цвет значка",
|
||||
"shortcuts": "Ярлыки",
|
||||
"shutdown": "Выключить",
|
||||
"signal": "Сигнал",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "Источники",
|
||||
"start": "Начать",
|
||||
"stop": "Стоп",
|
||||
"supporters": "Поддерживающие",
|
||||
"suspend": "Приостановить",
|
||||
"templates": "Шаблоны",
|
||||
"tertiary": "Третичный",
|
||||
"test": "Тест",
|
||||
"thresholds": "Пороги",
|
||||
"title": "Название",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "Неделя",
|
||||
"widgets": "Виджеты",
|
||||
"width": "Ширина",
|
||||
"windows": "Окна ",
|
||||
"yes": "Да"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "При наведении"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "Автоматическое скрытие",
|
||||
"hidden": "Скрывать, когда пусто",
|
||||
"idle": "Скрывать в режиме простоя",
|
||||
"non-exclusive": "Неисключительный",
|
||||
"transparent": "Прозрачный, когда пустой",
|
||||
"visible": "Всегда виден"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "Загрузка эмодзи...",
|
||||
"emoji-loading-description": "Пожалуйста, подождите",
|
||||
"emoji-no-recent": "Недавних эмодзи пока нет",
|
||||
"emoji-search-description": "Поиск и копирование эмодзи"
|
||||
"emoji-search-description": "Поиск и копирование эмодзи",
|
||||
"settings-search-description": "Поиск и переход к настройкам",
|
||||
"windows-search-description": "Поиск и фокусировка открытых окон"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "Компактная",
|
||||
"density-default": "По умолчанию",
|
||||
"density-mini": "Мини",
|
||||
"density-spacious": "Просторный"
|
||||
"density-spacious": "Просторный",
|
||||
"display-mode-always-visible": "Всегда видны",
|
||||
"type-floating": "Плавающий",
|
||||
"type-framed": "В рамке",
|
||||
"type-simple": "Простой"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "Классический",
|
||||
"quick-settings-style-modern": "Современный"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "Комфортный",
|
||||
"compact": "Компактный",
|
||||
"default": "По умолчанию"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "Сетка",
|
||||
"list": "Список"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "Всегда прокручивать",
|
||||
"hover": "Прокручивать при наведении",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "Стать спонсором",
|
||||
"changelog": "Посмотреть список изменений",
|
||||
"contributors-desc": "Благодарим нашего <b>замечательного</b> участника: {count}!",
|
||||
"contributors-description": "Благодарим нашего <b>замечательного</b> участника: {count}!",
|
||||
"contributors-description-plural": "Благодарим наших <b>замечательных</b> участников: {count}!",
|
||||
"copy-info": "Копировать информацию",
|
||||
"info-copied": "Информация скопирована в буфер обмена",
|
||||
@@ -628,15 +677,19 @@
|
||||
"noctalia-title": "Оболочка Noctalia",
|
||||
"privacy-policy": "Политика конфиденциальности",
|
||||
"support": "Поддержать нас",
|
||||
"supporter-badge": "Сторонник",
|
||||
"supporters-desc": "Огромное спасибо нашему замечательному стороннику!",
|
||||
"supporters-desc-plural": "Огромное спасибо нашим <b>{count} замечательным</b> сторонникам!",
|
||||
"supporters-loading": "Загрузка спонсоров...",
|
||||
"system-cpu": "ЦП:",
|
||||
"system-disk": "Диск:",
|
||||
"system-gpu": "Графический процессор",
|
||||
"system-host": "Ведущий:",
|
||||
"system-host": "хост:",
|
||||
"system-install-hint": "Установите fastfetch для просмотра информации о системе",
|
||||
"system-kernel": "Ядро:",
|
||||
"system-loading": "Загрузка системной информации...",
|
||||
"system-memory": "Память:",
|
||||
"system-monitor": "Монитор",
|
||||
"system-monitor": "Монитор:",
|
||||
"system-not-installed": "fastfetch не установлен",
|
||||
"system-os": "ОС:",
|
||||
"system-packages": "Пакеты:",
|
||||
@@ -672,7 +725,7 @@
|
||||
"media-frame-rate-label": "Частота кадров",
|
||||
"media-primary-player-description": "Введите ключевое слово для идентификации вашего основного плеера.",
|
||||
"media-primary-player-label": "Основной плеер",
|
||||
"media-primary-player-placeholder": "например, spotify, vlc, mpv",
|
||||
"media-primary-player-placeholder": "напр. spotify, vlc, mpv",
|
||||
"media-scrolling-speed-description": "Время в секундах, за которое заголовок прокручивается от начала до конца.",
|
||||
"media-scrolling-speed-label": "Скорость прокрутки",
|
||||
"media-scrolling-title-description": "Включить непрерывную прокрутку для длинных названий медиа.",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "Общесистемный уровень громкости.",
|
||||
"volumes-step-size-description": "Настройка шага изменения громкости (колесо прокрутки, сочетания клавиш).",
|
||||
"volumes-step-size-label": "Шаг изменения громкости",
|
||||
"volumes-volume-feedback-description": "Воспроизводить звук при регулировке громкости",
|
||||
"volumes-volume-feedback-description": "Воспроизводить звук при регулировке громкости.",
|
||||
"volumes-volume-feedback-label": "Воспроизвести звук обратной связи громкости",
|
||||
"volumes-volume-overdrive-description": "Разрешить повышение громкости выше 100%. Может не поддерживаться всем оборудованием.",
|
||||
"volumes-volume-overdrive-label": "Разрешить перегрузку громкости"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "Время, через которое Bar скроется после того, как курсор мыши покинет его.",
|
||||
"appearance-auto-hide-delay-label": "Задержка скрытия",
|
||||
"appearance-auto-hide-exclusive-note": "Примечание: Эксклюзивная зона автоматически отключается, когда автоскрытие активно.",
|
||||
"appearance-auto-show-delay-description": "Время до появления панели, когда мышь входит в край.",
|
||||
"appearance-auto-show-delay-label": "Задержка отображения",
|
||||
"appearance-background-opacity-description": "Установите прозрачность фона специально для панели.",
|
||||
"appearance-background-opacity-label": "Прозрачность фона бара",
|
||||
"appearance-capsule-color-description": "Выберите цвет для капсул панели или не используйте никакой для цвета поверхности по умолчанию.",
|
||||
"appearance-capsule-color-label": "Цвет капсулы",
|
||||
"appearance-capsule-opacity-description": "Установить уровень непрозрачности для фона виджетов, когда капсула отображается.",
|
||||
"appearance-capsule-opacity-label": "Непрозрачность капсулы",
|
||||
"appearance-density-description": "Настройка отступов панели для компактного или просторного вида.",
|
||||
"appearance-density-label": "Плотность панели",
|
||||
"appearance-desc": "Настройка внешнего вида и положения панели.",
|
||||
"appearance-display-mode-description": "Выберите, когда панель видна.",
|
||||
"appearance-floating-description": "Отображает панель как плавающую 'таблетку'.",
|
||||
"appearance-floating-label": "Плавающая панель",
|
||||
"appearance-frame-radius": "Внутренний радиус",
|
||||
"appearance-frame-settings-description": "Настройте толщину рамки и внутренний радиус углов",
|
||||
"appearance-frame-settings-label": "Настройки рамки",
|
||||
"appearance-frame-thickness": "Толщина",
|
||||
"appearance-hide-on-overview-description": "Скрыть панель и закрыть панели, когда активен обзор компоновщика.",
|
||||
"appearance-hide-on-overview-label": "Скрыть панель в обзоре",
|
||||
"appearance-margins-description": "Настройка отступов вокруг плавающей панели.",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-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": "Использовать раздельную прозрачность столбцов",
|
||||
"monitor-configure-widgets": "Настроить виджеты",
|
||||
@@ -734,7 +801,7 @@
|
||||
"title": "Панель",
|
||||
"tray-blacklist-description": "Добавьте правила исключения трея, поддерживает подстановочные знаки (*).",
|
||||
"tray-blacklist-label": "Чёрный список",
|
||||
"tray-blacklist-placeholder": "например, nm-applet, Fcitx*",
|
||||
"tray-blacklist-placeholder": "напр. nm-applet, Fcitx*",
|
||||
"tray-pin-application": "Закрепить приложение",
|
||||
"tray-unpin-application": "Открепить приложение",
|
||||
"use-global-widgets": "Использовать глобальные виджеты",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "Загрузить цветовые схемы",
|
||||
"method-description": {
|
||||
"content": "Схема Material Design с высокоточной экстракцией цветов, которая точно соответствует фактическим цветам исходного контента.",
|
||||
"dysfunctional": "Как Faithful, но выбирает второе по доминантности цветовое семейство в качестве основного.",
|
||||
"faithful": "Пытается оставаться близким к исходному цвету, создавая при этом гармоничную палитру.",
|
||||
"fruit-salad": "Схема Material Design, создающая игривую, яркую палитру с разнообразными оттенками.",
|
||||
"monochrome": "Схема Material Design, использующая однотонную шкалу серого с минимальным хроматическим содержанием.",
|
||||
@@ -866,6 +934,16 @@
|
||||
"media-player-show-buttons-label": "Показать кнопки",
|
||||
"media-player-show-visualizer-description": "Показать наложение аудиовизуализатора.",
|
||||
"media-player-visualizer-type-description": "Выберите тип визуализации для фона медиаплеера.",
|
||||
"system-stat-layout-bottom": "Низ",
|
||||
"system-stat-layout-description": "Выберите, как отображается легенда относительно графика.",
|
||||
"system-stat-layout-label": "Макет",
|
||||
"system-stat-layout-side": "Сторона",
|
||||
"system-stat-rounded-corners-description": "Использовать скругленные углы для фона виджета.",
|
||||
"system-stat-rounded-corners-label": "Скругленные Углы",
|
||||
"system-stat-show-background-description": "Показать фоновый контейнер для виджета системной статистики.",
|
||||
"system-stat-show-background-label": "Показать фон",
|
||||
"system-stat-stat-type-description": "Выберите, какую системную статистику отображать.",
|
||||
"system-stat-stat-type-label": "Тип Статистики",
|
||||
"title": "Настольные виджеты",
|
||||
"weather-enabled-description": "Показать погодный виджет на рабочем столе.",
|
||||
"weather-enabled-label": "Включить виджет погоды",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "Поиск моноширинного шрифта...",
|
||||
"fonts-reset-scaling": "Сбросить масштабирование",
|
||||
"fonts-title": "Шрифты",
|
||||
"keybinds-description": "Настройте глобальные клавиши навигации для панелей и лаунчера.",
|
||||
"keybinds-down": "Переместить вниз",
|
||||
"keybinds-enter": "Подтвердить / Действие",
|
||||
"keybinds-escape": "Закрыть / Назад",
|
||||
"keybinds-left": "Переместить влево",
|
||||
"keybinds-right": "Переместить вправо",
|
||||
"keybinds-title": "Навигационные Привязки Клавиш",
|
||||
"keybinds-up": "Переместить вверх",
|
||||
"language-desc": "Выберите предпочитаемый язык для приложения.",
|
||||
"language-select-auto-detect": "Автоматически",
|
||||
"language-select-description": "Выберите язык, используемый в интерфейсе приложения.",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "Использовать сплошной чёрный цвет вместо цвета фона панели.",
|
||||
"screen-corners-solid-black-label": "Сплошные чёрные углы",
|
||||
"screen-corners-title": "Углы экрана",
|
||||
"settings-copied": "Настройки скопированы в буфер обмена"
|
||||
"settings-copied": "Настройки скопированы в буфер обмена",
|
||||
"tab-basics": "Основы",
|
||||
"tab-keybinds": "Горячие Клавиши"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• Команды выполняются через shell (sh -lc)<br>• Команды выполняются в фоновом режиме (отдельно)<br>• Кнопки 'Тест' выполняются с текущими значениями",
|
||||
@@ -980,40 +1068,40 @@
|
||||
"info-parameters-label": "Доступные параметры",
|
||||
"noctalia-started-description": "Команда для выполнения после завершения загрузки Noctalia.",
|
||||
"noctalia-started-label": "Noctalia запущена",
|
||||
"noctalia-started-placeholder": "например, notify-send 'Noctalia загружена'",
|
||||
"noctalia-started-placeholder": "напр. notify-send 'Noctalia загружена'",
|
||||
"performance-mode-disabled-description": "Команда для выполнения при выключении режима производительности Noctalia.",
|
||||
"performance-mode-disabled-label": "Режим производительности выключен",
|
||||
"performance-mode-disabled-placeholder": "например, notify-send \"Производительность\" \"Режим выключен\"",
|
||||
"performance-mode-disabled-placeholder": "напр. notify-send \"Производительность\" \"Режим выключен\"",
|
||||
"performance-mode-enabled-description": "Команда для выполнения при включении режима производительности Noctalia.",
|
||||
"performance-mode-enabled-label": "Режим производительности включен",
|
||||
"performance-mode-enabled-placeholder": "например, notify-send \"Производительность\" \"Режим включен\"",
|
||||
"performance-mode-enabled-placeholder": "напр. notify-send \"Производительность\" \"Режим включен\"",
|
||||
"screen-lock-description": "Команда для выполнения при блокировке экрана.",
|
||||
"screen-lock-label": "Экран заблокирован",
|
||||
"screen-lock-placeholder": "например, notify-send \"Экран\" \"Заблокирован\"",
|
||||
"screen-lock-placeholder": "напр. notify-send \"Экран\" \"Заблокирован\"",
|
||||
"screen-unlock-description": "Команда для выполнения при разблокировке экрана.",
|
||||
"screen-unlock-label": "Экран разблокирован",
|
||||
"screen-unlock-placeholder": "например, notify-send \"Экран\" \"Разблокирован\"",
|
||||
"screen-unlock-placeholder": "напр. notify-send \"Экран\" \"Разблокирован\"",
|
||||
"session-description": "Команда, выполняемая перед выключением или перезагрузкой. Получает тип действия как $1 (выключением/перезагрузкой).",
|
||||
"session-label": "Конец сессии",
|
||||
"session-placeholder": "например, notify-send \"Session\" \"$1\"",
|
||||
"session-placeholder": "напр. notify-send \"Session\" \"$1\"",
|
||||
"system-hooks-desc": "Настройка команд для выполнения при системных событиях.",
|
||||
"system-hooks-enable-description": "Включить или отключить все команды хуков.",
|
||||
"system-hooks-enable-label": "Включить хуки",
|
||||
"system-hooks-title": "Системные хуки",
|
||||
"theme-changed-description": "Команда для выполнения при переключении темы между тёмным и светлым режимами.",
|
||||
"theme-changed-label": "Тема изменена",
|
||||
"theme-changed-placeholder": "например, notify-send \"Тема\" \"Переключена\"",
|
||||
"theme-changed-placeholder": "напр. notify-send \"Тема\" \"Переключена\"",
|
||||
"title": "Хуки",
|
||||
"wallpaper-changed-description": "Команда для выполнения при смене обоев.",
|
||||
"wallpaper-changed-label": "Обои изменены",
|
||||
"wallpaper-changed-placeholder": "например, notify-send \"Обои\" \"Изменены\""
|
||||
"wallpaper-changed-placeholder": "напр. notify-send \"Обои\" \"Изменены\""
|
||||
},
|
||||
"indicator": {
|
||||
"default-value": "По умолчанию: {value}",
|
||||
"system-default": "По умолчанию"
|
||||
},
|
||||
"launcher": {
|
||||
"clipboard-desc": "Получайте доступ к истории буфера обмена и управляйте ею из панели запуска.",
|
||||
"clipboard-desc": "Получайте доступ к истории буфера обмена и управляйте ею из лаунчера.",
|
||||
"execute-desc": "Настройте способ запуска приложений.",
|
||||
"execute-title": "Исполнение",
|
||||
"settings-annotation-tool-description": "Команда для запуска при нажатии кнопки аннотирования в истории буфера обмена. Изображение будет передано в эту команду.",
|
||||
@@ -1027,19 +1115,29 @@
|
||||
"settings-clip-wrap-text-label": "Обернуть текст из буфера обмена",
|
||||
"settings-clipboard-history-description": "Доступ к ранее скопированным элементам из запуска.",
|
||||
"settings-clipboard-history-label": "Включить историю буфера обмена",
|
||||
"settings-clipboard-watch-image-description": "Полная строка команды, передаваемая в wl-paste для изменения изображений (требуется перезапуск).",
|
||||
"settings-clipboard-watch-image-label": "Команда Отслеживания Изображений",
|
||||
"settings-clipboard-watch-text-description": "Полная строка команды, переданная в wl-paste для изменений текста (требуется перезапуск).",
|
||||
"settings-clipboard-watch-text-label": "Команда наблюдения за текстом",
|
||||
"settings-custom-launch-prefix-description": "Добавлять префикс к командам с помощью пользовательского запуска (например, 'runapp' для интеграции с systemd).",
|
||||
"settings-custom-launch-prefix-enabled-description": "Использовать пользовательский префикс для запуска приложений вместо метода по умолчанию.",
|
||||
"settings-custom-launch-prefix-enabled-label": "Включить пользовательский префикс запуска",
|
||||
"settings-custom-launch-prefix-label": "Пользовательский префикс запуска",
|
||||
"settings-density-description": "Настройте размер значков приложений и плотность Launcher.",
|
||||
"settings-density-label": "Плотность",
|
||||
"settings-desc": "Настройка поведения и внешнего вида запуска.",
|
||||
"settings-enable-settings-search-description": "Показывать результаты настроек при поиске в Launcher.",
|
||||
"settings-enable-settings-search-description": "Показывать результаты настроек при поиске в лаунчере.",
|
||||
"settings-enable-settings-search-label": "Включить поиск в настройках",
|
||||
"settings-enable-windows-search-description": "Поиск и фокусировка активных окон.",
|
||||
"settings-enable-windows-search-label": "Включить поиск окон",
|
||||
"settings-grid-view-description": "Показывать элементы в виде сетки вместо списка.",
|
||||
"settings-icon-mode-description": "Использовать нативные системные иконки вместо иконок Tabler.",
|
||||
"settings-icon-mode-label": "Использовать нативные иконки",
|
||||
"settings-ignore-mouse-input-description": "Отключить взаимодействие с мышью и колесом прокрутки в лаунчере.",
|
||||
"settings-ignore-mouse-input-label": "Игнорировать ввод мыши",
|
||||
"settings-position-description": "Выберите, где появляется панель запуска.",
|
||||
"settings-overlay-layer-description": "Отображать запускатель на слое наложения, над полноэкранными окнами. При включении запускатель не будет прикреплен к панели.",
|
||||
"settings-overlay-layer-label": "Показывать поверх полноэкранного режима",
|
||||
"settings-position-description": "Выберите, где появляется панель лаунчера.",
|
||||
"settings-show-categories-description": "Показывать вкладки категорий для фильтрации приложений.",
|
||||
"settings-show-categories-label": "Показывать категории",
|
||||
"settings-show-icon-background-description": "Показывать закруглённый прямоугольник в качестве фона для иконок.",
|
||||
@@ -1050,7 +1148,9 @@
|
||||
"settings-terminal-command-label": "Команда терминала",
|
||||
"settings-use-app2unit-description": "Использует альтернативный метод запуска для лучшего управления процессами приложений и предотвращения проблем.",
|
||||
"settings-use-app2unit-label": "Использовать App2Unit для запуска приложений",
|
||||
"title": "Запуск"
|
||||
"settings-view-mode-description": "Выберите макет для записей Запускателя.",
|
||||
"settings-view-mode-label": "Режим просмотра",
|
||||
"title": "Лаунчер"
|
||||
},
|
||||
"location": {
|
||||
"calendar-cards-desc": "Организуйте и включайте/выключайте карточки в панели календаря.",
|
||||
@@ -1066,12 +1166,12 @@
|
||||
"date-time-show-events-description": "Отображать события на панели календаря.",
|
||||
"date-time-show-events-label": "Показывать события календаря",
|
||||
"date-time-title": "Дата и время",
|
||||
"date-time-use-analog-description": "Показывать аналоговые часы в окне календаря и на экране блокировки.",
|
||||
"date-time-use-analog-description": "Показывать аналоговые часы в окне календаря.",
|
||||
"date-time-use-analog-label": "Использовать аналоговый стиль часов",
|
||||
"date-time-week-numbers-description": "Отображает номер недели в году (например, Неделя 38) в календаре.",
|
||||
"date-time-week-numbers-description": "Отображает номер недели в году (например, неделя 38) в календаре.",
|
||||
"date-time-week-numbers-label": "Показывать номера недель",
|
||||
"location-desc": "Получите точную погоду и расписание ночного света, установив своё местоположение.",
|
||||
"location-search-description": "например, Москва, RU",
|
||||
"location-search-description": "напр. Москва, RU",
|
||||
"location-search-label": "Поиск местоположения",
|
||||
"location-search-placeholder": "Введите название местоположения",
|
||||
"location-title": "Ваше местоположение",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "Отображать погоду в календаре"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "Когда fprintd (аутентификация по отпечатку пальца) активен, эта опция позволяет вам входить в систему с помощью пароля вместо отпечатка пальца.",
|
||||
"allow-password-with-fprintd-label": "Разрешить вход по паролю с помощью fprintd",
|
||||
"auto-start-auth-description": "Aвтоматически запускает аутентификацию по отпечатку пальца без необходимости нажатия клавиши или щелчка кнопки.",
|
||||
"auto-start-auth-label": "Автоматический запуск аутентификации",
|
||||
"clock-format-description": "Настройте формат часов, используя токены синтаксиса даты/времени.",
|
||||
"clock-format-label": "Формат часов",
|
||||
"clock-style-analog": "Аналоговый",
|
||||
"clock-style-custom": "Пользовательский",
|
||||
"clock-style-description": "Выберите визуальный стиль часов на Экране блокировки.",
|
||||
"clock-style-digital": "Цифровой",
|
||||
"clock-style-label": "Стиль Часов",
|
||||
"compact-lockscreen-description": "Показывать только поле для ввода логина и системные элементы управления, скрывая виджеты погоды и медиа.",
|
||||
"compact-lockscreen-label": "Компактный экран блокировки",
|
||||
"lock-on-suspend-description": "Автоматически блокировать экран при приостановке работы системы.",
|
||||
"lock-on-suspend-label": "Блокировать при приостановке",
|
||||
"lock-screen-animations-description": "Включить или отключить анимации экрана блокировки.",
|
||||
"lock-screen-animations-label": "Анимации Экрана Блокировки",
|
||||
"lock-screen-blur-strength-description": "Применяет эффект размытия к обоям экрана блокировки.",
|
||||
"lock-screen-blur-strength-label": "Сила размытия экрана блокировки",
|
||||
"lock-screen-tint-strength-description": "Применяет наложение оттенка к обоям экрана блокировки.",
|
||||
"lock-screen-tint-strength-label": "Интенсивность тонировки экрана блокировки",
|
||||
"monitors-desc": "Показать экран блокировки на определенных мониторах. По умолчанию на всех, если ни один не выбран.",
|
||||
"show-hibernate-description": "Показывать опцию 'спящий режим' в элементах управления питанием.",
|
||||
"show-hibernate-label": "Показывать спящий режим",
|
||||
"show-session-buttons-description": "Разрешить доступ к настройкам питания с экрана блокировки.",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "Сохранять низкую срочность в истории",
|
||||
"history-normal-urgency-description": "Сохранять уведомления с нормальным приоритетом в истории.",
|
||||
"history-normal-urgency-label": "Сохранять нормальную срочность в истории",
|
||||
"media-toast-description": "Показывать всплывающее уведомление при изменении состояния воспроизведения медиа.",
|
||||
"media-toast-label": "Медиа",
|
||||
"monitors-desc": "Показывать уведомления на определённых мониторах. По умолчанию на всех, если ни один не выбран.",
|
||||
"settings-always-on-top-description": "Отображать уведомления поверх полноэкранных окон и других слоёв.",
|
||||
"settings-background-opacity-description": "Настройка непрозрачности фона уведомлений.",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "Звуки уведомлений недоступны",
|
||||
"sounds-volume-description": "Настроить уровень громкости для звуков уведомлений.",
|
||||
"sounds-volume-label": "Громкость звука",
|
||||
"toast-battery-description": "Показывать предупреждение, когда уровень заряда батареи опускается ниже этого процента.",
|
||||
"toast-battery-label": "Предупреждение о батарее",
|
||||
"toast-desc": "Настроить внешний вид и поведение всплывающих уведомлений.",
|
||||
"toast-keyboard-description": "Показывать всплывающее уведомление при смене раскладки клавиатуры.",
|
||||
"toast-keyboard-label": "Раскладка клавиатуры"
|
||||
"toast-keyboard-label": "Раскладка клавиатуры",
|
||||
"toast-media-description": "Показывать всплывающее уведомление при изменении состояния воспроизведения медиа.",
|
||||
"toast-media-label": "Медиа"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "Отображать OSD поверх полноэкранных окон и других слоёв.",
|
||||
@@ -1180,38 +1300,42 @@
|
||||
"duration-desc": "Как долго OSD остаётся видимым перед автоматическим скрытием.",
|
||||
"duration-title": "Таймаут автоскрытия",
|
||||
"enabled-description": "Показывать изменения громкости и яркости в реальном времени.",
|
||||
"enabled-label": "Включить экранное отображение (OSD)",
|
||||
"events-desc": "Выберите, какие события запускают экранное меню.",
|
||||
"general-desc": "Настроить видимость и поведение экранного меню (OSD).",
|
||||
"location-description": "Где появляются экранные отображения.",
|
||||
"enabled-label": "Включить уведомления (OSD)",
|
||||
"events-desc": "Выберите, по каким событиям выводить уведомления (OSD).",
|
||||
"general-desc": "Настроить видимость и поведение уведомлений (OSD).",
|
||||
"location-description": "Расположение экранных уведолений.",
|
||||
"monitors-desc": "Показывать OSD на определённых мониторах. По умолчанию на всех, если ни один не выбран.",
|
||||
"title": "Экранное отображение (OSD)",
|
||||
"title": "Уведомления (OSD)",
|
||||
"types-brightness-description": "Показывать OSD при изменении яркости экрана.",
|
||||
"types-brightness-label": "Яркость",
|
||||
"types-custom-text-description": "Показывать OSD для пользовательских текстовых сообщений через IPC.",
|
||||
"types-custom-text-label": "Пользовательский текст",
|
||||
"types-desc": "Выберите события, которые должны запускать экранное меню (OSD).",
|
||||
"types-desc": "Выберите события, которые должны запускать уведомления (OSD).",
|
||||
"types-input-volume-description": "Показывать OSD при изменении громкости микрофона.",
|
||||
"types-input-volume-label": "Входная громкость",
|
||||
"types-lockkey-description": "Показывать OSD при переключении клавиш Caps Lock, Num Lock или Scroll Lock.",
|
||||
"types-lockkey-label": "Клавиши блокировки",
|
||||
"types-media-description": "Показывать OSD при изменении состояния воспроизведения медиа (воспроизведение, пауза, пропуск).",
|
||||
"types-media-label": "Воспроизведение медиа",
|
||||
"types-title": "События, запускающие экранное меню",
|
||||
"types-title": "События, запускающие уведомления (OSD)",
|
||||
"types-volume-description": "Показывать OSD при изменении громкости аудиовыхода.",
|
||||
"types-volume-label": "Выходная громкость"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "Автоматическое обновление плагинов",
|
||||
"auto-update-description": "Автоматически обновлять все плагины при запуске оболочки.",
|
||||
"available-description": "Просмотр и установка плагинов из настроенных источников.",
|
||||
"available-label": "Доступные плагины",
|
||||
"available-no-plugins-description": "Проверьте исходники вашего плагина или обновите список.",
|
||||
"available-no-plugins-label": "Нет доступных плагинов",
|
||||
"check-for-updates": "Проверить обновления",
|
||||
"checking-for-updates": "Проверка обновлений...",
|
||||
"collision-already-installed": "Этот плагин уже установлен",
|
||||
"collision-custom-version-exists": "Пользовательская версия из \"{source}\" уже установлена",
|
||||
"collision-official-version-exists": "Официальная версия этого плагина уже установлена",
|
||||
"filter-downloaded": "Скачано",
|
||||
"filter-not-downloaded": "Не загружено",
|
||||
"filter-tags-description": "Фильтровать плагины по категории или статусу загрузки",
|
||||
"filter-tags-description": "Фильтровать плагины по категории или статусу загрузки.",
|
||||
"filter-tags-label": "Теги",
|
||||
"hot-reload-description": "Автоматически перезагружать плагины при изменении их файлов. Полезно для разработки плагинов.",
|
||||
"hot-reload-label": "Горячая перезагрузка (режим разработки)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "Мой крутой репозиторий",
|
||||
"sources-remove-tooltip": "Удалить исходный код плагина",
|
||||
"title": "Плагины",
|
||||
"translations-reloaded": "Переводы перезагружены: {name}",
|
||||
"uninstall-dialog-description": "Вы уверены, что хотите удалить {plugin}? Это удалит все данные плагина.",
|
||||
"uninstall-dialog-title": "Удалить плагин",
|
||||
"uninstall-error": "Не удалось удалить: {error}",
|
||||
@@ -1271,11 +1396,14 @@
|
||||
"entries-desc": "Настроить, какие действия питания отображаются в меню сеанса и в каком порядке.",
|
||||
"entries-title": "Действия питания",
|
||||
"entry-settings-command-description": "Пользовательская команда для выполнения этого действия. Оставьте пустым, чтобы использовать системную команду по умолчанию.",
|
||||
"entry-settings-command-placeholder": "systemctl poweroff",
|
||||
"entry-settings-command-placeholder": "напр. systemctl poweroff",
|
||||
"entry-settings-default-command-lock": "Внутренний экран блокировки (без команды)",
|
||||
"entry-settings-default-command-logout": "Внутренний выход из системы (без команды)",
|
||||
"entry-settings-default-info-description": "Если не указана пользовательская команда, будет использована системная команда по умолчанию.",
|
||||
"entry-settings-default-info-label": "Команда по умолчанию",
|
||||
"entry-settings-keybind-description": "Назначьте комбинацию клавиш для вызова этого действия, когда меню сеанса открыто.",
|
||||
"entry-settings-keybind-placeholder": "Нажмите Запись, чтобы назначить клавишу...",
|
||||
"entry-settings-keybind-recording": "Запись... Нажмите любую комбинацию клавиш",
|
||||
"entry-settings-title": "Настроить {entry}",
|
||||
"entry-settings-tooltip": "Настроить команду",
|
||||
"general-desc": "Настройка поведения и внешнего вида панели меню сеанса.",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Критический цвет",
|
||||
"custom-highlight-colors-title-label": "Пользовательские цвета выделения",
|
||||
"disk-available-label": "Доступно места на диске",
|
||||
"disk-section-label": "Использование диска",
|
||||
"enable-dgpu-monitoring-description": "Внимание: Это разбудит ваш дискретный графический процессор (NVIDIA/AMD), что может значительно повлиять на время работы от аккумулятора на ноутбуках с гибридной графикой.",
|
||||
"enable-dgpu-monitoring-label": "Включить мониторинг дискретного GPU",
|
||||
@@ -1325,8 +1454,8 @@
|
||||
"box-border-radius-description": "Настраивает скругление углов основных разделов макета, таких как боковые панели, карточки и панели контента.",
|
||||
"box-border-radius-label": "Радиус контейнера",
|
||||
"box-border-radius-reset": "Сбросить радиус контейнера",
|
||||
"control-border-radius-description": "Управляет кривизной интерактивных элементов, включая кнопки, переключатели и текстовые поля.",
|
||||
"control-border-radius-label": "Ввести радиус",
|
||||
"control-border-radius-description": "Управляет скруглением интерактивных элементов, включая кнопки, переключатели и текстовые поля.",
|
||||
"control-border-radius-label": "Радиус элементов ввода",
|
||||
"control-border-radius-reset": "Сбросить радиус ввода",
|
||||
"desc": "Настройка внешнего вида, ощущений и поведения интерфейса.",
|
||||
"dim-desktop-description": "Затемнять рабочий стол при открытии панелей или меню.",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "Выберите раскладку настроек (может потребоваться перезапуск).",
|
||||
"settings-panel-mode-label": "Режим панели настроек",
|
||||
"shadows-description": "Включает отбрасываемые тени под панелями и панелью задач.",
|
||||
"shadows-direction-description": "Выберите, откуда отбрасывается тень.",
|
||||
"shadows-direction-description": "Выберите, куда отбрасывается тень.",
|
||||
"shadows-direction-label": "Направление тени",
|
||||
"shadows-label": "Отбрасываемые тени",
|
||||
"title": "Пользовательский интерфейс",
|
||||
@@ -1357,19 +1486,19 @@
|
||||
"automation-change-mode-alphabetical": "Алфавитный",
|
||||
"automation-change-mode-description": "Выберите, как выбираются обои при автоматической смене.",
|
||||
"automation-change-mode-label": "Режим смены",
|
||||
"automation-custom-interval-description": "Введите время в формате ЧЧ:ММ (например, 01:30).",
|
||||
"automation-custom-interval-description": "Введите время в формате ЧЧ:ММ (напр. 01:30).",
|
||||
"automation-custom-interval-label": "Пользовательский интервал",
|
||||
"automation-interval-description": "Как часто автоматически менять обои.",
|
||||
"automation-interval-description": "Частота автоматической смены обоев.",
|
||||
"automation-interval-label": "Интервал смены обоев",
|
||||
"automation-random-wallpaper-description": "Запланировать смену случайных обоев через регулярные интервалы.",
|
||||
"automation-scheduled-change-description": "Автоматически менять обои через регулярные интервалы.",
|
||||
"automation-scheduled-change-description": "Автоматически менять обои через регулярные интервалы времени.",
|
||||
"automation-scheduled-change-label": "Запланированная смена",
|
||||
"look-feel-edge-smoothness-description": "Применяет мягкий, растушёванный эффект к краю переходов.",
|
||||
"look-feel-edge-smoothness-label": "Смягчить край перехода",
|
||||
"look-feel-fill-color-description": "Выберите цвет заливки, который может появиться за обоями.",
|
||||
"look-feel-fill-mode-description": "Выберите, как изображение должно масштабироваться, чтобы соответствовать разрешению вашего монитора.",
|
||||
"look-feel-fill-mode-label": "Режим заполнения",
|
||||
"look-feel-title": "Внешний вид и ощущения",
|
||||
"look-feel-title": "Внешний вид",
|
||||
"look-feel-transition-duration-description": "Продолжительность анимации перехода в секундах.",
|
||||
"look-feel-transition-duration-label": "Продолжительность перехода",
|
||||
"look-feel-transition-type-description": "Тип анимации при переключении между обоями.",
|
||||
@@ -1386,19 +1515,23 @@
|
||||
"settings-monitor-specific-description": "Установить отдельную папку с обоями для каждого монитора.",
|
||||
"settings-monitor-specific-label": "Каталоги для конкретного монитора",
|
||||
"settings-monitor-specific-tooltip": "Папка обоев монитора",
|
||||
"settings-overview-blur-strength-description": "Применяет силу размытия к обзору.",
|
||||
"settings-overview-blur-strength-label": "Сила размытия обзора",
|
||||
"settings-overview-tint-description": "Применяет интенсивность оттенка к обзору.",
|
||||
"settings-overview-tint-label": "Интенсивность тонировки обзора",
|
||||
"settings-recursive-search-description": "Также искать обои во вложенных папках каталога обоев.",
|
||||
"settings-recursive-search-label": "Искать во вложенных папках",
|
||||
"settings-select-monitor-folder": "Выбрать папку с обоями для монитора",
|
||||
"settings-selector-description": "Выберите обои.",
|
||||
"settings-selector-description": "Перейти на панель выбора обоев.",
|
||||
"settings-selector-position-description": "Выберите, где появляется панель выбора обоев.",
|
||||
"settings-show-hidden-files-tooltip-hide": "Скрыть скрытые файлы",
|
||||
"settings-show-hidden-files-tooltip-hide": "Не показывать скрытые файлы",
|
||||
"settings-show-hidden-files-tooltip-show": "Показать скрытые файлы",
|
||||
"settings-title": "Настройки обоев",
|
||||
"settings-view-mode-description": "Выберите способ отображения обоев из вашей директории.",
|
||||
"settings-view-mode-label": "Режим просмотра",
|
||||
"view-mode-browse": "Просмотр каталогов",
|
||||
"view-mode-cycle-tooltip": "Режим просмотра: {mode} (нажмите, чтобы изменить)",
|
||||
"view-mode-recursive": "Сглаженные подкаталоги",
|
||||
"view-mode-recursive": "Объединить с подкаталогами",
|
||||
"view-mode-single": "Корневой каталог"
|
||||
}
|
||||
},
|
||||
@@ -1407,11 +1540,11 @@
|
||||
"enter-command": "Введите команду для выполнения (приложение или пользовательский скрипт)",
|
||||
"enter-ipc-identifier": "Введите уникальный идентификатор для команд IPC",
|
||||
"enter-path": "Введите путь...",
|
||||
"enter-text-to-collapse": "например, 'ничего не играет'. Используйте /regex/ для шаблонов.",
|
||||
"enter-text-to-collapse": "напр. 'ничего не играет'. Используйте /regex/ для шаблонов.",
|
||||
"enter-tooltip": "Введите подсказку",
|
||||
"enter-width-pixels": "Введите ширину в пикселях",
|
||||
"search": "Поиск...",
|
||||
"search-icons": "например, noctalia, niri, battery, cloud",
|
||||
"search-icons": "напр. noctalia, niri, battery, cloud",
|
||||
"search-launcher": "Поиск записей... или используйте > для команд",
|
||||
"search-wallhaven": "Поиск в Wallhaven...",
|
||||
"search-wallpapers": "Введите для фильтрации обоев..."
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "Готово!",
|
||||
"appearance": {
|
||||
"subheader": "Выберите режим оформления и источник палитры цветов (обои или предопределённые)."
|
||||
"subheader": "Выберите темный режим и источники цвета (обои или предопределенные)."
|
||||
},
|
||||
"customize": {
|
||||
"header": "Настройте свой опыт",
|
||||
@@ -1490,7 +1623,7 @@
|
||||
"disk": "Диск",
|
||||
"download-speed": "Скорость загрузки",
|
||||
"gpu-temp": "Температура GPU",
|
||||
"load-average": "Нaгр. ср.",
|
||||
"load-average": "Средняя нагрузка",
|
||||
"title": "Системный монитор",
|
||||
"upload-speed": "Скорость загрузки"
|
||||
},
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "Режим полёта"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "Критический заряд батареи",
|
||||
"critical-desc": "Батарея заряжена на {percent}% — немедленно подключите зарядное устройство",
|
||||
"low": "Низкий заряд батареи",
|
||||
"low-desc": "Заряд батареи {percent}%. Пожалуйста, подключите зарядное устройство"
|
||||
"low-desc": "Батарея заряжена на {percent}% — пожалуйста, подключите зарядное устройство"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Адрес скопирован в буфер обмена",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "Диск",
|
||||
"fade": "Затухание",
|
||||
"honeycomb": "Соты",
|
||||
"pixelate": "Пикселизировать",
|
||||
"stripes": "Полосы",
|
||||
"wipe": "Стирание"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "Загрузка обоев...",
|
||||
"no-results": "Обои не найдены. Попробуйте другой поисковый запрос.",
|
||||
"page": "{current} из {total}"
|
||||
"page": "{current} из {total}",
|
||||
"page-prefix": "Страница",
|
||||
"page-suffix": "из {total}"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+187
-48
@@ -48,11 +48,16 @@
|
||||
"device-default": "Varsayılan (Bileşik aygıt)",
|
||||
"device-description": "Görüntülenecek pil cihazını seçin.",
|
||||
"device-label": "Pil cihazı",
|
||||
"display-mode-description": "Pilin çubukta nasıl görüntüleneceğini seçin.",
|
||||
"display-mode-graphic": "Grafik pil",
|
||||
"display-mode-graphic-clean": "Grafik pil (yüzde yok)",
|
||||
"display-mode-icon-always": "Simge - Her zaman % göster",
|
||||
"display-mode-icon-hover": "Simge - Üzerine gelindiğinde göster",
|
||||
"display-mode-icon-only": "Yalnızca simge",
|
||||
"hide-if-idle-description": "Pil şarj olmuyor veya deşarj olmuyorken aracı gizle.",
|
||||
"hide-if-idle-label": "Boşta kalınca gizle",
|
||||
"hide-if-not-detected-description": "Sistemde pil algılanmadığında araç çubuğunu gizle.",
|
||||
"hide-if-not-detected-label": "Algılanmazsa gizle",
|
||||
"low-battery-threshold-description": "Batarya bu yüzdeye düştüğünde uyarı göster.",
|
||||
"low-battery-threshold-label": "Düşük batarya eşiği",
|
||||
"show-noctalia-performance-description": "Pil panelinde Noctalia performans modu anahtarını göster.<br>Kaynak kullanımını azaltmak için Noctalia'da gölgeleri ve animasyonları devre dışı bırakır.",
|
||||
"show-noctalia-performance-label": "Noctalia Performans anahtarını göster",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "Özel yazı tipi kullan",
|
||||
"use-monospaced-font-description": "Etkinleştirildiğinde, saat tek aralıklı yazı tipini kullanır.",
|
||||
"use-monospaced-font-label": "Tek aralıklı yazı tipi kullan",
|
||||
"use-primary-color-description": "Etkinleştirildiğinde, bu vurgu için birincil rengi uygular.",
|
||||
"use-primary-color-label": "Birincil rengi kullan",
|
||||
"vertical-bar-description": "Her parçayı yeni bir satıra ayırmak için boşluk kullanın.",
|
||||
"vertical-bar-label": "Dikey çubuk"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"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.",
|
||||
"color-selection-label": "Renk seç",
|
||||
"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.",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "Okunmamış bildirim yokken bildirim simgesini gizle.",
|
||||
"hide-widget-when-zero-unread-label": "Okunmamış yokken simgeyi gizle",
|
||||
"show-unread-badge-description": "Okunmamış bildirim sayısını gösteren bir rozet göster.",
|
||||
"show-unread-badge-label": "Okunmamış bildirimleri göster"
|
||||
"show-unread-badge-label": "Okunmamış bildirimleri göster",
|
||||
"unread-badge-color-description": "Okunmamış bildirim rozeti için rengi seçin.",
|
||||
"unread-badge-color-label": "Okunmamış rozet rengi"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "Eklenecek bir araç takımı seçin...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "İstatistikleri metin değerleri yerine mini çubuk grafikler olarak görüntüleyin. Düzen kaymasını önler.",
|
||||
"compact-mode-label": "Kompakt mod",
|
||||
"cpu-frequency-description": "Mevcut CPU saat hızını GHz cinsinden görüntüle.",
|
||||
"cpu-frequency-label": "CPU frekansını göster",
|
||||
"cpu-temperature-description": "Mevcut işlemci sıcaklık okumalarını gösterir.",
|
||||
"cpu-temperature-label": "İşlemci sıcaklığı",
|
||||
"cpu-usage-description": "Mevcut işlemci kullanım yüzdesini göster.",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "Bellek kullanımı",
|
||||
"network-traffic-description": "Ağ yükleme ve indirme hızlarını göster.",
|
||||
"network-traffic-label": "Ağ trafiği",
|
||||
"storage-as-percentage-description": "Disk alanını mutlak değerler yerine yüzde olarak göster.",
|
||||
"storage-as-percentage-label": "Disk yüzde olarak",
|
||||
"storage-available-description": "Kullanılan miktar yerine ne kadar disk alanı olduğunu gösterir.",
|
||||
"storage-available-label": "Kullanılabilir disk alanı",
|
||||
"storage-usage-description": "Disk alanı kullanım bilgilerini göster.",
|
||||
"storage-usage-label": "Depolama kullanımı",
|
||||
"swap-usage-description": "Takas belleği kullanımını göster.",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "Başlık genişliğini sıfırla"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "Çekmecenin ok simgesine tema renklerini uygula.",
|
||||
"chevron-color-label": "Ok rengi",
|
||||
"colorize-icons-description": "Tepsi simgelerine tema renklerini uygula.",
|
||||
"colorize-icons-label": "Simgeleri renklendir",
|
||||
"drawer-enabled-description": "Etkinleştirildiğinde, sabitlenmemiş tepsi öğeleri bir çekmece panelinde gösterilir.<br>Devre dışı bırakıldığında, tüm tepsi öğeleri satır içi gösterilir.",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "Pasif öğeleri gizle"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "Bu değerin nasıl görünmesini istediğinizi seçin.",
|
||||
"display-mode-label": "Görüntüleme modu"
|
||||
"display-mode-description": "Bu değerin nasıl görünmesini istediğinizi seçin."
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "Çalışma alanı adlarından gösterilecek karakter sayısı (1-10).",
|
||||
"character-count-label": "Karakter sayısı",
|
||||
"empty-color-description": "Boş Workspace'ler için arka plan rengini ayarla.",
|
||||
"empty-color-label": "Boş çalışma alanı rengi",
|
||||
"enable-scrollwheel-description": "Fare tekerleği ile çalışma alanları arasında geçiş yapın.",
|
||||
"enable-scrollwheel-label": "Çalışma alanları arasında geçiş yapmak için kaydırın",
|
||||
"focused-color-description": "Odaklanılan Workspace için arka plan rengini ayarla.",
|
||||
"focused-color-label": "Odaklanılan çalışma alanı rengi",
|
||||
"follow-focused-screen-description": "Çubuğun bulunduğu ekran yerine, şu anda odaklanmış ekrandaki çalışma alanlarını göster.",
|
||||
"follow-focused-screen-label": "Odaklanmış ekranı takip et",
|
||||
"grouped-border-opacity-description": "Çalışma alanı kapsayıcı kenarlıklarının opaklık düzeyini ayarlayın.",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "Dolu olmayanları gizle",
|
||||
"label-mode-description": "Çalışma alanı etiketlerinin nasıl gösterileceğini seçin.",
|
||||
"label-mode-label": "Etiket Modu",
|
||||
"occupied-color-description": "Dolu Workspaces için arka plan rengini ayarla.",
|
||||
"occupied-color-label": "Dolu çalışma alanı rengi",
|
||||
"pill-size-description": "Çalışma alanı haplarının boyutunu ayarlayın (50%-100%).",
|
||||
"pill-size-label": "Kapsül boyutu",
|
||||
"reverse-scrolling-description": "Kaydırırken çalışma alanı geçiş yönünü tersine çevir.",
|
||||
"reverse-scrolling-label": "Ters kaydırma",
|
||||
"show-applications-description": "Her çalışma alanının içinde uygulama simgelerini görüntüle.",
|
||||
"show-applications-label": "Uygulamaları göster",
|
||||
"show-badge-description": "Gruplandırılmış modda çalışma alanı numarası işaretini göster.",
|
||||
"show-badge-label": "Çalışma alanı rozetini göster",
|
||||
"show-labels-only-when-occupied-description": "Yalnızca pencere içeren çalışma alanı etiketlerini göster.",
|
||||
"show-labels-only-when-occupied-label": "Yalnızca dolu olduğunda etiketleri göster",
|
||||
"unfocused-icons-opacity-description": "Odaklanılmamış uygulama simgelerinin opaklık düzeyini ayarlayın.",
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "Yeni kurulum"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "Hata",
|
||||
"on-surface": "Yüzeyde",
|
||||
"primary": "Birincil",
|
||||
"secondary": "İkincil",
|
||||
"tertiary": "Üçüncül"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Eylemler",
|
||||
"add": "Ekle",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "Bağlantıyı kes",
|
||||
"disconnected": "Bağlantı kesildi",
|
||||
"disconnecting": "Bağlantı kesiliyor...",
|
||||
"display-mode": "Görüntü modu",
|
||||
"download": "İndir",
|
||||
"duration": "Süre",
|
||||
"dysfunctional": "İşlevsiz",
|
||||
"edit": "Düzenle",
|
||||
"enabled": "Etkinleştirildi",
|
||||
"error": "Hata",
|
||||
"events": "Etkinlikler",
|
||||
"execute": "Yürüt",
|
||||
"faithful": "Sadık",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "Yüklendi",
|
||||
"interface": "Arayüz",
|
||||
"internet": "İnternet",
|
||||
"keybind": "Tuş Ataması",
|
||||
"language": "Dil",
|
||||
"loading": "Yükleniyor...",
|
||||
"local": "Yerel",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "Bulunamadı",
|
||||
"notifications": "Bildirimler",
|
||||
"official": "Resmi",
|
||||
"on-surface": "Yüzeyde",
|
||||
"output": "Çıktı",
|
||||
"pair": "Eşleştir",
|
||||
"paired": "Eşleştirildi",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "Yoklama",
|
||||
"position": "Pozisyon",
|
||||
"previous": "Önceki",
|
||||
"primary": "Birincil",
|
||||
"random": "Rastgele",
|
||||
"reboot": "Yeniden başlat",
|
||||
"record": "Kaydı Başlat",
|
||||
"refresh": "Yenile",
|
||||
"required": "(gerekli)",
|
||||
"reset": "Sıfırla",
|
||||
"reset-to-default": "Varsayılanlara Sıfırla",
|
||||
"result-count": "{count} sonuç",
|
||||
"result-count-plural": "{count} sonuçlar",
|
||||
"resume": "Sürdür",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "Taranıyor...",
|
||||
"screen-corners": "Ekran köşeleri",
|
||||
"search": "Arama",
|
||||
"secondary": "İkincil",
|
||||
"security": "Güvenlik",
|
||||
"select": "Seç",
|
||||
"select-color": "Renk Seç",
|
||||
"select-color-description": "Vurgu için tema renklerini uygula.",
|
||||
"select-icon-color": "Simge rengini seçin",
|
||||
"shortcuts": "Kısayollar",
|
||||
"shutdown": "Kapat",
|
||||
"signal": "Sinyal",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "Kaynaklar",
|
||||
"start": "Başlat",
|
||||
"stop": "Dur",
|
||||
"supporters": "Destekçiler",
|
||||
"suspend": "Askıya al",
|
||||
"templates": "Şablonlar",
|
||||
"tertiary": "Üçüncül",
|
||||
"test": "Test",
|
||||
"thresholds": "Eşikler",
|
||||
"title": "Başlık",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "Hafta",
|
||||
"widgets": "Araçlar",
|
||||
"width": "Genişlik",
|
||||
"windows": "Pencereler",
|
||||
"yes": "Evet"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "Üzerine gelindiğinde"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "Otomatik gizleme",
|
||||
"hidden": "Boş olduğunda gizle",
|
||||
"idle": "Boşta kalınca gizle",
|
||||
"non-exclusive": "Münhasır olmayan",
|
||||
"transparent": "Boşken şeffaf",
|
||||
"visible": "Her zaman görünür"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "Emojiler yükleniyor...",
|
||||
"emoji-loading-description": "Lütfen bekleyin",
|
||||
"emoji-no-recent": "Henüz yeni emoji yok",
|
||||
"emoji-search-description": "Emoji arama ve kopyalama"
|
||||
"emoji-search-description": "Emoji arama ve kopyalama",
|
||||
"settings-search-description": "Ayarları ara ve git",
|
||||
"windows-search-description": "Açık pencereleri ara ve odakla"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "Sıkı",
|
||||
"density-default": "Varsayılan",
|
||||
"density-mini": "Ufak",
|
||||
"density-spacious": "Geniş"
|
||||
"density-spacious": "Geniş",
|
||||
"display-mode-always-visible": "Her Zaman Görünür",
|
||||
"type-floating": "Yüzen",
|
||||
"type-framed": "Çerçeveli",
|
||||
"type-simple": "Basit"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "Klasik",
|
||||
"quick-settings-style-modern": "Modern"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "Konforlu",
|
||||
"compact": "Kompakt",
|
||||
"default": "Varsayılan"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "Izgara",
|
||||
"list": "Liste"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "Her zaman kaydır",
|
||||
"hover": "Üzerine gelince kaydır",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "Destekçi ol",
|
||||
"changelog": "Değişiklik günlüğünü görüntüle",
|
||||
"contributors-desc": "{count} <b>harika</b> katılımcımıza <b>teşekkürler</b>!",
|
||||
"contributors-description": "{count} <b>harika</b> katılımcımıza <b>teşekkürler</b>!",
|
||||
"contributors-description-plural": "{count} <b>harika</b> katılımcımıza <b>teşekkürler</b>!",
|
||||
"copy-info": "Bilgileri kopyala",
|
||||
"info-copied": "Bilgi panoya kopyalandı",
|
||||
@@ -628,15 +677,19 @@
|
||||
"noctalia-title": "Noctalia kabuğu",
|
||||
"privacy-policy": "Gizlilik politikası",
|
||||
"support": "Bizi destekleyin",
|
||||
"supporter-badge": "Destekçi",
|
||||
"supporters-desc": "Harika destekçimize kocaman bir teşekkür!",
|
||||
"supporters-desc-plural": "<b>{count} harika</b> destekçimize kocaman teşekkürler!",
|
||||
"supporters-loading": "Destekçiler yükleniyor...",
|
||||
"system-cpu": "İşlemci:",
|
||||
"system-disk": "Disk:",
|
||||
"system-gpu": "GPU:",
|
||||
"system-host": "Ev sahibi:",
|
||||
"system-host": "Host:",
|
||||
"system-install-hint": "Sistem bilgilerini görüntülemek için fastfetch'i kurun",
|
||||
"system-kernel": "Çekirdek:",
|
||||
"system-loading": "Sistem bilgileri yükleniyor...",
|
||||
"system-memory": "Hafıza:",
|
||||
"system-monitor": "Monitör",
|
||||
"system-monitor": "Monitör:",
|
||||
"system-not-installed": "fastfetch kurulu değil",
|
||||
"system-os": "İşletim sistemi:",
|
||||
"system-packages": "Paketler:",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "Sistem genelindeki ses seviyesi.",
|
||||
"volumes-step-size-description": "Ses değişimleri için adım boyutunu ayarlayın (tekerlek, klavye kısayolları).",
|
||||
"volumes-step-size-label": "Ses adım boyutu",
|
||||
"volumes-volume-feedback-description": "Ses seviyesi ayarlanırken geri bildirim sesi çal",
|
||||
"volumes-volume-feedback-description": "Ses seviyesi ayarlanırken geri bildirim sesi çal.",
|
||||
"volumes-volume-feedback-label": "Ses düzeyi geri bildirim sesini çal",
|
||||
"volumes-volume-overdrive-description": "Sesi %100'ün üzerine çıkarmaya izin ver. Bazı donanımlar desteklemeyebilir.",
|
||||
"volumes-volume-overdrive-label": "Ses aşımına izin ver"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "Fare ayrıldıktan sonra Bar'ın gizlenmeden önceki süre.",
|
||||
"appearance-auto-hide-delay-label": "Gizleme Gecikmesi",
|
||||
"appearance-auto-hide-exclusive-note": "Not: Otomatik gizleme etkin olduğunda özel bölge otomatik olarak devre dışı bırakılır.",
|
||||
"appearance-auto-show-delay-description": "Fare kenara girdiğinde çubuğun görünmesinden önceki süre.",
|
||||
"appearance-auto-show-delay-label": "Gösterme Gecikmesi",
|
||||
"appearance-background-opacity-description": "Çubuğun arka plan opaklığını özel olarak ayarlayın.",
|
||||
"appearance-background-opacity-label": "Çubuk arka plan opaklığı",
|
||||
"appearance-capsule-color-description": "Çubuk kapsülleri için bir renk seçin veya varsayılan yüzey rengi için hiçbirini kullanmayın.",
|
||||
"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-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-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ı",
|
||||
"appearance-frame-thickness": "Kalınlık",
|
||||
"appearance-hide-on-overview-description": "Kompozitör önizlemesi aktif olduğunda çubuğu gizle ve panelleri kapat.",
|
||||
"appearance-hide-on-overview-label": "Genel bakışta çubuğu gizle",
|
||||
"appearance-margins-description": "Yüzen araç çubuğunun etrafındaki kenar boşluklarını ayarlayın.",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-label": "Kapsülü 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",
|
||||
"monitor-configure-widgets": "Araçları yapılandır",
|
||||
@@ -734,7 +801,7 @@
|
||||
"title": "Araç çubuğu",
|
||||
"tray-blacklist-description": "Tepsi hariç tutma kuralları ekleyin, joker karakterleri destekler (*).",
|
||||
"tray-blacklist-label": "Kara liste",
|
||||
"tray-blacklist-placeholder": "örn., nm-applet, Fcitx*",
|
||||
"tray-blacklist-placeholder": "örn. nm-applet, Fcitx*",
|
||||
"tray-pin-application": "Uygulamayı sabitle",
|
||||
"tray-unpin-application": "Sabitlemeyi kaldır",
|
||||
"use-global-widgets": "Genel araçları kullan",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "Renk şemalarını indir",
|
||||
"method-description": {
|
||||
"content": "Kaynak içeriğin gerçek renkleriyle yakından eşleşen, yüksek doğruluklu renk çıkarma özelliğine sahip Material Design şeması.",
|
||||
"dysfunctional": "Faithful gibi, ancak ikinci en baskın renk ailesini birincil olarak seçer.",
|
||||
"faithful": "Uyumlu bir palet oluştururken kaynak rengine yakın kalmaya çalışır.",
|
||||
"fruit-salad": "Çeşitli ve farklı tonlara sahip, eğlenceli, canlı bir palet üreten Material Design şeması.",
|
||||
"monochrome": "Minimal kromatik içerikli tek tonlu gri tonlamalı Material Design şeması.",
|
||||
@@ -866,6 +934,16 @@
|
||||
"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.",
|
||||
"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",
|
||||
"system-stat-layout-side": "Taraf",
|
||||
"system-stat-rounded-corners-description": "Widget arka planı için yuvarlatılmış köşeler kullan.",
|
||||
"system-stat-rounded-corners-label": "Yuvarlatılmış Köşeler",
|
||||
"system-stat-show-background-description": "Sistem istatistik Widget'ı için arka plan kapsayıcısını göster.",
|
||||
"system-stat-show-background-label": "Arka planı göster",
|
||||
"system-stat-stat-type-description": "Hangi sistem istatistiğini görüntüleyeceğini seç.",
|
||||
"system-stat-stat-type-label": "İstatistik Türü",
|
||||
"title": "Masaüstü araçları",
|
||||
"weather-enabled-description": "Masaüstünde bir hava durumu aracı göster.",
|
||||
"weather-enabled-label": "Hava durumu araç kutusunu etkinleştir",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "Eş aralıklı yazı tipi ara...",
|
||||
"fonts-reset-scaling": "Ölçeklemeyi sıfırla",
|
||||
"fonts-title": "Yazı tipleri",
|
||||
"keybinds-description": "Paneller ve başlatıcı için genel navigasyon tuşlarını yapılandırın.",
|
||||
"keybinds-down": "Aşağı Taşı",
|
||||
"keybinds-enter": "Onayla / Eylem",
|
||||
"keybinds-escape": "Kapat / Geri",
|
||||
"keybinds-left": "Sola Taşı",
|
||||
"keybinds-right": "Sağa Taşı",
|
||||
"keybinds-title": "Gezinme Tuş Atamaları",
|
||||
"keybinds-up": "Yukarı Taşı",
|
||||
"language-desc": "Uygulama için tercih ettiğiniz dili seçin.",
|
||||
"language-select-auto-detect": "Otomatik",
|
||||
"language-select-description": "Uygulama arayüzünde kullanılacak dili seçin.",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "Araç çubuğu arka plan rengi yerine tam siyah kullan.",
|
||||
"screen-corners-solid-black-label": "Siyah köşeler",
|
||||
"screen-corners-title": "Ekran köşeleri",
|
||||
"settings-copied": "Ayarlar panoya kopyalandı"
|
||||
"settings-copied": "Ayarlar panoya kopyalandı",
|
||||
"tab-basics": "Temeller",
|
||||
"tab-keybinds": "Tuş Atamaları"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• Komutlar kabuk (sh -lc) ile yürütülür<br>• Komutlar arka planda yürütülür (ayrık)<br>• Test düğmeleri mevcut değerlerle yürütülür",
|
||||
@@ -983,30 +1071,30 @@
|
||||
"noctalia-started-placeholder": "örn. notify-send 'Noctalia Yüklendi'",
|
||||
"performance-mode-disabled-description": "Noctalia performans modu devre dışı bırakıldığında çalıştırılacak komut.",
|
||||
"performance-mode-disabled-label": "Performans modu devre dışı bırakıldı",
|
||||
"performance-mode-disabled-placeholder": "örn., notify-send \"Performans\" \"Mod devre dışı\"",
|
||||
"performance-mode-disabled-placeholder": "örn. notify-send \"Performans\" \"Mod devre dışı\"",
|
||||
"performance-mode-enabled-description": "Noctalia performans modu etkinleştirildiğinde çalıştırılacak komut.",
|
||||
"performance-mode-enabled-label": "Performans modu etkinleştirildi",
|
||||
"performance-mode-enabled-placeholder": "örn., notify-send \"Performans\" \"Mod etkin\"",
|
||||
"performance-mode-enabled-placeholder": "örn. notify-send \"Performans\" \"Mod etkin\"",
|
||||
"screen-lock-description": "Ekran kilitlendiğinde çalıştırılacak komut.",
|
||||
"screen-lock-label": "Ekran kilitlendi",
|
||||
"screen-lock-placeholder": "örn., notify-send \"Ekran\" \"Kilitlendi\"",
|
||||
"screen-lock-placeholder": "örn. notify-send \"Ekran\" \"Kilitlendi\"",
|
||||
"screen-unlock-description": "Ekran kilidi açıldığında çalıştırılacak komut.",
|
||||
"screen-unlock-label": "Ekran kilidi açıldı",
|
||||
"screen-unlock-placeholder": "örn., notify-send \"Ekran\" \"Açıldı\"",
|
||||
"screen-unlock-placeholder": "örn. notify-send \"Ekran\" \"Açıldı\"",
|
||||
"session-description": "Kapatma veya yeniden başlatma öncesinde çalıştırılacak komut. Eylem türünü $1 olarak alır (kapatma/yeniden başlatma).",
|
||||
"session-label": "Oturum sonu",
|
||||
"session-placeholder": "örn., notify-send \"Session\" \"$1\"",
|
||||
"session-placeholder": "örn. notify-send \"Session\" \"$1\"",
|
||||
"system-hooks-desc": "Sistem olayları gerçekleştiğinde çalıştırılacak komutları yapılandırın.",
|
||||
"system-hooks-enable-description": "Tüm kanca komutlarını etkinleştirin veya devre dışı bırakın.",
|
||||
"system-hooks-enable-label": "Hooks etkinleştir",
|
||||
"system-hooks-title": "Sistem hooks",
|
||||
"theme-changed-description": "Tema koyu ve aydınlık mod arasında geçişte çalıştırılacak komut.",
|
||||
"theme-changed-label": "Tema değişti",
|
||||
"theme-changed-placeholder": "örn., notify-send \"Tema\" \"Geçiş yapıldı\"",
|
||||
"theme-changed-placeholder": "örn. notify-send \"Tema\" \"Geçiş yapıldı\"",
|
||||
"title": "Kancalar",
|
||||
"wallpaper-changed-description": "Duvar kâğıdı değiştiğinde çalıştırılacak komut.",
|
||||
"wallpaper-changed-label": "Duvar kâğıdı değişti",
|
||||
"wallpaper-changed-placeholder": "örn., notify-send \"Duvar Kâğıdı\" \"Değişti\""
|
||||
"wallpaper-changed-placeholder": "örn. notify-send \"Duvar Kâğıdı\" \"Değişti\""
|
||||
},
|
||||
"indicator": {
|
||||
"default-value": "Varsayılan: {value}",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "Panoyu metni kaydır",
|
||||
"settings-clipboard-history-description": "Başlatıcıdan daha önce kopyalanan öğelere erişin.",
|
||||
"settings-clipboard-history-label": "Pano geçmişini etkinleştir",
|
||||
"settings-custom-launch-prefix-description": "Komutlara özel bir başlatıcı ile ön ek ekleyin (örn., systemd entegrasyonu için 'runapp').",
|
||||
"settings-clipboard-watch-image-description": "Görüntü değişiklikleri için wl-paste'e iletilen tam komut dizesi (yeniden başlatma gerektirir).",
|
||||
"settings-clipboard-watch-image-label": "Görüntü İzleme Komutu",
|
||||
"settings-clipboard-watch-text-description": "Görüntü değişiklikleri için wl-paste'e iletilen tam komut dizesi (yeniden başlatma gerektirir).",
|
||||
"settings-clipboard-watch-text-label": "Metin izleme komutu",
|
||||
"settings-custom-launch-prefix-description": "Komutlara özel bir başlatıcı ile ön ek ekleyin (örn. systemd entegrasyonu için 'runapp').",
|
||||
"settings-custom-launch-prefix-enabled-description": "Uygulamaları başlatmak için varsayılan yöntem yerine özel bir ön ek kullanın.",
|
||||
"settings-custom-launch-prefix-enabled-label": "Özel başlatma ön ekini etkinleştir",
|
||||
"settings-custom-launch-prefix-label": "Özel başlatma ön eki",
|
||||
"settings-density-description": "Uygulama simgelerinin boyutunu ve Launcher yoğunluğunu ayarlayın.",
|
||||
"settings-density-label": "Yoğunluk",
|
||||
"settings-desc": "Başlatıcının davranışını ve görünümünü özelleştirin.",
|
||||
"settings-enable-settings-search-description": "Başlatıcıda arama yaparken ayarlar sonuçlarını göster.",
|
||||
"settings-enable-settings-search-label": "Ayarlar aramasını etkinleştir",
|
||||
"settings-enable-windows-search-description": "Etkin pencereleri ara ve odakla.",
|
||||
"settings-enable-windows-search-label": "Pencere aramasını etkinleştir",
|
||||
"settings-grid-view-description": "Öğeleri liste yerine ızgara düzeninde görüntüle.",
|
||||
"settings-icon-mode-description": "Tabler simgeleri yerine yerel sistem simgelerini kullanın.",
|
||||
"settings-icon-mode-label": "Yerel simgeleri kullan",
|
||||
"settings-ignore-mouse-input-description": "Başlatıcıda fare etkileşimini ve kaydırma tekerleğini devre dışı bırak.",
|
||||
"settings-ignore-mouse-input-label": "Fare girişini yoksay",
|
||||
"settings-overlay-layer-description": "Başlatıcıyı tam ekran pencerelerinin üzerinde, yer paylaşımı katmanında görüntüle. Etkinleştirildiğinde, başlatıcı çubuğa takılmaz.",
|
||||
"settings-overlay-layer-label": "Tam ekranın üzerinde göster",
|
||||
"settings-position-description": "Başlatıcı panelinin nerede görüneceğini seçin.",
|
||||
"settings-show-categories-description": "Uygulamaları filtrelemek için kategori sekmelerini göster.",
|
||||
"settings-show-categories-label": "Kategorileri göster",
|
||||
@@ -1046,10 +1144,12 @@
|
||||
"settings-show-icon-background-label": "Simge arka planını göster",
|
||||
"settings-sort-by-usage-description": "Etkinleştirildiğinde, sıkça başlatılan uygulamalar listede ilk olarak görünür.",
|
||||
"settings-sort-by-usage-label": "En çok kullanılana göre sırala",
|
||||
"settings-terminal-command-description": "Bir terminal başlatmak için komut. Örn., 'kitty -e' veya 'gnome-terminal --'.",
|
||||
"settings-terminal-command-description": "Bir terminal başlatmak için komut. Örn. 'kitty -e' veya 'gnome-terminal --'.",
|
||||
"settings-terminal-command-label": "Terminal komutu",
|
||||
"settings-use-app2unit-description": "Uygulama süreçlerini daha iyi yönetmek ve sorunları önlemek için alternatif bir başlatma yöntemi kullanır.",
|
||||
"settings-use-app2unit-label": "Uygulamaları başlatmak için App2Unit kullan",
|
||||
"settings-view-mode-description": "Başlatıcı girişleri için düzeni seçin.",
|
||||
"settings-view-mode-label": "Görünüm modu",
|
||||
"title": "Başlatıcı"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,12 +1166,12 @@
|
||||
"date-time-show-events-description": "Takvim panelindeki etkinlikleri göster.",
|
||||
"date-time-show-events-label": "Takvim etkinliklerini göster",
|
||||
"date-time-title": "Tarih & Saat",
|
||||
"date-time-use-analog-description": "Takvim ekranında analog tarzı bir saat göster.",
|
||||
"date-time-use-analog-description": "Takvim penceresinde analog tarzda bir saat göster.",
|
||||
"date-time-use-analog-label": "Analog tarzı saat kullan",
|
||||
"date-time-week-numbers-description": "Takvimde yılın haftasını (örn., 38. Hafta) gösterir.",
|
||||
"date-time-week-numbers-description": "Takvimde yılın haftasını (örn. 38. Hafta) gösterir.",
|
||||
"date-time-week-numbers-label": "Hafta numaralarını göster",
|
||||
"location-desc": "Konumunuzu ayarlayarak hassas hava durumu ve gece ışığı zamanlaması alın.",
|
||||
"location-search-description": "örn., İstanbul, TR",
|
||||
"location-search-description": "örn. İstanbul, TR",
|
||||
"location-search-label": "Konum ara",
|
||||
"location-search-placeholder": "Konum adını girin",
|
||||
"location-title": "Konumunuz",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "Takvimde hava durumunu göster"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "fprintd (parmak izi kimlik doğrulaması) etkin olduğunda, bu seçenek parmak izi yerine parolanızı kullanarak oturum açmanızı sağlar.",
|
||||
"allow-password-with-fprintd-label": "fprintd ile parola girişine izin ver",
|
||||
"auto-start-auth-description": "Bir tuşa basmaya veya düğmeye tıklamaya gerek kalmadan parmak izi kimlik doğrulamasını otomatik olarak başlatır.",
|
||||
"auto-start-auth-label": "Otomatik kimlik doğrulama başlatma",
|
||||
"clock-format-description": "Tarih/saat sözdizimi belirteçlerini kullanarak saat biçimini özelleştirin.",
|
||||
"clock-format-label": "Saat Biçimi",
|
||||
"clock-style-analog": "Analog",
|
||||
"clock-style-custom": "Özel",
|
||||
"clock-style-description": "Kilit Ekranı'ndaki saatin görsel stilini seçin.",
|
||||
"clock-style-digital": "Dijital",
|
||||
"clock-style-label": "Saat Stili",
|
||||
"compact-lockscreen-description": "Sadece giriş girdisini ve sistem kontrollerini göster, hava durumu ve ortam araç takımlarını gizle.",
|
||||
"compact-lockscreen-label": "Kompakt ekran kilidi",
|
||||
"lock-on-suspend-description": "Sistemi askıya alırken otomatik olarak ekranı kilitler.",
|
||||
"lock-on-suspend-label": "Askıya alırken kilitle",
|
||||
"lock-screen-animations-description": "Kilit ekranı animasyonlarını etkinleştir veya devre dışı bırak.",
|
||||
"lock-screen-animations-label": "Kilit Ekranı Animasyonları",
|
||||
"lock-screen-blur-strength-description": "Kilit ekranı duvar kağıdına bulanıklık efekti uygular.",
|
||||
"lock-screen-blur-strength-label": "Kilit ekranı bulanıklık gücü",
|
||||
"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.",
|
||||
"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.",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "Düşük aciliyeti geçmişe kaydet",
|
||||
"history-normal-urgency-description": "Normal öncelikli bildirimleri geçmişe kaydet.",
|
||||
"history-normal-urgency-label": "Normal aciliyeti geçmişe kaydet",
|
||||
"media-toast-description": "Medya oynatma durumu değiştiğinde bir bildirim göster.",
|
||||
"media-toast-label": "Medya",
|
||||
"monitors-desc": "Bildirimleri belirli ekranlarda gösterin. Hiçbiri seçilmezse varsayılan olarak tümünde gösterilir.",
|
||||
"settings-always-on-top-description": "Bildirimleri tam ekran pencerelerinin ve diğer katmanların üzerinde görüntüle.",
|
||||
"settings-background-opacity-description": "Bildirim arka planlarının opaklığını ayarlayın.",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "Bildirim sesleri kullanılamıyor",
|
||||
"sounds-volume-description": "Bildirim sesleri için ses seviyesini ayarlayın.",
|
||||
"sounds-volume-label": "Ses seviyesi",
|
||||
"toast-battery-description": "Pil seviyesi bu yüzdenin altına düştüğünde bir uyarı göster.",
|
||||
"toast-battery-label": "Pil uyarısı",
|
||||
"toast-desc": "Bildirim penceresi görünümünü ve davranışını yapılandırın.",
|
||||
"toast-keyboard-description": "Klavye düzeni değiştiğinde bir bildirim göster.",
|
||||
"toast-keyboard-label": "Klavye düzeni"
|
||||
"toast-keyboard-label": "Klavye düzeni",
|
||||
"toast-media-description": "Medya oynatma durumu değiştiğinde bir bildirim göster.",
|
||||
"toast-media-label": "Medya"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "OSD'yi tam ekran pencerelerinin ve diğer katmanların üzerinde görüntüle.",
|
||||
@@ -1202,16 +1322,20 @@
|
||||
"types-volume-label": "Çıkış sesi"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "Eklentileri otomatik güncelle",
|
||||
"auto-update-description": "Shell başladığında tüm eklentileri otomatik olarak güncelle.",
|
||||
"available-description": "Yapılandırılmış kaynaklardan eklentilere göz atın ve yükleyin.",
|
||||
"available-label": "Mevcut eklentiler",
|
||||
"available-no-plugins-description": "Eklenti kaynaklarınızı kontrol edin veya listeyi yenileyin.",
|
||||
"available-no-plugins-label": "Kullanılabilir eklenti yok",
|
||||
"check-for-updates": "Güncellemeleri kontrol et",
|
||||
"checking-for-updates": "Güncellemeler kontrol ediliyor...",
|
||||
"collision-already-installed": "Bu eklenti zaten yüklü",
|
||||
"collision-custom-version-exists": "\"{source}\" kaynağından özel bir sürüm zaten yüklü",
|
||||
"collision-official-version-exists": "Bu eklentinin resmi sürümü zaten yüklü",
|
||||
"filter-downloaded": "İndirildi",
|
||||
"filter-not-downloaded": "İndirilmedi",
|
||||
"filter-tags-description": "Eklentileri kategoriye veya indirme durumuna göre filtrele",
|
||||
"filter-tags-description": "Eklentileri kategoriye veya indirme durumuna göre filtrele.",
|
||||
"filter-tags-label": "Etiketler",
|
||||
"hot-reload-description": "Eklenti dosyaları değiştiğinde eklentileri otomatik olarak yeniden yükle. Eklenti geliştirme için kullanışlıdır.",
|
||||
"hot-reload-label": "Hızlı yeniden yükleme (geliştirme modu)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "Havalı depom",
|
||||
"sources-remove-tooltip": "Eklenti kaynağını kaldır",
|
||||
"title": "Eklentiler",
|
||||
"translations-reloaded": "Çeviriler yeniden yüklendi: {name}",
|
||||
"uninstall-dialog-description": "{plugin} eklentisini kaldırmak istediğinizden emin misiniz? Bu, tüm eklenti verilerini kaldıracaktır.",
|
||||
"uninstall-dialog-title": "Eklentiyi kaldır",
|
||||
"uninstall-error": "Kaldırma başarısız oldu: {error}",
|
||||
@@ -1271,11 +1396,14 @@
|
||||
"entries-desc": "Oturum menüsünde hangi güç eylemlerinin görüneceğini ve hangi sırada görüneceğini özelleştirin.",
|
||||
"entries-title": "Güç eylemleri",
|
||||
"entry-settings-command-description": "Bu işlem için yürütülecek özel komut. Varsayılan sistem komutunu kullanmak için boş bırakın.",
|
||||
"entry-settings-command-placeholder": "systemctl poweroff",
|
||||
"entry-settings-command-placeholder": "örn. systemctl poweroff",
|
||||
"entry-settings-default-command-lock": "Dahili kilit ekranı (komut yok)",
|
||||
"entry-settings-default-command-logout": "Dahili oturum kapatma (komut yok)",
|
||||
"entry-settings-default-info-description": "Özel bir komut belirtilmezse, varsayılan sistem komutu kullanılır.",
|
||||
"entry-settings-default-info-label": "Varsayılan komut",
|
||||
"entry-settings-keybind-description": "Oturum menüsü açıkken bu eylemi tetiklemek için bir tuş kombinasyonu atayın.",
|
||||
"entry-settings-keybind-placeholder": "Bir tuş atamak için Kaydet'e basın...",
|
||||
"entry-settings-keybind-recording": "Kaydediliyor... Herhangi bir tuş kombinasyonuna basın",
|
||||
"entry-settings-title": "{entry} yapılandır",
|
||||
"entry-settings-tooltip": "Yapılandırma komutu",
|
||||
"general-desc": "Oturum menüsü panelinin davranışını ve görünümünü yapılandırın.",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Kritik renk",
|
||||
"custom-highlight-colors-title-label": "Özel vurgulama renkleri",
|
||||
"disk-available-label": "Kullanılabilir disk alanı",
|
||||
"disk-section-label": "Disk kullanımı",
|
||||
"enable-dgpu-monitoring-description": "Uyarı: Bu, ayrık GPU'nuzu (NVIDIA/AMD) uyandıracak ve bu da hibrit grafiklere sahip dizüstü bilgisayarlarda pil ömrünü önemli ölçüde etkileyebilir.",
|
||||
"enable-dgpu-monitoring-label": "Ayrık GPU izlemeyi etkinleştir",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "Ayarlar düzenini seçin (yeniden açılması gerekebilir).",
|
||||
"settings-panel-mode-label": "Ayarlar paneli modu",
|
||||
"shadows-description": "Çubukların ve panellerin altında gölgelerin etkinleştirilmesini sağlar.",
|
||||
"shadows-direction-description": "Gölgenin hangi yönden verileceğini seçin.",
|
||||
"shadows-direction-description": "Gölgenin nereye düşeceğini seçin.",
|
||||
"shadows-direction-label": "Gölge yönü",
|
||||
"shadows-label": "Gölge efektleri",
|
||||
"title": "Kullanıcı arayüzü",
|
||||
@@ -1357,7 +1486,7 @@
|
||||
"automation-change-mode-alphabetical": "Alfabetik",
|
||||
"automation-change-mode-description": "Otomatik değiştirirken duvar kâğıtlarının nasıl seçileceğini seçin.",
|
||||
"automation-change-mode-label": "Değiştirme modu",
|
||||
"automation-custom-interval-description": "Zamanı SS:DD olarak girin (örn., 01:30).",
|
||||
"automation-custom-interval-description": "Zamanı SS:DD olarak girin (örn. 01:30).",
|
||||
"automation-custom-interval-label": "Özel aralık",
|
||||
"automation-interval-description": "Duvar kâğıtlarının otomatik değiştirilme sıklığını belirleyin.",
|
||||
"automation-interval-label": "Duvar kâğıdı aralığı",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "Her ekran için farklı bir duvar kâğıdı klasörü ayarlayın.",
|
||||
"settings-monitor-specific-label": "Ekrana özgü dizinler",
|
||||
"settings-monitor-specific-tooltip": "Ekrana özgü duvar kâğıdı klasörü",
|
||||
"settings-overview-blur-strength-description": "Genel bakışa bulanıklık gücünü uygular.",
|
||||
"settings-overview-blur-strength-label": "Genel bakış bulanıklık gücü",
|
||||
"settings-overview-tint-description": "Ton gücünü genel bakışa uygular.",
|
||||
"settings-overview-tint-label": "Genel Bakış ton gücü",
|
||||
"settings-recursive-search-description": "Duvar kâğıdı dizinin alt klasörlerinde de duvar kâğıdı arayın.",
|
||||
"settings-recursive-search-label": "Alt klasörleri ara",
|
||||
"settings-select-monitor-folder": "Ekran duvar kâğıdı klasörünü seç",
|
||||
@@ -1407,11 +1540,11 @@
|
||||
"enter-command": "Çalıştırılacak komutu girin (uygulama veya özel komut)",
|
||||
"enter-ipc-identifier": "IPC komutları için benzersiz bir tanımlayıcı girin",
|
||||
"enter-path": "Yolu girin...",
|
||||
"enter-text-to-collapse": "örn., 'nothing is playing'. Desenler için /regex/ kullanın.",
|
||||
"enter-text-to-collapse": "örn. 'nothing is playing'. Desenler için /regex/ kullanın.",
|
||||
"enter-tooltip": "Araç ipucunu girin",
|
||||
"enter-width-pixels": "Genişliği piksel olarak girin",
|
||||
"search": "Ara...",
|
||||
"search-icons": "örn., noctalia, niri, battery, cloud",
|
||||
"search-icons": "örn. noctalia, niri, battery, cloud",
|
||||
"search-launcher": "Girişleri arayın... veya > komutları için kullanın",
|
||||
"search-wallhaven": "Wallhaven'da ara...",
|
||||
"search-wallpapers": "Duvar kâğıtlarını filtrelemek için yazın..."
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "Tamamlandı!",
|
||||
"appearance": {
|
||||
"subheader": "Dark Mode'u ve renk kaynaklarını seçin (Duvar kağıdı veya önceden tanımlı)."
|
||||
"subheader": "Koyu modu ve renk kaynaklarını (duvar kağıdı veya önceden tanımlanmış) seçin."
|
||||
},
|
||||
"customize": {
|
||||
"header": "Deneyiminizi özelleştirin",
|
||||
@@ -1449,7 +1582,7 @@
|
||||
},
|
||||
"skip-setup": "Kurulumu Atla",
|
||||
"telemetry-wizard-done": "Anlaşıldı!",
|
||||
"telemetry-wizard-note": "Kontrol sizde — istediğiniz zaman Ayarlar'dan etkinleştirebilir veya devre dışı bırakabilirsiniz",
|
||||
"telemetry-wizard-note": "Kontrol sizde — istediğiniz zaman ayarlar'dan etkinleştirebilir veya devre dışı bırakabilirsiniz",
|
||||
"telemetry-wizard-subtitle": "Noctalia'yı geliştirmeye yardımcı olmak için anonim analizler ekledik",
|
||||
"telemetry-wizard-title": "Gizlilik Güncellemesi",
|
||||
"wallpaper": {
|
||||
@@ -1490,7 +1623,7 @@
|
||||
"disk": "Disk",
|
||||
"download-speed": "İndirme hızı",
|
||||
"gpu-temp": "GPU sıcaklığı",
|
||||
"load-average": "Ort. yük",
|
||||
"load-average": "Ortalama yük",
|
||||
"title": "Sistem i̇zleyici",
|
||||
"upload-speed": "Yükleme hızı"
|
||||
},
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "Uçak modu"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "Kritik pil seviyesi",
|
||||
"critical-desc": "Pil {percent}% — lütfen şarj cihazını hemen bağlayın",
|
||||
"low": "Düşük batarya",
|
||||
"low-desc": "Batarya % {percent}. Lütfen şarj bağlantısını yapın"
|
||||
"low-desc": "Pil {percent}% seviyesinde — lütfen şarj cihazını bağlayın"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Adres panoya kopyalandı",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "Disk",
|
||||
"fade": "Belirsizleşme",
|
||||
"honeycomb": "Petek",
|
||||
"pixelate": "Pikselleştir",
|
||||
"stripes": "Çizgiler",
|
||||
"wipe": "Silme"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "Duvar kâğıtları yükleniyor...",
|
||||
"no-results": "Duvar kâğıdı bulunamadı. Farklı bir arama sorgusu deneyin.",
|
||||
"page": "{current} / {total}"
|
||||
"page": "{current} / {total}",
|
||||
"page-prefix": "Sayfa",
|
||||
"page-suffix": "{total} taneden"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
+186
-47
@@ -48,11 +48,16 @@
|
||||
"device-default": "Пристрій відображення за замовчуванням",
|
||||
"device-description": "Виберіть пристрій з акумулятором для відображення.",
|
||||
"device-label": "Пристрій живлення від батареї",
|
||||
"display-mode-description": "Виберіть, як відображається батарея на панелі.",
|
||||
"display-mode-graphic": "Графічна батарея",
|
||||
"display-mode-graphic-clean": "Графічна батарея (без %)",
|
||||
"display-mode-icon-always": "Іконка - Завжди показувати %",
|
||||
"display-mode-icon-hover": "Іконка - Показувати при наведенні",
|
||||
"display-mode-icon-only": "Лише значок",
|
||||
"hide-if-idle-description": "Приховати віджет, коли акумулятор не заряджається та не розряджається.",
|
||||
"hide-if-idle-label": "Приховати, коли неактивний",
|
||||
"hide-if-not-detected-description": "Приховати віджет, коли в системі не виявлено акумулятор.",
|
||||
"hide-if-not-detected-label": "Приховати, якщо не виявлено",
|
||||
"low-battery-threshold-description": "Показувати попередження, коли батарея падає нижче цього відсотка.",
|
||||
"low-battery-threshold-label": "Поріг попередження про низький заряд батареї",
|
||||
"show-noctalia-performance-description": "Відображати перемикач режиму продуктивності Noctalia в панелі батареї.<br>Вимикає тіні та анімації в Noctalia для зменшення використання ресурсів.",
|
||||
"show-noctalia-performance-label": "Показувати перемикач Продуктивність Noctalia",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "Використовувати власний шрифт",
|
||||
"use-monospaced-font-description": "Коли увімкнено, годинник використовуватиме моноширинний шрифт.",
|
||||
"use-monospaced-font-label": "Використовувати моноширинний шрифт",
|
||||
"use-primary-color-description": "Коли увімкнено, застосовується основний колір для акценту.",
|
||||
"use-primary-color-label": "Використовувати основний колір",
|
||||
"vertical-bar-description": "Використовуйте пробіл для розділення кожної частини на новий рядок.",
|
||||
"vertical-bar-label": "Вертикальна панель"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"collapse-condition-description": "Якщо вихідний текст збігається з цим значенням, кнопка згорнеться.",
|
||||
"collapse-condition-label": "Умова згортання",
|
||||
"color-selection-description": "Застосувати кольори теми до значка та тексту.",
|
||||
"color-selection-label": "Вибрати колір",
|
||||
"display-command-output-description": "Введіть команду для запуску з регулярним інтервалом. Перший рядок її виведення відображатиметься як текст.",
|
||||
"display-command-output-label": "Відображати виведення команди",
|
||||
"display-command-output-stream-description": "Введіть команду для безперервного запуску.",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "Приховувати значок сповіщень, якщо немає непрочитаних.",
|
||||
"hide-widget-when-zero-unread-label": "Приховувати значок без непрочитаних",
|
||||
"show-unread-badge-description": "Відображати значок з кількістю непрочитаних сповіщень.",
|
||||
"show-unread-badge-label": "Показувати значок непрочитаних"
|
||||
"show-unread-badge-label": "Показувати значок непрочитаних",
|
||||
"unread-badge-color-description": "Виберіть колір для значка непрочитаних сповіщень.",
|
||||
"unread-badge-color-label": "Колір значка непрочитаних"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "Виберіть віджет для додавання...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "Відображати статистику у вигляді міні-діаграм замість текстових значень. Запобігає зсуву макета.",
|
||||
"compact-mode-label": "Компактний режим",
|
||||
"cpu-frequency-description": "Відобразити поточну тактову частоту CPU у ГГц.",
|
||||
"cpu-frequency-label": "Показати частоту CPU",
|
||||
"cpu-temperature-description": "Показувати показники температури ЦП, якщо доступно.",
|
||||
"cpu-temperature-label": "Температура ЦП",
|
||||
"cpu-usage-description": "Відображати поточний відсоток використання ЦП.",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "Використання пам'яті",
|
||||
"network-traffic-description": "Відображати швидкість прийому та передачі даних.",
|
||||
"network-traffic-label": "Мережевий трафік",
|
||||
"storage-as-percentage-description": "Показувати місце на диску у відсотках замість абсолютних значень.",
|
||||
"storage-as-percentage-label": "Диск у відсотках",
|
||||
"storage-available-description": "Показує, скільки місця на диску доступно, замість того, скільки використовується.",
|
||||
"storage-available-label": "Доступне місце на диску",
|
||||
"storage-usage-description": "Показувати інформацію про використання дискового простору.",
|
||||
"storage-usage-label": "Використання сховища",
|
||||
"swap-usage-description": "Показати використання swap-пам'яті.",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "Скинути ширину заголовка"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "Застосувати кольори теми до іконки шеврона шухляди.",
|
||||
"chevron-color-label": "Колір стрілки",
|
||||
"colorize-icons-description": "Застосувати кольори теми до значків трея.",
|
||||
"colorize-icons-label": "Розфарбувати значки",
|
||||
"drawer-enabled-description": "Коли увімкнено, не закріплені елементи трея відображаються на панелі ящика.<br>Коли вимкнено, всі елементи трея відображаються в рядку.",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "Приховати пасивні предмети"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "Виберіть, як ви хочете, щоб це значення відображалося.",
|
||||
"display-mode-label": "Режим відображення"
|
||||
"display-mode-description": "Виберіть, як ви хочете, щоб це значення відображалося."
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "Кількість символів для відображення з назв робочих просторів (1-10).",
|
||||
"character-count-label": "Кількість символів",
|
||||
"empty-color-description": "Встановити колір фону для порожніх Workspace.",
|
||||
"empty-color-label": "Колір порожнього робочого столу",
|
||||
"enable-scrollwheel-description": "Перемикайтеся між робочими столами за допомогою коліщатка миші.",
|
||||
"enable-scrollwheel-label": "Прокрутіть, щоб перемикати робочі простори",
|
||||
"focused-color-description": "Встановити колір тла для сфокусованого Workspace.",
|
||||
"focused-color-label": "Колір сфокусованого робочого столу",
|
||||
"follow-focused-screen-description": "Відображати робочі простори з поточного активного екрана, а не з екрана, на якому розташована панель.",
|
||||
"follow-focused-screen-label": "Слідувати за активним eкраном",
|
||||
"grouped-border-opacity-description": "Встановити рівень непрозорості для меж контейнерів робочої області.",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "Приховати незайняті",
|
||||
"label-mode-description": "Виберіть, як відображаються мітки робочих просторів.",
|
||||
"label-mode-label": "Режим міток",
|
||||
"occupied-color-description": "Встановити колір фону для зайнятих Workspace.",
|
||||
"occupied-color-label": "Колір зайнятого робочого столу",
|
||||
"pill-size-description": "Налаштуйте розмір пігулок робочого простору (50%-100%).",
|
||||
"pill-size-label": "Розмір капсули",
|
||||
"reverse-scrolling-description": "Змінити напрямок перемикання робочих просторів під час прокручування.",
|
||||
"reverse-scrolling-label": "Зворотне прокручування",
|
||||
"show-applications-description": "Відображати значки програм у кожному робочому просторі.",
|
||||
"show-applications-label": "Показати застосунки",
|
||||
"show-badge-description": "Показувати значок номера робочого столу в згрупованому режимі.",
|
||||
"show-badge-label": "Показати значок робочого столу",
|
||||
"show-labels-only-when-occupied-description": "Показувати мітки робочих просторів лише тоді, коли вони містять вікна.",
|
||||
"show-labels-only-when-occupied-label": "Показувати мітки лише коли поле заповнене",
|
||||
"unfocused-icons-opacity-description": "Встановити рівень непрозорості для неактивних іконок застосунків.",
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "Нове встановлення"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "Помилка",
|
||||
"on-surface": "На поверхні",
|
||||
"primary": "Первинний",
|
||||
"secondary": "Вторинний",
|
||||
"tertiary": "Третинний"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Дії",
|
||||
"add": "Додати",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "Від'єднати",
|
||||
"disconnected": "Від'єднано",
|
||||
"disconnecting": "Від'єднання...",
|
||||
"display-mode": "Режим відображення",
|
||||
"download": "Завантажити",
|
||||
"duration": "Тривалість",
|
||||
"dysfunctional": "Дисфункціональний",
|
||||
"edit": "Редагувати",
|
||||
"enabled": "Увімкнено",
|
||||
"error": "Помилка",
|
||||
"events": "Події",
|
||||
"execute": "Виконати",
|
||||
"faithful": "Вірний",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "Встановлено",
|
||||
"interface": "Інтерфейс",
|
||||
"internet": "Інтернет",
|
||||
"keybind": "Прив'язка клавіш",
|
||||
"language": "Мова",
|
||||
"loading": "Завантаження...",
|
||||
"local": "Місцевий",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "Не знайдено",
|
||||
"notifications": "Сповіщення",
|
||||
"official": "Офіційний",
|
||||
"on-surface": "На поверхні",
|
||||
"output": "Вихід",
|
||||
"pair": "Спарувати",
|
||||
"paired": "Спаровано",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "Опитування",
|
||||
"position": "Позиція",
|
||||
"previous": "Попередній",
|
||||
"primary": "Основний",
|
||||
"random": "Випадковий",
|
||||
"reboot": "Перезапустити",
|
||||
"record": "Почати запис",
|
||||
"refresh": "Оновити",
|
||||
"required": "(обов'язково)",
|
||||
"reset": "Скинути",
|
||||
"reset-to-default": "Скинути за Замовчуванням",
|
||||
"result-count": "{count} результат",
|
||||
"result-count-plural": "{count} результати",
|
||||
"resume": "Продовжити",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "Сканування...",
|
||||
"screen-corners": "Кути екрана",
|
||||
"search": "Пошук",
|
||||
"secondary": "Вторинний",
|
||||
"security": "Безпека",
|
||||
"select": "Вибрати",
|
||||
"select-color": "Вибрати колір",
|
||||
"select-color-description": "Застосувати кольори теми для виділення.",
|
||||
"select-icon-color": "Вибрати колір значка",
|
||||
"shortcuts": "Ярлики",
|
||||
"shutdown": "Вимкнути",
|
||||
"signal": "Сигнал",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "Джерела",
|
||||
"start": "Почати",
|
||||
"stop": "Зупиніться",
|
||||
"supporters": "Прихильники",
|
||||
"suspend": "Призупинити",
|
||||
"templates": "Шаблони",
|
||||
"tertiary": "Третинний",
|
||||
"test": "Тест",
|
||||
"thresholds": "Порогові значення",
|
||||
"title": "Назва",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "Тиждень",
|
||||
"widgets": "Віджети",
|
||||
"width": "Ширина",
|
||||
"windows": "Вікна",
|
||||
"yes": "Так"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "При наведенні"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "Автоматичне приховування",
|
||||
"hidden": "Приховувати, коли порожньо",
|
||||
"idle": "Приховувати, коли неактивний",
|
||||
"non-exclusive": "Неексклюзивний",
|
||||
"transparent": "Прозорий, коли порожній",
|
||||
"visible": "Завжди видимий"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "Завантаження емодзі...",
|
||||
"emoji-loading-description": "Зачекайте, будь ласка",
|
||||
"emoji-no-recent": "Немає нещодавніх емодзі",
|
||||
"emoji-search-description": "Пошук і копіювання емодзі"
|
||||
"emoji-search-description": "Пошук і копіювання емодзі",
|
||||
"settings-search-description": "Пошук та перехід до налаштувань",
|
||||
"windows-search-description": "Пошук і фокусування відкритих вікон"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "Компактний",
|
||||
"density-default": "Стандартний",
|
||||
"density-mini": "Міні",
|
||||
"density-spacious": "Просторий"
|
||||
"density-spacious": "Просторий",
|
||||
"display-mode-always-visible": "Завжди видимий",
|
||||
"type-floating": "Плаваючий",
|
||||
"type-framed": "У рамці",
|
||||
"type-simple": "Простий"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "Класичний",
|
||||
"quick-settings-style-modern": "Сучасний"
|
||||
},
|
||||
"frame-rates-fps": "{fps} к/с",
|
||||
"launcher-density": {
|
||||
"comfortable": "Комфортний",
|
||||
"compact": "Компактний",
|
||||
"default": "За замовчуванням"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "Сітка",
|
||||
"list": "Список"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "Завжди прокручувати",
|
||||
"hover": "Прокручувати при наведенні",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "Стати прихильником",
|
||||
"changelog": "Переглянути журнал змін",
|
||||
"contributors-desc": "Подяка нашому {count} <b>чудовому</b> учаснику!",
|
||||
"contributors-description": "Подяка нашому {count} <b>чудовому</b> учаснику!",
|
||||
"contributors-description-plural": "Подяка нашим {count} <b>чудовим</b> учасникам!",
|
||||
"copy-info": "Копіювати інформацію",
|
||||
"info-copied": "Інформацію скопійовано до буфера обміну",
|
||||
@@ -628,10 +677,14 @@
|
||||
"noctalia-title": "Оболонка Noctalia",
|
||||
"privacy-policy": "Політика конфіденційності",
|
||||
"support": "Підтримати нас",
|
||||
"supporter-badge": "Прихильник",
|
||||
"supporters-desc": "Величезне дякую нашому чудовому прихильнику!",
|
||||
"supporters-desc-plural": "Величезна подяка нашим <b>{count} чудовим</b> прихильникам!",
|
||||
"supporters-loading": "Завантаження прихильників...",
|
||||
"system-cpu": "ЦП:",
|
||||
"system-disk": "Диск:",
|
||||
"system-gpu": "GPU:",
|
||||
"system-host": "Ведучий:",
|
||||
"system-host": "хост:",
|
||||
"system-install-hint": "Встановіть fastfetch для перегляду інформації про систему",
|
||||
"system-kernel": "Ядро:",
|
||||
"system-loading": "Завантаження системної інформації...",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "Системний рівень гучності.",
|
||||
"volumes-step-size-description": "Налаштуйте крок зміни гучності (колесо миші, гарячі клавіші).",
|
||||
"volumes-step-size-label": "Крок зміни гучності",
|
||||
"volumes-volume-feedback-description": "Відтворювати звук зворотного зв'язку під час регулювання гучності",
|
||||
"volumes-volume-feedback-description": "Відтворювати звук зворотного зв'язку під час регулювання гучності.",
|
||||
"volumes-volume-feedback-label": "Відтворити звук зворотного зв'язку гучності",
|
||||
"volumes-volume-overdrive-description": "Дозволити підвищення гучності понад 100%. Може не підтримуватись усім обладнанням.",
|
||||
"volumes-volume-overdrive-label": "Гучність понад 100%"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "Час, через який Bar сховається після того, як курсор миші залишить його.",
|
||||
"appearance-auto-hide-delay-label": "Затримка приховування",
|
||||
"appearance-auto-hide-exclusive-note": "Примітка: Ексклюзивна зона автоматично вимикається, коли автоприховування активне.",
|
||||
"appearance-auto-show-delay-description": "Час до появи панелі, коли миша входить у край.",
|
||||
"appearance-auto-show-delay-label": "Затримка відображення",
|
||||
"appearance-background-opacity-description": "Встановити прозорість фону спеціально для панелі.",
|
||||
"appearance-background-opacity-label": "Прозорість фону панелі",
|
||||
"appearance-capsule-color-description": "Виберіть колір для капсул панелі або не використовуйте жодного для стандартного кольору поверхні.",
|
||||
"appearance-capsule-color-label": "Колір капсули",
|
||||
"appearance-capsule-opacity-description": "Встановити рівень непрозорості для фону віджетів, коли показано капсулу.",
|
||||
"appearance-capsule-opacity-label": "Непрозорість капсули",
|
||||
"appearance-density-description": "Налаштуйте відступи панелі для компактного або просторого вигляду.",
|
||||
"appearance-density-label": "Щільність панелі",
|
||||
"appearance-desc": "Налаштуйте зовнішній вигляд та положення панелі.",
|
||||
"appearance-display-mode-description": "Виберіть, коли панель видима.",
|
||||
"appearance-floating-description": "Відображати панель як плаваючу 'капсулу'. Примітка: Це перемістить кути екрана до країв.",
|
||||
"appearance-floating-label": "Плаваюча панель (Острівець)",
|
||||
"appearance-frame-radius": "Внутрішній радіус",
|
||||
"appearance-frame-settings-description": "Налаштуйте товщину рамки та внутрішній радіус кутів",
|
||||
"appearance-frame-settings-label": "Налаштування рамки",
|
||||
"appearance-frame-thickness": "Товщина",
|
||||
"appearance-hide-on-overview-description": "Приховати панель і закрити панелі, коли активний огляд компонувальника.",
|
||||
"appearance-hide-on-overview-label": "Приховати панель на огляді",
|
||||
"appearance-margins-description": "Налаштуйте поля навколо плаваючої панелі.",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-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": "Використовувати окрему прозорість стовпців",
|
||||
"monitor-configure-widgets": "Налаштувати віджети",
|
||||
@@ -734,7 +801,7 @@
|
||||
"title": "Панель",
|
||||
"tray-blacklist-description": "Додайте правила виключення з трея, підтримує шаблони (*).",
|
||||
"tray-blacklist-label": "Чорний список",
|
||||
"tray-blacklist-placeholder": "напр., nm-applet, Fcitx*",
|
||||
"tray-blacklist-placeholder": "напр. nm-applet, Fcitx*",
|
||||
"tray-pin-application": "Закріпити застосунок",
|
||||
"tray-unpin-application": "Відкріпити застосунок",
|
||||
"use-global-widgets": "Використовувати глобальні віджети",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "Завантажити кольорові схеми",
|
||||
"method-description": {
|
||||
"content": "Схема Material Design з високоточною екстракцією кольорів, яка точно відповідає фактичним кольорам вихідного контенту.",
|
||||
"dysfunctional": "Як Faithful, але вибирає другу за домінантністю колірну родину як основну.",
|
||||
"faithful": "Намагається залишатися близьким до вихідного кольору, створюючи при цьому гармонійну палітру.",
|
||||
"fruit-salad": "Схема Material Design, яка створює грайливу, яскраву палітру з різноманітними відтінками.",
|
||||
"monochrome": "Схема Material Design, що використовує однотонну градацію сірого з мінімальним хроматичним вмістом.",
|
||||
@@ -866,6 +934,16 @@
|
||||
"media-player-show-buttons-label": "Показати кнопки",
|
||||
"media-player-show-visualizer-description": "Показати накладання аудіовізуалізатора.",
|
||||
"media-player-visualizer-type-description": "Оберіть тип візуалізації для фону медіаплеєра на робочому столі.",
|
||||
"system-stat-layout-bottom": "Низ",
|
||||
"system-stat-layout-description": "Виберіть, як відображається легенда відносно графіка.",
|
||||
"system-stat-layout-label": "Макет",
|
||||
"system-stat-layout-side": "Сторона",
|
||||
"system-stat-rounded-corners-description": "Використовувати заокруглені кути для фону віджета.",
|
||||
"system-stat-rounded-corners-label": "Закруглені Кути",
|
||||
"system-stat-show-background-description": "Показати фоновий контейнер для віджета системної статистики.",
|
||||
"system-stat-show-background-label": "Показати фон",
|
||||
"system-stat-stat-type-description": "Виберіть, яку системну статистику відображати.",
|
||||
"system-stat-stat-type-label": "Тип Статистики",
|
||||
"title": "Настільні віджети",
|
||||
"weather-enabled-description": "Показувати погодний віджет на робочому столі.",
|
||||
"weather-enabled-label": "Увімкнути віджет погоди",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "Пошук моноширинного шрифту...",
|
||||
"fonts-reset-scaling": "Скинути масштаб",
|
||||
"fonts-title": "Шрифти",
|
||||
"keybinds-description": "Налаштуйте глобальні клавіші навігації для панелей та запускача.",
|
||||
"keybinds-down": "Перемістити вниз",
|
||||
"keybinds-enter": "Підтвердити / Дія",
|
||||
"keybinds-escape": "Закрити / Назад",
|
||||
"keybinds-left": "Перемістити вліво",
|
||||
"keybinds-right": "Перемістити вправо",
|
||||
"keybinds-title": "Прив'язки Клавіш Навігації",
|
||||
"keybinds-up": "Перемістити вгору",
|
||||
"language-desc": "Виберіть бажану мову застосунку.",
|
||||
"language-select-auto-detect": "Автоматично",
|
||||
"language-select-description": "Виберіть мову інтерфейсу застосунку.",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "Використовувати суцільний чорний колір замість кольору фону панелі.",
|
||||
"screen-corners-solid-black-label": "Суцільні чорні кути",
|
||||
"screen-corners-title": "Кути екрана",
|
||||
"settings-copied": "Налаштування скопійовано до буфера обміну"
|
||||
"settings-copied": "Налаштування скопійовано до буфера обміну",
|
||||
"tab-basics": "Основи",
|
||||
"tab-keybinds": "Гарячі Клавіші"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• Команди виконуються через оболонку (sh -lc)<br>• Команди запускаються у фоні (відокремлено)<br>• Кнопки тестування виконують команди з поточними значеннями",
|
||||
@@ -983,30 +1071,30 @@
|
||||
"noctalia-started-placeholder": "напр. notify-send 'Noctalia завантажено'",
|
||||
"performance-mode-disabled-description": "Команда для виконання при вимкненні режиму продуктивності Noctalia.",
|
||||
"performance-mode-disabled-label": "Режим продуктивності вимкнено",
|
||||
"performance-mode-disabled-placeholder": "напр., notify-send \"Продуктивність\" \"Режим вимкнено\"",
|
||||
"performance-mode-disabled-placeholder": "напр. notify-send \"Продуктивність\" \"Режим вимкнено\"",
|
||||
"performance-mode-enabled-description": "Команда для виконання при увімкненні режиму продуктивності Noctalia.",
|
||||
"performance-mode-enabled-label": "Режим продуктивності увімкнено",
|
||||
"performance-mode-enabled-placeholder": "напр., notify-send \"Продуктивність\" \"Режим увімкнено\"",
|
||||
"performance-mode-enabled-placeholder": "напр. notify-send \"Продуктивність\" \"Режим увімкнено\"",
|
||||
"screen-lock-description": "Команда для виконання при блокуванні екрана.",
|
||||
"screen-lock-label": "Екран заблоковано",
|
||||
"screen-lock-placeholder": "напр., notify-send \"Екран\" \"Заблоковано\"",
|
||||
"screen-lock-placeholder": "напр. notify-send \"Екран\" \"Заблоковано\"",
|
||||
"screen-unlock-description": "Команда для виконання при розблокуванні екрана.",
|
||||
"screen-unlock-label": "Екран розблоковано",
|
||||
"screen-unlock-placeholder": "напр., notify-send \"Екран\" \"Розблоковано\"",
|
||||
"screen-unlock-placeholder": "напр. notify-send \"Екран\" \"Розблоковано\"",
|
||||
"session-description": "Команда, що виконується перед вимкненням або перезавантаженням. Отримує тип дії як $1 (вимкнення/перезавантаження).",
|
||||
"session-label": "Завершення сесії",
|
||||
"session-placeholder": "наприклад, notify-send \"Session\" \"$1\"",
|
||||
"session-placeholder": "напр. notify-send \"Session\" \"$1\"",
|
||||
"system-hooks-desc": "Налаштуйте команди для виконання при системних подіях.",
|
||||
"system-hooks-enable-description": "Увімкнути або вимкнути всі команди хуків.",
|
||||
"system-hooks-enable-label": "Увімкнути хуки",
|
||||
"system-hooks-title": "Системні хуки",
|
||||
"theme-changed-description": "Команда для виконання при перемиканні теми між темним і світлим режимом.",
|
||||
"theme-changed-label": "Тему змінено",
|
||||
"theme-changed-placeholder": "напр., notify-send \"Тема\" \"Перемкнуто\"",
|
||||
"theme-changed-placeholder": "напр. notify-send \"Тема\" \"Перемкнуто\"",
|
||||
"title": "Хуки",
|
||||
"wallpaper-changed-description": "Команда для виконання при зміні шпалер.",
|
||||
"wallpaper-changed-label": "Шпалери змінено",
|
||||
"wallpaper-changed-placeholder": "напр., notify-send \"Шпалери\" \"Змінено\""
|
||||
"wallpaper-changed-placeholder": "напр. notify-send \"Шпалери\" \"Змінено\""
|
||||
},
|
||||
"indicator": {
|
||||
"default-value": "За замовчуванням: {value}",
|
||||
@@ -1016,7 +1104,7 @@
|
||||
"clipboard-desc": "Отримуйте доступ до історії буфера обміну та керуйте нею з панелі запуску.",
|
||||
"execute-desc": "Налаштуйте спосіб запуску програм.",
|
||||
"execute-title": "Виконання",
|
||||
"settings-annotation-tool-description": "Команда для запуску при натисканні кнопки анотування в історії буфера обміну, зображення буде передано в цю команду.",
|
||||
"settings-annotation-tool-description": "Команда для запуску при натисканні кнопки анотування в історії буфера обміну. Зображення буде передано в цю команду.",
|
||||
"settings-annotation-tool-label": "Інструмент анотацій",
|
||||
"settings-annotation-tool-placeholder": "напр. 'gradia', 'satty -f -'",
|
||||
"settings-auto-paste-description": "Автоматично вставити вибраний елемент з буфера обміну. Потребує wtype.",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "Загорнути текст з буфера обміну",
|
||||
"settings-clipboard-history-description": "Отримати доступ до раніше скопійованих елементів із лаунчера.",
|
||||
"settings-clipboard-history-label": "Увімкнути історію буфера обміну",
|
||||
"settings-custom-launch-prefix-description": "Додати префікс до команд запуску лаунчером (напр., 'runapp' для інтеграції з systemd).",
|
||||
"settings-clipboard-watch-image-description": "Повний рядок команди, переданий до wl-paste для зміни зображень (потрібен перезапуск).",
|
||||
"settings-clipboard-watch-image-label": "Команда Спостереження за Зображеннями",
|
||||
"settings-clipboard-watch-text-description": "Повний рядок команди, переданий до wl-paste для змін тексту (потребує перезапуску).",
|
||||
"settings-clipboard-watch-text-label": "Команда спостереження за текстом",
|
||||
"settings-custom-launch-prefix-description": "Додати префікс до команд запуску лаунчером (напр. 'runapp' для інтеграції з systemd).",
|
||||
"settings-custom-launch-prefix-enabled-description": "Використовувати власний префікс для запуску застосунків замість стандартного методу.",
|
||||
"settings-custom-launch-prefix-enabled-label": "Увімкнути користувацький префікс запуску",
|
||||
"settings-custom-launch-prefix-label": "Користувацький префікс запуску",
|
||||
"settings-density-description": "Налаштуйте розмір іконок програм і щільність Launcher.",
|
||||
"settings-density-label": "Щільність",
|
||||
"settings-desc": "Налаштуйте поведінку та зовнішній вигляд лаунчера.",
|
||||
"settings-enable-settings-search-description": "Показувати результати налаштувань під час пошуку в Launcher.",
|
||||
"settings-enable-settings-search-label": "Увімкнути пошук у налаштуваннях",
|
||||
"settings-enable-windows-search-description": "Шукати та фокусувати активні вікна.",
|
||||
"settings-enable-windows-search-label": "Увімкнути пошук вікон",
|
||||
"settings-grid-view-description": "Показувати елементи у вигляді сітки замість списку.",
|
||||
"settings-icon-mode-description": "Використовувати нативні системні іконки замість іконок Tabler.",
|
||||
"settings-icon-mode-label": "Використовувати нативні іконки",
|
||||
"settings-ignore-mouse-input-description": "Вимкнути взаємодію з мишею та коліщатко прокрутки в лаунчері.",
|
||||
"settings-ignore-mouse-input-label": "Ігнорувати введення миші",
|
||||
"settings-overlay-layer-description": "Відображати запускач на шарі накладання, над повноекранними вікнами. Коли увімкнено, запускач не буде прикріплено до панелі.",
|
||||
"settings-overlay-layer-label": "Показувати над повноекранним режимом",
|
||||
"settings-position-description": "Виберіть, де з'являється панель лаунчера.",
|
||||
"settings-show-categories-description": "Показувати вкладки категорій для фільтрації додатків.",
|
||||
"settings-show-categories-label": "Показувати категорії",
|
||||
@@ -1046,10 +1144,12 @@
|
||||
"settings-show-icon-background-label": "Показати фон іконки",
|
||||
"settings-sort-by-usage-description": "Коли увімкнено, часто використовувані застосунки з'являються першими в списку.",
|
||||
"settings-sort-by-usage-label": "Сортувати за використанням",
|
||||
"settings-terminal-command-description": "Команда для запуску терміналу. Напр., 'kitty -e' або 'gnome-terminal --'.",
|
||||
"settings-terminal-command-description": "Команда для запуску терміналу. Напр. 'kitty -e' або 'gnome-terminal --'.",
|
||||
"settings-terminal-command-label": "Команда терміналу",
|
||||
"settings-use-app2unit-description": "Використовує альтернативний метод запуску для кращого керування процесами застосунків і запобігання проблемам.",
|
||||
"settings-use-app2unit-label": "Використовувати App2Unit для запуску застосунків",
|
||||
"settings-view-mode-description": "Виберіть макет для записів Запускача.",
|
||||
"settings-view-mode-label": "Режим перегляду",
|
||||
"title": "Лаунчер"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,12 +1166,12 @@
|
||||
"date-time-show-events-description": "Відображати події на панелі календаря.",
|
||||
"date-time-show-events-label": "Показувати події календаря",
|
||||
"date-time-title": "Дата і час",
|
||||
"date-time-use-analog-description": "Показувати аналоговий годинник на екрані календаря.",
|
||||
"date-time-use-analog-description": "Показувати аналоговий годинник у вікні календаря.",
|
||||
"date-time-use-analog-label": "Використовувати аналоговий годинник",
|
||||
"date-time-week-numbers-description": "Відображати номер тижня року (напр., Тиждень 38) у календарі.",
|
||||
"date-time-week-numbers-description": "Відображати номер тижня року (напр. тиждень 38) у календарі.",
|
||||
"date-time-week-numbers-label": "Показувати номери тижнів",
|
||||
"location-desc": "Отримуйте точну погоду та планування нічного світла, встановивши ваше розташування.",
|
||||
"location-search-description": "напр., Торонто, ОН",
|
||||
"location-search-description": "напр. Торонто, ОН",
|
||||
"location-search-label": "Шукати розташування",
|
||||
"location-search-placeholder": "Введіть назву місця",
|
||||
"location-title": "Ваше розташування",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "Відображати погоду в календарі"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "Коли fprintd (автентифікація за відбитком пальця) активний, ця опція дозволяє входити в систему за допомогою пароля замість відбитка пальця.",
|
||||
"allow-password-with-fprintd-label": "Дозволити вхід за паролем за допомогою fprintd",
|
||||
"auto-start-auth-description": "Aвтоматично запускає автентифікацію за відбитком пальця без необхідності натискання клавіші або клацання кнопки.",
|
||||
"auto-start-auth-label": "Автоматичний запуск автентифікації",
|
||||
"clock-format-description": "Налаштуйте формат годинника, використовуючи токени синтаксису дати/часу.",
|
||||
"clock-format-label": "Формат годинника",
|
||||
"clock-style-analog": "Аналоговий",
|
||||
"clock-style-custom": "Користувацький",
|
||||
"clock-style-description": "Виберіть візуальний стиль годинника на Екрані блокування.",
|
||||
"clock-style-digital": "Цифровий",
|
||||
"clock-style-label": "Стиль Годинника",
|
||||
"compact-lockscreen-description": "Показувати тільки поле входу та системні елементи керування, приховуючи віджети погоди та медіа.",
|
||||
"compact-lockscreen-label": "Компактний екран блокування",
|
||||
"lock-on-suspend-description": "Автоматично блокувати екран при призупиненні системи.",
|
||||
"lock-on-suspend-label": "Блокувати при призупиненні",
|
||||
"lock-screen-animations-description": "Увімкнути або вимкнути анімації екрана блокування.",
|
||||
"lock-screen-animations-label": "Анімації Екрана Блокування",
|
||||
"lock-screen-blur-strength-description": "Застосовує ефект розмиття до шпалер екрана блокування.",
|
||||
"lock-screen-blur-strength-label": "Сила розмиття екрана блокування",
|
||||
"lock-screen-tint-strength-description": "Застосовує накладання відтінку до шпалер екрана блокування.",
|
||||
"lock-screen-tint-strength-label": "Інтенсивність тонування екрана блокування",
|
||||
"monitors-desc": "Показати екран блокування на певних моніторах. За замовчуванням на всіх, якщо жоден не обрано.",
|
||||
"show-hibernate-description": "Показувати опцію 'сплячий режим' в елементах керування живленням.",
|
||||
"show-hibernate-label": "Показувати сплячий режим",
|
||||
"show-session-buttons-description": "Дозволити доступ до налаштувань живлення з екрана блокування.",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "Зберігати низьку терміновість в історії",
|
||||
"history-normal-urgency-description": "Зберігати сповіщення з нормальним пріоритетом в історії.",
|
||||
"history-normal-urgency-label": "Зберігати нормальну терміновість в історії",
|
||||
"media-toast-description": "Показувати спливаюче повідомлення, коли змінюється стан відтворення медіа.",
|
||||
"media-toast-label": "Медіа",
|
||||
"monitors-desc": "Показувати сповіщення на певних моніторах. За замовчуванням на всіх, якщо не вибрано.",
|
||||
"settings-always-on-top-description": "Відображати сповіщення поверх повноекранних вікон та інших шарів.",
|
||||
"settings-background-opacity-description": "Налаштуйте непрозорість фону сповіщень.",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "Звуки сповіщень недоступні",
|
||||
"sounds-volume-description": "Налаштуйте рівень гучності для звуків сповіщень.",
|
||||
"sounds-volume-label": "Гучність звуку",
|
||||
"toast-battery-description": "Показувати попередження, коли рівень заряду батареї падає нижче цього відсотка.",
|
||||
"toast-battery-label": "Попередження про батарею",
|
||||
"toast-desc": "Налаштуйте зовнішній вигляд і поведінку спливаючих повідомлень.",
|
||||
"toast-keyboard-description": "Показувати сповіщення при зміні розкладки клавіатури.",
|
||||
"toast-keyboard-label": "Розкладка клавіатури"
|
||||
"toast-keyboard-label": "Розкладка клавіатури",
|
||||
"toast-media-description": "Показувати спливаюче повідомлення, коли змінюється стан відтворення медіа.",
|
||||
"toast-media-label": "Медіа"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "Відображати екранну індикацію поверх повноекранних вікон та інших шарів.",
|
||||
@@ -1202,16 +1322,20 @@
|
||||
"types-volume-label": "Вихідна гучність"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "Автоматичне оновлення плагінів",
|
||||
"auto-update-description": "Автоматично оновлювати всі плагіни при запуску оболонки.",
|
||||
"available-description": "Переглядайте та встановлюйте плагіни з налаштованих джерел.",
|
||||
"available-label": "Доступні плагіни",
|
||||
"available-no-plugins-description": "Перевірте вихідні коди вашого плагіна або оновіть список.",
|
||||
"available-no-plugins-label": "Немає доступних плагінів",
|
||||
"check-for-updates": "Перевірити оновлення",
|
||||
"checking-for-updates": "Перевірка оновлень...",
|
||||
"collision-already-installed": "Цей плагін вже встановлено",
|
||||
"collision-custom-version-exists": "Вже встановлено власну версію з \"{source}\"",
|
||||
"collision-official-version-exists": "Офіційна версія цього плагіна вже встановлена",
|
||||
"filter-downloaded": "Завантажено",
|
||||
"filter-not-downloaded": "Не завантажено",
|
||||
"filter-tags-description": "Фільтрувати плагіни за категорією або статусом завантаження",
|
||||
"filter-tags-description": "Фільтрувати плагіни за категорією або статусом завантаження.",
|
||||
"filter-tags-label": "Теги",
|
||||
"hot-reload-description": "Автоматично перезавантажувати плагіни при зміні їхніх файлів. Корисно для розробки плагінів.",
|
||||
"hot-reload-label": "Гаряче перезавантаження (режим розробки)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "Мій крутий репозиторій",
|
||||
"sources-remove-tooltip": "Видалити джерело плагіна",
|
||||
"title": "Плагіни",
|
||||
"translations-reloaded": "Переклади перезавантажено: {name}",
|
||||
"uninstall-dialog-description": "Ви впевнені, що хочете видалити {plugin}? Це призведе до видалення всіх даних плагіна.",
|
||||
"uninstall-dialog-title": "Видалити плагін",
|
||||
"uninstall-error": "Не вдалося видалити: {error}",
|
||||
@@ -1271,11 +1396,14 @@
|
||||
"entries-desc": "Налаштувати, які дії живлення відображаються в меню сеансу та в якому порядку.",
|
||||
"entries-title": "Дії живлення",
|
||||
"entry-settings-command-description": "Спеціальна команда для виконання цієї дії. Залиште поле порожнім, щоб використовувати системну команду за замовчуванням.",
|
||||
"entry-settings-command-placeholder": "systemctl poweroff",
|
||||
"entry-settings-command-placeholder": "напр. systemctl poweroff",
|
||||
"entry-settings-default-command-lock": "Внутрішній екран блокування (без команди)",
|
||||
"entry-settings-default-command-logout": "Внутрішній вихід з системи (без команди)",
|
||||
"entry-settings-default-info-description": "Якщо не вказано жодної власної команди, буде використано системну команду за замовчуванням.",
|
||||
"entry-settings-default-info-label": "Команда за замовчуванням",
|
||||
"entry-settings-keybind-description": "Призначте комбінацію клавіш для запуску цієї дії, коли меню сесії відкрито.",
|
||||
"entry-settings-keybind-placeholder": "Натисніть Запис, щоб призначити клавішу...",
|
||||
"entry-settings-keybind-recording": "Запис... Натисніть будь-яку комбінацію клавіш",
|
||||
"entry-settings-title": "Налаштувати {entry}",
|
||||
"entry-settings-tooltip": "Налаштувати команду",
|
||||
"general-desc": "Налаштувати поведінку та зовнішній вигляд панелі меню сеансу.",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "Критичний колір",
|
||||
"custom-highlight-colors-title-label": "Власні кольори підсвічування",
|
||||
"disk-available-label": "Доступно місця на диску",
|
||||
"disk-section-label": "Використання диска",
|
||||
"enable-dgpu-monitoring-description": "Увага: Це розбудить ваш дискретний графічний процесор (NVIDIA/AMD), що може значно вплинути на час роботи акумулятора на ноутбуках з гібридною графікою.",
|
||||
"enable-dgpu-monitoring-label": "Увімкнути моніторинг дискретного GPU",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "Виберіть макет налаштувань (може знадобитися перезапуск).",
|
||||
"settings-panel-mode-label": "Режим панелі налаштувань",
|
||||
"shadows-description": "Увімкнути тіні під панелями та смугами.",
|
||||
"shadows-direction-description": "Виберіть, звідки падає тінь.",
|
||||
"shadows-direction-description": "Виберіть, куди відкидається тінь.",
|
||||
"shadows-direction-label": "Напрямок тіні",
|
||||
"shadows-label": "Тіні",
|
||||
"title": "Користувацький інтерфейс",
|
||||
@@ -1357,7 +1486,7 @@
|
||||
"automation-change-mode-alphabetical": "Алфавітний",
|
||||
"automation-change-mode-description": "Виберіть, як вибираються шпалери при автоматичній зміні.",
|
||||
"automation-change-mode-label": "Режим зміни",
|
||||
"automation-custom-interval-description": "Введіть час як ГГ:ХХ (напр., 01:30).",
|
||||
"automation-custom-interval-description": "Введіть час як ГГ:ХХ (напр. 01:30).",
|
||||
"automation-custom-interval-label": "Власний інтервал",
|
||||
"automation-interval-description": "Як часто автоматично змінювати шпалери.",
|
||||
"automation-interval-label": "Інтервал шпалер",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "Встановити різні теки шпалер для кожного монітора.",
|
||||
"settings-monitor-specific-label": "Окремі теки для моніторів",
|
||||
"settings-monitor-specific-tooltip": "Тека шпалер монітора",
|
||||
"settings-overview-blur-strength-description": "Застосовує силу розмиття до огляду.",
|
||||
"settings-overview-blur-strength-label": "Сила розмиття огляду",
|
||||
"settings-overview-tint-description": "Застосовує інтенсивність відтінку до огляду.",
|
||||
"settings-overview-tint-label": "Інтенсивність тонування огляду",
|
||||
"settings-recursive-search-description": "Також шукати шпалери в підтеках теки шпалер.",
|
||||
"settings-recursive-search-label": "Шукати в підтеках",
|
||||
"settings-select-monitor-folder": "Вибрати теку шпалер монітора",
|
||||
@@ -1407,11 +1540,11 @@
|
||||
"enter-command": "Введіть команду для виконання (застосунок або власний скрипт)",
|
||||
"enter-ipc-identifier": "Введіть унікальний ідентифікатор для команд IPC",
|
||||
"enter-path": "Введіть шлях...",
|
||||
"enter-text-to-collapse": "напр., 'нічого не відтворюється'. Використовуйте /regex/ для шаблонів.",
|
||||
"enter-text-to-collapse": "напр. 'нічого не відтворюється'. Використовуйте /regex/ для шаблонів.",
|
||||
"enter-tooltip": "Введіть підказку",
|
||||
"enter-width-pixels": "Введіть ширину в пікселях",
|
||||
"search": "Пошук...",
|
||||
"search-icons": "напр., noctalia, niri, battery, cloud",
|
||||
"search-icons": "напр. noctalia, niri, battery, cloud",
|
||||
"search-launcher": "Пошук записів... або використовуйте > для команд",
|
||||
"search-wallhaven": "Пошук у Wallhaven...",
|
||||
"search-wallpapers": "Введіть для фільтрації шпалер..."
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "Готово!",
|
||||
"appearance": {
|
||||
"subheader": "Виберіть Dark Mode та джерела кольору (Шпалери або попередньо визначені)."
|
||||
"subheader": "Виберіть темний режим і джерела кольорів (шпалери або попередньо визначені)."
|
||||
},
|
||||
"customize": {
|
||||
"header": "Налаштуйте ваш досвід",
|
||||
@@ -1490,7 +1623,7 @@
|
||||
"disk": "Диск",
|
||||
"download-speed": "Швидкість завантаження",
|
||||
"gpu-temp": "Температура GPU",
|
||||
"load-average": "Нaгр. ср.",
|
||||
"load-average": "Середнє навантаження",
|
||||
"title": "Системний монітор",
|
||||
"upload-speed": "Швидкість завантаження"
|
||||
},
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "Режим польоту"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "Критичний рівень заряду батареї",
|
||||
"critical-desc": "Батарея заряджена на {percent}% — негайно підключіть зарядний пристрій",
|
||||
"low": "Низький заряд батареї",
|
||||
"low-desc": "Рівень заряду: {percent}%. Будь ласка, підключіть зарядний пристрій"
|
||||
"low-desc": "Батарея заряджена на {percent}% — будь ласка, підключіть зарядний пристрій"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "Адресу скопійовано до буфера обміну",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "Диск",
|
||||
"fade": "Затухання",
|
||||
"honeycomb": "Стільники",
|
||||
"pixelate": "Пікселізувати",
|
||||
"stripes": "Смуги",
|
||||
"wipe": "Змітання"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "Завантаження шпалер...",
|
||||
"no-results": "Шпалери не знайдено. Спробуйте інший пошуковий запит.",
|
||||
"page": "{current} з {total}"
|
||||
"page": "{current} з {total}",
|
||||
"page-prefix": "Сторінка",
|
||||
"page-suffix": "з {total}"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
+183
-44
@@ -48,19 +48,24 @@
|
||||
"device-default": "默认(显示设备)",
|
||||
"device-description": "选择要显示的电池设备。",
|
||||
"device-label": "电池设备",
|
||||
"hide-if-idle-description": "当电池未充电或放电时,隐藏小部件。",
|
||||
"display-mode-description": "选择电池在任务栏中的显示方式。",
|
||||
"display-mode-graphic": "图形化电池",
|
||||
"display-mode-graphic-clean": "图形电池(无%)",
|
||||
"display-mode-icon-always": "图标 - 始终显示 %",
|
||||
"display-mode-icon-hover": "图标 - 悬停时显示",
|
||||
"display-mode-icon-only": "仅图标",
|
||||
"hide-if-idle-description": "当电池空闲时(没有充电或者放电电流时),隐藏小部件。",
|
||||
"hide-if-idle-label": "空闲时隐藏",
|
||||
"hide-if-not-detected-description": "当系统未检测到电池时,隐藏该小部件。",
|
||||
"hide-if-not-detected-label": "未检测到电池时隐藏",
|
||||
"low-battery-threshold-description": "当电量低于此百分比时显示警告。",
|
||||
"hide-if-not-detected-label": "未检测到电池时,隐藏该小部件",
|
||||
"low-battery-threshold-label": "低电量警告阈值",
|
||||
"show-noctalia-performance-description": "在电池面板中显示 Noctalia 性能模式切换。<br>禁用 Noctalia 中的阴影和动画以减少资源使用。",
|
||||
"show-noctalia-performance-label": "显示 Noctalia 性能模式切换",
|
||||
"show-noctalia-performance-description": "在电池面板中显示 Noctalia 性能模式开关。<br>该模式通过禁用 Noctalia 中的阴影和动画减少性能开销。",
|
||||
"show-noctalia-performance-label": "显示 Noctalia 性能模式开关",
|
||||
"show-power-profile-description": "在电池面板中显示电源配置文件选项。",
|
||||
"show-power-profile-label": "显示电源配置文件控件"
|
||||
},
|
||||
"clock": {
|
||||
"clock-display-description": "通过从下面的列表添加标记来自定义时钟显示。要使用 12 小时制,必须包含 'AP' 标记。",
|
||||
"clock-display-description": "通过从下面的列表添加标记来自定义时钟样式。要使用 12 小时制,则必须包含 'AP' 标记。",
|
||||
"clock-display-label": "时钟显示",
|
||||
"custom-font-description": "自定义时钟使用的字体。",
|
||||
"custom-font-label": "自定义字体",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "使用自定义字体",
|
||||
"use-monospaced-font-description": "启用后,时钟将使用等宽字体。",
|
||||
"use-monospaced-font-label": "使用等宽字体",
|
||||
"use-primary-color-description": "启用后,将应用主颜色进行强调。",
|
||||
"use-primary-color-label": "使用主颜色",
|
||||
"vertical-bar-description": "使用空格将每个部分分隔到新行。",
|
||||
"vertical-bar-label": "垂直栏"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"collapse-condition-description": "如果输出文本与此值匹配,按钮将折叠。",
|
||||
"collapse-condition-label": "折叠条件",
|
||||
"color-selection-description": "将主题颜色应用到图标和文本。",
|
||||
"color-selection-label": "选择颜色",
|
||||
"display-command-output-description": "输入一个定期运行的命令。其输出的第一行将显示为文本。",
|
||||
"display-command-output-label": "显示命令输出",
|
||||
"display-command-output-stream-description": "输入一个要持续运行的命令。",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "没有未读通知时隐藏通知图标。",
|
||||
"hide-widget-when-zero-unread-label": "无未读时隐藏图标",
|
||||
"show-unread-badge-description": "显示一个用于展示未读通知数量的徽章。",
|
||||
"show-unread-badge-label": "显示未读徽章"
|
||||
"show-unread-badge-label": "显示未读徽章",
|
||||
"unread-badge-color-description": "选择未读通知徽章的颜色。",
|
||||
"unread-badge-color-label": "未读徽章颜色"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "选择要添加的小部件...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "将数据以条形图显示以防止布局偏移。",
|
||||
"compact-mode-label": "紧凑模式",
|
||||
"cpu-frequency-description": "显示当前 CPU 时钟速度(GHz)。",
|
||||
"cpu-frequency-label": "显示 CPU 频率",
|
||||
"cpu-temperature-description": "显示 CPU 温度(如果可用)。",
|
||||
"cpu-temperature-label": "CPU 温度",
|
||||
"cpu-usage-description": "以百分比显示当前 CPU 使用率",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "内存使用率",
|
||||
"network-traffic-description": "显示网络上传和下载速度。",
|
||||
"network-traffic-label": "网络流量",
|
||||
"storage-as-percentage-description": "以百分比而非绝对值显示磁盘空间。",
|
||||
"storage-as-percentage-label": "磁盘百分比",
|
||||
"storage-available-description": "显示可用磁盘空间,而非已用空间。",
|
||||
"storage-available-label": "可用磁盘空间",
|
||||
"storage-usage-description": "显示磁盘空间使用情况。",
|
||||
"storage-usage-label": "存储用量",
|
||||
"swap-usage-description": "显示 Swap 使用情况。",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "重置标题宽度"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "将主题颜色应用于抽屉的箭头图标。",
|
||||
"chevron-color-label": "箭头颜色",
|
||||
"colorize-icons-description": "将主题颜色应用到系统托盘图标。",
|
||||
"colorize-icons-label": "着色图标",
|
||||
"drawer-enabled-description": "启用时,未固定的托盘项显示在抽屉面板中。<br>禁用时,所有托盘项都内联显示。",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "隐藏被动物品"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "选择您希望此值显示的方式。",
|
||||
"display-mode-label": "显示模式"
|
||||
"display-mode-description": "选择您希望此值显示的方式。"
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "显示工作区名称的字符数量(1-10)。",
|
||||
"character-count-label": "字符数量",
|
||||
"empty-color-description": "设置空工作区的背景颜色。",
|
||||
"empty-color-label": "空白工作区颜色",
|
||||
"enable-scrollwheel-description": "使用鼠标滚轮切换工作区。",
|
||||
"enable-scrollwheel-label": "滚动切换工作区",
|
||||
"focused-color-description": "设置焦点 Workspace 的背景颜色。",
|
||||
"focused-color-label": "聚焦工作区颜色",
|
||||
"follow-focused-screen-description": "显示当前焦点屏幕的工作区,而不是任务栏所在屏幕的工作区。",
|
||||
"follow-focused-screen-label": "跟随焦点屏幕",
|
||||
"grouped-border-opacity-description": "设置工作区容器边框的不透明度级别。",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "隐藏未占用",
|
||||
"label-mode-description": "选择工作区标签的显示方式。",
|
||||
"label-mode-label": "标签模式",
|
||||
"occupied-color-description": "设置已占用Workspace的背景颜色。",
|
||||
"occupied-color-label": "已占用工作区颜色",
|
||||
"pill-size-description": "调整工作区指示器的大小 (50%-100%)。",
|
||||
"pill-size-label": "胶囊大小",
|
||||
"reverse-scrolling-description": "滚动时反转工作区切换方向。",
|
||||
"reverse-scrolling-label": "反转滚动",
|
||||
"show-applications-description": "在每个工作区内显示应用程序图标。",
|
||||
"show-applications-label": "显示应用程序",
|
||||
"show-badge-description": "在分组模式下显示工作区编号徽章。",
|
||||
"show-badge-label": "显示工作区徽章",
|
||||
"show-labels-only-when-occupied-description": "仅在工作区包含窗口时显示工作区标签。",
|
||||
"show-labels-only-when-occupied-label": "仅在被占用时显示标签",
|
||||
"unfocused-icons-opacity-description": "设置未聚焦应用图标的不透明度级别。",
|
||||
@@ -273,12 +296,12 @@
|
||||
}
|
||||
},
|
||||
"battery": {
|
||||
"battery-health": "电池健康度",
|
||||
"battery-health": "电池健康",
|
||||
"battery-level": "电池电量",
|
||||
"capacity-level": "容量:{level}",
|
||||
"charging-rate": "充电速率:{rate} W",
|
||||
"discharging-rate": "放电速率:{rate} W",
|
||||
"health": "健康状况:{percent}%",
|
||||
"health": "电池健康:{percent}%",
|
||||
"inhibit-idle-description": "保持系统唤醒。",
|
||||
"no-battery-detected": "未检测到电池",
|
||||
"plugged-in": "已接通电源",
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "全新安装"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "错误色",
|
||||
"on-surface": "背景之上",
|
||||
"primary": "主要色",
|
||||
"secondary": "次要色",
|
||||
"tertiary": "第三色"
|
||||
},
|
||||
"common": {
|
||||
"actions": "操作",
|
||||
"add": "添加",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "断开连接",
|
||||
"disconnected": "已断开连接",
|
||||
"disconnecting": "正在断开连接...",
|
||||
"display-mode": "显示模式",
|
||||
"download": "下载",
|
||||
"duration": "时长",
|
||||
"dysfunctional": "功能失调",
|
||||
"edit": "编辑",
|
||||
"enabled": "已启用",
|
||||
"error": "错误",
|
||||
"events": "事件",
|
||||
"execute": "执行",
|
||||
"faithful": "忠实",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "已安装",
|
||||
"interface": "界面",
|
||||
"internet": "互联网",
|
||||
"keybind": "按键绑定",
|
||||
"language": "语言",
|
||||
"loading": "正在加载...",
|
||||
"local": "本地",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "未找到",
|
||||
"notifications": "通知",
|
||||
"official": "官方",
|
||||
"on-surface": "在表面上",
|
||||
"output": "输出",
|
||||
"pair": "配对",
|
||||
"paired": "已配对",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "数据轮询",
|
||||
"position": "位置",
|
||||
"previous": "上一个",
|
||||
"primary": "主要的",
|
||||
"random": "随机",
|
||||
"reboot": "重启",
|
||||
"record": "开始录制",
|
||||
"refresh": "刷新",
|
||||
"required": "(必要)",
|
||||
"reset": "重置",
|
||||
"reset-to-default": "重置为默认值",
|
||||
"result-count": "{count} 结果",
|
||||
"result-count-plural": "{count} 结果",
|
||||
"resume": "继续",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "扫描中...",
|
||||
"screen-corners": "屏幕边角",
|
||||
"search": "搜索",
|
||||
"secondary": "辅助",
|
||||
"security": "安全",
|
||||
"select": "选择",
|
||||
"select-color": "选择颜色",
|
||||
"select-color-description": "应用主题颜色以示强调。",
|
||||
"select-icon-color": "选择图标颜色",
|
||||
"shortcuts": "快捷方式",
|
||||
"shutdown": "关机",
|
||||
"signal": "信号",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "来源",
|
||||
"start": "开始",
|
||||
"stop": "停止",
|
||||
"supporters": "支持者",
|
||||
"suspend": "挂起",
|
||||
"templates": "模板",
|
||||
"tertiary": "第三",
|
||||
"test": "测试",
|
||||
"thresholds": "阈值",
|
||||
"title": "标题",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "周",
|
||||
"widgets": "小部件",
|
||||
"width": "宽度",
|
||||
"windows": "窗口",
|
||||
"yes": "是"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "悬停时"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "自动隐藏",
|
||||
"hidden": "当为空时隐藏",
|
||||
"idle": "空闲时隐藏",
|
||||
"non-exclusive": "非独占",
|
||||
"transparent": "空时透明",
|
||||
"visible": "始终可见"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "正在加载表情符号...",
|
||||
"emoji-loading-description": "请稍候",
|
||||
"emoji-no-recent": "尚无最近使用的表情符号",
|
||||
"emoji-search-description": "搜索和复制表情符号"
|
||||
"emoji-search-description": "搜索和复制表情符号",
|
||||
"settings-search-description": "搜索并前往设置",
|
||||
"windows-search-description": "搜索并聚焦打开的窗口"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "紧凑",
|
||||
"density-default": "默认",
|
||||
"density-mini": "迷你",
|
||||
"density-spacious": "宽敞"
|
||||
"density-spacious": "宽敞",
|
||||
"display-mode-always-visible": "始终可见",
|
||||
"type-floating": "悬浮",
|
||||
"type-framed": "边框",
|
||||
"type-simple": "简约"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "经典",
|
||||
"quick-settings-style-modern": "现代"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "舒适",
|
||||
"compact": "紧凑",
|
||||
"default": "默认"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "网格",
|
||||
"list": "列表"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "始终滚动",
|
||||
"hover": "悬停时滚动",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "成为支持者",
|
||||
"changelog": "查看更改日志",
|
||||
"contributors-desc": "向我们 {count} 位<b>超棒的</b>贡献者致敬!",
|
||||
"contributors-description": "向我们 {count} 位<b>超棒的</b>贡献者致敬!",
|
||||
"contributors-description-plural": "向我们 {count} 位<b>超棒的</b>贡献者致敬!",
|
||||
"copy-info": "复制信息",
|
||||
"info-copied": "信息已复制到剪贴板",
|
||||
@@ -628,6 +677,10 @@
|
||||
"noctalia-title": "Noctalia shell",
|
||||
"privacy-policy": "隐私政策",
|
||||
"support": "支持我们",
|
||||
"supporter-badge": "支持者",
|
||||
"supporters-desc": "非常感谢我们出色的支持者!",
|
||||
"supporters-desc-plural": "非常感谢我们的<b>{count}位出色</b>支持者!",
|
||||
"supporters-loading": "正在加载支持者...",
|
||||
"system-cpu": "中央处理器:",
|
||||
"system-disk": "磁盘:",
|
||||
"system-gpu": "图形处理器:",
|
||||
@@ -636,7 +689,7 @@
|
||||
"system-kernel": "内核:",
|
||||
"system-loading": "正在加载系统信息...",
|
||||
"system-memory": "内存:",
|
||||
"system-monitor": "监视器",
|
||||
"system-monitor": "监视器:",
|
||||
"system-not-installed": "未安装 fastfetch",
|
||||
"system-os": "操作系统:",
|
||||
"system-packages": "软件包:",
|
||||
@@ -692,21 +745,33 @@
|
||||
"volumes-output-volume-description": "系统全局音量级别。",
|
||||
"volumes-step-size-description": "调整音量变化的步长(滚轮、键盘快捷键)。",
|
||||
"volumes-step-size-label": "音量步长",
|
||||
"volumes-volume-feedback-description": "调整音量时播放反馈音效",
|
||||
"volumes-volume-feedback-description": "调整音量时播放反馈音效。",
|
||||
"volumes-volume-feedback-label": "播放音量反馈",
|
||||
"volumes-volume-overdrive-description": "允许将音量提高到100%以上。可能不被所有硬件支持。",
|
||||
"volumes-volume-overdrive-label": "允许音量过载"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "鼠标离开后Bar隐藏所需时间",
|
||||
"appearance-auto-hide-delay-label": "隐藏延迟",
|
||||
"appearance-auto-hide-exclusive-note": "注意: 当自动隐藏处于活动状态时,专属区域会自动禁用。",
|
||||
"appearance-auto-show-delay-description": "鼠标进入边缘时,栏显示前的延迟时间。",
|
||||
"appearance-auto-show-delay-label": "显示延迟",
|
||||
"appearance-background-opacity-description": "为状态栏设置背景不透明度。",
|
||||
"appearance-background-opacity-label": "状态栏背景不透明度",
|
||||
"appearance-capsule-color-description": "为栏胶囊选择一种颜色,或不使用任何颜色以采用默认表面颜色。",
|
||||
"appearance-capsule-color-label": "胶囊颜色",
|
||||
"appearance-capsule-opacity-description": "设置显示胶囊时小部件背景的不透明度。",
|
||||
"appearance-capsule-opacity-label": "胶囊不透明度",
|
||||
"appearance-density-description": "调整状态栏的内边距以获得紧凑或宽松的外观。",
|
||||
"appearance-density-label": "状态栏密度",
|
||||
"appearance-desc": "自定义状态栏的外观和位置。",
|
||||
"appearance-display-mode-description": "选择栏何时可见。",
|
||||
"appearance-floating-description": "将状态栏显示为浮动的“药丸”形状。",
|
||||
"appearance-floating-label": "浮动状态栏",
|
||||
"appearance-frame-radius": "内圆角",
|
||||
"appearance-frame-settings-description": "调整边框粗细和内圆角半径",
|
||||
"appearance-frame-settings-label": "边框设置",
|
||||
"appearance-frame-thickness": "粗细",
|
||||
"appearance-hide-on-overview-description": "当合成器概览处于活动状态时,隐藏栏并关闭面板。",
|
||||
"appearance-hide-on-overview-label": "在概览中隐藏栏",
|
||||
"appearance-margins-description": "调整浮动状态栏周围的边距。",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-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": "使用单独的状态栏不透明度",
|
||||
"monitor-configure-widgets": "配置小部件",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "下载配色方案",
|
||||
"method-description": {
|
||||
"content": "具有高保真色彩提取的 Material Design 方案,可与源内容的实际颜色紧密匹配。",
|
||||
"dysfunctional": "与 Faithful 类似,但选择第二主导的颜色家族作为主要颜色。",
|
||||
"faithful": "尝试在生成和谐调色板的同时,尽可能接近源颜色。",
|
||||
"fruit-salad": "Material Design 方案,产生一个俏皮、充满活力的调色板,具有多样和变化的色调。",
|
||||
"monochrome": "使用单色调灰阶和最少色彩内容的 Material Design 方案。",
|
||||
@@ -866,6 +934,16 @@
|
||||
"media-player-show-buttons-label": "显示按钮",
|
||||
"media-player-show-visualizer-description": "显示音频可视化叠加层。",
|
||||
"media-player-visualizer-type-description": "选择桌面媒体播放器的背景可视化类型。",
|
||||
"system-stat-layout-bottom": "底部",
|
||||
"system-stat-layout-description": "选择图例相对于图表的显示方式。",
|
||||
"system-stat-layout-label": "布局",
|
||||
"system-stat-layout-side": "边",
|
||||
"system-stat-rounded-corners-description": "小组件背景使用圆角。",
|
||||
"system-stat-rounded-corners-label": "圆角",
|
||||
"system-stat-show-background-description": "显示系统统计小部件的背景容器。",
|
||||
"system-stat-show-background-label": "显示背景",
|
||||
"system-stat-stat-type-description": "选择要显示的系统统计信息。",
|
||||
"system-stat-stat-type-label": "统计类型",
|
||||
"title": "桌面小部件",
|
||||
"weather-enabled-description": "在桌面上显示天气小部件。",
|
||||
"weather-enabled-label": "启用天气小部件",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "搜索等宽字体...",
|
||||
"fonts-reset-scaling": "恢复默认缩放",
|
||||
"fonts-title": "字体",
|
||||
"keybinds-description": "配置面板和启动器的全局导航键。",
|
||||
"keybinds-down": "下移",
|
||||
"keybinds-enter": "确认 / 操作",
|
||||
"keybinds-escape": "关闭 / 返回",
|
||||
"keybinds-left": "左移",
|
||||
"keybinds-right": "右移",
|
||||
"keybinds-title": "导航按键绑定",
|
||||
"keybinds-up": "上移",
|
||||
"language-desc": "选择您偏好的应用程序语言。",
|
||||
"language-select-auto-detect": "自动检测",
|
||||
"language-select-description": "选择应用程序界面中使用的语言。",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "使用实心黑色而非状态栏背景色。",
|
||||
"screen-corners-solid-black-label": "实心黑色边角",
|
||||
"screen-corners-title": "屏幕边角",
|
||||
"settings-copied": "设置已复制到剪贴板"
|
||||
"settings-copied": "设置已复制到剪贴板",
|
||||
"tab-basics": "基础",
|
||||
"tab-keybinds": "按键绑定"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• 命令通过 shell 执行(sh -lc)<br>• 命令在后台运行(分离)<br>• 测试按钮使用当前值执行",
|
||||
@@ -980,7 +1068,7 @@
|
||||
"info-parameters-label": "可用参数",
|
||||
"noctalia-started-description": "Noctalia 加载完成后要执行的命令。",
|
||||
"noctalia-started-label": "Noctalia 已启动",
|
||||
"noctalia-started-placeholder": "例如 notify-send 'Noctalia 已加载'",
|
||||
"noctalia-started-placeholder": "例如:notify-send 'Noctalia 已加载'",
|
||||
"performance-mode-disabled-description": "禁用 Noctalia 性能模式时执行的命令。",
|
||||
"performance-mode-disabled-label": "性能模式已禁用",
|
||||
"performance-mode-disabled-placeholder": "例如:notify-send \"性能\" \"模式已禁用\"",
|
||||
@@ -995,7 +1083,7 @@
|
||||
"screen-unlock-placeholder": "例如:notify-send \"屏幕\" \"已解锁\"",
|
||||
"session-description": "在关机或重启前执行的命令。接收操作类型作为 $1(关机/重启)。",
|
||||
"session-label": "会话结束",
|
||||
"session-placeholder": "例如,notify-send \"Session\" \"$1\"",
|
||||
"session-placeholder": "例如:notify-send \"Session\" \"$1\"",
|
||||
"system-hooks-desc": "配置在系统事件发生时执行的命令。",
|
||||
"system-hooks-enable-description": "启用或禁用所有钩子命令。",
|
||||
"system-hooks-enable-label": "启用钩子",
|
||||
@@ -1018,7 +1106,7 @@
|
||||
"execute-title": "执行",
|
||||
"settings-annotation-tool-description": "点击剪贴板历史记录中的注释按钮时要运行的命令。图像将被管道传输到此命令。",
|
||||
"settings-annotation-tool-label": "标注工具",
|
||||
"settings-annotation-tool-placeholder": "例如 'gradia','satty -f -'",
|
||||
"settings-annotation-tool-placeholder": "例如:'gradia','satty -f -'",
|
||||
"settings-auto-paste-description": "自动粘贴选定的剪贴板项目。需要 wtype。",
|
||||
"settings-auto-paste-label": "自动粘贴",
|
||||
"settings-clip-preview-description": "在使用 >clip 命令时显示剪贴板内容的预览。",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "环绕剪贴板文本",
|
||||
"settings-clipboard-history-description": "从启动器访问之前复制的项目。",
|
||||
"settings-clipboard-history-label": "启用剪贴板历史记录",
|
||||
"settings-custom-launch-prefix-description": "使用自定义启动器前缀命令(例如,'runapp'用于systemd集成)。",
|
||||
"settings-clipboard-watch-image-description": "传递给 wl-paste 以进行图像更改的完整命令字符串(需要重启)。",
|
||||
"settings-clipboard-watch-image-label": "图像监视命令",
|
||||
"settings-clipboard-watch-text-description": "传递给 wl-paste 以进行文本更改的完整命令字符串(需要重启)。",
|
||||
"settings-clipboard-watch-text-label": "文本监视命令",
|
||||
"settings-custom-launch-prefix-description": "使用自定义启动器前缀命令(例如:'runapp'用于systemd集成)。",
|
||||
"settings-custom-launch-prefix-enabled-description": "使用自定义前缀启动应用程序,而不是默认方法。",
|
||||
"settings-custom-launch-prefix-enabled-label": "启用自定义启动前缀",
|
||||
"settings-custom-launch-prefix-label": "自定义启动前缀",
|
||||
"settings-density-description": "调整应用程序图标大小和 Launcher 密度。",
|
||||
"settings-density-label": "密度",
|
||||
"settings-desc": "自定义启动器的行为和外观。",
|
||||
"settings-enable-settings-search-description": "在启动器中搜索时显示设置结果。",
|
||||
"settings-enable-settings-search-label": "启用设置搜索",
|
||||
"settings-enable-windows-search-description": "搜索并聚焦活动窗口。",
|
||||
"settings-enable-windows-search-label": "启用窗口搜索",
|
||||
"settings-grid-view-description": "以网格布局而非列表显示项目。",
|
||||
"settings-icon-mode-description": "使用本地系统图标而不是 Tabler 图标。",
|
||||
"settings-icon-mode-label": "使用本地图标",
|
||||
"settings-ignore-mouse-input-description": "禁用启动器中的鼠标交互和滚轮。",
|
||||
"settings-ignore-mouse-input-label": "忽略鼠标输入",
|
||||
"settings-overlay-layer-description": "在覆盖层上显示启动器,位于全屏窗口之上。启用时,启动器不会附加到栏。",
|
||||
"settings-overlay-layer-label": "在全屏上方显示",
|
||||
"settings-position-description": "选择启动器面板出现的位置。",
|
||||
"settings-show-categories-description": "显示用于筛选应用程序的类别标签。",
|
||||
"settings-show-categories-label": "显示类别",
|
||||
@@ -1046,10 +1144,12 @@
|
||||
"settings-show-icon-background-label": "显示图标背景",
|
||||
"settings-sort-by-usage-description": "启用后,经常启动的应用程序将显示在列表首位。",
|
||||
"settings-sort-by-usage-label": "按使用频率排序",
|
||||
"settings-terminal-command-description": "启动终端的命令。例如,'kitty -e'或'gnome-terminal --'。",
|
||||
"settings-terminal-command-description": "启动终端的命令。例如:'kitty -e'或'gnome-terminal --'。",
|
||||
"settings-terminal-command-label": "终端命令",
|
||||
"settings-use-app2unit-description": "使用替代启动方法以更好地管理应用程序进程并防止问题。",
|
||||
"settings-use-app2unit-label": "使用 App2Unit 启动应用程序",
|
||||
"settings-view-mode-description": "选择启动器条目的布局。",
|
||||
"settings-view-mode-label": "视图模式",
|
||||
"title": "启动器"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,7 +1166,7 @@
|
||||
"date-time-show-events-description": "在日历面板中显示事件。",
|
||||
"date-time-show-events-label": "显示日历事件",
|
||||
"date-time-title": "日期和时间",
|
||||
"date-time-use-analog-description": "在日历窗口和锁定屏幕上显示模拟时钟。",
|
||||
"date-time-use-analog-description": "在日历窗口上显示模拟时钟。",
|
||||
"date-time-use-analog-label": "使用模拟时钟样式",
|
||||
"date-time-week-numbers-description": "在日历中显示一年中的第几周(例如:第 38 周)。",
|
||||
"date-time-week-numbers-label": "显示周数",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "在日历中显示天气"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "当 fprintd(指纹认证)处于活动状态时,此选项允许您使用密码而非指纹登录。",
|
||||
"allow-password-with-fprintd-label": "允许使用 fprintd 进行密码登录",
|
||||
"auto-start-auth-description": "自动启动指纹验证,无需按键或单击按钮。",
|
||||
"auto-start-auth-label": "自动启动身份验证",
|
||||
"clock-format-description": "使用日期/时间语法令牌自定义时钟格式。",
|
||||
"clock-format-label": "时钟格式",
|
||||
"clock-style-analog": "模拟",
|
||||
"clock-style-custom": "自定义",
|
||||
"clock-style-description": "选择锁屏时钟的视觉样式。",
|
||||
"clock-style-digital": "数字",
|
||||
"clock-style-label": "时钟样式",
|
||||
"compact-lockscreen-description": "仅显示登录输入和系统控制,隐藏天气和媒体小部件。",
|
||||
"compact-lockscreen-label": "紧凑型锁屏",
|
||||
"lock-on-suspend-description": "系统挂起时自动锁定屏幕。",
|
||||
"lock-on-suspend-label": "挂起时锁定",
|
||||
"lock-screen-animations-description": "启用或禁用锁屏动画。",
|
||||
"lock-screen-animations-label": "锁屏动画",
|
||||
"lock-screen-blur-strength-description": "对锁屏壁纸应用模糊效果。",
|
||||
"lock-screen-blur-strength-label": "锁屏模糊强度",
|
||||
"lock-screen-tint-strength-description": "将色调叠加应用于锁屏壁纸。",
|
||||
"lock-screen-tint-strength-label": "锁屏着色强度",
|
||||
"monitors-desc": "在指定显示器上显示锁屏。如果未选择,则默认为所有显示器。",
|
||||
"show-hibernate-description": "在电源控制中显示'休眠'选项。",
|
||||
"show-hibernate-label": "显示休眠",
|
||||
"show-session-buttons-description": "允许从锁屏访问电源设置。",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "将低紧急度保存到历史记录",
|
||||
"history-normal-urgency-description": "将正常优先级通知保存到历史记录。",
|
||||
"history-normal-urgency-label": "将正常紧急度保存到历史记录",
|
||||
"media-toast-description": "媒体播放状态改变时显示一个 Toast。",
|
||||
"media-toast-label": "媒体",
|
||||
"monitors-desc": "在特定显示器上显示通知。如果未选择,则默认为全部。",
|
||||
"settings-always-on-top-description": "在全屏窗口和其他图层上方显示通知。",
|
||||
"settings-background-opacity-description": "调整通知背景的透明度。",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "通知声音不可用",
|
||||
"sounds-volume-description": "调整通知声音的音量级别。",
|
||||
"sounds-volume-label": "声音音量",
|
||||
"toast-battery-description": "当电池电量低于此百分比时显示警告。",
|
||||
"toast-battery-label": "低电量警告",
|
||||
"toast-desc": "配置气泡通知的外观和行为。",
|
||||
"toast-keyboard-description": "键盘布局改变时显示一个 Toast。",
|
||||
"toast-keyboard-label": "键盘布局"
|
||||
"toast-keyboard-label": "键盘布局",
|
||||
"toast-media-description": "媒体播放状态改变时显示一个 Toast。",
|
||||
"toast-media-label": "媒体"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "在全屏窗口和其他图层之上显示 OSD。",
|
||||
@@ -1202,16 +1322,20 @@
|
||||
"types-volume-label": "输出音量"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "自动更新插件",
|
||||
"auto-update-description": "在 shell 启动时自动更新所有插件。",
|
||||
"available-description": "浏览并安装来自已配置源的插件。",
|
||||
"available-label": "可用插件",
|
||||
"available-no-plugins-description": "检查你的插件源或刷新列表。",
|
||||
"available-no-plugins-label": "没有可用的插件",
|
||||
"check-for-updates": "检查更新",
|
||||
"checking-for-updates": "正在检查更新...",
|
||||
"collision-already-installed": "此插件已安装",
|
||||
"collision-custom-version-exists": "来自“{source}”的自定义版本已安装",
|
||||
"collision-official-version-exists": "此插件的官方版本已安装",
|
||||
"filter-downloaded": "已下载",
|
||||
"filter-not-downloaded": "未下载",
|
||||
"filter-tags-description": "按类别或下载状态筛选插件",
|
||||
"filter-tags-description": "按类别或下载状态筛选插件。",
|
||||
"filter-tags-label": "标签",
|
||||
"hot-reload-description": "当插件文件发生更改时自动重新加载插件。对插件开发很有用。",
|
||||
"hot-reload-label": "热重载(开发模式)",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "我的酷仓库",
|
||||
"sources-remove-tooltip": "移除插件源",
|
||||
"title": "插件",
|
||||
"translations-reloaded": "已重新加载翻译:{name}",
|
||||
"uninstall-dialog-description": "你确定要卸载 {plugin} 吗? 这将移除所有插件数据。",
|
||||
"uninstall-dialog-title": "卸载插件",
|
||||
"uninstall-error": "卸载失败:{error}",
|
||||
@@ -1271,11 +1396,14 @@
|
||||
"entries-desc": "自定义会话菜单中显示哪些电源操作及其顺序。",
|
||||
"entries-title": "电源操作",
|
||||
"entry-settings-command-description": "为此操作执行的自定义命令。留空则使用默认系统命令。",
|
||||
"entry-settings-command-placeholder": "systemctl poweroff",
|
||||
"entry-settings-command-placeholder": "例如:systemctl poweroff",
|
||||
"entry-settings-default-command-lock": "内部锁屏(无命令)",
|
||||
"entry-settings-default-command-logout": "内部注销(无命令)",
|
||||
"entry-settings-default-info-description": "如果没有指定自定义命令,将使用默认的系统命令。",
|
||||
"entry-settings-default-info-label": "默认命令",
|
||||
"entry-settings-keybind-description": "当会话菜单打开时,分配一个按键组合来触发此操作。",
|
||||
"entry-settings-keybind-placeholder": "按下录制以分配一个键...",
|
||||
"entry-settings-keybind-recording": "录制中... 按任意组合键",
|
||||
"entry-settings-title": "配置 {entry}",
|
||||
"entry-settings-tooltip": "配置命令",
|
||||
"general-desc": "配置会话菜单面板的行为和外观。",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "严重颜色",
|
||||
"custom-highlight-colors-title-label": "自定义高亮颜色",
|
||||
"disk-available-label": "可用磁盘空间",
|
||||
"disk-section-label": "磁盘使用率",
|
||||
"enable-dgpu-monitoring-description": "警告:这将唤醒您的独立显卡 (NVIDIA/AMD),这可能会显著影响配备混合显卡的笔记本电脑的电池续航时间。",
|
||||
"enable-dgpu-monitoring-label": "启用独立显卡监控",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "选择「设置」面板的布局(可能需要重新打开「设置」面板才会生效)。",
|
||||
"settings-panel-mode-label": "「设置」面板模式",
|
||||
"shadows-description": "启用条形图和面板下的阴影。",
|
||||
"shadows-direction-description": "选择阴影投射的方向。",
|
||||
"shadows-direction-description": "选择阴影投射的位置。",
|
||||
"shadows-direction-label": "阴影方向",
|
||||
"shadows-label": "阴影",
|
||||
"title": "用户界面",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "为每个显示器设置不同的壁纸文件夹。",
|
||||
"settings-monitor-specific-label": "显示器特定目录",
|
||||
"settings-monitor-specific-tooltip": "显示器壁纸文件夹",
|
||||
"settings-overview-blur-strength-description": "将模糊强度应用于概览。",
|
||||
"settings-overview-blur-strength-label": "概览模糊强度",
|
||||
"settings-overview-tint-description": "将着色强度应用到概览。",
|
||||
"settings-overview-tint-label": "概览着色强度",
|
||||
"settings-recursive-search-description": "同时在壁纸目录的子文件夹中搜索壁纸。",
|
||||
"settings-recursive-search-label": "搜索子文件夹",
|
||||
"settings-select-monitor-folder": "选择显示器壁纸文件夹",
|
||||
@@ -1407,7 +1540,7 @@
|
||||
"enter-command": "输入要执行的命令(应用程序或自定义脚本)",
|
||||
"enter-ipc-identifier": "输入 IPC 命令的唯一标识符",
|
||||
"enter-path": "输入路径...",
|
||||
"enter-text-to-collapse": "例如,“nothing is playing”。使用 /regex/ 表示匹配模式。",
|
||||
"enter-text-to-collapse": "例如:“nothing is playing”。使用 /regex/ 表示匹配模式。",
|
||||
"enter-tooltip": "输入提示信息",
|
||||
"enter-width-pixels": "输入宽度(像素)",
|
||||
"search": "搜索...",
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "完成!",
|
||||
"appearance": {
|
||||
"subheader": "选择 Dark Mode 和颜色来源(壁纸或预定义)。"
|
||||
"subheader": "选择深色模式和颜色来源(壁纸或预设)。"
|
||||
},
|
||||
"customize": {
|
||||
"header": "自定义体验",
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "飞行模式"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "电量严重不足",
|
||||
"critical-desc": "电量仅剩 {percent}% — 请立即连接充电器",
|
||||
"low": "电池电量低",
|
||||
"low-desc": "电量仅剩 {percent}%,请插上充电器。"
|
||||
"low-desc": "电量仅剩 {percent}% — 请连接充电器"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "地址已复制到剪贴板",
|
||||
@@ -1546,7 +1681,7 @@
|
||||
"noctalia-performance": {
|
||||
"disabled": "性能模式已禁用",
|
||||
"enabled": "已启用性能模式",
|
||||
"label": "Noctalia 性能"
|
||||
"label": "Noctalia 性能模式"
|
||||
},
|
||||
"power-profile": {
|
||||
"changed": "电源模式已更改",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "圆盘",
|
||||
"fade": "淡入淡出",
|
||||
"honeycomb": "蜂巢",
|
||||
"pixelate": "像素化",
|
||||
"stripes": "条纹",
|
||||
"wipe": "擦除"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "正在加载壁纸...",
|
||||
"no-results": "未找到壁纸。请尝试不同的搜索查询。",
|
||||
"page": "{current} / {total}"
|
||||
"page": "{current} / {total}",
|
||||
"page-prefix": "页面",
|
||||
"page-suffix": "共 {total} 个"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
+168
-29
@@ -48,11 +48,16 @@
|
||||
"device-default": "預設 (顯示裝置)",
|
||||
"device-description": "選取要顯示哪個裝置的電池",
|
||||
"device-label": "電池裝置",
|
||||
"display-mode-description": "選擇電池在工具列中的顯示方式。",
|
||||
"display-mode-graphic": "圖形化電池",
|
||||
"display-mode-graphic-clean": "圖形電池(無%)",
|
||||
"display-mode-icon-always": "圖示 - 始終顯示 %",
|
||||
"display-mode-icon-hover": "圖示 - 懸停時顯示",
|
||||
"display-mode-icon-only": "僅圖示",
|
||||
"hide-if-idle-description": "當電池狀態為閒置時隱藏小工具",
|
||||
"hide-if-idle-label": "閒置時隱藏",
|
||||
"hide-if-not-detected-description": "如果系統沒有偵測到電池就隱藏小工具",
|
||||
"hide-if-not-detected-label": "沒有偵測到時隱藏",
|
||||
"low-battery-threshold-description": "在電池落到此百分比以下時顯示警告",
|
||||
"low-battery-threshold-label": "低電量警告",
|
||||
"show-noctalia-performance-description": "在電池面板內顯示 Noctalia 效能模式開關",
|
||||
"show-noctalia-performance-label": "顯示 Noctalia 效能模式開關",
|
||||
@@ -75,8 +80,6 @@
|
||||
"use-custom-font-label": "使用自訂字型",
|
||||
"use-monospaced-font-description": "當啟用時, 時鐘會使用等寬字型顯示",
|
||||
"use-monospaced-font-label": "使用等寬字型",
|
||||
"use-primary-color-description": "當啟用時, 會以主題的主色強調",
|
||||
"use-primary-color-label": "使用主要顏色",
|
||||
"vertical-bar-description": "使用空格把各個部件拆到下一行",
|
||||
"vertical-bar-label": "垂直列顯示"
|
||||
},
|
||||
@@ -94,7 +97,6 @@
|
||||
"collapse-condition-description": "若輸出文字符合此值,按鈕將會摺疊。",
|
||||
"collapse-condition-label": "摺疊條件",
|
||||
"color-selection-description": "將主題用色套用至圖示及文字上",
|
||||
"color-selection-label": "選取顏色",
|
||||
"display-command-output-description": "輸入一個想要定時重複執行的指令, 指令的第一行輸出將會作為顯示的文字",
|
||||
"display-command-output-label": "顯示指令的輸出",
|
||||
"display-command-output-stream-description": "輸入一個要持續執行的指令",
|
||||
@@ -182,7 +184,9 @@
|
||||
"hide-widget-when-zero-unread-description": "沒有未讀通知時隱藏通知圖示。",
|
||||
"hide-widget-when-zero-unread-label": "沒有未讀通知時隱藏圖示",
|
||||
"show-unread-badge-description": "顯示帶有數量的未讀標記",
|
||||
"show-unread-badge-label": "顯示未讀標記"
|
||||
"show-unread-badge-label": "顯示未讀標記",
|
||||
"unread-badge-color-description": "選擇未讀通知徽章的顏色。",
|
||||
"unread-badge-color-label": "未讀徽章顏色"
|
||||
},
|
||||
"section-editor": {
|
||||
"placeholder": "選取一個小工具來新增...",
|
||||
@@ -194,6 +198,8 @@
|
||||
"system-monitor": {
|
||||
"compact-mode-description": "用迷你長條來取代文字數值, 可以避免佈局跑版",
|
||||
"compact-mode-label": "緊湊模式",
|
||||
"cpu-frequency-description": "顯示目前 CPU 時脈速度(GHz)。",
|
||||
"cpu-frequency-label": "顯示 CPU 頻率",
|
||||
"cpu-temperature-description": "如果可用即顯示 CPU 溫度",
|
||||
"cpu-temperature-label": "CPU 溫度",
|
||||
"cpu-usage-description": "顯示現在 CPU 的使用百分比",
|
||||
@@ -209,6 +215,10 @@
|
||||
"memory-usage-label": "記憶體使用量",
|
||||
"network-traffic-description": "顯示網路上傳及下載的速度",
|
||||
"network-traffic-label": "網路流量",
|
||||
"storage-as-percentage-description": "以百分比而非絕對值顯示磁碟空間。",
|
||||
"storage-as-percentage-label": "磁碟百分比",
|
||||
"storage-available-description": "顯示可用磁碟空間,而非已用空間。",
|
||||
"storage-available-label": "可用磁碟空間",
|
||||
"storage-usage-description": "顯示磁碟空間的使用量",
|
||||
"storage-usage-label": "磁碟使用量",
|
||||
"swap-usage-description": "顯示交換記憶體使用量",
|
||||
@@ -240,6 +250,8 @@
|
||||
"title-width-reset-tooltip": "重設標題寬度"
|
||||
},
|
||||
"tray": {
|
||||
"chevron-color-description": "將主題顏色套用至抽屜的箭頭圖示。",
|
||||
"chevron-color-label": "箭頭顏色",
|
||||
"colorize-icons-description": "將系統夾圖示套用主題用色",
|
||||
"colorize-icons-label": "為圖示上色",
|
||||
"drawer-enabled-description": "當啟用時, 沒有釘選的系統匣圖示將會顯示在抽屜面板中<br>如果停用則所有的圖示都會在工具列裡顯示",
|
||||
@@ -248,14 +260,17 @@
|
||||
"hide-passive-label": "隱藏被動項目"
|
||||
},
|
||||
"volume": {
|
||||
"display-mode-description": "選擇你想如何顯示這項數值",
|
||||
"display-mode-label": "顯示模式"
|
||||
"display-mode-description": "選擇你想如何顯示這項數值"
|
||||
},
|
||||
"workspace": {
|
||||
"character-count-description": "限制工作區所設定的名字要顯示幾個字元 (1-10)",
|
||||
"character-count-label": "字元上限",
|
||||
"empty-color-description": "設定空白 Workspace 的背景顏色。",
|
||||
"empty-color-label": "空白工作區顏色",
|
||||
"enable-scrollwheel-description": "利用滑鼠滾輪在工作區間切換",
|
||||
"enable-scrollwheel-label": "捲輪切換工作區",
|
||||
"focused-color-description": "設定焦點 Workspace 的背景顏色。",
|
||||
"focused-color-label": "聚焦的工作區顏色",
|
||||
"follow-focused-screen-description": "顯示正在聚焦的螢幕所擁有的工作區, 而不是工具列所在的螢幕擁有的工作區",
|
||||
"follow-focused-screen-label": "跟隨焦點所在的螢幕",
|
||||
"grouped-border-opacity-description": "設定工作區邊框的不透明度",
|
||||
@@ -264,8 +279,16 @@
|
||||
"hide-unoccupied-label": "沒有佔用時隱藏",
|
||||
"label-mode-description": "選擇工作區標籤該如何顯示",
|
||||
"label-mode-label": "標籤樣式",
|
||||
"occupied-color-description": "設定已佔用Workspace的背景顏色。",
|
||||
"occupied-color-label": "已佔用工作區顏色",
|
||||
"pill-size-description": "調整工作區指示器的大小 (50%-100%)。",
|
||||
"pill-size-label": "膠囊大小",
|
||||
"reverse-scrolling-description": "捲動時反轉工作區切換方向。",
|
||||
"reverse-scrolling-label": "反轉捲動",
|
||||
"show-applications-description": "顯示各個工作區的程式圖示",
|
||||
"show-applications-label": "顯示應用程式",
|
||||
"show-badge-description": "在群組模式下顯示工作區編號徽章。",
|
||||
"show-badge-label": "顯示工作區標記",
|
||||
"show-labels-only-when-occupied-description": "只在工作區有視窗時顯示工作區標籤",
|
||||
"show-labels-only-when-occupied-label": "佔用時顯示標籤",
|
||||
"unfocused-icons-opacity-description": "設定非焦點應用程式圖示的不透明度。",
|
||||
@@ -327,13 +350,6 @@
|
||||
"version-new-user": "全新安裝"
|
||||
}
|
||||
},
|
||||
"colors": {
|
||||
"error": "錯誤",
|
||||
"on-surface": "工具列表面",
|
||||
"primary": "主要色",
|
||||
"secondary": "輔助色",
|
||||
"tertiary": "三級色"
|
||||
},
|
||||
"common": {
|
||||
"actions": "操作",
|
||||
"add": "新增",
|
||||
@@ -373,10 +389,13 @@
|
||||
"disconnect": "斷線",
|
||||
"disconnected": "已斷線",
|
||||
"disconnecting": "正在斷線...",
|
||||
"display-mode": "顯示模式",
|
||||
"download": "下載",
|
||||
"duration": "持續時間",
|
||||
"dysfunctional": "功能失調",
|
||||
"edit": "編輯",
|
||||
"enabled": "已啟用",
|
||||
"error": "錯誤",
|
||||
"events": "事件",
|
||||
"execute": "執行",
|
||||
"faithful": "忠實",
|
||||
@@ -395,6 +414,7 @@
|
||||
"installed": "已安裝",
|
||||
"interface": "介面",
|
||||
"internet": "網際網路",
|
||||
"keybind": "按鍵綁定",
|
||||
"language": "語言",
|
||||
"loading": "正在載入...",
|
||||
"local": "本機",
|
||||
@@ -416,6 +436,7 @@
|
||||
"not-found": "找不到",
|
||||
"notifications": "通知",
|
||||
"official": "官方",
|
||||
"on-surface": "在表面上",
|
||||
"output": "輸出",
|
||||
"pair": "配對",
|
||||
"paired": "已配對",
|
||||
@@ -428,11 +449,14 @@
|
||||
"polling": "輪詢",
|
||||
"position": "位置",
|
||||
"previous": "上一首",
|
||||
"primary": "主要的",
|
||||
"random": "隨機",
|
||||
"reboot": "重新啟動",
|
||||
"record": "開始錄製",
|
||||
"refresh": "重新整理",
|
||||
"required": "(必要)",
|
||||
"reset": "重設",
|
||||
"reset-to-default": "重設為預設值",
|
||||
"result-count": "{count} 筆結果",
|
||||
"result-count-plural": "{count} 筆結果",
|
||||
"resume": "繼續",
|
||||
@@ -440,8 +464,12 @@
|
||||
"scanning": "掃描中...",
|
||||
"screen-corners": "畫面邊角",
|
||||
"search": "搜尋",
|
||||
"secondary": "輔助",
|
||||
"security": "安全",
|
||||
"select": "選取",
|
||||
"select-color": "選擇顏色",
|
||||
"select-color-description": "套用主題顏色以示強調。",
|
||||
"select-icon-color": "選擇圖示顏色",
|
||||
"shortcuts": "快捷鍵",
|
||||
"shutdown": "關機",
|
||||
"signal": "訊號",
|
||||
@@ -449,8 +477,10 @@
|
||||
"sources": "來源",
|
||||
"start": "開始",
|
||||
"stop": "停止",
|
||||
"supporters": "支持者",
|
||||
"suspend": "暫停",
|
||||
"templates": "模板",
|
||||
"tertiary": "第三",
|
||||
"test": "測試",
|
||||
"thresholds": "門檻",
|
||||
"title": "標題",
|
||||
@@ -473,6 +503,7 @@
|
||||
"week": "週",
|
||||
"widgets": "小工具",
|
||||
"width": "寬度",
|
||||
"windows": "視窗",
|
||||
"yes": "是"
|
||||
},
|
||||
"control-center": {
|
||||
@@ -492,8 +523,10 @@
|
||||
"on-hover": "游標移過時"
|
||||
},
|
||||
"hide-modes": {
|
||||
"auto-hide": "自動隱藏",
|
||||
"hidden": "空白時隱藏",
|
||||
"idle": "閒置時隱藏",
|
||||
"non-exclusive": "非獨佔",
|
||||
"transparent": "空白時變透明",
|
||||
"visible": "始終可見"
|
||||
},
|
||||
@@ -543,7 +576,9 @@
|
||||
"emoji-loading": "載入表情符號...",
|
||||
"emoji-loading-description": "請稍候",
|
||||
"emoji-no-recent": "還沒有最近使用的表情符號",
|
||||
"emoji-search-description": "搜尋和複製表情符號"
|
||||
"emoji-search-description": "搜尋和複製表情符號",
|
||||
"settings-search-description": "搜尋並前往設定",
|
||||
"windows-search-description": "搜尋並聚焦開啟的視窗"
|
||||
}
|
||||
},
|
||||
"lock-screen": {
|
||||
@@ -579,13 +614,26 @@
|
||||
"density-compact": "緊湊",
|
||||
"density-default": "預設",
|
||||
"density-mini": "迷你",
|
||||
"density-spacious": "寬敞"
|
||||
"density-spacious": "寬敞",
|
||||
"display-mode-always-visible": "永遠可見",
|
||||
"type-floating": "懸浮",
|
||||
"type-framed": "邊框",
|
||||
"type-simple": "簡約"
|
||||
},
|
||||
"control-center": {
|
||||
"quick-settings-style-classic": "古典",
|
||||
"quick-settings-style-modern": "現代"
|
||||
},
|
||||
"frame-rates-fps": "{fps} FPS",
|
||||
"launcher-density": {
|
||||
"comfortable": "舒適",
|
||||
"compact": "緊湊",
|
||||
"default": "預設"
|
||||
},
|
||||
"launcher-view-mode": {
|
||||
"grid": "網格",
|
||||
"list": "列表"
|
||||
},
|
||||
"scrolling-modes": {
|
||||
"always": "總是捲動",
|
||||
"hover": "游標移過時捲動",
|
||||
@@ -616,8 +664,9 @@
|
||||
},
|
||||
"panels": {
|
||||
"about": {
|
||||
"become-supporter": "成為支持者",
|
||||
"changelog": "檢視更新日誌",
|
||||
"contributors-desc": "特別感謝我們這{count}位<b>超讚</b>的貢獻者!!",
|
||||
"contributors-description": "特別感謝我們這{count}位<b>超讚</b>的貢獻者!!",
|
||||
"contributors-description-plural": "特別感謝我們這{count}位<b>超讚</b>的貢獻者!!",
|
||||
"copy-info": "複製資訊",
|
||||
"info-copied": "資訊已複製至剪貼簿",
|
||||
@@ -628,6 +677,10 @@
|
||||
"noctalia-title": "Noctalia Shell",
|
||||
"privacy-policy": "隱私權政策",
|
||||
"support": "支持我們",
|
||||
"supporter-badge": "支持者",
|
||||
"supporters-desc": "非常感謝我們出色的支持者!",
|
||||
"supporters-desc-plural": "非常感謝我們的<b>{count}位出色</b>支持者!",
|
||||
"supporters-loading": "正在載入支持者...",
|
||||
"system-cpu": "CPU:",
|
||||
"system-disk": "磁碟:",
|
||||
"system-gpu": "GPU:",
|
||||
@@ -698,15 +751,27 @@
|
||||
"volumes-volume-overdrive-label": "允許音量過載"
|
||||
},
|
||||
"bar": {
|
||||
"appearance-auto-hide-delay-description": "滑鼠離開後Bar隱藏所需時間",
|
||||
"appearance-auto-hide-delay-label": "隱藏延遲",
|
||||
"appearance-auto-hide-exclusive-note": "注意: 當自動隱藏處於活動狀態時,專屬區域會自動禁用。",
|
||||
"appearance-auto-show-delay-description": "滑鼠進入邊緣時,欄顯示前的延遲時間。",
|
||||
"appearance-auto-show-delay-label": "顯示延遲",
|
||||
"appearance-background-opacity-description": "設定工具列背景的不透明度",
|
||||
"appearance-background-opacity-label": "工具列背景不透明度",
|
||||
"appearance-capsule-color-description": "為欄膠囊選擇一種顏色,或不使用任何顏色以採用預設表面顏色。",
|
||||
"appearance-capsule-color-label": "膠囊顏色",
|
||||
"appearance-capsule-opacity-description": "設定當啟用顯示小容器時小工具的背景不透明度",
|
||||
"appearance-capsule-opacity-label": "小容器不透明度",
|
||||
"appearance-density-description": "調整工具列的內部間距來做出緊湊或寬敞的外觀",
|
||||
"appearance-density-label": "工具列密度",
|
||||
"appearance-desc": "自訂工具列的外觀及位置",
|
||||
"appearance-display-mode-description": "選擇列何時可見",
|
||||
"appearance-floating-description": "將工具列以懸浮的圓弧長條狀顯示",
|
||||
"appearance-floating-label": "懸浮工具列",
|
||||
"appearance-frame-radius": "內圓角",
|
||||
"appearance-frame-settings-description": "調整邊框粗細和內圓角半徑",
|
||||
"appearance-frame-settings-label": "邊框設定",
|
||||
"appearance-frame-thickness": "粗細",
|
||||
"appearance-hide-on-overview-description": "當在合成器概覽時, 隱藏工具列並關閉面板",
|
||||
"appearance-hide-on-overview-label": "概覽時隱藏工具列",
|
||||
"appearance-margins-description": "調整懸浮工具列的邊距",
|
||||
@@ -721,6 +786,8 @@
|
||||
"appearance-show-capsule-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": "分開設定工具列不透明度",
|
||||
"monitor-configure-widgets": "設定小工具",
|
||||
@@ -770,6 +837,7 @@
|
||||
"download-title": "下載配色",
|
||||
"method-description": {
|
||||
"content": "具有高保真色彩提取的 Material Design 方案,可與來源內容的實際色彩緊密匹配。",
|
||||
"dysfunctional": "與 Faithful 類似,但選擇第二主導的顏色家族作為主要顏色。",
|
||||
"faithful": "嘗試在生成和諧調色盤的同時,盡可能接近來源顏色。",
|
||||
"fruit-salad": "Material Design 配色方案,可產生一個俏皮、充滿活力的調色盤,具有多樣且多變的色調。",
|
||||
"monochrome": "使用單一色調灰階和最少色彩內容的 Material Design 方案。",
|
||||
@@ -866,6 +934,16 @@
|
||||
"media-player-show-buttons-label": "顯示按鈕",
|
||||
"media-player-show-visualizer-description": "顯示視覺效果",
|
||||
"media-player-visualizer-type-description": "選擇視覺效果的樣式",
|
||||
"system-stat-layout-bottom": "底部",
|
||||
"system-stat-layout-description": "選擇圖例相對於圖表的顯示方式。",
|
||||
"system-stat-layout-label": "佈局",
|
||||
"system-stat-layout-side": "邊",
|
||||
"system-stat-rounded-corners-description": "小工具背景使用圓角。",
|
||||
"system-stat-rounded-corners-label": "圓角",
|
||||
"system-stat-show-background-description": "顯示系統統計小工具的背景容器。",
|
||||
"system-stat-show-background-label": "顯示背景",
|
||||
"system-stat-stat-type-description": "選擇要顯示的系統統計資訊。",
|
||||
"system-stat-stat-type-label": "統計類型",
|
||||
"title": "桌面小工具",
|
||||
"weather-enabled-description": "在桌面顯示一個天氣小工具",
|
||||
"weather-enabled-label": "啟用天氣小工具",
|
||||
@@ -952,6 +1030,14 @@
|
||||
"fonts-monospace-search-placeholder": "搜尋等寬字型...",
|
||||
"fonts-reset-scaling": "重設文字大小",
|
||||
"fonts-title": "字型",
|
||||
"keybinds-description": "配置面板和啟動器的全域導航鍵。",
|
||||
"keybinds-down": "下移",
|
||||
"keybinds-enter": "確認 / 動作",
|
||||
"keybinds-escape": "關閉 / 返回",
|
||||
"keybinds-left": "向左移動",
|
||||
"keybinds-right": "向右移動",
|
||||
"keybinds-title": "導覽按鍵綁定",
|
||||
"keybinds-up": "上移",
|
||||
"language-desc": "選擇你偏好使用的語言",
|
||||
"language-select-auto-detect": "自動選擇",
|
||||
"language-select-description": "選擇要在應用程式所使用的介面語言",
|
||||
@@ -972,7 +1058,9 @@
|
||||
"screen-corners-solid-black-description": "使用黑色而不是工具列背景色",
|
||||
"screen-corners-solid-black-label": "黑色邊角",
|
||||
"screen-corners-title": "畫面邊角",
|
||||
"settings-copied": "已複製設定至剪貼簿"
|
||||
"settings-copied": "已複製設定至剪貼簿",
|
||||
"tab-basics": "基礎",
|
||||
"tab-keybinds": "按鍵綁定"
|
||||
},
|
||||
"hooks": {
|
||||
"info-command-info-description": "• 指令將透過 shell (sh -lc) 執行<br>• 指令會在背景 (detached 狀態) 執行<br>• 測試按鈕會以當下填寫的內容執行",
|
||||
@@ -980,7 +1068,7 @@
|
||||
"info-parameters-label": "可用參數",
|
||||
"noctalia-started-description": "Noctalia 完成載入時要執行的指令。",
|
||||
"noctalia-started-label": "Noctalia 已啟動",
|
||||
"noctalia-started-placeholder": "例如 notify-send 'Noctalia 已載入'",
|
||||
"noctalia-started-placeholder": "例如: notify-send 'Noctalia 已載入'",
|
||||
"performance-mode-disabled-description": "Noctalia 效能模式停用時要執行的指令",
|
||||
"performance-mode-disabled-label": "效能模式停用時",
|
||||
"performance-mode-disabled-placeholder": "例如: notify-send \"Performance\" \"Mode disabled\"",
|
||||
@@ -1016,7 +1104,7 @@
|
||||
"clipboard-desc": "在啟動器存取及整理你的剪貼簿歷史",
|
||||
"execute-desc": "設定應用程式該如何啟動",
|
||||
"execute-title": "執行",
|
||||
"settings-annotation-tool-description": "點擊剪貼簿歷史記錄中的註記按鈕時要執行的命令,圖片將會透過管線傳送至此命令。",
|
||||
"settings-annotation-tool-description": "點擊剪貼簿歷史記錄中的註記按鈕時要執行的命令。圖片將會透過管線傳送至此命令。",
|
||||
"settings-annotation-tool-label": "註記工具",
|
||||
"settings-annotation-tool-placeholder": "例如: gradia', 'satty -f -'",
|
||||
"settings-auto-paste-description": "自動貼上選取的剪貼簿項目, 需要 wtype 套件",
|
||||
@@ -1027,18 +1115,28 @@
|
||||
"settings-clip-wrap-text-label": "剪貼簿文字換行",
|
||||
"settings-clipboard-history-description": "在啟動器存取先前所複製的項目",
|
||||
"settings-clipboard-history-label": "啟用剪貼簿歷史",
|
||||
"settings-custom-launch-prefix-description": "在命令前加上自訂啟動器前綴(例如:用「runapp」來整合 systemd)。",
|
||||
"settings-clipboard-watch-image-description": "傳遞給 wl-paste 以進行圖像更改的完整命令字串(需要重新啟動)。",
|
||||
"settings-clipboard-watch-image-label": "圖像監控命令",
|
||||
"settings-clipboard-watch-text-description": "傳遞給 wl-paste 以進行文字變更的完整命令字串(需要重新啟動)。",
|
||||
"settings-clipboard-watch-text-label": "文字監看指令",
|
||||
"settings-custom-launch-prefix-description": "在命令前加上自訂啟動器前綴(例如: 用「runapp」來整合 systemd)。",
|
||||
"settings-custom-launch-prefix-enabled-description": "使用自訂前綴而不是預設的方式來啟動應用程式",
|
||||
"settings-custom-launch-prefix-enabled-label": "啟用自訂的程式啟動前綴",
|
||||
"settings-custom-launch-prefix-label": "自訂啟動前綴",
|
||||
"settings-density-description": "調整應用程式圖示大小和 Launcher 密度。",
|
||||
"settings-density-label": "密度",
|
||||
"settings-desc": "自訂啟動器的外觀及行為",
|
||||
"settings-enable-settings-search-description": "在啟動器中搜尋時顯示設定結果。",
|
||||
"settings-enable-settings-search-label": "啟用設定搜尋",
|
||||
"settings-enable-windows-search-description": "搜尋並聚焦作用中視窗。",
|
||||
"settings-enable-windows-search-label": "啟用視窗搜尋",
|
||||
"settings-grid-view-description": "將項目以方格排列而不是列表顯示",
|
||||
"settings-icon-mode-description": "使用系統原生的圖示而不是自 Tabler 圖示包帶入",
|
||||
"settings-icon-mode-label": "使用原生圖示",
|
||||
"settings-ignore-mouse-input-description": "對啟動器停用滑鼠互動及滾輪捲動",
|
||||
"settings-ignore-mouse-input-label": "忽略滑鼠輸入",
|
||||
"settings-overlay-layer-description": "在覆蓋層上顯示啟動器,位於全螢幕視窗之上。啟用時,啟動器不會附加到列。",
|
||||
"settings-overlay-layer-label": "在全螢幕上方顯示",
|
||||
"settings-position-description": "選擇啟動器面板要出現的地方",
|
||||
"settings-show-categories-description": "顯示分類標籤來篩選應用程式",
|
||||
"settings-show-categories-label": "顯示分類",
|
||||
@@ -1050,6 +1148,8 @@
|
||||
"settings-terminal-command-label": "終端機指令",
|
||||
"settings-use-app2unit-description": "使用替代的啟動方式,以更好地管理應用程式程序並避免問題。",
|
||||
"settings-use-app2unit-label": "使用 App2Unit 啟動應用程式",
|
||||
"settings-view-mode-description": "選擇啟動器項目的版面配置。",
|
||||
"settings-view-mode-label": "檢視模式",
|
||||
"title": "啟動器"
|
||||
},
|
||||
"location": {
|
||||
@@ -1066,7 +1166,7 @@
|
||||
"date-time-show-events-description": "在行事曆面板裡顯示活動",
|
||||
"date-time-show-events-label": "顯示行事曆活動",
|
||||
"date-time-title": "日期與時間",
|
||||
"date-time-use-analog-description": "在行事曆及鎖定畫面顯示類比時鐘",
|
||||
"date-time-use-analog-description": "在日曆視窗上顯示類比時鐘。",
|
||||
"date-time-use-analog-label": "使用類比時鐘",
|
||||
"date-time-week-numbers-description": "在行事曆顯示今年當週的週數 (例如: 第38週)",
|
||||
"date-time-week-numbers-label": "顯示週數",
|
||||
@@ -1090,10 +1190,28 @@
|
||||
"weather-show-in-calendar-label": "在行事曆中顯示天氣"
|
||||
},
|
||||
"lock-screen": {
|
||||
"allow-password-with-fprintd-description": "當 fprintd(指紋認證)處於活動狀態時,此選項允許您使用密碼而非指紋登入。",
|
||||
"allow-password-with-fprintd-label": "允許使用 fprintd 進行密碼登入",
|
||||
"auto-start-auth-description": "自動啟動指紋驗證,無需按鍵或點擊按鈕。",
|
||||
"auto-start-auth-label": "自動啟動驗證",
|
||||
"clock-format-description": "使用日期/時間語法令牌自訂時鐘格式。",
|
||||
"clock-format-label": "時鐘格式",
|
||||
"clock-style-analog": "類比",
|
||||
"clock-style-custom": "自訂",
|
||||
"clock-style-description": "選擇鎖定畫面時鐘的視覺樣式。",
|
||||
"clock-style-digital": "數位",
|
||||
"clock-style-label": "時鐘樣式",
|
||||
"compact-lockscreen-description": "只顯示登入欄位及電源控制, 隱藏天氣及媒體小工具",
|
||||
"compact-lockscreen-label": "精簡鎖定畫面",
|
||||
"lock-on-suspend-description": "在暫停系統時自動鎖定畫面",
|
||||
"lock-on-suspend-label": "暫停時鎖定",
|
||||
"lock-screen-animations-description": "啟用或停用鎖定畫面動畫。",
|
||||
"lock-screen-animations-label": "鎖定畫面動畫",
|
||||
"lock-screen-blur-strength-description": "對鎖定畫面桌布套用模糊效果。",
|
||||
"lock-screen-blur-strength-label": "鎖定螢幕模糊強度",
|
||||
"lock-screen-tint-strength-description": "將色調疊加套用到鎖定畫面桌布。",
|
||||
"lock-screen-tint-strength-label": "鎖定畫面著色強度",
|
||||
"monitors-desc": "在特定顯示器上顯示鎖定畫面。如果未選擇,則預設為所有顯示器。",
|
||||
"show-hibernate-description": "在電源及工作階段選單顯示睡眠",
|
||||
"show-hibernate-label": "顯示睡眠",
|
||||
"show-session-buttons-description": "允許在鎖定畫面存取電源控制",
|
||||
@@ -1126,8 +1244,6 @@
|
||||
"history-low-urgency-label": "儲存低急迫性到歷史通知",
|
||||
"history-normal-urgency-description": "將普通急迫的通知存放到歷史通知",
|
||||
"history-normal-urgency-label": "儲存普通急迫到歷史通知",
|
||||
"media-toast-description": "媒體播放狀態變更時顯示氣泡訊息",
|
||||
"media-toast-label": "媒體",
|
||||
"monitors-desc": "只在特定的顯示器顯示通知, 如果全部取消勾選則會顯示在所有顯示器",
|
||||
"settings-always-on-top-description": "在全螢幕視窗與其他層級上方顯示通知。",
|
||||
"settings-background-opacity-description": "調整通知背景的不透明度",
|
||||
@@ -1165,9 +1281,13 @@
|
||||
"sounds-unavailable-label": "通知音效無法使用",
|
||||
"sounds-volume-description": "調整通知音效的音量大小",
|
||||
"sounds-volume-label": "音效音量",
|
||||
"toast-battery-description": "當電池電量低於此百分比時顯示警告。",
|
||||
"toast-battery-label": "低電量提醒",
|
||||
"toast-desc": "設定氣泡訊息的外觀及行為",
|
||||
"toast-keyboard-description": "當鍵盤佈局改變時顯示氣泡訊息",
|
||||
"toast-keyboard-label": "鍵盤佈局"
|
||||
"toast-keyboard-label": "鍵盤佈局",
|
||||
"toast-media-description": "媒體播放狀態變更時顯示氣泡訊息",
|
||||
"toast-media-label": "媒體"
|
||||
},
|
||||
"osd": {
|
||||
"always-on-top-description": "將螢幕顯示在全螢幕視窗與其他層疊之上",
|
||||
@@ -1202,10 +1322,14 @@
|
||||
"types-volume-label": "輸出音量"
|
||||
},
|
||||
"plugins": {
|
||||
"auto-update": "自動更新外掛程式",
|
||||
"auto-update-description": "在 shell 啟動時自動更新所有外掛程式。",
|
||||
"available-description": "從設定的來源檢視及安裝外掛模組",
|
||||
"available-label": "可用的外掛模組",
|
||||
"available-no-plugins-description": "檢查你的模組來源或者重新整理列表",
|
||||
"available-no-plugins-label": "沒有可用的外掛模組",
|
||||
"check-for-updates": "檢查更新",
|
||||
"checking-for-updates": "正在檢查更新...",
|
||||
"collision-already-installed": "這個模組已經安裝過了",
|
||||
"collision-custom-version-exists": "已經安裝了來自 \"{source}\" 的自訂版本",
|
||||
"collision-official-version-exists": "已經安裝了這個模組的官方版本",
|
||||
@@ -1245,6 +1369,7 @@
|
||||
"sources-placeholder": "我的超酷儲存庫",
|
||||
"sources-remove-tooltip": "移除外掛模組來源",
|
||||
"title": "外掛模組 (Plugins)",
|
||||
"translations-reloaded": "已重新載入翻譯:{name}",
|
||||
"uninstall-dialog-description": "你確定想要移除 {plugin}? 這樣會移除所有模組的資料",
|
||||
"uninstall-dialog-title": "移除外掛模組",
|
||||
"uninstall-error": "移除失敗: {error}",
|
||||
@@ -1276,6 +1401,9 @@
|
||||
"entry-settings-default-command-logout": "內建登出 (沒有指令)",
|
||||
"entry-settings-default-info-description": "如果沒有指定自訂指令則使用系統的預設指令",
|
||||
"entry-settings-default-info-label": "預設指令",
|
||||
"entry-settings-keybind-description": "當會話選單打開時,分配一個按鍵組合來觸發此操作。",
|
||||
"entry-settings-keybind-placeholder": "按下錄製以分配一個鍵...",
|
||||
"entry-settings-keybind-recording": "錄製中... 按任意組合鍵",
|
||||
"entry-settings-title": "設定{entry}",
|
||||
"entry-settings-tooltip": "設定指令",
|
||||
"general-desc": "設定工作階段選單的外觀和行為",
|
||||
@@ -1292,6 +1420,7 @@
|
||||
"system-monitor": {
|
||||
"critical-color-label": "危急顏色",
|
||||
"custom-highlight-colors-title-label": "自訂突出色",
|
||||
"disk-available-label": "可用磁碟空間",
|
||||
"disk-section-label": "磁碟使用量",
|
||||
"enable-dgpu-monitoring-description": "注意: 這個選項會喚醒你的 GPU (NVIDIA/AMD), 在混合顯卡的筆電上可能會嚴重影響電池續航力",
|
||||
"enable-dgpu-monitoring-label": "啟用監視獨立 GPU",
|
||||
@@ -1346,7 +1475,7 @@
|
||||
"settings-panel-mode-description": "選擇介面設定出現所用的佈局 (可能需要重新打開)",
|
||||
"settings-panel-mode-label": "設定面板顯示",
|
||||
"shadows-description": "為工具列及面板啟用陰影",
|
||||
"shadows-direction-description": "選擇陰影要投射的方向",
|
||||
"shadows-direction-description": "選擇陰影投射的位置。",
|
||||
"shadows-direction-label": "陰影方向",
|
||||
"shadows-label": "陰影",
|
||||
"title": "使用者介面",
|
||||
@@ -1386,6 +1515,10 @@
|
||||
"settings-monitor-specific-description": "替個別顯示器設定不同的桌布文件夾",
|
||||
"settings-monitor-specific-label": "給特定顯示器所使用的文件夾",
|
||||
"settings-monitor-specific-tooltip": "顯示器桌布文件夾",
|
||||
"settings-overview-blur-strength-description": "將模糊強度應用於概覽。",
|
||||
"settings-overview-blur-strength-label": "概覽模糊強度",
|
||||
"settings-overview-tint-description": "將著色強度套用至概覽。",
|
||||
"settings-overview-tint-label": "概覽著色強度",
|
||||
"settings-recursive-search-description": "也同時搜尋桌布目錄底下的子文件夾",
|
||||
"settings-recursive-search-label": "搜尋子文件夾",
|
||||
"settings-select-monitor-folder": "選擇顯示器所使用的桌布文件夾",
|
||||
@@ -1441,7 +1574,7 @@
|
||||
"setup": {
|
||||
"all-done": "完成!",
|
||||
"appearance": {
|
||||
"subheader": "選擇 Dark Mode 和色彩來源 (桌布或預先定義)。"
|
||||
"subheader": "選擇深色模式和顏色來源(桌布或預設)。"
|
||||
},
|
||||
"customize": {
|
||||
"header": "客製你的使用體驗",
|
||||
@@ -1499,8 +1632,10 @@
|
||||
"title": "飛航模式"
|
||||
},
|
||||
"battery": {
|
||||
"critical": "電量嚴重不足",
|
||||
"critical-desc": "電量剩餘 {percent}% — 請立即連接充電器",
|
||||
"low": "電量過低",
|
||||
"low-desc": "電池剩餘 {percent}% 電量, 請接上充電器"
|
||||
"low-desc": "電量剩餘 {percent}% — 請連接充電器"
|
||||
},
|
||||
"bluetooth": {
|
||||
"address-copied": "已複製位址至剪貼簿",
|
||||
@@ -1683,6 +1818,8 @@
|
||||
"transitions": {
|
||||
"disc": "圓盤",
|
||||
"fade": "淡入",
|
||||
"honeycomb": "蜂巢",
|
||||
"pixelate": "像素化",
|
||||
"stripes": "條紋",
|
||||
"wipe": "擦除"
|
||||
},
|
||||
@@ -1690,7 +1827,9 @@
|
||||
"wallhaven": {
|
||||
"loading": "正在載入桌布...",
|
||||
"no-results": "找不到桌布, 試著用不同的搜尋字串",
|
||||
"page": "第 {current} / {total} 頁"
|
||||
"page": "第 {current} / {total} 頁",
|
||||
"page-prefix": "頁面",
|
||||
"page-suffix": "共 {total} 個"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
|
||||
@@ -1,20 +1,26 @@
|
||||
{
|
||||
"settingsVersion": 0,
|
||||
"bar": {
|
||||
"barType": "simple",
|
||||
"position": "top",
|
||||
"monitors": [],
|
||||
"density": "default",
|
||||
"showOutline": false,
|
||||
"showCapsule": true,
|
||||
"capsuleOpacity": 1,
|
||||
"capsuleColorKey": "none",
|
||||
"backgroundOpacity": 0.93,
|
||||
"useSeparateOpacity": false,
|
||||
"floating": false,
|
||||
"marginVertical": 4,
|
||||
"marginHorizontal": 4,
|
||||
"frameThickness": 8,
|
||||
"frameRadius": 12,
|
||||
"outerCorners": true,
|
||||
"exclusive": true,
|
||||
"hideOnOverview": false,
|
||||
"displayMode": "always_visible",
|
||||
"autoHideDelay": 500,
|
||||
"autoShowDelay": 150,
|
||||
"widgets": {
|
||||
"left": [
|
||||
{
|
||||
@@ -74,6 +80,7 @@
|
||||
"animationSpeed": 1,
|
||||
"animationDisabled": false,
|
||||
"compactLockScreen": false,
|
||||
"lockScreenAnimations": false,
|
||||
"lockOnSuspend": true,
|
||||
"showSessionButtonsOnLockScreen": true,
|
||||
"showHibernateOnLockScreen": false,
|
||||
@@ -86,7 +93,22 @@
|
||||
"showChangelogOnStartup": true,
|
||||
"telemetryEnabled": false,
|
||||
"enableLockScreenCountdown": true,
|
||||
"lockScreenCountdownDuration": 10000
|
||||
"lockScreenCountdownDuration": 10000,
|
||||
"autoStartAuth": false,
|
||||
"allowPasswordWithFprintd": false,
|
||||
"clockStyle": "custom",
|
||||
"clockFormat": "hh\\nmm",
|
||||
"lockScreenMonitors": [],
|
||||
"lockScreenBlur": 0.0,
|
||||
"lockScreenTint": 0.0,
|
||||
"keybinds": {
|
||||
"keyUp": "Up",
|
||||
"keyDown": "Down",
|
||||
"keyLeft": "Left",
|
||||
"keyRight": "Right",
|
||||
"keyEnter": "Return",
|
||||
"keyEscape": "Esc"
|
||||
}
|
||||
},
|
||||
"ui": {
|
||||
"fontDefault": "",
|
||||
@@ -154,6 +176,8 @@
|
||||
"transitionEdgeSmoothness": 0.05,
|
||||
"panelPosition": "follow_bar",
|
||||
"hideWallpaperFilenames": false,
|
||||
"overviewBlur": 0.4,
|
||||
"overviewTint": 0.6,
|
||||
"useWallhaven": false,
|
||||
"wallhavenQuery": "",
|
||||
"wallhavenSorting": "relevance",
|
||||
@@ -164,18 +188,21 @@
|
||||
"wallhavenApiKey": "",
|
||||
"wallhavenResolutionMode": "atleast",
|
||||
"wallhavenResolutionWidth": "",
|
||||
"wallhavenResolutionHeight": ""
|
||||
"wallhavenResolutionHeight": "",
|
||||
"sortOrder": "name"
|
||||
},
|
||||
"appLauncher": {
|
||||
"enableClipboardHistory": false,
|
||||
"autoPasteClipboard": false,
|
||||
"enableClipPreview": true,
|
||||
"clipboardWrapText": true,
|
||||
"clipboardWatchTextCommand": "wl-paste --type text --watch cliphist store",
|
||||
"clipboardWatchImageCommand": "wl-paste --type image --watch cliphist store",
|
||||
"position": "center",
|
||||
"pinnedApps": [],
|
||||
"useApp2Unit": false,
|
||||
"sortByMostUsed": true,
|
||||
"terminalCommand": "xterm -e",
|
||||
"terminalCommand": "alacritty -e",
|
||||
"customLaunchPrefixEnabled": false,
|
||||
"customLaunchPrefix": "",
|
||||
"viewMode": "list",
|
||||
@@ -183,8 +210,11 @@
|
||||
"iconMode": "tabler",
|
||||
"showIconBackground": false,
|
||||
"enableSettingsSearch": true,
|
||||
"enableWindowsSearch": true,
|
||||
"ignoreMouseInput": false,
|
||||
"screenshotAnnotationTool": ""
|
||||
"screenshotAnnotationTool": "",
|
||||
"overviewLayer": false,
|
||||
"density": "default"
|
||||
},
|
||||
"controlCenter": {
|
||||
"position": "close_to_bar_button",
|
||||
@@ -259,13 +289,16 @@
|
||||
"swapCriticalThreshold": 90,
|
||||
"diskWarningThreshold": 80,
|
||||
"diskCriticalThreshold": 90,
|
||||
"cpuPollingInterval": 3000,
|
||||
"tempPollingInterval": 3000,
|
||||
"diskAvailWarningThreshold": 20,
|
||||
"diskAvailCriticalThreshold": 10,
|
||||
"batteryWarningThreshold": 20,
|
||||
"batteryCriticalThreshold": 5,
|
||||
"cpuPollingInterval": 1000,
|
||||
"gpuPollingInterval": 3000,
|
||||
"enableDgpuMonitoring": false,
|
||||
"memPollingInterval": 3000,
|
||||
"memPollingInterval": 1000,
|
||||
"diskPollingInterval": 30000,
|
||||
"networkPollingInterval": 3000,
|
||||
"networkPollingInterval": 1000,
|
||||
"loadAvgPollingInterval": 3000,
|
||||
"useCustomColors": false,
|
||||
"warningColor": "",
|
||||
@@ -301,8 +334,8 @@
|
||||
"countdownDuration": 10000,
|
||||
"position": "center",
|
||||
"showHeader": true,
|
||||
"largeButtonsStyle": false,
|
||||
"largeButtonsLayout": "grid",
|
||||
"largeButtonsStyle": true,
|
||||
"largeButtonsLayout": "single-row",
|
||||
"showNumberLabels": true,
|
||||
"powerOptions": [
|
||||
{
|
||||
@@ -341,7 +374,6 @@
|
||||
"lowUrgencyDuration": 3,
|
||||
"normalUrgencyDuration": 8,
|
||||
"criticalUrgencyDuration": 15,
|
||||
"enableKeyboardLayoutToast": true,
|
||||
"saveToHistory": {
|
||||
"low": true,
|
||||
"normal": true,
|
||||
@@ -356,7 +388,9 @@
|
||||
"lowSoundFile": "",
|
||||
"excludedApps": "discord,firefox,chrome,chromium,edge"
|
||||
},
|
||||
"enableMediaToast": false
|
||||
"enableMediaToast": false,
|
||||
"enableKeyboardLayoutToast": true,
|
||||
"enableBatteryToast": true
|
||||
},
|
||||
"osd": {
|
||||
"enabled": true,
|
||||
@@ -419,6 +453,9 @@
|
||||
"startup": "",
|
||||
"session": ""
|
||||
},
|
||||
"plugins": {
|
||||
"autoUpdate": false
|
||||
},
|
||||
"desktopWidgets": {
|
||||
"enabled": false,
|
||||
"gridSnap": false,
|
||||
|
||||
@@ -143,6 +143,24 @@
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-type-label",
|
||||
"descriptionKey": "panels.bar.appearance-type-description",
|
||||
"widget": "NComboBox",
|
||||
"tab": 4,
|
||||
"tabLabel": "panels.bar.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "common.display-mode",
|
||||
"descriptionKey": "panels.bar.appearance-display-mode-description",
|
||||
"widget": "NComboBox",
|
||||
"tab": 4,
|
||||
"tabLabel": "panels.bar.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-use-separate-opacity-label",
|
||||
"descriptionKey": "panels.bar.appearance-use-separate-opacity-description",
|
||||
@@ -179,6 +197,15 @@
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-capsule-color-label",
|
||||
"descriptionKey": "panels.bar.appearance-capsule-color-description",
|
||||
"widget": "NComboBox",
|
||||
"tab": 4,
|
||||
"tabLabel": "panels.bar.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-capsule-opacity-label",
|
||||
"descriptionKey": "panels.bar.appearance-capsule-opacity-description",
|
||||
@@ -189,8 +216,8 @@
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-floating-label",
|
||||
"descriptionKey": "panels.bar.appearance-floating-description",
|
||||
"labelKey": "panels.bar.appearance-hide-on-overview-label",
|
||||
"descriptionKey": "panels.bar.appearance-hide-on-overview-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 4,
|
||||
"tabLabel": "panels.bar.title",
|
||||
@@ -206,6 +233,33 @@
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-frame-settings-label",
|
||||
"descriptionKey": "panels.bar.appearance-frame-settings-description",
|
||||
"widget": "NLabel",
|
||||
"tab": 4,
|
||||
"tabLabel": "panels.bar.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-frame-thickness",
|
||||
"descriptionKey": null,
|
||||
"widget": "NValueSlider",
|
||||
"tab": 4,
|
||||
"tabLabel": "panels.bar.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-frame-radius",
|
||||
"descriptionKey": null,
|
||||
"widget": "NValueSlider",
|
||||
"tab": 4,
|
||||
"tabLabel": "panels.bar.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-margins-label",
|
||||
"descriptionKey": "panels.bar.appearance-margins-description",
|
||||
@@ -234,9 +288,18 @@
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-hide-on-overview-label",
|
||||
"descriptionKey": "panels.bar.appearance-hide-on-overview-description",
|
||||
"widget": "NToggle",
|
||||
"labelKey": "panels.bar.appearance-auto-hide-delay-label",
|
||||
"descriptionKey": "panels.bar.appearance-auto-hide-delay-description",
|
||||
"widget": "NValueSlider",
|
||||
"tab": 4,
|
||||
"tabLabel": "panels.bar.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.bar.appearance-auto-show-delay-label",
|
||||
"descriptionKey": "panels.bar.appearance-auto-show-delay-description",
|
||||
"widget": "NValueSlider",
|
||||
"tab": 4,
|
||||
"tabLabel": "panels.bar.title",
|
||||
"subTab": 0,
|
||||
@@ -560,6 +623,14 @@
|
||||
"tabLabel": "common.general",
|
||||
"subTab": null
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.general.keybinds-title",
|
||||
"descriptionKey": "panels.general.keybinds-description",
|
||||
"widget": "NLabel",
|
||||
"tab": 0,
|
||||
"tabLabel": "common.general",
|
||||
"subTab": null
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.hooks.system-hooks-enable-label",
|
||||
"descriptionKey": "panels.hooks.system-hooks-enable-description",
|
||||
@@ -686,6 +757,24 @@
|
||||
"subTab": 1,
|
||||
"subTabLabel": "common.clipboard"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.launcher.settings-clipboard-watch-text-label",
|
||||
"descriptionKey": "panels.launcher.settings-clipboard-watch-text-description",
|
||||
"widget": "NTextInput",
|
||||
"tab": 8,
|
||||
"tabLabel": "panels.launcher.title",
|
||||
"subTab": 1,
|
||||
"subTabLabel": "common.clipboard"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.launcher.settings-clipboard-watch-image-label",
|
||||
"descriptionKey": "panels.launcher.settings-clipboard-watch-image-description",
|
||||
"widget": "NTextInput",
|
||||
"tab": 8,
|
||||
"tabLabel": "panels.launcher.title",
|
||||
"subTab": 1,
|
||||
"subTabLabel": "common.clipboard"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.launcher.settings-use-app2unit-label",
|
||||
"descriptionKey": "panels.launcher.settings-use-app2unit-description",
|
||||
@@ -732,14 +821,32 @@
|
||||
"subTabLabel": "common.execute"
|
||||
},
|
||||
{
|
||||
"labelKey": "tooltips.grid-view",
|
||||
"descriptionKey": "panels.launcher.settings-grid-view-description",
|
||||
"labelKey": "panels.launcher.settings-overlay-layer-label",
|
||||
"descriptionKey": "panels.launcher.settings-overlay-layer-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 8,
|
||||
"tabLabel": "panels.launcher.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.launcher.settings-view-mode-label",
|
||||
"descriptionKey": "panels.launcher.settings-view-mode-description",
|
||||
"widget": "NComboBox",
|
||||
"tab": 8,
|
||||
"tabLabel": "panels.launcher.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.launcher.settings-density-label",
|
||||
"descriptionKey": "panels.launcher.settings-density-description",
|
||||
"widget": "NComboBox",
|
||||
"tab": 8,
|
||||
"tabLabel": "panels.launcher.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.launcher.settings-show-categories-label",
|
||||
"descriptionKey": "panels.launcher.settings-show-categories-description",
|
||||
@@ -785,6 +892,15 @@
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.launcher.settings-enable-windows-search-label",
|
||||
"descriptionKey": "panels.launcher.settings-enable-windows-search-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 8,
|
||||
"tabLabel": "panels.launcher.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.launcher.settings-ignore-mouse-input-label",
|
||||
"descriptionKey": "panels.launcher.settings-ignore-mouse-input-description",
|
||||
@@ -794,13 +910,32 @@
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.lock-screen.clock-style-label",
|
||||
"descriptionKey": "panels.lock-screen.clock-style-description",
|
||||
"widget": "NComboBox",
|
||||
"tab": 11,
|
||||
"tabLabel": "panels.lock-screen.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.lock-screen.clock-format-label",
|
||||
"descriptionKey": "panels.lock-screen.clock-format-description",
|
||||
"widget": "NTextInput",
|
||||
"tab": 11,
|
||||
"tabLabel": "panels.lock-screen.title",
|
||||
"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": null
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.lock-screen.compact-lockscreen-label",
|
||||
@@ -808,7 +943,35 @@
|
||||
"widget": "NToggle",
|
||||
"tab": 11,
|
||||
"tabLabel": "panels.lock-screen.title",
|
||||
"subTab": null
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.lock-screen.lock-screen-animations-label",
|
||||
"descriptionKey": "panels.lock-screen.lock-screen-animations-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 11,
|
||||
"tabLabel": "panels.lock-screen.title",
|
||||
"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",
|
||||
@@ -816,7 +979,8 @@
|
||||
"widget": "NToggle",
|
||||
"tab": 11,
|
||||
"tabLabel": "panels.lock-screen.title",
|
||||
"subTab": null
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.lock-screen.show-hibernate-label",
|
||||
@@ -824,7 +988,8 @@
|
||||
"widget": "NToggle",
|
||||
"tab": 11,
|
||||
"tabLabel": "panels.lock-screen.title",
|
||||
"subTab": null
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.session-menu.enable-countdown-label",
|
||||
@@ -832,7 +997,8 @@
|
||||
"widget": "NToggle",
|
||||
"tab": 11,
|
||||
"tabLabel": "panels.lock-screen.title",
|
||||
"subTab": null
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.session-menu.countdown-duration-label",
|
||||
@@ -840,7 +1006,26 @@
|
||||
"widget": "NValueSlider",
|
||||
"tab": 11,
|
||||
"tabLabel": "panels.lock-screen.title",
|
||||
"subTab": null
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.lock-screen.lock-screen-blur-strength-label",
|
||||
"descriptionKey": "panels.lock-screen.lock-screen-blur-strength-description",
|
||||
"widget": "NValueSlider",
|
||||
"tab": 11,
|
||||
"tabLabel": "panels.lock-screen.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.lock-screen.lock-screen-tint-strength-label",
|
||||
"descriptionKey": "panels.lock-screen.lock-screen-tint-strength-description",
|
||||
"widget": "NValueSlider",
|
||||
"tab": 11,
|
||||
"tabLabel": "panels.lock-screen.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.appearance"
|
||||
},
|
||||
{
|
||||
"labelKey": "actions.enable-wifi",
|
||||
@@ -1038,8 +1223,8 @@
|
||||
"subTabLabel": "common.sound"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.notifications.media-toast-label",
|
||||
"descriptionKey": "panels.notifications.media-toast-description",
|
||||
"labelKey": "panels.notifications.toast-media-label",
|
||||
"descriptionKey": "panels.notifications.toast-media-description",
|
||||
"widget": "NCheckbox",
|
||||
"tab": 9,
|
||||
"tabLabel": "common.notifications",
|
||||
@@ -1055,6 +1240,15 @@
|
||||
"subTab": 4,
|
||||
"subTabLabel": "common.toast"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.notifications.toast-battery-label",
|
||||
"descriptionKey": "panels.notifications.toast-battery-description",
|
||||
"widget": "NCheckbox",
|
||||
"tab": 9,
|
||||
"tabLabel": "common.notifications",
|
||||
"subTab": 4,
|
||||
"subTabLabel": "common.toast"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.osd.enabled-label",
|
||||
"descriptionKey": "panels.osd.enabled-description",
|
||||
@@ -1082,6 +1276,15 @@
|
||||
"subTab": 1,
|
||||
"subTabLabel": "common.available"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.plugins.auto-update",
|
||||
"descriptionKey": "panels.plugins.auto-update-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 18,
|
||||
"tabLabel": "panels.plugins.title",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.installed"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.plugins.installed-no-plugins-label",
|
||||
"descriptionKey": "panels.plugins.installed-no-plugins-description",
|
||||
@@ -1253,22 +1456,6 @@
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "common.command",
|
||||
"descriptionKey": "panels.session-menu.entry-settings-command-description",
|
||||
"widget": "NTextInput",
|
||||
"tab": 12,
|
||||
"tabLabel": "session-menu.title",
|
||||
"subTab": null
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.session-menu.entry-settings-default-info-label",
|
||||
"descriptionKey": "panels.session-menu.entry-settings-default-info-description",
|
||||
"widget": "NLabel",
|
||||
"tab": 12,
|
||||
"tabLabel": "session-menu.title",
|
||||
"subTab": null
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.system-monitor.enable-dgpu-monitoring-label",
|
||||
"descriptionKey": "panels.system-monitor.enable-dgpu-monitoring-description",
|
||||
@@ -1495,18 +1682,9 @@
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.wallpaper.settings-enable-overview-label",
|
||||
"descriptionKey": "panels.wallpaper.settings-enable-overview-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 3,
|
||||
"tabLabel": "common.wallpaper",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.wallpaper.settings-folder-label",
|
||||
"descriptionKey": "panels.wallpaper.settings-folder-description",
|
||||
"widget": "NTextInputButton",
|
||||
"labelKey": "tooltips.wallpaper-selector",
|
||||
"descriptionKey": "panels.wallpaper.settings-selector-description",
|
||||
"widget": "NLabel",
|
||||
"tab": 3,
|
||||
"tabLabel": "common.wallpaper",
|
||||
"subTab": 0,
|
||||
@@ -1521,6 +1699,15 @@
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.wallpaper.settings-folder-label",
|
||||
"descriptionKey": "panels.wallpaper.settings-folder-description",
|
||||
"widget": "NTextInputButton",
|
||||
"tab": 3,
|
||||
"tabLabel": "common.wallpaper",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.wallpaper.settings-monitor-specific-label",
|
||||
"descriptionKey": "panels.wallpaper.settings-monitor-specific-description",
|
||||
@@ -1531,9 +1718,27 @@
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "tooltips.wallpaper-selector",
|
||||
"descriptionKey": "panels.wallpaper.settings-selector-description",
|
||||
"widget": "NLabel",
|
||||
"labelKey": "panels.wallpaper.settings-enable-overview-label",
|
||||
"descriptionKey": "panels.wallpaper.settings-enable-overview-description",
|
||||
"widget": "NToggle",
|
||||
"tab": 3,
|
||||
"tabLabel": "common.wallpaper",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.wallpaper.settings-overview-blur-strength-label",
|
||||
"descriptionKey": "panels.wallpaper.settings-overview-blur-strength-description",
|
||||
"widget": "NValueSlider",
|
||||
"tab": 3,
|
||||
"tabLabel": "common.wallpaper",
|
||||
"subTab": 0,
|
||||
"subTabLabel": "common.general"
|
||||
},
|
||||
{
|
||||
"labelKey": "panels.wallpaper.settings-overview-tint-label",
|
||||
"descriptionKey": "panels.wallpaper.settings-overview-tint-description",
|
||||
"widget": "NValueSlider",
|
||||
"tab": 3,
|
||||
"tabLabel": "common.wallpaper",
|
||||
"subTab": 0,
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
"scrollingMode": "hover",
|
||||
"maxWidth": 145,
|
||||
"useFixedWidth": false,
|
||||
"colorizeIcons": false
|
||||
"colorizeIcons": false,
|
||||
"textColor": "none"
|
||||
},
|
||||
"AudioVisualizer": {
|
||||
"width": 200,
|
||||
@@ -14,22 +15,25 @@
|
||||
"hideWhenIdle": false
|
||||
},
|
||||
"Battery": {
|
||||
"displayMode": "onhover",
|
||||
"warningThreshold": 30,
|
||||
"deviceNativePath": "",
|
||||
"displayMode": "graphic-clean",
|
||||
"deviceNativePath": "__default__",
|
||||
"showPowerProfiles": false,
|
||||
"showNoctaliaPerformance": false,
|
||||
"hideIfNotDetected": true,
|
||||
"hideIfIdle": false
|
||||
},
|
||||
"Bluetooth": {
|
||||
"displayMode": "onhover"
|
||||
"displayMode": "onhover",
|
||||
"iconColor": "none",
|
||||
"textColor": "none"
|
||||
},
|
||||
"Brightness": {
|
||||
"displayMode": "onhover"
|
||||
"displayMode": "onhover",
|
||||
"iconColor": "none",
|
||||
"textColor": "none"
|
||||
},
|
||||
"Clock": {
|
||||
"usePrimaryColor": false,
|
||||
"clockColor": "none",
|
||||
"useCustomFont": false,
|
||||
"customFont": "",
|
||||
"formatHorizontal": "HH:mm ddd, MMM dd",
|
||||
@@ -74,9 +78,18 @@
|
||||
"colorizeSystemIcon": "none",
|
||||
"ipcIdentifier": ""
|
||||
},
|
||||
"DarkMode": {
|
||||
"iconColor": "none"
|
||||
},
|
||||
"KeepAwake": {
|
||||
"iconColor": "none",
|
||||
"textColor": "none"
|
||||
},
|
||||
"KeyboardLayout": {
|
||||
"displayMode": "onhover",
|
||||
"showIcon": true
|
||||
"showIcon": true,
|
||||
"iconColor": "none",
|
||||
"textColor": "none"
|
||||
},
|
||||
"LockKeys": {
|
||||
"showCapsLock": true,
|
||||
@@ -89,7 +102,7 @@
|
||||
},
|
||||
"Launcher": {
|
||||
"icon": "rocket",
|
||||
"usePrimaryColor": false
|
||||
"iconColor": "none"
|
||||
},
|
||||
"MediaMini": {
|
||||
"hideMode": "hidden",
|
||||
@@ -102,6 +115,7 @@
|
||||
"showVisualizer": false,
|
||||
"showProgressRing": true,
|
||||
"visualizerType": "linear",
|
||||
"textColor": "none",
|
||||
"compactMode": false,
|
||||
"panelShowAlbumArt": true,
|
||||
"panelShowVisualizer": true,
|
||||
@@ -110,24 +124,30 @@
|
||||
},
|
||||
"Microphone": {
|
||||
"displayMode": "onhover",
|
||||
"middleClickCommand": "pwvucontrol || pavucontrol"
|
||||
"middleClickCommand": "pwvucontrol || pavucontrol",
|
||||
"iconColor": "none",
|
||||
"textColor": "none"
|
||||
},
|
||||
"NotificationHistory": {
|
||||
"showUnreadBadge": true,
|
||||
"hideWhenZero": false,
|
||||
"hideWhenZeroUnread": false
|
||||
"hideWhenZeroUnread": false,
|
||||
"unreadBadgeColor": "primary",
|
||||
"iconColor": "none"
|
||||
},
|
||||
"SessionMenu": {
|
||||
"colorName": "error"
|
||||
"iconColor": "error"
|
||||
},
|
||||
"Spacer": {
|
||||
"width": 20
|
||||
},
|
||||
"SystemMonitor": {
|
||||
"compactMode": true,
|
||||
"usePrimaryColor": false,
|
||||
"iconColor": "none",
|
||||
"textColor": "none",
|
||||
"useMonospaceFont": true,
|
||||
"showCpuUsage": true,
|
||||
"showCpuFreq": false,
|
||||
"showCpuTemp": true,
|
||||
"showGpuTemp": false,
|
||||
"showLoadAverage": false,
|
||||
@@ -136,6 +156,8 @@
|
||||
"showSwapUsage": false,
|
||||
"showNetworkStats": false,
|
||||
"showDiskUsage": false,
|
||||
"showDiskUsageAsPercent": false,
|
||||
"showDiskAvailable": false,
|
||||
"diskPath": "/"
|
||||
},
|
||||
"Taskbar": {
|
||||
@@ -153,18 +175,29 @@
|
||||
"Tray": {
|
||||
"blacklist": [],
|
||||
"colorizeIcons": false,
|
||||
"chevronColor": "none",
|
||||
"pinned": [],
|
||||
"drawerEnabled": true,
|
||||
"hidePassive": false
|
||||
},
|
||||
"VPN": {
|
||||
"displayMode": "onhover"
|
||||
},
|
||||
"WiFi": {
|
||||
"displayMode": "onhover"
|
||||
"displayMode": "onhover",
|
||||
"iconColor": "none",
|
||||
"textColor": "none"
|
||||
},
|
||||
"Network": {
|
||||
"displayMode": "onhover"
|
||||
"displayMode": "onhover",
|
||||
"iconColor": "none",
|
||||
"textColor": "none"
|
||||
},
|
||||
"NightLight": {
|
||||
"iconColor": "none"
|
||||
},
|
||||
"NoctaliaPerformance": {
|
||||
"iconColor": "none"
|
||||
},
|
||||
"PowerProfile": {
|
||||
"iconColor": "none"
|
||||
},
|
||||
"Workspace": {
|
||||
"labelMode": "index",
|
||||
@@ -177,11 +210,22 @@
|
||||
"unfocusedIconsOpacity": 1,
|
||||
"groupedBorderOpacity": 1,
|
||||
"enableScrollWheel": true,
|
||||
"iconScale": 0.8
|
||||
"iconScale": 0.8,
|
||||
"focusedColor": "primary",
|
||||
"occupiedColor": "secondary",
|
||||
"emptyColor": "secondary",
|
||||
"showBadge": true,
|
||||
"reverseScroll": false,
|
||||
"pillSize": 0.6
|
||||
},
|
||||
"Volume": {
|
||||
"displayMode": "onhover",
|
||||
"middleClickCommand": "pwvucontrol || pavucontrol"
|
||||
"middleClickCommand": "pwvucontrol || pavucontrol",
|
||||
"iconColor": "none",
|
||||
"textColor": "none"
|
||||
},
|
||||
"WallpaperSelector": {
|
||||
"iconColor": "none"
|
||||
}
|
||||
},
|
||||
"controlCenter": {
|
||||
@@ -199,7 +243,7 @@
|
||||
"Clock": {
|
||||
"showBackground": true,
|
||||
"clockStyle": "digital",
|
||||
"usePrimaryColor": false,
|
||||
"clockColor": "none",
|
||||
"useCustomFont": false,
|
||||
"format": "HH:mm\\nd MMMM yyyy"
|
||||
},
|
||||
@@ -214,6 +258,13 @@
|
||||
},
|
||||
"Weather": {
|
||||
"showBackground": true
|
||||
},
|
||||
"SystemStat": {
|
||||
"showBackground": true,
|
||||
"statType": "CPU",
|
||||
"diskPath": "/",
|
||||
"roundedCorners": true,
|
||||
"layout": "bottom"
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
-1
@@ -27,6 +27,10 @@ Noctalia Shell is made possible by the incredible work of many open-source proje
|
||||
### Utilities
|
||||
- **[cliphist](https://github.com/sentriz/cliphist)** - Clipboard history support
|
||||
|
||||
## Icons
|
||||
- **[Tabler Icons](https://tabler.io/icons)** - Icon set used throughout the shell
|
||||
- **[Riyan Resdian on Noun Project](https://thenounproject.com/creator/yaicon/)** - Plug icon
|
||||
|
||||
## Audio Assets
|
||||
- **[Universfield on Pixabay](https://pixabay.com/users/universfield-28281460/)** - Notification sound effect
|
||||
- **[DrNI on Freesound](https://freesound.org/people/DrNI/sounds/34562/)** - Timer's alarm sound effect
|
||||
@@ -35,7 +39,7 @@ Noctalia Shell is made possible by the incredible work of many open-source proje
|
||||
|
||||
## Special Thanks
|
||||
- The **Wayland** community for building the future of Linux desktop graphics
|
||||
- The **Niri**, **Hyprland**, **Sway**, and **MangoWC** teams for their excellent Wayland compositors
|
||||
- The **Niri**, **Hyprland**, **Sway**, **Labwc**, and **MangoWC** teams for their excellent Wayland compositors
|
||||
- All the contributors and users who have helped make Noctalia better
|
||||
|
||||
## License
|
||||
|
||||
+153
-35
@@ -20,6 +20,9 @@ Singleton {
|
||||
|
||||
property bool reloadColors: false
|
||||
|
||||
// Suppress transition animations until the first colors.json load completes
|
||||
property bool skipTransition: true
|
||||
|
||||
// Flag indicating theme colors are currently transitioning (for widgets to disable their own animations)
|
||||
property bool isTransitioning: false
|
||||
|
||||
@@ -57,96 +60,112 @@ Singleton {
|
||||
|
||||
// --- Color transition animations ---
|
||||
Behavior on mPrimary {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mOnPrimary {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mSecondary {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mOnSecondary {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mTertiary {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mOnTertiary {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mError {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mOnError {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mSurface {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mOnSurface {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mSurfaceVariant {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mOnSurfaceVariant {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mOutline {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mShadow {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mHover {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on mOnHover {
|
||||
enabled: !root.skipTransition
|
||||
ColorAnimation {
|
||||
duration: Style.animationSlowest
|
||||
easing.type: Easing.OutCubic
|
||||
@@ -163,99 +182,184 @@ Singleton {
|
||||
Connections {
|
||||
target: customColorsData
|
||||
function onMPrimaryChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mPrimary = customColorsData.mPrimary;
|
||||
}
|
||||
function onMOnPrimaryChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mOnPrimary = customColorsData.mOnPrimary;
|
||||
}
|
||||
function onMSecondaryChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mSecondary = customColorsData.mSecondary;
|
||||
}
|
||||
function onMOnSecondaryChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mOnSecondary = customColorsData.mOnSecondary;
|
||||
}
|
||||
function onMTertiaryChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mTertiary = customColorsData.mTertiary;
|
||||
}
|
||||
function onMOnTertiaryChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mOnTertiary = customColorsData.mOnTertiary;
|
||||
}
|
||||
function onMErrorChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mError = customColorsData.mError;
|
||||
}
|
||||
function onMOnErrorChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mOnError = customColorsData.mOnError;
|
||||
}
|
||||
function onMSurfaceChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mSurface = customColorsData.mSurface;
|
||||
}
|
||||
function onMOnSurfaceChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mOnSurface = customColorsData.mOnSurface;
|
||||
}
|
||||
function onMSurfaceVariantChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mSurfaceVariant = customColorsData.mSurfaceVariant;
|
||||
}
|
||||
function onMOnSurfaceVariantChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mOnSurfaceVariant = customColorsData.mOnSurfaceVariant;
|
||||
}
|
||||
function onMOutlineChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mOutline = customColorsData.mOutline;
|
||||
}
|
||||
function onMShadowChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mShadow = customColorsData.mShadow;
|
||||
}
|
||||
function onMHoverChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mHover = customColorsData.mHover;
|
||||
}
|
||||
function onMOnHoverChanged() {
|
||||
startTransition();
|
||||
if (!root.skipTransition) {
|
||||
startTransition();
|
||||
}
|
||||
root.mOnHover = customColorsData.mOnHover;
|
||||
}
|
||||
}
|
||||
|
||||
function resolveColorKey(key) {
|
||||
switch (key) {
|
||||
case "primary":
|
||||
return root.mPrimary;
|
||||
case "secondary":
|
||||
return root.mSecondary;
|
||||
case "tertiary":
|
||||
return root.mTertiary;
|
||||
case "error":
|
||||
return root.mError;
|
||||
default:
|
||||
return root.mOnSurface;
|
||||
}
|
||||
}
|
||||
|
||||
function resolveColorKeyOptional(key) {
|
||||
switch (key) {
|
||||
case "primary":
|
||||
return root.mPrimary;
|
||||
case "secondary":
|
||||
return root.mSecondary;
|
||||
case "tertiary":
|
||||
return root.mTertiary;
|
||||
case "error":
|
||||
return root.mError;
|
||||
default:
|
||||
return "transparent";
|
||||
}
|
||||
}
|
||||
|
||||
readonly property var colorKeyModel: [
|
||||
{
|
||||
"key": "none",
|
||||
"name": I18n.tr("common.none")
|
||||
},
|
||||
{
|
||||
"key": "primary",
|
||||
"name": I18n.tr("common.primary")
|
||||
},
|
||||
{
|
||||
"key": "secondary",
|
||||
"name": I18n.tr("common.secondary")
|
||||
},
|
||||
{
|
||||
"key": "tertiary",
|
||||
"name": I18n.tr("common.tertiary")
|
||||
},
|
||||
{
|
||||
"key": "error",
|
||||
"name": I18n.tr("common.error")
|
||||
}
|
||||
]
|
||||
|
||||
// --------------------------------
|
||||
// Default colors: Rose Pine
|
||||
// Default colors: Noctalia (default) dark — must match Assets/ColorScheme/Noctalia-default
|
||||
QtObject {
|
||||
id: defaultColors
|
||||
|
||||
readonly property color mPrimary: "#c7a1d8"
|
||||
readonly property color mOnPrimary: "#1a151f"
|
||||
readonly property color mPrimary: "#fff59b"
|
||||
readonly property color mOnPrimary: "#0e0e43"
|
||||
|
||||
readonly property color mSecondary: "#a984c4"
|
||||
readonly property color mOnSecondary: "#f3edf7"
|
||||
readonly property color mSecondary: "#a9aefe"
|
||||
readonly property color mOnSecondary: "#0e0e43"
|
||||
|
||||
readonly property color mTertiary: "#e0b7c9"
|
||||
readonly property color mOnTertiary: "#20161f"
|
||||
readonly property color mTertiary: "#9BFECE"
|
||||
readonly property color mOnTertiary: "#0e0e43"
|
||||
|
||||
readonly property color mError: "#e9899d"
|
||||
readonly property color mOnError: "#1e1418"
|
||||
readonly property color mError: "#FD4663"
|
||||
readonly property color mOnError: "#0e0e43"
|
||||
|
||||
readonly property color mSurface: "#1c1822"
|
||||
readonly property color mOnSurface: "#e9e4f0"
|
||||
readonly property color mSurface: "#070722"
|
||||
readonly property color mOnSurface: "#f3edf7"
|
||||
|
||||
readonly property color mSurfaceVariant: "#262130"
|
||||
readonly property color mOnSurfaceVariant: "#a79ab0"
|
||||
readonly property color mSurfaceVariant: "#11112d"
|
||||
readonly property color mOnSurfaceVariant: "#7c80b4"
|
||||
|
||||
readonly property color mOutline: "#342c42"
|
||||
readonly property color mShadow: "#120f18"
|
||||
readonly property color mOutline: "#21215F"
|
||||
readonly property color mShadow: "#070722"
|
||||
|
||||
readonly property color mHover: "#e0b7c9"
|
||||
readonly property color mOnHover: "#20161f"
|
||||
readonly property color mHover: "#9BFECE"
|
||||
readonly property color mOnHover: "#0e0e43"
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
@@ -266,15 +370,23 @@ Singleton {
|
||||
printErrors: false
|
||||
watchChanges: true
|
||||
onFileChanged: {
|
||||
Logger.i("Color", "Reloading colors from disk");
|
||||
Logger.d("Color", "Reloading colors from disk");
|
||||
reloadColors = true;
|
||||
reload();
|
||||
}
|
||||
onAdapterUpdated: {
|
||||
Logger.i("Color", "Writing colors to disk");
|
||||
Logger.d("Color", "Writing colors to disk");
|
||||
writeAdapter();
|
||||
}
|
||||
|
||||
onLoaded: {
|
||||
if (root.skipTransition) {
|
||||
Qt.callLater(function () {
|
||||
root.skipTransition = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger initial load when path changes from empty to actual path
|
||||
onPathChanged: {
|
||||
if (path !== undefined) {
|
||||
@@ -287,6 +399,12 @@ Singleton {
|
||||
return;
|
||||
}
|
||||
|
||||
if (root.skipTransition) {
|
||||
Qt.callLater(function () {
|
||||
root.skipTransition = false;
|
||||
});
|
||||
}
|
||||
|
||||
// Error code 2 = ENOENT (No such file or directory)
|
||||
if (error === 2 || error.toString().includes("No such file")) {
|
||||
// File doesn't exist, create it with default values
|
||||
|
||||
+107
-127
@@ -13,7 +13,8 @@ Singleton {
|
||||
property var locale: Qt.locale()
|
||||
property string systemDetectedLangCode: ""
|
||||
property string fullLocaleCode: "" // Preserves regional locale variants
|
||||
property var availableLanguages: []
|
||||
// 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 translations: ({})
|
||||
property var fallbackTranslations: ({})
|
||||
|
||||
@@ -21,32 +22,10 @@ Singleton {
|
||||
signal languageChanged(string newLanguage)
|
||||
signal translationsLoaded
|
||||
|
||||
// Process to list directory contents
|
||||
property Process directoryScanner: Process {
|
||||
id: directoryProcess
|
||||
command: ["ls", `${Quickshell.shellDir}/Assets/Translations/`]
|
||||
running: false
|
||||
|
||||
stdout: StdioCollector {
|
||||
id: stdoutCollector
|
||||
}
|
||||
|
||||
onExited: function (exitCode, exitStatus) {
|
||||
if (exitCode === 0) {
|
||||
var output = stdoutCollector.text || "";
|
||||
parseDirectoryListing(output);
|
||||
} else {
|
||||
Logger.e("I18n", `Failed to scan translation directory`);
|
||||
// Fallback to default languages
|
||||
availableLanguages = ["en"];
|
||||
detectLanguage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FileView to load translation files
|
||||
property FileView translationFile: FileView {
|
||||
id: fileView
|
||||
printErrors: false
|
||||
watchChanges: true
|
||||
onFileChanged: reload()
|
||||
onLoaded: {
|
||||
@@ -54,18 +33,50 @@ Singleton {
|
||||
var data = JSON.parse(text());
|
||||
root.translations = data;
|
||||
Logger.i("I18n", `Loaded translations for "${root.langCode}"`);
|
||||
Logger.d("I18n", `Available root keys: ${Object.keys(data).join(", ")}`);
|
||||
|
||||
root.isLoaded = true;
|
||||
root.translationsLoaded();
|
||||
|
||||
// Load English fallback for non-English languages (only after main file succeeds)
|
||||
if (root.langCode !== "en") {
|
||||
fallbackFileView.path = `file://${Quickshell.shellDir}/Assets/Translations/en.json`;
|
||||
}
|
||||
} catch (e) {
|
||||
Logger.e("I18n", `Failed to parse translation file: ${e}`);
|
||||
setLanguage("en");
|
||||
}
|
||||
}
|
||||
onLoadFailed: function (error) {
|
||||
setLanguage("en");
|
||||
Logger.e("I18n", `Failed to load translation file: ${error}`);
|
||||
if (root.langCode === "en") {
|
||||
Logger.e("I18n", `Failed to load English translation file: ${error}`);
|
||||
// English also failed - still emit signal to unblock startup
|
||||
root.isLoaded = true;
|
||||
root.translationsLoaded();
|
||||
return;
|
||||
}
|
||||
|
||||
// Qt.callLater is needed because FileView doesn't re-trigger when path
|
||||
// is changed inside its own onLoadFailed handler
|
||||
var strippedCode = stripScript(root.langCode);
|
||||
if (strippedCode !== root.langCode) {
|
||||
Logger.d("I18n", `Translation file for "${root.langCode}" not found, trying "${strippedCode}"`);
|
||||
root.langCode = strippedCode;
|
||||
Qt.callLater(loadTranslations);
|
||||
} else {
|
||||
// Try language-only code (e.g. "zh-CN" → "zh")
|
||||
var shortCode = root.langCode.substring(0, 2);
|
||||
if (shortCode !== root.langCode) {
|
||||
Logger.d("I18n", `Translation file for "${root.langCode}" not found, trying "${shortCode}"`);
|
||||
root.langCode = shortCode;
|
||||
Qt.callLater(loadTranslations);
|
||||
} else {
|
||||
Logger.w("I18n", `Translation file for "${root.langCode}" not found, falling back to English`);
|
||||
root.langCode = "en";
|
||||
root.fullLocaleCode = "en";
|
||||
root.locale = Qt.locale("en");
|
||||
Qt.callLater(loadTranslations);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,117 +99,92 @@ Singleton {
|
||||
}
|
||||
}
|
||||
|
||||
// Correct language when settings finish loading from disk (or user changes it)
|
||||
Connections {
|
||||
target: Settings.data.general
|
||||
function onLanguageChanged() {
|
||||
var userLang = Settings.data.general.language;
|
||||
if (userLang !== "" && userLang !== root.langCode && availableLanguages.includes(userLang)) {
|
||||
Logger.i("I18n", `Applying user language preference: "${userLang}"`);
|
||||
setLanguage(userLang);
|
||||
} else if (userLang === "" && root.systemDetectedLangCode !== "" && root.systemDetectedLangCode !== root.langCode) {
|
||||
Logger.i("I18n", `Language reset to default, reverting to system language: "${root.systemDetectedLangCode}"`);
|
||||
setLanguage(root.systemDetectedLangCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
Logger.i("I18n", "Service started");
|
||||
scanAvailableLanguages();
|
||||
|
||||
var lang = determineFastLanguage();
|
||||
langCode = lang.code;
|
||||
fullLocaleCode = lang.fullLocale;
|
||||
locale = Qt.locale(lang.fullLocale);
|
||||
systemDetectedLangCode = lang.code;
|
||||
Logger.i("I18n", `Loading "${lang.code}" (locale: "${lang.fullLocale}")`);
|
||||
loadTranslations();
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
function scanAvailableLanguages() {
|
||||
Logger.d("I18n", "Scanning for available translation files...");
|
||||
directoryScanner.running = true;
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
function parseDirectoryListing(output) {
|
||||
var languages = [];
|
||||
|
||||
try {
|
||||
if (!output || output.trim() === "") {
|
||||
Logger.w("I18n", "Empty directory listing output");
|
||||
availableLanguages = ["en"];
|
||||
detectLanguage();
|
||||
return;
|
||||
// Strip 4-letter script subtag from a BCP 47 tag (e.g. "fr-Latn-FR" → "fr-FR")
|
||||
function stripScript(tag) {
|
||||
var parts = tag.split("-");
|
||||
var result = [];
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
if (parts[i].length === 4 && /^[A-Za-z]{4}$/.test(parts[i])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const entries = output.trim().split('\n');
|
||||
|
||||
for (var i = 0; i < entries.length; i++) {
|
||||
const entry = entries[i].trim();
|
||||
if (entry && entry.endsWith('.json')) {
|
||||
// Extract language code from filename (e.g., "en.json" -> "en")
|
||||
const langCode = entry.substring(0, entry.lastIndexOf('.json'));
|
||||
if (langCode.length >= 2 && langCode.length <= 5) {
|
||||
// Basic validation for language codes
|
||||
languages.push(langCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sort languages alphabetically, but ensure "en" comes first if available
|
||||
languages.sort();
|
||||
const enIndex = languages.indexOf("en");
|
||||
if (enIndex > 0) {
|
||||
languages.splice(enIndex, 1);
|
||||
languages.unshift("en");
|
||||
}
|
||||
|
||||
if (languages.length === 0) {
|
||||
Logger.w("I18n", "No translation files found, using fallback");
|
||||
languages = ["en"]; // Fallback
|
||||
}
|
||||
|
||||
availableLanguages = languages;
|
||||
Logger.d("I18n", `Found ${languages.length} available languages: ${languages.join(', ')}`);
|
||||
|
||||
// Detect language after scanning
|
||||
detectLanguage();
|
||||
} catch (e) {
|
||||
Logger.e("I18n", `Failed to parse directory listing: ${e}`);
|
||||
// Fallback to default languages
|
||||
availableLanguages = ["en"];
|
||||
detectLanguage();
|
||||
result.push(parts[i]);
|
||||
}
|
||||
return result.join("-");
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
function detectLanguage() {
|
||||
Logger.d("I18n", `detectLanguage() called. Available languages: [${availableLanguages.join(', ')}]`);
|
||||
|
||||
if (availableLanguages.length === 0) {
|
||||
Logger.w("I18n", "No available languages found");
|
||||
return;
|
||||
// Determine the best language match against availableLanguages
|
||||
function determineFastLanguage() {
|
||||
// User preference from Settings (defaults to "" if not yet loaded from disk)
|
||||
var userLang = Settings.data.general.language;
|
||||
if (userLang !== "" && availableLanguages.includes(userLang)) {
|
||||
return {
|
||||
code: userLang,
|
||||
fullLocale: userLang
|
||||
};
|
||||
}
|
||||
|
||||
var detectedLang = "";
|
||||
var detectedFullLocale = "";
|
||||
|
||||
// First, determine the system's preferred language
|
||||
// Match system locale against available translations
|
||||
for (var i = 0; i < Qt.locale().uiLanguages.length; i++) {
|
||||
const fullUserLang = Qt.locale().uiLanguages[i];
|
||||
var fullLang = Qt.locale().uiLanguages[i];
|
||||
|
||||
if (availableLanguages.includes(fullUserLang)) {
|
||||
detectedLang = fullUserLang;
|
||||
detectedFullLocale = fullUserLang;
|
||||
break;
|
||||
// Exact match (e.g. "zh-CN")
|
||||
if (availableLanguages.includes(fullLang)) {
|
||||
return {
|
||||
code: fullLang,
|
||||
fullLocale: fullLang
|
||||
};
|
||||
}
|
||||
|
||||
const shortUserLang = fullUserLang.substring(0, 2);
|
||||
if (availableLanguages.includes(shortUserLang)) {
|
||||
detectedLang = shortUserLang;
|
||||
detectedFullLocale = fullUserLang;
|
||||
break;
|
||||
// Script-stripped match (e.g. "zh-Hans-CN" → "zh-CN")
|
||||
var stripped = stripScript(fullLang);
|
||||
if (stripped !== fullLang && availableLanguages.includes(stripped)) {
|
||||
return {
|
||||
code: stripped,
|
||||
fullLocale: fullLang
|
||||
};
|
||||
}
|
||||
|
||||
// Language-only match (e.g. "fr-FR" → "fr")
|
||||
var short_ = fullLang.substring(0, 2);
|
||||
if (availableLanguages.includes(short_)) {
|
||||
return {
|
||||
code: short_,
|
||||
fullLocale: fullLang
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// If no system language is found among available languages, fallback
|
||||
if (detectedLang === "") {
|
||||
detectedLang = availableLanguages.includes("en") ? "en" : availableLanguages[0];
|
||||
detectedFullLocale = detectedLang;
|
||||
}
|
||||
|
||||
root.systemDetectedLangCode = detectedLang;
|
||||
root.fullLocaleCode = detectedFullLocale;
|
||||
Logger.d("I18n", `System detected language: "${root.systemDetectedLangCode}" (full locale: "${root.fullLocaleCode}")`);
|
||||
|
||||
// Now, apply the language: user-defined, then system-detected
|
||||
if (Settings.data.general.language !== "" && availableLanguages.includes(Settings.data.general.language)) {
|
||||
Logger.d("I18n", `User-defined language found: "${Settings.data.general.language}"`);
|
||||
setLanguage(Settings.data.general.language);
|
||||
} else {
|
||||
Logger.d("I18n", `No user-defined language, using system detected: "${root.systemDetectedLangCode}"`);
|
||||
setLanguage(root.systemDetectedLangCode, root.fullLocaleCode);
|
||||
}
|
||||
return {
|
||||
code: "en",
|
||||
fullLocale: "en"
|
||||
};
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
@@ -226,12 +212,6 @@ Singleton {
|
||||
const filePath = `file://${Quickshell.shellDir}/Assets/Translations/${langCode}.json`;
|
||||
fileView.path = filePath;
|
||||
isLoaded = false;
|
||||
Logger.d("I18n", `Loading translations: ${langCode}`);
|
||||
|
||||
// Only load fallback translations if we are not using english and english is available
|
||||
if (langCode !== "en" && availableLanguages.includes("en")) {
|
||||
fallbackFileView.path = `file://${Quickshell.shellDir}/Assets/Translations/en.json`;
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
|
||||
@@ -78,13 +78,14 @@ Singleton {
|
||||
"star": "star",
|
||||
"star-off": "star-off",
|
||||
"battery-exclamation": "battery-exclamation",
|
||||
"common.charging": "common.charging",
|
||||
"battery-charging": "battery-charging",
|
||||
"battery-charging-2": "battery-charging-2",
|
||||
"battery-4": "battery-4",
|
||||
"battery-3": "battery-3",
|
||||
"battery-2": "battery-2",
|
||||
"battery-1": "battery-1",
|
||||
"battery": "battery",
|
||||
"battery-off": "battery-off",
|
||||
"wifi-0": "wifi-0",
|
||||
"wifi-1": "wifi-1",
|
||||
"wifi-2": "wifi-2",
|
||||
@@ -177,7 +178,8 @@ Singleton {
|
||||
"filepicker-eye-off": "eye-off",
|
||||
"filepicker-folder-current": "checks",
|
||||
"plugin": "plug-connected",
|
||||
"info": "file-description"
|
||||
"info": "file-description",
|
||||
"official-plugin": "shield-filled"
|
||||
}
|
||||
|
||||
// Fonts Codepoints - do not change!
|
||||
@@ -747,7 +749,7 @@ Singleton {
|
||||
"battery-4-filled": "\u{f721}",
|
||||
"battery-automotive": "\u{ee07}",
|
||||
"battery-automotive-filled": "\u{10029}",
|
||||
"common.charging": "\u{ea33}",
|
||||
"battery-charging": "\u{ea33}",
|
||||
"battery-charging-2": "\u{ef3b}",
|
||||
"battery-eco": "\u{ef3c}",
|
||||
"battery-exclamation": "\u{ff1d}",
|
||||
@@ -4786,6 +4788,7 @@ Singleton {
|
||||
"playstation-triangle": "\u{f2af}",
|
||||
"playstation-x": "\u{f2b0}",
|
||||
"plug": "\u{ebd9}",
|
||||
"plug-filled": "\u{f6b3}",
|
||||
"plug-connected": "\u{f00a}",
|
||||
"plug-connected-x": "\u{f0a0}",
|
||||
"plug-off": "\u{f180}",
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import QtQuick
|
||||
|
||||
QtObject {
|
||||
/**
|
||||
* Migration 45: Migrate 'floating' bar setting to 'barType'
|
||||
*/
|
||||
function migrate(adapter, logger, rawJson) {
|
||||
logger.i("Migration45", "Migrating bar settings...");
|
||||
|
||||
if (adapter.bar.floating) {
|
||||
adapter.bar.barType = "floating";
|
||||
} else {
|
||||
adapter.bar.barType = "simple";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
function migrate(adapter, logger, rawJson) {
|
||||
logger.i("Migration46", "Removing legacy PAM configuration file");
|
||||
|
||||
const shellName = "noctalia";
|
||||
const configDir = Quickshell.env("NOCTALIA_CONFIG_DIR") || (Quickshell.env("XDG_CONFIG_HOME") || Quickshell.env("HOME") + "/.config") + "/" + shellName + "/";
|
||||
const pamConfigDir = configDir + "pam";
|
||||
// Remove the entire pam directory if it exists
|
||||
const script = `rm -rf '${pamConfigDir}'`;
|
||||
Quickshell.execDetached(["sh", "-c", script]);
|
||||
|
||||
logger.d("Migration46", "Cleaned up legacy PAM config");
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
function migrate(adapter, logger, rawJson) {
|
||||
logger.i("Migration47", "Removing network_stats.json cache and updating polling intervals");
|
||||
|
||||
// Remove the network_stats.json cache file (no longer used - autoscaling from history now)
|
||||
const shellName = "noctalia";
|
||||
const cacheDir = Quickshell.env("NOCTALIA_CACHE_DIR") || (Quickshell.env("XDG_CACHE_HOME") || Quickshell.env("HOME") + "/.cache") + "/" + shellName + "/";
|
||||
const networkStatsFile = cacheDir + "network_stats.json";
|
||||
Quickshell.execDetached(["rm", "-f", networkStatsFile]);
|
||||
|
||||
// Update polling intervals to 1000ms for smoother graphs (only if currently slower)
|
||||
if (adapter.systemMonitor.cpuPollingInterval > 1000)
|
||||
adapter.systemMonitor.cpuPollingInterval = 1000;
|
||||
if (adapter.systemMonitor.memPollingInterval > 1000)
|
||||
adapter.systemMonitor.memPollingInterval = 1000;
|
||||
if (adapter.systemMonitor.networkPollingInterval > 1000)
|
||||
adapter.systemMonitor.networkPollingInterval = 1000;
|
||||
|
||||
logger.d("Migration47", "Removed network_stats.json and adjusted polling intervals");
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import QtQuick
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
// Migrate battery thresholds from notifications to systemMonitor
|
||||
function migrate(adapter, logger, rawJson) {
|
||||
logger.i("Settings", "Migrating settings to v48");
|
||||
|
||||
if (rawJson?.notifications?.batteryWarningThreshold !== undefined) {
|
||||
adapter.systemMonitor.batteryWarningThreshold = rawJson.notifications.batteryWarningThreshold;
|
||||
logger.i("Settings", "Migrated notifications.batteryWarningThreshold to systemMonitor: " + adapter.systemMonitor.batteryWarningThreshold);
|
||||
}
|
||||
|
||||
if (rawJson?.notifications?.batteryCriticalThreshold !== undefined) {
|
||||
adapter.systemMonitor.batteryCriticalThreshold = rawJson.notifications.batteryCriticalThreshold;
|
||||
logger.i("Settings", "Migrated notifications.batteryCriticalThreshold to systemMonitor: " + adapter.systemMonitor.batteryCriticalThreshold);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import qs.Commons
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
// Remove old launcher_app_usage.json (usage tracking moved to ShellState)
|
||||
function migrate(adapter, logger, rawJson) {
|
||||
logger.i("Settings", "Migrating settings to v49");
|
||||
|
||||
Quickshell.execDetached(["rm", "-f", Settings.cacheDir + "launcher_app_usage.json"]);
|
||||
logger.i("Settings", "Removed old launcher_app_usage.json");
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
import QtQuick
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
// Migrate keybinds from single strings to arrays of strings
|
||||
function migrate(adapter, logger, rawJson) {
|
||||
logger.i("Settings", "Migrating settings to v50");
|
||||
|
||||
const keybinds = rawJson?.general?.keybinds;
|
||||
if (!keybinds)
|
||||
return true;
|
||||
|
||||
const keys = ["keyUp", "keyDown", "keyLeft", "keyRight", "keyEnter", "keyEscape"];
|
||||
for (const key of keys) {
|
||||
if (keybinds[key] !== undefined && typeof keybinds[key] === "string") {
|
||||
adapter.general.keybinds[key] = [keybinds[key]];
|
||||
logger.i("Settings", "Migrated keybinds." + key + " from string to array: [" + keybinds[key] + "]");
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,13 @@ QtObject {
|
||||
40: migration40Component,
|
||||
42: migration42Component,
|
||||
43: migration43Component,
|
||||
44: migration44Component
|
||||
44: migration44Component,
|
||||
45: migration45Component,
|
||||
46: migration46Component,
|
||||
47: migration47Component,
|
||||
48: migration48Component,
|
||||
49: migration49Component,
|
||||
50: migration50Component
|
||||
})
|
||||
|
||||
// Migration components
|
||||
@@ -34,4 +40,10 @@ QtObject {
|
||||
property Component migration42Component: Migration42 {}
|
||||
property Component migration43Component: Migration43 {}
|
||||
property Component migration44Component: Migration44 {}
|
||||
property Component migration45Component: Migration45 {}
|
||||
property Component migration46Component: Migration46 {}
|
||||
property Component migration47Component: Migration47 {}
|
||||
property Component migration48Component: Migration48 {}
|
||||
property Component migration49Component: Migration49 {}
|
||||
property Component migration50Component: Migration50 {}
|
||||
}
|
||||
|
||||
+56
-69
@@ -25,7 +25,7 @@ Singleton {
|
||||
- Default cache directory: ~/.cache/noctalia
|
||||
*/
|
||||
readonly property alias data: adapter // Used to access via Settings.data.xxx.yyy
|
||||
readonly property int settingsVersion: 44
|
||||
readonly property int settingsVersion: 51
|
||||
readonly property bool isDebug: Quickshell.env("NOCTALIA_DEBUG") === "1"
|
||||
readonly property string shellName: "noctalia"
|
||||
readonly property string configDir: Quickshell.env("NOCTALIA_CONFIG_DIR") || (Quickshell.env("XDG_CONFIG_HOME") || Quickshell.env("HOME") + "/.config") + "/" + shellName + "/"
|
||||
@@ -48,11 +48,6 @@ Singleton {
|
||||
Quickshell.execDetached(["mkdir", "-p", configDir]);
|
||||
Quickshell.execDetached(["mkdir", "-p", cacheDir]);
|
||||
|
||||
// Ensure PAM config file exists in configDir (create once, never override)
|
||||
if (!Quickshell.env("NOCTALIA_PAM_CONFIG")) {
|
||||
ensurePamConfig();
|
||||
}
|
||||
|
||||
// Mark directories as created and trigger file loading
|
||||
directoriesCreated = true;
|
||||
|
||||
@@ -175,12 +170,14 @@ Singleton {
|
||||
|
||||
// bar
|
||||
property JsonObject bar: JsonObject {
|
||||
property string barType: "simple" // "simple", "floating", "framed"
|
||||
property string position: "top" // "top", "bottom", "left", or "right"
|
||||
property list<string> monitors: [] // holds bar visibility per monitor
|
||||
property string density: "default" // "compact", "default", "comfortable"
|
||||
property bool showOutline: false
|
||||
property bool showCapsule: true
|
||||
property real capsuleOpacity: 1.0
|
||||
property string capsuleColorKey: "none"
|
||||
|
||||
// Bar background opacity settings
|
||||
property real backgroundOpacity: 0.93
|
||||
@@ -191,15 +188,21 @@ Singleton {
|
||||
property int marginVertical: 4
|
||||
property int marginHorizontal: 4
|
||||
|
||||
// Framed bar settings
|
||||
property int frameThickness: 8
|
||||
property int frameRadius: 12
|
||||
|
||||
// Bar outer corners (inverted/concave corners at bar edges when not floating)
|
||||
property bool outerCorners: true
|
||||
|
||||
// Reserves space with compositor
|
||||
property bool exclusive: true
|
||||
|
||||
// Hide bar/panels when compositor overview is active
|
||||
property bool hideOnOverview: false
|
||||
|
||||
// Auto-hide settings
|
||||
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
|
||||
|
||||
// Widget configuration for modular bar system
|
||||
property JsonObject widgets
|
||||
widgets: JsonObject {
|
||||
@@ -266,6 +269,7 @@ Singleton {
|
||||
property real animationSpeed: 1.0
|
||||
property bool animationDisabled: false
|
||||
property bool compactLockScreen: false
|
||||
property bool lockScreenAnimations: false
|
||||
property bool lockOnSuspend: true
|
||||
property bool showSessionButtonsOnLockScreen: true
|
||||
property bool showHibernateOnLockScreen: false
|
||||
@@ -279,6 +283,21 @@ Singleton {
|
||||
property bool telemetryEnabled: false
|
||||
property bool enableLockScreenCountdown: true
|
||||
property int lockScreenCountdownDuration: 10000
|
||||
property bool autoStartAuth: false
|
||||
property bool allowPasswordWithFprintd: false
|
||||
property string clockStyle: "custom"
|
||||
property string clockFormat: "hh\\nmm"
|
||||
property list<string> lockScreenMonitors: [] // holds lock screen visibility per monitor
|
||||
property real lockScreenBlur: 0.0
|
||||
property real lockScreenTint: 0.0
|
||||
property JsonObject keybinds: JsonObject {
|
||||
property list<string> keyUp: ["Up"]
|
||||
property list<string> keyDown: ["Down"]
|
||||
property list<string> keyLeft: ["Left"]
|
||||
property list<string> keyRight: ["Right"]
|
||||
property list<string> keyEnter: ["Return"]
|
||||
property list<string> keyEscape: ["Esc"]
|
||||
}
|
||||
}
|
||||
|
||||
// ui
|
||||
@@ -357,6 +376,8 @@ Singleton {
|
||||
property real transitionEdgeSmoothness: 0.05
|
||||
property string panelPosition: "follow_bar"
|
||||
property bool hideWallpaperFilenames: false
|
||||
property real overviewBlur: 0.4
|
||||
property real overviewTint: 0.6
|
||||
// Wallhaven settings
|
||||
property bool useWallhaven: false
|
||||
property string wallhavenQuery: ""
|
||||
@@ -368,7 +389,9 @@ Singleton {
|
||||
property string wallhavenApiKey: ""
|
||||
property string wallhavenResolutionMode: "atleast" // "atleast" or "exact"
|
||||
property string wallhavenResolutionWidth: ""
|
||||
|
||||
property string wallhavenResolutionHeight: ""
|
||||
property string sortOrder: "name" // "name", "name_desc", "date", "date_desc", "random"
|
||||
}
|
||||
|
||||
// applauncher
|
||||
@@ -377,11 +400,13 @@ Singleton {
|
||||
property bool autoPasteClipboard: false
|
||||
property bool enableClipPreview: true
|
||||
property bool clipboardWrapText: true
|
||||
property string clipboardWatchTextCommand: "wl-paste --type text --watch cliphist store"
|
||||
property string clipboardWatchImageCommand: "wl-paste --type image --watch cliphist store"
|
||||
property string position: "center" // Position: center, top_left, top_right, bottom_left, bottom_right, bottom_center, top_center
|
||||
property list<string> pinnedApps: []
|
||||
property bool useApp2Unit: false
|
||||
property bool sortByMostUsed: true
|
||||
property string terminalCommand: "xterm -e"
|
||||
property string terminalCommand: "alacritty -e"
|
||||
property bool customLaunchPrefixEnabled: false
|
||||
property string customLaunchPrefix: ""
|
||||
// View mode: "list" or "grid"
|
||||
@@ -391,8 +416,11 @@ Singleton {
|
||||
property string iconMode: "tabler"
|
||||
property bool showIconBackground: false
|
||||
property bool enableSettingsSearch: true
|
||||
property bool enableWindowsSearch: true
|
||||
property bool ignoreMouseInput: false
|
||||
property string screenshotAnnotationTool: ""
|
||||
property bool overviewLayer: false
|
||||
property string density: "default" // "compact", "default", "comfortable"
|
||||
}
|
||||
|
||||
// control center
|
||||
@@ -473,13 +501,16 @@ Singleton {
|
||||
property int swapCriticalThreshold: 90
|
||||
property int diskWarningThreshold: 80
|
||||
property int diskCriticalThreshold: 90
|
||||
property int cpuPollingInterval: 3000
|
||||
property int tempPollingInterval: 3000
|
||||
property int diskAvailWarningThreshold: 20
|
||||
property int diskAvailCriticalThreshold: 10
|
||||
property int batteryWarningThreshold: 20
|
||||
property int batteryCriticalThreshold: 5
|
||||
property int cpuPollingInterval: 1000
|
||||
property int gpuPollingInterval: 3000
|
||||
property bool enableDgpuMonitoring: false // Opt-in: reading dGPU sysfs/nvidia-smi wakes it from D3cold, draining battery
|
||||
property int memPollingInterval: 3000
|
||||
property int memPollingInterval: 1000
|
||||
property int diskPollingInterval: 30000
|
||||
property int networkPollingInterval: 3000
|
||||
property int networkPollingInterval: 1000
|
||||
property int loadAvgPollingInterval: 3000
|
||||
property bool useCustomColors: false
|
||||
property string warningColor: ""
|
||||
@@ -522,8 +553,8 @@ Singleton {
|
||||
property int countdownDuration: 10000
|
||||
property string position: "center"
|
||||
property bool showHeader: true
|
||||
property bool largeButtonsStyle: false
|
||||
property string largeButtonsLayout: "grid"
|
||||
property bool largeButtonsStyle: true
|
||||
property string largeButtonsLayout: "single-row"
|
||||
property bool showNumberLabels: true
|
||||
property list<var> powerOptions: [
|
||||
{
|
||||
@@ -564,7 +595,6 @@ Singleton {
|
||||
property int lowUrgencyDuration: 3
|
||||
property int normalUrgencyDuration: 8
|
||||
property int criticalUrgencyDuration: 15
|
||||
property bool enableKeyboardLayoutToast: true
|
||||
property JsonObject saveToHistory: JsonObject {
|
||||
property bool low: true
|
||||
property bool normal: true
|
||||
@@ -580,6 +610,8 @@ Singleton {
|
||||
property string excludedApps: "discord,firefox,chrome,chromium,edge"
|
||||
}
|
||||
property bool enableMediaToast: false
|
||||
property bool enableKeyboardLayoutToast: true
|
||||
property bool enableBatteryToast: true
|
||||
}
|
||||
|
||||
// on-screen display
|
||||
@@ -653,6 +685,11 @@ Singleton {
|
||||
property string session: ""
|
||||
}
|
||||
|
||||
// plugins
|
||||
property JsonObject plugins: JsonObject {
|
||||
property bool autoUpdate: false
|
||||
}
|
||||
|
||||
// desktop widgets
|
||||
property JsonObject desktopWidgets: JsonObject {
|
||||
property bool enabled: false
|
||||
@@ -1096,56 +1133,6 @@ Singleton {
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
// Ensure PAM password.conf exists in configDir (create once, never override)
|
||||
function ensurePamConfig() {
|
||||
var pamConfigDir = configDir + "pam";
|
||||
var pamConfigFile = pamConfigDir + "/password.conf";
|
||||
|
||||
// Check if file already exists
|
||||
fileCheckPamProcess.command = ["test", "-f", pamConfigFile];
|
||||
fileCheckPamProcess.running = true;
|
||||
}
|
||||
|
||||
function doCreatePamConfig() {
|
||||
var pamConfigDir = configDir + "pam";
|
||||
var pamConfigFile = pamConfigDir + "/password.conf";
|
||||
var pamConfigDirEsc = pamConfigDir.replace(/'/g, "'\\''");
|
||||
var pamConfigFileEsc = pamConfigFile.replace(/'/g, "'\\''");
|
||||
|
||||
// Ensure directory exists
|
||||
Quickshell.execDetached(["mkdir", "-p", pamConfigDir]);
|
||||
|
||||
// Generate the PAM config file content
|
||||
var configContent = "auth sufficient pam_fprintd.so timeout=-1\n";
|
||||
configContent += "auth sufficient /run/current-system/sw/lib/security/pam_fprintd.so timeout=-1 # for NixOS\n";
|
||||
configContent += "auth required pam_unix.so\n";
|
||||
|
||||
// Write the config file using heredoc to avoid escaping issues
|
||||
var script = `cat > '${pamConfigFileEsc}' << 'EOF'\n`;
|
||||
script += configContent;
|
||||
script += "EOF\n";
|
||||
Quickshell.execDetached(["sh", "-c", script]);
|
||||
|
||||
Logger.d("Settings", "PAM config file created at:", pamConfigFile);
|
||||
}
|
||||
|
||||
// Process for checking if PAM config file exists
|
||||
Process {
|
||||
id: fileCheckPamProcess
|
||||
running: false
|
||||
|
||||
onExited: function (exitCode) {
|
||||
if (exitCode === 0) {
|
||||
// File exists, skip creation
|
||||
Logger.d("Settings", "PAM config file already exists, skipping creation");
|
||||
} else {
|
||||
// File doesn't exist, create it
|
||||
doCreatePamConfig();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
// Function to clean up deprecated user/custom bar widgets settings
|
||||
function upgradeWidget(widget) {
|
||||
@@ -1157,7 +1144,7 @@ Singleton {
|
||||
|
||||
// Delete deprecated user settings from the wiget
|
||||
for (const k of Object.keys(widget)) {
|
||||
if (k === "id" || k === "allowUserSettings") {
|
||||
if (k === "id") {
|
||||
continue;
|
||||
}
|
||||
if (!keys.includes(k)) {
|
||||
@@ -1168,7 +1155,7 @@ Singleton {
|
||||
// Inject missing default setting (metaData) from BarWidgetRegistry
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
const k = keys[i];
|
||||
if (k === "id" || k === "allowUserSettings") {
|
||||
if (k === "id") {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -71,6 +71,9 @@ Singleton {
|
||||
property var telemetry: ({
|
||||
instanceId: ""
|
||||
})
|
||||
|
||||
// Launcher app usage counts
|
||||
property var launcherUsage: ({})
|
||||
}
|
||||
|
||||
onLoaded: {
|
||||
@@ -90,6 +93,22 @@ Singleton {
|
||||
}
|
||||
}
|
||||
|
||||
// Launcher usage
|
||||
function getLauncherUsageCount(key) {
|
||||
const m = adapter.launcherUsage;
|
||||
if (!m)
|
||||
return 0;
|
||||
const v = m[key];
|
||||
return typeof v === 'number' && isFinite(v) ? v : 0;
|
||||
}
|
||||
|
||||
function recordLauncherUsage(key) {
|
||||
let counts = Object.assign({}, adapter.launcherUsage || {});
|
||||
counts[key] = getLauncherUsageCount(key) + 1;
|
||||
adapter.launcherUsage = counts;
|
||||
save();
|
||||
}
|
||||
|
||||
// Debounced save timer
|
||||
Timer {
|
||||
id: saveTimer
|
||||
@@ -237,6 +256,7 @@ Singleton {
|
||||
doNotDisturb: NotificationService.doNotDisturb,
|
||||
noctaliaPerformanceMode: PowerProfileService.noctaliaPerformanceMode,
|
||||
barVisible: BarService.isVisible,
|
||||
openedPanel: PanelService.openedPanel?.objectName || "",
|
||||
lockScreenActive: PanelService.lockScreen?.active || false,
|
||||
wallpapers: WallpaperService.currentWallpapers || {},
|
||||
desktopWidgetsEditMode: DesktopWidgetRegistry.editMode || false,
|
||||
|
||||
+1
-1
@@ -139,7 +139,7 @@ Singleton {
|
||||
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 color capsuleColor: Settings.data.bar.showCapsule ? Qt.alpha(Color.mSurfaceVariant, Settings.data.bar.capsuleOpacity) : "transparent"
|
||||
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"
|
||||
|
||||
readonly property color capsuleBorderColor: Settings.data.bar.showOutline ? Color.mPrimary : "transparent"
|
||||
readonly property int capsuleBorderWidth: Settings.data.bar.showOutline ? Style.borderS : 0
|
||||
|
||||
@@ -11,6 +11,12 @@ Singleton {
|
||||
// Current date
|
||||
property var now: new Date()
|
||||
|
||||
// Unix timestamp of the last update
|
||||
property real _lastUpdateTs: Date.now()
|
||||
|
||||
// Signal emitted when a significant time jump is detected (e.g. system resume)
|
||||
signal resumed
|
||||
|
||||
// Returns a Unix Timestamp (in seconds)
|
||||
readonly property int timestamp: {
|
||||
return Math.floor(root.now / 1000);
|
||||
@@ -34,6 +40,15 @@ Singleton {
|
||||
triggeredOnStart: false
|
||||
onTriggered: {
|
||||
var newTime = new Date();
|
||||
var currentTs = newTime.getTime();
|
||||
|
||||
// Detect time jump (e.g. system resume) - threshold: 5 seconds
|
||||
if (currentTs - root._lastUpdateTs > 5000) {
|
||||
Logger.i("Time", "Time jump detected (" + Math.round((currentTs - root._lastUpdateTs) / 1000) + "s) - likely system resume");
|
||||
root.resumed();
|
||||
}
|
||||
root._lastUpdateTs = currentTs;
|
||||
|
||||
root.now = newTime;
|
||||
|
||||
// Update timer if running
|
||||
|
||||
@@ -38,6 +38,14 @@ Variants {
|
||||
property real stripesCount: 16
|
||||
property real stripesAngle: 0
|
||||
|
||||
// Pixelate
|
||||
property real pixelateMaxBlockSize: 64.0
|
||||
|
||||
// Honeycomb
|
||||
property real honeycombCellSize: 0.04
|
||||
property real honeycombCenterX: 0.5
|
||||
property real honeycombCenterY: 0.5
|
||||
|
||||
// Used to debounce wallpaper changes
|
||||
property string futureWallpaper: ""
|
||||
// Track the original wallpaper path being transitioned to (before caching)
|
||||
@@ -59,6 +67,7 @@ Variants {
|
||||
|
||||
Component.onDestruction: {
|
||||
transitionAnimation.stop();
|
||||
startupTransitionTimer.stop();
|
||||
debounceTimer.stop();
|
||||
shaderLoader.active = false;
|
||||
currentWallpaper.source = "";
|
||||
@@ -85,13 +94,23 @@ Variants {
|
||||
Connections {
|
||||
target: CompositorService
|
||||
function onDisplayScalesChanged() {
|
||||
if (isStartupTransition) {
|
||||
const currentPath = WallpaperService.getWallpaper(modelData.name);
|
||||
if (!currentPath || WallpaperService.isSolidColorPath(currentPath)) {
|
||||
return;
|
||||
}
|
||||
const currentPath = WallpaperService.getWallpaper(modelData.name);
|
||||
if (currentPath) {
|
||||
requestPreprocessedWallpaper(currentPath);
|
||||
|
||||
if (isStartupTransition) {
|
||||
// During startup, just ensure the correct cache exists without visual changes
|
||||
const compositorScale = CompositorService.getDisplayScale(modelData.name);
|
||||
const targetWidth = Math.round(modelData.width * compositorScale);
|
||||
const targetHeight = Math.round(modelData.height * compositorScale);
|
||||
ImageCacheService.getLarge(currentPath, targetWidth, targetHeight, function (cachedPath, success) {
|
||||
WallpaperService.wallpaperProcessingComplete(modelData.name, currentPath, success ? cachedPath : "");
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
requestPreprocessedWallpaper(currentPath);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,6 +135,15 @@ Variants {
|
||||
onTriggered: changeWallpaper()
|
||||
}
|
||||
|
||||
// Delay startup transition to ensure the compositor has mapped the window
|
||||
Timer {
|
||||
id: startupTransitionTimer
|
||||
interval: 100
|
||||
running: false
|
||||
repeat: false
|
||||
onTriggered: _executeStartupTransition()
|
||||
}
|
||||
|
||||
Image {
|
||||
id: currentWallpaper
|
||||
|
||||
@@ -171,6 +199,10 @@ Variants {
|
||||
return discShaderComponent;
|
||||
case "stripes":
|
||||
return stripesShaderComponent;
|
||||
case "pixelate":
|
||||
return pixelateShaderComponent;
|
||||
case "honeycomb":
|
||||
return honeycombShaderComponent;
|
||||
case "fade":
|
||||
case "none":
|
||||
default:
|
||||
@@ -309,6 +341,71 @@ Variants {
|
||||
}
|
||||
}
|
||||
|
||||
// Pixelate transition shader component
|
||||
Component {
|
||||
id: pixelateShaderComponent
|
||||
ShaderEffect {
|
||||
anchors.fill: parent
|
||||
|
||||
property variant source1: currentWallpaper
|
||||
property variant source2: nextWallpaper
|
||||
property real progress: root.transitionProgress
|
||||
property real maxBlockSize: root.pixelateMaxBlockSize
|
||||
|
||||
// Fill mode properties
|
||||
property real fillMode: root.fillMode
|
||||
property vector4d fillColor: root.fillColor
|
||||
property real imageWidth1: source1.sourceSize.width
|
||||
property real imageHeight1: source1.sourceSize.height
|
||||
property real imageWidth2: source2.sourceSize.width
|
||||
property real imageHeight2: source2.sourceSize.height
|
||||
property real screenWidth: width
|
||||
property real screenHeight: height
|
||||
|
||||
// Solid color mode
|
||||
property real isSolid1: root.isSolid1 ? 1.0 : 0.0
|
||||
property real isSolid2: root.isSolid2 ? 1.0 : 0.0
|
||||
property vector4d solidColor1: root.solidColor1
|
||||
property vector4d solidColor2: root.solidColor2
|
||||
|
||||
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/wp_pixelate.frag.qsb")
|
||||
}
|
||||
}
|
||||
|
||||
// Honeycomb transition shader component
|
||||
Component {
|
||||
id: honeycombShaderComponent
|
||||
ShaderEffect {
|
||||
anchors.fill: parent
|
||||
|
||||
property variant source1: currentWallpaper
|
||||
property variant source2: nextWallpaper
|
||||
property real progress: root.transitionProgress
|
||||
property real cellSize: root.honeycombCellSize
|
||||
property real centerX: root.honeycombCenterX
|
||||
property real centerY: root.honeycombCenterY
|
||||
property real aspectRatio: root.width / root.height
|
||||
|
||||
// Fill mode properties
|
||||
property real fillMode: root.fillMode
|
||||
property vector4d fillColor: root.fillColor
|
||||
property real imageWidth1: source1.sourceSize.width
|
||||
property real imageHeight1: source1.sourceSize.height
|
||||
property real imageWidth2: source2.sourceSize.width
|
||||
property real imageHeight2: source2.sourceSize.height
|
||||
property real screenWidth: width
|
||||
property real screenHeight: height
|
||||
|
||||
// Solid color mode
|
||||
property real isSolid1: root.isSolid1 ? 1.0 : 0.0
|
||||
property real isSolid2: root.isSolid2 ? 1.0 : 0.0
|
||||
property vector4d solidColor1: root.solidColor1
|
||||
property vector4d solidColor2: root.solidColor2
|
||||
|
||||
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/wp_honeycomb.frag.qsb")
|
||||
}
|
||||
}
|
||||
|
||||
// Animation for the transition progress
|
||||
NumberAnimation {
|
||||
id: transitionAnimation
|
||||
@@ -316,8 +413,7 @@ Variants {
|
||||
property: "transitionProgress"
|
||||
from: 0.0
|
||||
to: 1.0
|
||||
// The stripes shader feels faster visually, we make it a bit slower here.
|
||||
duration: transitionType == "stripes" ? Settings.data.wallpaper.transitionDuration * 1.6 : Settings.data.wallpaper.transitionDuration
|
||||
duration: Settings.data.wallpaper.transitionDuration
|
||||
easing.type: Easing.InOutCubic
|
||||
onFinished: {
|
||||
// Clear the tracking of what we're transitioning to
|
||||
@@ -344,6 +440,18 @@ Variants {
|
||||
}
|
||||
}
|
||||
|
||||
// Normalize a path (string or QUrl) to a plain string for comparison.
|
||||
// QML Image.source is a url type; comparing url === string can return
|
||||
// false even for identical paths. This converts both sides to strings.
|
||||
function _pathStr(p) {
|
||||
var s = p.toString();
|
||||
// QUrl.toString() may add a file:// prefix for local paths
|
||||
if (s.startsWith("file://")) {
|
||||
return s.substring(7);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------
|
||||
function setWallpaperInitial() {
|
||||
// On startup, defer assigning wallpaper until the services are ready
|
||||
@@ -424,6 +532,14 @@ Variants {
|
||||
} else {
|
||||
futureWallpaper = originalPath;
|
||||
}
|
||||
|
||||
// Skip transition if the resolved path matches what's already displayed
|
||||
if (_pathStr(futureWallpaper) === _pathStr(currentWallpaper.source)) {
|
||||
transitioningToOriginalPath = "";
|
||||
WallpaperService.wallpaperProcessingComplete(modelData.name, originalPath, success ? cachedPath : "");
|
||||
return;
|
||||
}
|
||||
|
||||
debounceTimer.restart();
|
||||
// Pass cached path for blur optimization (already resized)
|
||||
WallpaperService.wallpaperProcessingComplete(modelData.name, originalPath, success ? cachedPath : "");
|
||||
@@ -473,8 +589,8 @@ Variants {
|
||||
}
|
||||
}
|
||||
|
||||
// For images, check if source matches
|
||||
if (!isSolidSource && source === currentWallpaper.source) {
|
||||
// For images, check if source matches (use _pathStr to normalize url vs string)
|
||||
if (!isSolidSource && _pathStr(source) === _pathStr(currentWallpaper.source)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -567,6 +683,16 @@ Variants {
|
||||
stripesAngle = Math.random() * 360;
|
||||
setWallpaperWithTransition(futureWallpaper);
|
||||
break;
|
||||
case "pixelate":
|
||||
pixelateMaxBlockSize = Math.round(Math.random() * 80 + 32);
|
||||
setWallpaperWithTransition(futureWallpaper);
|
||||
break;
|
||||
case "honeycomb":
|
||||
honeycombCellSize = Math.random() * 0.04 + 0.02;
|
||||
honeycombCenterX = Math.random();
|
||||
honeycombCenterY = Math.random();
|
||||
setWallpaperWithTransition(futureWallpaper);
|
||||
break;
|
||||
default:
|
||||
setWallpaperWithTransition(futureWallpaper);
|
||||
break;
|
||||
@@ -575,6 +701,8 @@ Variants {
|
||||
|
||||
// ------------------------------------------------------
|
||||
// Dedicated function for startup animation
|
||||
// Sets up transition params, then defers the actual animation
|
||||
// to allow the compositor time to map the window.
|
||||
function performStartupTransition() {
|
||||
// Get the transitionType from the settings
|
||||
transitionType = Settings.data.wallpaper.transitionType;
|
||||
@@ -589,31 +717,40 @@ Variants {
|
||||
transitionType = "fade";
|
||||
}
|
||||
|
||||
// Apply transitionType so the shader loader picks the correct shader
|
||||
this.transitionType = transitionType;
|
||||
|
||||
// Pre-compute per-type params so the shader is ready
|
||||
switch (transitionType) {
|
||||
case "none":
|
||||
setWallpaperImmediate(futureWallpaper);
|
||||
break;
|
||||
case "wipe":
|
||||
wipeDirection = Math.random() * 4;
|
||||
setWallpaperWithTransition(futureWallpaper);
|
||||
break;
|
||||
case "disc":
|
||||
// Force center origin for elegant startup animation
|
||||
discCenterX = 0.5;
|
||||
discCenterY = 0.5;
|
||||
setWallpaperWithTransition(futureWallpaper);
|
||||
break;
|
||||
case "stripes":
|
||||
stripesCount = Math.round(Math.random() * 20 + 4);
|
||||
stripesAngle = Math.random() * 360;
|
||||
setWallpaperWithTransition(futureWallpaper);
|
||||
break;
|
||||
default:
|
||||
setWallpaperWithTransition(futureWallpaper);
|
||||
case "pixelate":
|
||||
pixelateMaxBlockSize = 64.0;
|
||||
break;
|
||||
case "honeycomb":
|
||||
honeycombCellSize = 0.04;
|
||||
honeycombCenterX = 0.5;
|
||||
honeycombCenterY = 0.5;
|
||||
break;
|
||||
}
|
||||
|
||||
// Defer the actual transition start so the compositor can map the window
|
||||
startupTransitionTimer.start();
|
||||
}
|
||||
|
||||
// Actually kick off the startup transition after the delay
|
||||
function _executeStartupTransition() {
|
||||
if (transitionType === "none") {
|
||||
setWallpaperImmediate(futureWallpaper);
|
||||
} else {
|
||||
setWallpaperWithTransition(futureWallpaper);
|
||||
}
|
||||
// Mark startup transition complete
|
||||
isStartupTransition = false;
|
||||
|
||||
@@ -4,6 +4,7 @@ import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import qs.Commons
|
||||
import qs.Services.Compositor
|
||||
import qs.Services.Power
|
||||
import qs.Services.UI
|
||||
|
||||
Loader {
|
||||
@@ -100,16 +101,16 @@ Loader {
|
||||
layer.enabled: true
|
||||
layer.smooth: false
|
||||
layer.effect: MultiEffect {
|
||||
blurEnabled: true
|
||||
blur: 1.0
|
||||
blurMax: 32
|
||||
blurEnabled: !PowerProfileService.noctaliaPerformanceMode && (Settings.data.wallpaper.overviewBlur > 0)
|
||||
blur: Settings.data.wallpaper.overviewBlur
|
||||
blurMax: 48
|
||||
}
|
||||
|
||||
// Tint overlay
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: tintColor
|
||||
opacity: 0.6
|
||||
opacity: Settings.data.wallpaper.overviewTint
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+207
-67
@@ -27,6 +27,34 @@ Item {
|
||||
});
|
||||
}
|
||||
|
||||
// Hot corner: trigger click on first widget in a section
|
||||
function triggerFirstWidgetInSection(sectionName: string) {
|
||||
var widgets = BarService.getWidgetsBySection(sectionName, screen?.name);
|
||||
for (var i = 0; i < widgets.length; i++) {
|
||||
var widget = widgets[i];
|
||||
if (widget && widget.visible && widget.widgetId !== "Spacer") {
|
||||
if (typeof widget.clicked === "function") {
|
||||
widget.clicked();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Hot corner: trigger click on last widget in a section
|
||||
function triggerLastWidgetInSection(sectionName: string) {
|
||||
var widgets = BarService.getWidgetsBySection(sectionName, screen?.name);
|
||||
for (var i = widgets.length - 1; i >= 0; i--) {
|
||||
var widget = widgets[i];
|
||||
if (widget && widget.visible && widget.widgetId !== "Spacer") {
|
||||
if (typeof widget.clicked === "function") {
|
||||
widget.clicked();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Expose bar region for click-through mask
|
||||
readonly property var barRegion: barContentLoader.item?.children[0] || null
|
||||
|
||||
@@ -46,9 +74,79 @@ Item {
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForDensity(barDensity, barHeight)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForDensity(barHeight, capsuleHeight, barIsVertical)
|
||||
|
||||
// Bar widgets (per-screen)
|
||||
// Bar widgets (per-screen) - initial configuration
|
||||
// Note: Updates are handled via Connections to BarService.widgetsRevisionChanged
|
||||
readonly property var barWidgets: Settings.getBarWidgetsForScreen(screen?.name)
|
||||
|
||||
// Stable ListModels for each section - prevents Repeater recreation on settings changes
|
||||
property ListModel leftWidgetsModel: ListModel {}
|
||||
property ListModel centerWidgetsModel: ListModel {}
|
||||
property ListModel rightWidgetsModel: ListModel {}
|
||||
|
||||
// Sync a ListModel with widget data, preserving delegates when only settings change
|
||||
function syncWidgetModel(model, newWidgets) {
|
||||
var validWidgets = filterValidWidgets(newWidgets);
|
||||
|
||||
// Build list of current IDs in model
|
||||
var currentIds = [];
|
||||
for (var i = 0; i < model.count; i++) {
|
||||
currentIds.push(model.get(i).id);
|
||||
}
|
||||
|
||||
// Build list of new IDs
|
||||
var newIds = validWidgets.map(w => w.id);
|
||||
|
||||
// Check if structure changed (different IDs or order)
|
||||
var structureChanged = currentIds.length !== newIds.length;
|
||||
if (!structureChanged) {
|
||||
for (var i = 0; i < currentIds.length; i++) {
|
||||
if (currentIds[i] !== newIds[i]) {
|
||||
structureChanged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Logger.d("Bar", "syncWidgetModel:", currentIds.join("|"), "→", newIds.join("|"), "changed:", structureChanged);
|
||||
|
||||
if (structureChanged) {
|
||||
// Rebuild model - IDs changed
|
||||
model.clear();
|
||||
for (var i = 0; i < validWidgets.length; i++) {
|
||||
model.append(validWidgets[i]);
|
||||
}
|
||||
}
|
||||
// If structure didn't change, delegates are preserved and will read fresh settings
|
||||
}
|
||||
|
||||
// Sync models when widget revision changes
|
||||
// Note: We use Connections instead of onBarWidgetsChanged because getBarWidgetsForScreen
|
||||
// returns the same object reference (Settings.data.bar.widgets) even when content changes,
|
||||
// so QML won't detect the change via property binding.
|
||||
Connections {
|
||||
target: BarService
|
||||
function onWidgetsRevisionChanged() {
|
||||
Logger.d("Bar", "onWidgetsRevisionChanged, revision:", BarService.widgetsRevision, "screen:", root.screen?.name);
|
||||
var widgets = Settings.getBarWidgetsForScreen(root.screen?.name);
|
||||
if (widgets) {
|
||||
root.syncWidgetModel(root.leftWidgetsModel, widgets.left);
|
||||
root.syncWidgetModel(root.centerWidgetsModel, widgets.center);
|
||||
root.syncWidgetModel(root.rightWidgetsModel, widgets.right);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize models
|
||||
Component.onCompleted: {
|
||||
Logger.d("Bar", "Bar Component.onCompleted for screen:", screen?.name);
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name);
|
||||
if (widgets) {
|
||||
syncWidgetModel(leftWidgetsModel, widgets.left);
|
||||
syncWidgetModel(centerWidgetsModel, widgets.center);
|
||||
syncWidgetModel(rightWidgetsModel, widgets.right);
|
||||
}
|
||||
}
|
||||
|
||||
// Fill the parent (the Loader)
|
||||
anchors.fill: parent
|
||||
|
||||
@@ -170,39 +268,39 @@ Item {
|
||||
acceptedButtons: Qt.RightButton
|
||||
hoverEnabled: false
|
||||
preventStealing: true
|
||||
onClicked: function (mouse) {
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
// Check if click is over any widget
|
||||
var widgets = BarService.getAllWidgetInstances(null, screen.name);
|
||||
for (var i = 0; i < widgets.length; i++) {
|
||||
var widget = widgets[i];
|
||||
if (!widget || !widget.visible || widget.widgetId === "Spacer") {
|
||||
continue;
|
||||
}
|
||||
// Map click position to widget's coordinate space
|
||||
var localPos = mapToItem(widget, mouse.x, mouse.y);
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
// Check if click is over any widget
|
||||
var widgets = BarService.getAllWidgetInstances(null, screen.name);
|
||||
for (var i = 0; i < widgets.length; i++) {
|
||||
var widget = widgets[i];
|
||||
if (!widget || !widget.visible || widget.widgetId === "Spacer") {
|
||||
continue;
|
||||
}
|
||||
// Map click position to widget's coordinate space
|
||||
var localPos = mapToItem(widget, mouse.x, mouse.y);
|
||||
|
||||
if (root.barIsVertical) {
|
||||
if (localPos.y >= -Style.marginS && localPos.y <= widget.height + Style.marginS) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (localPos.x >= -Style.marginS && localPos.x <= widget.width + Style.marginS) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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();
|
||||
}
|
||||
mouse.accepted = true;
|
||||
}
|
||||
}
|
||||
if (root.barIsVertical) {
|
||||
if (localPos.y >= -Style.marginS && localPos.y <= widget.height + Style.marginS) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (localPos.x >= -Style.marginS && localPos.x <= widget.width + Style.marginS) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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();
|
||||
}
|
||||
mouse.accepted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
@@ -220,26 +318,47 @@ Item {
|
||||
anchors.fill: parent
|
||||
clip: true
|
||||
|
||||
// Top edge hot corner - triggers first widget in left (top) section
|
||||
MouseArea {
|
||||
width: parent.width
|
||||
height: Style.marginS
|
||||
x: 0
|
||||
y: 0
|
||||
onClicked: root.triggerFirstWidgetInSection("left")
|
||||
}
|
||||
|
||||
// Bottom edge hot corner - triggers last widget in right (bottom) section
|
||||
MouseArea {
|
||||
width: parent.width
|
||||
height: Style.marginS
|
||||
x: 0
|
||||
anchors.bottom: parent.bottom
|
||||
onClicked: root.triggerLastWidgetInSection("right")
|
||||
}
|
||||
|
||||
// Calculate margin to center widgets vertically within the bar height
|
||||
readonly property real verticalBarMargin: Math.round((root.barHeight - root.capsuleHeight) / 2)
|
||||
|
||||
// Top section (left widgets)
|
||||
ColumnLayout {
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: Style.marginM
|
||||
anchors.topMargin: verticalBarMargin
|
||||
spacing: Style.marginS
|
||||
|
||||
Repeater {
|
||||
model: root.filterValidWidgets(root.barWidgets.left)
|
||||
model: root.leftWidgetsModel
|
||||
delegate: BarWidgetLoader {
|
||||
required property var modelData
|
||||
required property var model
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
widgetId: model.id || ""
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
"widgetId": model.id,
|
||||
"section": "left",
|
||||
"sectionWidgetIndex": index,
|
||||
"sectionWidgetsCount": root.barWidgets.left.length
|
||||
"sectionWidgetsCount": root.leftWidgetsModel.count
|
||||
})
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
}
|
||||
@@ -253,18 +372,18 @@ Item {
|
||||
spacing: Style.marginS
|
||||
|
||||
Repeater {
|
||||
model: root.filterValidWidgets(root.barWidgets.center)
|
||||
model: root.centerWidgetsModel
|
||||
delegate: BarWidgetLoader {
|
||||
required property var modelData
|
||||
required property var model
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
widgetId: model.id || ""
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
"widgetId": model.id,
|
||||
"section": "center",
|
||||
"sectionWidgetIndex": index,
|
||||
"sectionWidgetsCount": root.barWidgets.center.length
|
||||
"sectionWidgetsCount": root.centerWidgetsModel.count
|
||||
})
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
}
|
||||
@@ -275,22 +394,22 @@ Item {
|
||||
ColumnLayout {
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: Style.marginM
|
||||
anchors.bottomMargin: verticalBarMargin
|
||||
spacing: Style.marginS
|
||||
|
||||
Repeater {
|
||||
model: root.filterValidWidgets(root.barWidgets.right)
|
||||
model: root.rightWidgetsModel
|
||||
delegate: BarWidgetLoader {
|
||||
required property var modelData
|
||||
required property var model
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
widgetId: model.id || ""
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
"widgetId": model.id,
|
||||
"section": "right",
|
||||
"sectionWidgetIndex": index,
|
||||
"sectionWidgetsCount": root.barWidgets.right.length
|
||||
"sectionWidgetsCount": root.rightWidgetsModel.count
|
||||
})
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
}
|
||||
@@ -306,28 +425,49 @@ Item {
|
||||
anchors.fill: parent
|
||||
clip: true
|
||||
|
||||
// Left edge hot corner - triggers first widget in left section
|
||||
MouseArea {
|
||||
width: Style.marginS
|
||||
height: parent.height
|
||||
x: 0
|
||||
y: 0
|
||||
onClicked: root.triggerFirstWidgetInSection("left")
|
||||
}
|
||||
|
||||
// Right edge hot corner - triggers last widget in right section
|
||||
MouseArea {
|
||||
width: Style.marginS
|
||||
height: parent.height
|
||||
anchors.right: parent.right
|
||||
y: 0
|
||||
onClicked: root.triggerLastWidgetInSection("right")
|
||||
}
|
||||
|
||||
// Calculate margin to center widgets horizontally within the bar height
|
||||
readonly property real horizontalBarMargin: Math.round((root.barHeight - root.capsuleHeight) / 2)
|
||||
|
||||
// Left Section
|
||||
RowLayout {
|
||||
id: leftSection
|
||||
objectName: "leftSection"
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: Style.marginS
|
||||
anchors.leftMargin: horizontalBarMargin
|
||||
y: Style.pixelAlignCenter(parent.height, height)
|
||||
spacing: Style.marginS
|
||||
|
||||
Repeater {
|
||||
model: root.filterValidWidgets(root.barWidgets.left)
|
||||
model: root.leftWidgetsModel
|
||||
delegate: BarWidgetLoader {
|
||||
required property var modelData
|
||||
required property var model
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
widgetId: model.id || ""
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
"widgetId": model.id,
|
||||
"section": "left",
|
||||
"sectionWidgetIndex": index,
|
||||
"sectionWidgetsCount": root.barWidgets.left.length
|
||||
"sectionWidgetsCount": root.leftWidgetsModel.count
|
||||
})
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
}
|
||||
@@ -343,18 +483,18 @@ Item {
|
||||
spacing: Style.marginS
|
||||
|
||||
Repeater {
|
||||
model: root.filterValidWidgets(root.barWidgets.center)
|
||||
model: root.centerWidgetsModel
|
||||
delegate: BarWidgetLoader {
|
||||
required property var modelData
|
||||
required property var model
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
widgetId: model.id || ""
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
"widgetId": model.id,
|
||||
"section": "center",
|
||||
"sectionWidgetIndex": index,
|
||||
"sectionWidgetsCount": root.barWidgets.center.length
|
||||
"sectionWidgetsCount": root.centerWidgetsModel.count
|
||||
})
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
}
|
||||
@@ -366,23 +506,23 @@ Item {
|
||||
id: rightSection
|
||||
objectName: "rightSection"
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Style.marginS
|
||||
anchors.rightMargin: horizontalBarMargin
|
||||
y: Style.pixelAlignCenter(parent.height, height)
|
||||
spacing: Style.marginS
|
||||
|
||||
Repeater {
|
||||
model: root.filterValidWidgets(root.barWidgets.right)
|
||||
model: root.rightWidgetsModel
|
||||
delegate: BarWidgetLoader {
|
||||
required property var modelData
|
||||
required property var model
|
||||
required property int index
|
||||
|
||||
widgetId: modelData.id || ""
|
||||
widgetId: model.id || ""
|
||||
widgetScreen: root.screen
|
||||
widgetProps: ({
|
||||
"widgetId": modelData.id,
|
||||
"widgetId": model.id,
|
||||
"section": "right",
|
||||
"sectionWidgetIndex": index,
|
||||
"sectionWidgetsCount": root.barWidgets.right.length
|
||||
"sectionWidgetsCount": root.rightWidgetsModel.count
|
||||
})
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
}
|
||||
|
||||
@@ -12,8 +12,6 @@ import qs.Commons
|
||||
PanelWindow {
|
||||
id: root
|
||||
|
||||
property bool exclusive: Settings.data.bar.exclusive !== undefined ? Settings.data.bar.exclusive : false
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property bool barIsVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property bool barFloating: Settings.data.bar.floating || false
|
||||
@@ -29,7 +27,7 @@ PanelWindow {
|
||||
// Wayland layer shell configuration
|
||||
WlrLayershell.layer: WlrLayer.Top
|
||||
WlrLayershell.namespace: "noctalia-bar-exclusion-" + (screen?.name || "unknown")
|
||||
WlrLayershell.exclusionMode: exclusive ? ExclusionMode.Auto : ExclusionMode.Ignore
|
||||
WlrLayershell.exclusionMode: ExclusionMode.Auto
|
||||
|
||||
// Anchor based on bar position
|
||||
anchors {
|
||||
@@ -67,7 +65,7 @@ PanelWindow {
|
||||
|
||||
Component.onCompleted: {
|
||||
Logger.d("BarExclusionZone", "Created for screen:", screen?.name);
|
||||
Logger.d("BarExclusionZone", " Position:", barPosition, "Exclusive:", exclusive, "Floating:", barFloating);
|
||||
Logger.d("BarExclusionZone", " Position:", barPosition, "Floating:", barFloating);
|
||||
Logger.d("BarExclusionZone", " Anchors - top:", anchors.top, "bottom:", anchors.bottom, "left:", anchors.left, "right:", anchors.right);
|
||||
Logger.d("BarExclusionZone", " Size:", width, "x", height, "implicitWidth:", implicitWidth, "implicitHeight:", implicitHeight);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ Item {
|
||||
property string icon: ""
|
||||
property string text: ""
|
||||
property string suffix: ""
|
||||
property string tooltipText: ""
|
||||
property var tooltipText: ""
|
||||
property bool autoHide: false
|
||||
property bool forceOpen: false
|
||||
property bool forceClose: false
|
||||
@@ -21,6 +21,8 @@ Item {
|
||||
property bool rotateText: false
|
||||
property color customBackgroundColor: "transparent"
|
||||
property color customTextIconColor: "transparent"
|
||||
property color customIconColor: "transparent"
|
||||
property color customTextColor: "transparent"
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
|
||||
@@ -34,13 +36,18 @@ Item {
|
||||
signal middleClicked
|
||||
signal wheel(int delta)
|
||||
|
||||
// Dynamic sizing based on loaded component
|
||||
width: pillLoader.item ? pillLoader.item.width : 0
|
||||
height: pillLoader.item ? pillLoader.item.height : 0
|
||||
// Size based on content for the content dimension, fill parent for the extended dimension
|
||||
// Horizontal bars: width = content, height = fill parent (for extended click area)
|
||||
// Vertical bars: width = fill parent, height = content
|
||||
width: isVerticalBar ? parent.width : (pillLoader.item ? pillLoader.item.implicitWidth : 0)
|
||||
height: isVerticalBar ? (pillLoader.item ? pillLoader.item.implicitHeight : 0) : parent.height
|
||||
implicitWidth: pillLoader.item ? pillLoader.item.implicitWidth : 0
|
||||
implicitHeight: pillLoader.item ? pillLoader.item.implicitHeight : 0
|
||||
|
||||
// Loader to switch between vertical and horizontal pill implementations
|
||||
// Loader fills BarPill so child components can extend to full bar dimension
|
||||
Loader {
|
||||
id: pillLoader
|
||||
anchors.fill: parent
|
||||
sourceComponent: isVerticalBar ? verticalPillComponent : horizontalPillComponent
|
||||
|
||||
Component {
|
||||
@@ -59,6 +66,8 @@ Item {
|
||||
rotateText: root.rotateText
|
||||
customBackgroundColor: root.customBackgroundColor
|
||||
customTextIconColor: root.customTextIconColor
|
||||
customIconColor: root.customIconColor
|
||||
customTextColor: root.customTextColor
|
||||
onShown: root.shown()
|
||||
onHidden: root.hidden()
|
||||
onEntered: root.entered()
|
||||
@@ -85,6 +94,8 @@ Item {
|
||||
hovered: root.hovered
|
||||
customBackgroundColor: root.customBackgroundColor
|
||||
customTextIconColor: root.customTextIconColor
|
||||
customIconColor: root.customIconColor
|
||||
customTextColor: root.customTextColor
|
||||
onShown: root.shown()
|
||||
onHidden: root.hidden()
|
||||
onEntered: root.entered()
|
||||
|
||||
@@ -13,7 +13,7 @@ Item {
|
||||
property string icon: ""
|
||||
property string text: ""
|
||||
property string suffix: ""
|
||||
property string tooltipText: ""
|
||||
property var tooltipText: ""
|
||||
property bool autoHide: false
|
||||
property bool forceOpen: false
|
||||
property bool forceClose: false
|
||||
@@ -21,6 +21,8 @@ Item {
|
||||
property bool hovered: false
|
||||
property color customBackgroundColor: "transparent"
|
||||
property color customTextIconColor: "transparent"
|
||||
property color customIconColor: "transparent"
|
||||
property color customTextColor: "transparent"
|
||||
|
||||
readonly property bool collapseToIcon: forceClose && !forceOpen
|
||||
|
||||
@@ -50,10 +52,13 @@ Item {
|
||||
// Always prioritize hover color, then the custom one and finally the fallback color
|
||||
readonly property color bgColor: hovered ? Color.mHover : (customBackgroundColor.a > 0) ? customBackgroundColor : Style.capsuleColor
|
||||
readonly property color fgColor: hovered ? Color.mOnHover : (customTextIconColor.a > 0) ? customTextIconColor : Color.mOnSurface
|
||||
readonly property color iconFgColor: hovered ? Color.mOnHover : (customIconColor.a > 0) ? customIconColor : (customTextIconColor.a > 0) ? customTextIconColor : Color.mOnSurface
|
||||
readonly property color textFgColor: hovered ? Color.mOnHover : (customTextColor.a > 0) ? customTextColor : (customTextIconColor.a > 0) ? customTextIconColor : Color.mOnSurface
|
||||
|
||||
readonly property real iconSize: Style.toOdd(pillHeight * 0.48)
|
||||
|
||||
width: {
|
||||
// Content width calculation (for implicit sizing)
|
||||
readonly property real contentWidth: {
|
||||
if (collapseToIcon) {
|
||||
return hasIcon ? pillHeight : 0;
|
||||
}
|
||||
@@ -61,7 +66,12 @@ Item {
|
||||
var baseWidth = hasIcon ? pillHeight : 0;
|
||||
return baseWidth + Math.max(0, pill.width - overlap);
|
||||
}
|
||||
height: pillHeight
|
||||
|
||||
// Fill parent to extend click area to full bar height
|
||||
// Visual content is centered vertically within
|
||||
anchors.fill: parent
|
||||
implicitWidth: contentWidth
|
||||
implicitHeight: pillHeight
|
||||
|
||||
Connections {
|
||||
target: root
|
||||
@@ -133,7 +143,7 @@ Item {
|
||||
family: Settings.data.ui.fontFixed
|
||||
pointSize: root.barFontSize
|
||||
applyUiScale: false
|
||||
color: root.fgColor
|
||||
color: root.textFgColor
|
||||
visible: revealed
|
||||
}
|
||||
|
||||
@@ -167,7 +177,7 @@ Item {
|
||||
icon: root.icon
|
||||
pointSize: iconSize
|
||||
applyUiScale: false
|
||||
color: root.fgColor
|
||||
color: root.iconFgColor
|
||||
// Center horizontally
|
||||
x: (iconCircle.width - width) / 2
|
||||
// Center vertically accounting for font metrics
|
||||
@@ -276,15 +286,15 @@ Item {
|
||||
}
|
||||
TooltipService.hide();
|
||||
}
|
||||
onClicked: function (mouse) {
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
root.clicked();
|
||||
} else if (mouse.button === Qt.RightButton) {
|
||||
root.rightClicked();
|
||||
} else if (mouse.button === Qt.MiddleButton) {
|
||||
root.middleClicked();
|
||||
}
|
||||
}
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
root.clicked();
|
||||
} else if (mouse.button === Qt.RightButton) {
|
||||
root.rightClicked();
|
||||
} else if (mouse.button === Qt.MiddleButton) {
|
||||
root.middleClicked();
|
||||
}
|
||||
}
|
||||
onWheel: wheel => root.wheel(wheel.angleDelta.y)
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ Item {
|
||||
property string icon: ""
|
||||
property string text: ""
|
||||
property string suffix: ""
|
||||
property string tooltipText: ""
|
||||
property var tooltipText: ""
|
||||
property bool autoHide: false
|
||||
property bool forceOpen: false
|
||||
property bool forceClose: false
|
||||
@@ -22,6 +22,8 @@ Item {
|
||||
property bool rotateText: false
|
||||
property color customBackgroundColor: "transparent"
|
||||
property color customTextIconColor: "transparent"
|
||||
property color customIconColor: "transparent"
|
||||
property color customTextColor: "transparent"
|
||||
|
||||
readonly property bool collapseToIcon: forceClose && !forceOpen
|
||||
|
||||
@@ -57,24 +59,30 @@ Item {
|
||||
// Always prioritize hover color, then the custom one and finally the fallback color
|
||||
readonly property color bgColor: hovered ? Color.mHover : (customBackgroundColor.a > 0) ? customBackgroundColor : Style.capsuleColor
|
||||
readonly property color fgColor: hovered ? Color.mOnHover : (customTextIconColor.a > 0) ? customTextIconColor : Color.mOnSurface
|
||||
readonly property color iconFgColor: hovered ? Color.mOnHover : (customIconColor.a > 0) ? customIconColor : (customTextIconColor.a > 0) ? customTextIconColor : Color.mOnSurface
|
||||
readonly property color textFgColor: hovered ? Color.mOnHover : (customTextColor.a > 0) ? customTextColor : (customTextIconColor.a > 0) ? customTextIconColor : Color.mOnSurface
|
||||
|
||||
readonly property real iconSize: Style.toOdd(pillHeight * 0.48)
|
||||
|
||||
// For vertical bars: width is just icon size, height includes pill space
|
||||
width: buttonSize
|
||||
height: {
|
||||
// Content height calculation (for implicit sizing)
|
||||
readonly property real contentHeight: {
|
||||
if (collapseToIcon) {
|
||||
return hasIcon ? buttonSize : 0;
|
||||
}
|
||||
if (revealed) {
|
||||
var overlap = hasIcon ? pillOverlap : 0;
|
||||
var baseHeight = hasIcon ? buttonSize : 0;
|
||||
return baseHeight + Math.max(0, maxPillHeight - overlap);
|
||||
}
|
||||
// Fallback to buttonSize in idle state to remain clickable
|
||||
return buttonSize;
|
||||
var overlap = hasIcon ? pillOverlap : 0;
|
||||
var baseHeight = hasIcon ? buttonSize : 0;
|
||||
return baseHeight + Math.max(0, pill.height - overlap);
|
||||
}
|
||||
|
||||
// Fill parent width to extend horizontal click area
|
||||
// Keep content-based height for visual layout
|
||||
anchors.left: parent ? parent.left : undefined
|
||||
anchors.right: parent ? parent.right : undefined
|
||||
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
|
||||
height: contentHeight
|
||||
implicitWidth: buttonSize
|
||||
implicitHeight: contentHeight
|
||||
|
||||
Connections {
|
||||
target: root
|
||||
function onTooltipTextChanged() {
|
||||
@@ -88,7 +96,7 @@ Item {
|
||||
Rectangle {
|
||||
id: pillBackground
|
||||
width: buttonSize
|
||||
height: root.height
|
||||
height: root.contentHeight
|
||||
radius: Style.radiusM
|
||||
color: root.bgColor
|
||||
border.color: Style.capsuleBorderColor
|
||||
@@ -143,7 +151,7 @@ Item {
|
||||
applyUiScale: false
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
color: root.fgColor
|
||||
color: root.textFgColor
|
||||
visible: revealed
|
||||
|
||||
function getVerticalCenterOffset() {
|
||||
@@ -183,14 +191,14 @@ Item {
|
||||
|
||||
// Icon positioning based on direction
|
||||
x: 0
|
||||
y: openUpward ? (parent.height - height) : 0
|
||||
y: openUpward ? (root.contentHeight - height) : 0
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
NIcon {
|
||||
icon: root.icon
|
||||
pointSize: iconSize
|
||||
applyUiScale: false
|
||||
color: root.fgColor
|
||||
color: root.iconFgColor
|
||||
// Center horizontally
|
||||
x: (iconCircle.width - width) / 2
|
||||
// Center vertically accounting for font metrics
|
||||
@@ -315,15 +323,15 @@ Item {
|
||||
}
|
||||
TooltipService.hide();
|
||||
}
|
||||
onClicked: function (mouse) {
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
root.clicked();
|
||||
} else if (mouse.button === Qt.RightButton) {
|
||||
root.rightClicked();
|
||||
} else if (mouse.button === Qt.MiddleButton) {
|
||||
root.middleClicked();
|
||||
}
|
||||
}
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
root.clicked();
|
||||
} else if (mouse.button === Qt.RightButton) {
|
||||
root.rightClicked();
|
||||
} else if (mouse.button === Qt.MiddleButton) {
|
||||
root.middleClicked();
|
||||
}
|
||||
}
|
||||
onWheel: wheel => root.wheel(wheel.angleDelta.y)
|
||||
}
|
||||
|
||||
|
||||
@@ -15,9 +15,30 @@ Item {
|
||||
readonly property string section: widgetProps ? (widgetProps.section || "") : ""
|
||||
readonly property int sectionIndex: widgetProps ? (widgetProps.sectionWidgetIndex || 0) : 0
|
||||
|
||||
// Don't reserve space unless the loaded widget is really visible
|
||||
implicitWidth: getImplicitSize(loader.item, "implicitWidth")
|
||||
implicitHeight: getImplicitSize(loader.item, "implicitHeight")
|
||||
// Store registration key at registration time so unregistration always uses the correct key,
|
||||
// even if binding properties (section, sectionIndex) have changed by destruction time
|
||||
property string _regScreen: ""
|
||||
property string _regSection: ""
|
||||
property string _regWidgetId: ""
|
||||
property int _regIndex: -1
|
||||
|
||||
function _unregister() {
|
||||
if (_regScreen !== "") {
|
||||
BarService.unregisterWidget(_regScreen, _regSection, _regWidgetId, _regIndex);
|
||||
_regScreen = "";
|
||||
}
|
||||
}
|
||||
|
||||
// Bar orientation and height for extended click areas
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(widgetScreen?.name)
|
||||
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(widgetScreen?.name)
|
||||
|
||||
// Request full bar dimension from layout to extend click areas above/below widgets
|
||||
// For horizontal bars: full bar height, widget's content width
|
||||
// For vertical bars: full bar width, widget's content height
|
||||
implicitWidth: isVerticalBar ? barHeight : getImplicitSize(loader.item, "implicitWidth")
|
||||
implicitHeight: isVerticalBar ? getImplicitSize(loader.item, "implicitHeight") : barHeight
|
||||
|
||||
// Remove layout space left by hidden widgets
|
||||
visible: loader.item ? ((loader.item.opacity > 0.0) || (loader.item.hasOwnProperty("hideMode") && loader.item.hideMode === "transparent")) : false
|
||||
@@ -60,12 +81,32 @@ Item {
|
||||
return root.checkWidgetExists() ? BarWidgetRegistry.getWidget(root.widgetId) : null;
|
||||
}
|
||||
|
||||
// Unregister when the loaded item is destroyed (Loader deactivated or sourceComponent changed)
|
||||
onItemChanged: {
|
||||
if (!item) {
|
||||
root._unregister();
|
||||
}
|
||||
}
|
||||
|
||||
onLoaded: {
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
Logger.d("BarWidgetLoader", "Loading widget", widgetId, "on screen:", widgetScreen.name);
|
||||
|
||||
// Extend widget to fill full bar dimension for extended click areas
|
||||
// For horizontal bars: widget fills bar height (content width preserved)
|
||||
// For vertical bars: widget fills bar width (content height preserved)
|
||||
if (root.isVerticalBar) {
|
||||
item.width = Qt.binding(function () {
|
||||
return root.barHeight;
|
||||
});
|
||||
} else {
|
||||
item.height = Qt.binding(function () {
|
||||
return root.barHeight;
|
||||
});
|
||||
}
|
||||
|
||||
// Apply properties to loaded widget
|
||||
for (var prop in widgetProps) {
|
||||
if (item.hasOwnProperty(prop)) {
|
||||
@@ -89,8 +130,15 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
// Register this widget instance with BarService
|
||||
// Unregister any previous registration before registering the new instance
|
||||
root._unregister();
|
||||
|
||||
// Register and store the key for reliable unregistration
|
||||
BarService.registerWidget(widgetScreen.name, section, widgetId, sectionIndex, item);
|
||||
root._regScreen = widgetScreen.name;
|
||||
root._regSection = section;
|
||||
root._regWidgetId = widgetId;
|
||||
root._regIndex = sectionIndex;
|
||||
|
||||
// Call custom onLoaded if it exists
|
||||
if (item.hasOwnProperty("onLoaded")) {
|
||||
@@ -99,10 +147,7 @@ Item {
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
// Unregister when destroyed
|
||||
if (widgetScreen && section) {
|
||||
BarService.unregisterWidget(widgetScreen.name, section, widgetId, sectionIndex);
|
||||
}
|
||||
root._unregister();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+146
-45
@@ -47,6 +47,16 @@ PopupWindow {
|
||||
|
||||
// Use the content height of the Flickable for implicit height
|
||||
implicitHeight: Math.min(screen?.height * 0.9, flickable.contentHeight + (Style.marginS * 2))
|
||||
|
||||
// When implicitHeight changes (menu content loads), force anchor recalculation
|
||||
onImplicitHeightChanged: {
|
||||
if (visible && anchorItem) {
|
||||
Qt.callLater(() => {
|
||||
anchor.updateAnchor();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
visible: false
|
||||
color: "transparent"
|
||||
anchor.item: anchorItem
|
||||
@@ -63,21 +73,25 @@ PopupWindow {
|
||||
menuScreenX = windowXOnScreen + posInPopup.x + baseX;
|
||||
} else {
|
||||
const anchorGlobalPos = anchorItem.mapToItem(null, 0, 0);
|
||||
menuScreenX = anchorGlobalPos.x + baseX;
|
||||
const anchorScreenX = anchorGlobalPos.x;
|
||||
menuScreenX = anchorScreenX + baseX;
|
||||
}
|
||||
|
||||
const menuRight = menuScreenX + implicitWidth;
|
||||
const screenRight = screen.width;
|
||||
const menuLeft = menuScreenX;
|
||||
|
||||
// Adjust if menu would clip on the right
|
||||
if (menuRight > screenRight) {
|
||||
// Only adjust if menu would clip off screen boundaries
|
||||
// Don't adjust if the positioning is intentional (e.g., negative offset for right bar)
|
||||
if (menuRight > screenRight && menuLeft < screenRight) {
|
||||
// Clipping on right edge - shift left
|
||||
const overflow = menuRight - screenRight;
|
||||
return baseX - overflow - Style.marginM;
|
||||
}
|
||||
// Adjust if menu would clip on the left
|
||||
if (menuScreenX < 0) {
|
||||
return baseX - menuScreenX + Style.marginM;
|
||||
return baseX - overflow - Style.marginS;
|
||||
} else if (menuLeft < 0 && menuRight > 0) {
|
||||
// Clipping on left edge - shift right
|
||||
return baseX - menuLeft + Style.marginS;
|
||||
}
|
||||
|
||||
return baseX;
|
||||
}
|
||||
return anchorX;
|
||||
@@ -86,52 +100,60 @@ PopupWindow {
|
||||
if (anchorItem && screen) {
|
||||
const barPosition = Settings.getBarPositionForScreen(root.screen?.name);
|
||||
|
||||
// Calculate base Y offset (relative to anchor item)
|
||||
let baseY = anchorY;
|
||||
if (!isSubMenu && barPosition === "bottom") {
|
||||
// For bottom bar, position menu above the anchor with margin (adjusted to match widget menu positioning)
|
||||
baseY = -(implicitHeight + Style.marginL + 2);
|
||||
|
||||
// Only apply bottom bar special positioning if:
|
||||
// 1. Not a submenu
|
||||
// 2. Bar is at bottom
|
||||
// 3. anchorY is not already negative (if negative, it's pre-calculated from drawer)
|
||||
const shouldApplyBottomBarLogic = !isSubMenu && barPosition === "bottom" && anchorY >= 0;
|
||||
|
||||
if (shouldApplyBottomBarLogic) {
|
||||
// For bottom bar from the bar itself, position menu above the anchor with margin
|
||||
baseY = -(implicitHeight + Style.marginS);
|
||||
} else if (barPosition === "top" && !isSubMenu && anchorY >= 0) {
|
||||
// For top bar: position menu below bar with margin
|
||||
const barHeight = Style.getBarHeightForScreen(root.screen?.name);
|
||||
baseY = barHeight + Style.marginS;
|
||||
}
|
||||
|
||||
// Calculate position relative to current screen (not global coordinates)
|
||||
let menuScreenY;
|
||||
if (isSubMenu && anchorItem.Window && anchorItem.Window.window) {
|
||||
// Submenu: anchor is inside parent PopupWindow
|
||||
const posInPopup = anchorItem.mapToItem(null, 0, 0);
|
||||
const parentWindow = anchorItem.Window.window;
|
||||
// Convert global window Y to screen-relative Y by subtracting screen offset
|
||||
const windowYOnScreen = parentWindow.y - screen.y;
|
||||
menuScreenY = windowYOnScreen + posInPopup.y + baseY;
|
||||
} else if (!isSubMenu && barPosition === "bottom") {
|
||||
// Bottom bar main menu: subtract baseY to position above anchor
|
||||
const anchorGlobalPos = anchorItem.mapToItem(null, 0, 0);
|
||||
menuScreenY = anchorGlobalPos.y - baseY;
|
||||
} else {
|
||||
// Main menu for other positions: add baseY
|
||||
const anchorGlobalPos = anchorItem.mapToItem(null, 0, 0);
|
||||
menuScreenY = anchorGlobalPos.y + baseY;
|
||||
// Use a robust way to get screen coordinates
|
||||
const posInWindow = anchorItem.mapToItem(null, 0, 0);
|
||||
const parentWindow = anchorItem.Window.window;
|
||||
|
||||
// Calculate screen-relative Y of the window
|
||||
let windowYOnScreen = (parentWindow && screen) ? (parentWindow.y - screen.y) : 0;
|
||||
|
||||
// If window reported 0 but bar is at bottom, assume it's at screen bottom
|
||||
if (windowYOnScreen === 0 && barPosition === "bottom" && screen) {
|
||||
windowYOnScreen = screen.height - (parentWindow ? parentWindow.height : Style.getBarHeightForScreen(screen.name));
|
||||
}
|
||||
|
||||
const menuBottom = menuScreenY + implicitHeight;
|
||||
const screenBottom = screen.height;
|
||||
// Calculate the screen Y of the menu top
|
||||
// Use a small guess for height if implicitHeight is 0 to avoid covering the bar on the first frame
|
||||
const effectiveHeight = implicitHeight > 0 ? implicitHeight : 200;
|
||||
const effectiveBaseY = shouldApplyBottomBarLogic ? -(effectiveHeight + Style.marginS) : baseY;
|
||||
|
||||
// Adjust baseY if menu would clip
|
||||
if (menuBottom > screenBottom) {
|
||||
// Clip at bottom - shift up by the overflow amount
|
||||
const overflow = menuBottom - screenBottom;
|
||||
if (!isSubMenu && barPosition === "bottom") {
|
||||
return baseY + overflow + Style.marginM;
|
||||
}
|
||||
return baseY - overflow - Style.marginM;
|
||||
const menuScreenY = windowYOnScreen + posInWindow.y + effectiveBaseY;
|
||||
const menuBottom = menuScreenY + (implicitHeight > 0 ? implicitHeight : effectiveHeight);
|
||||
const screenHeight = screen ? screen.height : 1080;
|
||||
|
||||
// Adjust the final baseY (the actual value returned to anchor.rect.y)
|
||||
let finalBaseY = shouldApplyBottomBarLogic ? -(implicitHeight + Style.marginS) : baseY;
|
||||
|
||||
// Adjust if menu would clip off the bottom
|
||||
if (menuBottom > screenHeight) {
|
||||
const overflow = menuBottom - screenHeight;
|
||||
finalBaseY -= (overflow + Style.marginS);
|
||||
}
|
||||
|
||||
// Adjust if menu would clip off the top
|
||||
// menuScreenY < 0 means it's above the screen edge
|
||||
if (menuScreenY < 0) {
|
||||
// Clip at top - shift down
|
||||
if (!isSubMenu && barPosition === "bottom") {
|
||||
return baseY + menuScreenY - Style.marginM;
|
||||
}
|
||||
return baseY - menuScreenY + Style.marginM;
|
||||
finalBaseY -= (menuScreenY - Style.marginS);
|
||||
}
|
||||
return baseY;
|
||||
|
||||
return finalBaseY;
|
||||
}
|
||||
|
||||
// Fallback if no anchor/screen
|
||||
@@ -271,6 +293,85 @@ PopupWindow {
|
||||
anchors.rightMargin: Style.marginM
|
||||
spacing: Style.marginS
|
||||
|
||||
// Indicator Container
|
||||
Item {
|
||||
visible: (modelData?.buttonType ?? QsMenuButtonType.None) !== QsMenuButtonType.None
|
||||
|
||||
implicitWidth: Math.round(Style.baseWidgetSize * 0.5)
|
||||
implicitHeight: Math.round(Style.baseWidgetSize * 0.5)
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
// Helper properties
|
||||
readonly property int type: modelData?.buttonType ?? QsMenuButtonType.None
|
||||
readonly property bool isRadio: type === QsMenuButtonType.RadioButton
|
||||
readonly property bool isChecked: modelData?.checkState === Qt.Checked || (modelData?.checked ?? false)
|
||||
|
||||
// Color Logic
|
||||
readonly property color activeColor: mouseArea.containsMouse ? Color.mOnHover : Color.mPrimary
|
||||
readonly property color checkMarkColor: mouseArea.containsMouse ? Color.mHover : Color.mOnPrimary
|
||||
readonly property color borderColor: isChecked ? activeColor : (mouseArea.containsMouse ? Color.mOnHover : Color.mOnSurface)
|
||||
|
||||
// Checkbox Visuals
|
||||
Rectangle {
|
||||
visible: !parent.isRadio
|
||||
anchors.centerIn: parent
|
||||
width: Math.round(Style.baseWidgetSize * 0.5)
|
||||
height: Math.round(Style.baseWidgetSize * 0.5)
|
||||
radius: Style.iRadiusXS
|
||||
color: "transparent" // Transparent to match RadioButton style
|
||||
border.color: parent.borderColor
|
||||
border.width: Style.borderM
|
||||
|
||||
Behavior on border.color {
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
}
|
||||
}
|
||||
|
||||
NIcon {
|
||||
visible: parent.parent.isChecked
|
||||
anchors.centerIn: parent
|
||||
anchors.horizontalCenterOffset: -1
|
||||
icon: "check"
|
||||
color: parent.parent.activeColor
|
||||
pointSize: Math.max(Style.fontSizeXXS, parent.width * 0.6)
|
||||
}
|
||||
}
|
||||
|
||||
// RadioButton Visuals
|
||||
Rectangle {
|
||||
visible: parent.isRadio
|
||||
anchors.centerIn: parent
|
||||
width: Style.toOdd(Style.baseWidgetSize * 0.5)
|
||||
height: Style.toOdd(Style.baseWidgetSize * 0.5)
|
||||
radius: width / 2
|
||||
color: "transparent"
|
||||
border.color: parent.borderColor
|
||||
border.width: Style.borderM // Slightly thicker for radio look
|
||||
|
||||
Behavior on border.color {
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
visible: parent.parent.isChecked
|
||||
anchors.centerIn: parent
|
||||
width: Style.toOdd(parent.width * 0.5)
|
||||
height: Style.toOdd(parent.height * 0.5)
|
||||
radius: width / 2
|
||||
color: parent.parent.activeColor
|
||||
|
||||
Behavior on color {
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NText {
|
||||
id: text
|
||||
Layout.fillWidth: true
|
||||
|
||||
@@ -0,0 +1,244 @@
|
||||
import QtQuick
|
||||
import qs.Commons
|
||||
import qs.Services.Compositor
|
||||
import qs.Widgets
|
||||
|
||||
Item {
|
||||
id: pillContainer
|
||||
|
||||
required property var workspace
|
||||
required property bool isVertical
|
||||
|
||||
// These must be provided by the parent Workspace widget
|
||||
required property real baseDimensionRatio
|
||||
required property real capsuleHeight
|
||||
required property real barHeight
|
||||
required property string labelMode
|
||||
required property int characterCount
|
||||
required property real textRatio
|
||||
required property bool showLabelsOnlyWhenOccupied
|
||||
required property string focusedColor
|
||||
required property string occupiedColor
|
||||
required property string emptyColor
|
||||
required property real masterProgress
|
||||
required property bool effectsActive
|
||||
required property color effectColor
|
||||
required property var getWorkspaceWidth
|
||||
required property var getWorkspaceHeight
|
||||
|
||||
// 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
|
||||
|
||||
// Container uses full barHeight on cross-axis for larger click area
|
||||
width: isVertical ? barHeight : getWorkspaceWidth(workspace, false)
|
||||
height: isVertical ? getWorkspaceHeight(workspace, false) : barHeight
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "active"
|
||||
when: workspace.isActive
|
||||
PropertyChanges {
|
||||
target: pillContainer
|
||||
width: isVertical ? barHeight : getWorkspaceWidth(workspace, true)
|
||||
height: isVertical ? getWorkspaceHeight(workspace, true) : barHeight
|
||||
pillWidth: isVertical ? fixedDimension : getWorkspaceWidth(workspace, true)
|
||||
pillHeight: isVertical ? getWorkspaceHeight(workspace, true) : fixedDimension
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
transitions: [
|
||||
Transition {
|
||||
from: "inactive"
|
||||
to: "active"
|
||||
NumberAnimation {
|
||||
properties: isVertical ? "height,pillHeight" : "width,pillWidth"
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
},
|
||||
Transition {
|
||||
from: "active"
|
||||
to: "inactive"
|
||||
NumberAnimation {
|
||||
properties: isVertical ? "height,pillHeight" : "width,pillWidth"
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Rectangle {
|
||||
id: pill
|
||||
width: pillContainer.pillWidth
|
||||
height: pillContainer.pillHeight
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, height)
|
||||
radius: Style.radiusM
|
||||
z: 0
|
||||
|
||||
color: {
|
||||
if (pillMouseArea.containsMouse)
|
||||
return Color.mHover;
|
||||
if (workspace.isFocused)
|
||||
return getColorPair(focusedColor)[0];
|
||||
if (workspace.isUrgent)
|
||||
return Color.mError;
|
||||
if (workspace.isOccupied)
|
||||
return getColorPair(occupiedColor)[0];
|
||||
return Qt.alpha(getColorPair(emptyColor)[0], 0.3);
|
||||
}
|
||||
|
||||
Loader {
|
||||
active: (labelMode !== "none") && (!showLabelsOnlyWhenOccupied || workspace.isOccupied || workspace.isFocused)
|
||||
anchors.fill: parent
|
||||
sourceComponent: Component {
|
||||
NText {
|
||||
text: {
|
||||
if (workspace.name && workspace.name.length > 0) {
|
||||
if (labelMode === "name") {
|
||||
return workspace.name.substring(0, characterCount);
|
||||
}
|
||||
if (labelMode === "index+name") {
|
||||
// Vertical mode: compact format (no space, first char only)
|
||||
// Horizontal mode: full format (space, more chars)
|
||||
if (isVertical) {
|
||||
return workspace.idx.toString() + workspace.name.substring(0, 1);
|
||||
}
|
||||
return workspace.idx.toString() + " " + workspace.name.substring(0, characterCount);
|
||||
}
|
||||
}
|
||||
return workspace.idx.toString();
|
||||
}
|
||||
family: Settings.data.ui.fontFixed
|
||||
// Size based on the fixed dimension (cross-axis) of the visual pill
|
||||
pointSize: (isVertical ? pillContainer.pillWidth : pillContainer.pillHeight) * textRatio
|
||||
applyUiScale: false
|
||||
font.capitalization: Font.AllUppercase
|
||||
font.weight: Style.fontWeightBold
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.Wrap
|
||||
color: {
|
||||
if (pillMouseArea.containsMouse)
|
||||
return Color.mOnHover;
|
||||
if (workspace.isFocused)
|
||||
return getColorPair(focusedColor)[1];
|
||||
if (workspace.isUrgent)
|
||||
return Color.mOnError;
|
||||
if (workspace.isOccupied)
|
||||
return getColorPair(occupiedColor)[1];
|
||||
return getColorPair(emptyColor)[1];
|
||||
}
|
||||
|
||||
Behavior on color {
|
||||
enabled: !Color.isTransitioning
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Material 3-inspired smooth animations
|
||||
Behavior on scale {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
Behavior on color {
|
||||
enabled: !Color.isTransitioning
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.InOutCubic
|
||||
}
|
||||
}
|
||||
Behavior on radius {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on width {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
Behavior on height {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
Behavior on pillWidth {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
Behavior on pillHeight {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
|
||||
// Full-height click area
|
||||
MouseArea {
|
||||
id: pillMouseArea
|
||||
anchors.fill: parent
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
hoverEnabled: true
|
||||
onClicked: {
|
||||
CompositorService.switchToWorkspace(workspace);
|
||||
}
|
||||
}
|
||||
|
||||
// Burst effect overlay for focused pill
|
||||
Rectangle {
|
||||
id: pillBurst
|
||||
anchors.centerIn: pill
|
||||
width: pillContainer.pillWidth + 18 * masterProgress * scale
|
||||
height: pillContainer.pillHeight + 18 * masterProgress * scale
|
||||
radius: width / 2
|
||||
color: "transparent"
|
||||
border.color: effectColor
|
||||
border.width: Math.max(1, Math.round((2 + 6 * (1.0 - masterProgress))))
|
||||
opacity: effectsActive && workspace.isFocused ? (1.0 - masterProgress) * 0.7 : 0
|
||||
visible: effectsActive && workspace.isFocused
|
||||
z: 1
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,10 @@ import qs.Widgets
|
||||
|
||||
Item {
|
||||
id: root
|
||||
Layout.preferredHeight: isVerticalBar ? -1 : Style.getBarHeightForScreen(screenName)
|
||||
Layout.preferredWidth: isVerticalBar ? Style.getBarHeightForScreen(screenName) : -1
|
||||
Layout.fillHeight: false
|
||||
Layout.fillWidth: false
|
||||
|
||||
property ShellScreen screen
|
||||
|
||||
@@ -22,9 +26,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length && widgets[sectionWidgetIndex]) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -40,11 +46,14 @@ Item {
|
||||
// Maximum widget width with user settings support
|
||||
readonly property real maxWidth: (widgetSettings.maxWidth !== undefined) ? widgetSettings.maxWidth : Math.max(widgetMetadata.maxWidth || 0, screen ? screen.width * 0.06 : 0)
|
||||
readonly property bool useFixedWidth: (widgetSettings.useFixedWidth !== undefined) ? widgetSettings.useFixedWidth : (widgetMetadata.useFixedWidth || false)
|
||||
readonly property string textColorKey: (widgetSettings.textColor !== undefined) ? widgetSettings.textColor : widgetMetadata.textColor
|
||||
readonly property color textColor: Color.resolveColorKey(textColorKey)
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screen?.name)
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(screenName)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screenName)
|
||||
readonly property bool hasFocusedWindow: CompositorService.getFocusedWindow() !== null
|
||||
readonly property string windowTitle: CompositorService.getFocusedWindowTitle() || "No active window"
|
||||
readonly property string fallbackIcon: "user-desktop"
|
||||
@@ -52,9 +61,9 @@ Item {
|
||||
readonly property int iconSize: Style.toOdd(capsuleHeight * 0.75)
|
||||
readonly property int verticalSize: Style.toOdd(capsuleHeight * 0.85)
|
||||
|
||||
// For horizontal bars, height is always capsuleHeight (no animation needed)
|
||||
// For horizontal bars, height is always barHeight (no animation needed)
|
||||
// For vertical bars, collapse to 0 when hidden
|
||||
implicitHeight: isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : capsuleHeight
|
||||
implicitHeight: isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : barHeight
|
||||
implicitWidth: isVerticalBar ? (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : verticalSize) : (((!hasFocusedWindow) && hideMode === "hidden") ? 0 : dynamicWidth)
|
||||
|
||||
// "visible": Always Visible, "hidden": Hide When Empty, "transparent": Transparent When Empty
|
||||
@@ -173,10 +182,8 @@ Item {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
@@ -263,12 +270,17 @@ Item {
|
||||
return NScrollText.ScrollMode.Hover;
|
||||
return NScrollText.ScrollMode.Never;
|
||||
}
|
||||
forcedHover: mainMouseArea.containsMouse
|
||||
gradientColor: Style.capsuleColor
|
||||
gradientWidth: Math.round(8 * Style.uiScaleRatio)
|
||||
cornerRadius: Style.radiusM
|
||||
|
||||
NText {
|
||||
text: windowTitle
|
||||
pointSize: barFontSize
|
||||
applyUiScale: false
|
||||
font.weight: Style.fontWeightMedium
|
||||
color: Color.mOnSurface
|
||||
color: root.textColor
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -312,32 +324,37 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
// Mouse area for hover detection
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
onEntered: {
|
||||
if ((windowTitle !== "") && isVerticalBar || (scrollingMode === "never")) {
|
||||
TooltipService.show(root, windowTitle, BarService.getTooltipDirection(root.screen?.name));
|
||||
}
|
||||
}
|
||||
onExited: {
|
||||
TooltipService.hide();
|
||||
}
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Mouse area moved to root
|
||||
}
|
||||
}
|
||||
|
||||
// Mouse area for hover detection
|
||||
MouseArea {
|
||||
id: mainMouseArea
|
||||
anchors.fill: parent
|
||||
|
||||
// Extend click area to screen edge if widget is at the start/end
|
||||
anchors.leftMargin: (!isVerticalBar && section === "left" && sectionWidgetIndex === 0) ? -Style.marginS : 0
|
||||
anchors.rightMargin: (!isVerticalBar && section === "right" && sectionWidgetIndex === sectionWidgetsCount - 1) ? -Style.marginS : 0
|
||||
anchors.topMargin: (isVerticalBar && section === "left" && sectionWidgetIndex === 0) ? -Style.marginM : 0
|
||||
anchors.bottomMargin: (isVerticalBar && section === "right" && sectionWidgetIndex === sectionWidgetsCount - 1) ? -Style.marginM : 0
|
||||
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
onEntered: {
|
||||
if ((windowTitle !== "") && isVerticalBar || (scrollingMode === "never")) {
|
||||
TooltipService.show(root, windowTitle, BarService.getTooltipDirection(root.screen?.name));
|
||||
}
|
||||
}
|
||||
onExited: {
|
||||
TooltipService.hide();
|
||||
}
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
|
||||
@@ -19,14 +19,16 @@ Item {
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
// Explicit screenName property ensures reactive binding when screen changes
|
||||
readonly property string screenName: screen ? screen.name : ""
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||
|
||||
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
|
||||
property var widgetSettings: {
|
||||
if (section && sectionWidgetIndex >= 0) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -49,7 +51,6 @@ Item {
|
||||
return Color.mTertiary;
|
||||
case "error":
|
||||
return Color.mError;
|
||||
case "onSurface":
|
||||
default:
|
||||
return Color.mOnSurface;
|
||||
}
|
||||
@@ -74,8 +75,12 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
implicitWidth: !shouldShow ? 0 : isVerticalBar ? capsuleHeight : visualizerWidth
|
||||
implicitHeight: !shouldShow ? 0 : isVerticalBar ? visualizerWidth : capsuleHeight
|
||||
// Content dimensions for implicit sizing
|
||||
readonly property real contentWidth: !shouldShow ? 0 : isVerticalBar ? capsuleHeight : visualizerWidth
|
||||
readonly property real contentHeight: !shouldShow ? 0 : isVerticalBar ? visualizerWidth : capsuleHeight
|
||||
|
||||
implicitWidth: contentWidth
|
||||
implicitHeight: contentHeight
|
||||
visible: shouldShow
|
||||
opacity: shouldShow ? 1.0 : 0.0
|
||||
|
||||
@@ -92,37 +97,40 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
// Store visualizer type to force re-evaluation
|
||||
readonly property string currentVisualizerType: Settings.data.audio.visualizerType
|
||||
|
||||
// Visual capsule centered in parent
|
||||
Rectangle {
|
||||
id: background
|
||||
anchors.fill: parent
|
||||
width: root.contentWidth
|
||||
height: root.contentHeight
|
||||
anchors.centerIn: parent
|
||||
radius: Style.radiusS
|
||||
color: Style.capsuleColor
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
}
|
||||
|
||||
// Store visualizer type to force re-evaluation
|
||||
readonly property string currentVisualizerType: Settings.data.audio.visualizerType
|
||||
// When visualizer type or playback changes, shouldShow updates automatically
|
||||
// The Loader dynamically loads the appropriate visualizer based on settings
|
||||
Loader {
|
||||
id: visualizerLoader
|
||||
anchors.fill: parent
|
||||
anchors.margins: Style.marginS
|
||||
active: shouldShow
|
||||
asynchronous: true
|
||||
|
||||
// When visualizer type or playback changes, shouldShow updates automatically
|
||||
// The Loader dynamically loads the appropriate visualizer based on settings
|
||||
Loader {
|
||||
id: visualizerLoader
|
||||
anchors.fill: parent
|
||||
anchors.margins: Style.marginS
|
||||
active: shouldShow
|
||||
asynchronous: true
|
||||
|
||||
sourceComponent: {
|
||||
switch (currentVisualizerType) {
|
||||
case "linear":
|
||||
return linearComponent;
|
||||
case "mirrored":
|
||||
return mirroredComponent;
|
||||
case "wave":
|
||||
return waveComponent;
|
||||
default:
|
||||
return null;
|
||||
sourceComponent: {
|
||||
switch (currentVisualizerType) {
|
||||
case "linear":
|
||||
return linearComponent;
|
||||
case "mirrored":
|
||||
return mirroredComponent;
|
||||
case "wave":
|
||||
return waveComponent;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -144,10 +152,8 @@ Item {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "cycle-visualizer") {
|
||||
const types = ["linear", "mirrored", "wave"];
|
||||
@@ -170,11 +176,7 @@ Item {
|
||||
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
} else {
|
||||
const types = ["linear", "mirrored", "wave"];
|
||||
const currentIndex = types.indexOf(currentVisualizerType);
|
||||
|
||||
+193
-193
@@ -22,9 +22,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -32,148 +34,96 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||
|
||||
readonly property string displayMode: widgetSettings.displayMode !== undefined ? widgetSettings.displayMode : widgetMetadata.displayMode
|
||||
readonly property real warningThreshold: widgetSettings.warningThreshold !== undefined ? widgetSettings.warningThreshold : widgetMetadata.warningThreshold
|
||||
readonly property bool useGraphicMode: displayMode === "graphic" || displayMode === "graphic-clean"
|
||||
|
||||
readonly property bool hideIfNotDetected: widgetSettings.hideIfNotDetected !== undefined ? widgetSettings.hideIfNotDetected : widgetMetadata.hideIfNotDetected
|
||||
readonly property bool hideIfIdle: widgetSettings.hideIfIdle !== undefined ? widgetSettings.hideIfIdle : widgetMetadata.hideIfIdle
|
||||
// Only show low battery warning if device is ready (prevents false positive during initialization)
|
||||
readonly property bool isLowBattery: isReady && (!isCharging && !isPluggedIn) && percent <= warningThreshold
|
||||
|
||||
// Visibility: show if hideIfNotDetected is false, or if battery is ready (after initialization)
|
||||
readonly property bool shouldShow: !hideIfNotDetected || (isReady && (hideIfIdle ? (!isCharging && !isPluggedIn) : true))
|
||||
// Check if selected device is actually present/connected
|
||||
readonly property bool isReady: BatteryService.isDeviceReady(selectedDevice)
|
||||
readonly property bool isPresent: BatteryService.isDevicePresent(selectedDevice)
|
||||
readonly property real percent: isReady ? BatteryService.getPercentage(selectedDevice) : -1
|
||||
readonly property bool isCharging: isReady ? BatteryService.isCharging(selectedDevice) : false
|
||||
readonly property bool isPluggedIn: isReady ? BatteryService.isPluggedIn(selectedDevice) : false
|
||||
readonly property bool isLowBattery: isReady ? BatteryService.isLowBattery(selectedDevice) : false
|
||||
readonly property bool isCriticalBattery: isReady ? BatteryService.isCriticalBattery(selectedDevice) : false
|
||||
|
||||
// Visibility: show if hideIfNotDetected is false, or if battery is ready
|
||||
readonly property bool shouldShow: !hideIfNotDetected || (isReady && (hideIfIdle ? !isPluggedIn : true))
|
||||
readonly property string deviceNativePath: widgetSettings.deviceNativePath !== undefined ? widgetSettings.deviceNativePath : widgetMetadata.deviceNativePath
|
||||
readonly property var selectedDevice: BatteryService.isDevicePresent(BatteryService.findDevice(deviceNativePath)) ? BatteryService.findDevice(deviceNativePath) : null
|
||||
|
||||
readonly property var tooltipContent: {
|
||||
if (!isReady || !isPresent) {
|
||||
return I18n.tr("battery.no-battery-detected");
|
||||
}
|
||||
|
||||
let rows = [];
|
||||
const isInternal = selectedDevice.isLaptopBattery;
|
||||
if (isInternal) {
|
||||
// Show charge percentage
|
||||
rows.push([I18n.tr("battery.battery-level"), `${percent}%`]);
|
||||
|
||||
let timeText = BatteryService.getTimeRemainingText(selectedDevice);
|
||||
if (timeText) {
|
||||
const colonIdx = timeText.indexOf(":");
|
||||
if (colonIdx >= 0) {
|
||||
rows.push([timeText.substring(0, colonIdx).trim(), timeText.substring(colonIdx + 1).trim()]);
|
||||
} else {
|
||||
rows.push([timeText, ""]);
|
||||
}
|
||||
}
|
||||
|
||||
let rateText = BatteryService.getRateText(selectedDevice);
|
||||
if (rateText) {
|
||||
const colonIdx = rateText.indexOf(":");
|
||||
if (colonIdx >= 0) {
|
||||
rows.push([rateText.substring(0, colonIdx).trim(), rateText.substring(colonIdx + 1).trim()]);
|
||||
} else {
|
||||
rows.push([rateText, ""]);
|
||||
}
|
||||
}
|
||||
|
||||
// Show battery health if supported (check actual battery, not DisplayDevice)
|
||||
let healthDevice = selectedDevice.healthSupported ? selectedDevice : (BatteryService.laptopBatteries.length > 0 ? BatteryService.laptopBatteries[0] : null);
|
||||
if (healthDevice && healthDevice.healthSupported) {
|
||||
rows.push([I18n.tr("battery.battery-health"), `${Math.round(healthDevice.healthPercentage)}%`]);
|
||||
}
|
||||
} else if (selectedDevice) {
|
||||
// External / Peripheral Device (Phone, Keyboard, Mouse, Gamepad, Headphone etc.)
|
||||
let name = BatteryService.getDeviceName(selectedDevice);
|
||||
rows.push([name, `${percent}%`]);
|
||||
}
|
||||
|
||||
// If we are showing the main laptop battery, append external devices
|
||||
if (isInternal) {
|
||||
var external = BatteryService.bluetoothBatteries;
|
||||
if (external.length > 0) {
|
||||
if (rows.length > 0) {
|
||||
rows.push(["---", "---"]); // Separator
|
||||
}
|
||||
for (var j = 0; j < external.length; j++) {
|
||||
var dev = external[j];
|
||||
var dName = BatteryService.getDeviceName(dev);
|
||||
var dPct = BatteryService.getPercentage(dev);
|
||||
rows.push([dName, `${dPct}%`]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rows;
|
||||
}
|
||||
|
||||
visible: shouldShow
|
||||
opacity: shouldShow ? 1.0 : 0.0
|
||||
|
||||
// Test mode
|
||||
readonly property bool testMode: false
|
||||
readonly property int testPercent: 35
|
||||
readonly property bool testCharging: false
|
||||
readonly property bool testPluggedIn: false
|
||||
readonly property string deviceNativePath: widgetSettings.deviceNativePath || ""
|
||||
|
||||
function findBatteryDevice(nativePath) {
|
||||
if (!nativePath || !UPower.devices) {
|
||||
return UPower.displayDevice;
|
||||
}
|
||||
var devices = UPower.devices.values || [];
|
||||
for (var i = 0; i < devices.length; i++) {
|
||||
var device = devices[i];
|
||||
if (device && device.nativePath === nativePath && device.type !== UPowerDeviceType.LinePower && device.percentage !== undefined) {
|
||||
return device;
|
||||
}
|
||||
}
|
||||
return UPower.displayDevice;
|
||||
}
|
||||
|
||||
function findBluetoothDevice(nativePath) {
|
||||
if (!nativePath || !BluetoothService.devices) {
|
||||
return null;
|
||||
}
|
||||
var macMatch = nativePath.match(/([0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2})/);
|
||||
if (!macMatch) {
|
||||
return null;
|
||||
}
|
||||
var macAddress = macMatch[1].toUpperCase();
|
||||
var devices = BluetoothService.devices.values || [];
|
||||
for (var i = 0; i < devices.length; i++) {
|
||||
var device = devices[i];
|
||||
if (device && device.address && device.address.toUpperCase() === macAddress) {
|
||||
return device;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
readonly property var battery: findBatteryDevice(deviceNativePath)
|
||||
readonly property var bluetoothDevice: deviceNativePath ? findBluetoothDevice(deviceNativePath) : null
|
||||
readonly property bool hasBluetoothBattery: bluetoothDevice && bluetoothDevice.batteryAvailable && bluetoothDevice.battery !== undefined
|
||||
readonly property bool isBluetoothConnected: bluetoothDevice && bluetoothDevice.connected === true
|
||||
|
||||
property bool initializationComplete: false
|
||||
Timer {
|
||||
interval: 500
|
||||
running: true
|
||||
onTriggered: root.initializationComplete = true
|
||||
}
|
||||
|
||||
readonly property bool isDevicePresent: {
|
||||
if (testMode)
|
||||
return true;
|
||||
if (deviceNativePath) {
|
||||
if (bluetoothDevice) {
|
||||
return isBluetoothConnected;
|
||||
}
|
||||
if (battery && battery.nativePath === deviceNativePath) {
|
||||
if (battery.type === UPowerDeviceType.Battery && battery.isPresent !== undefined) {
|
||||
return battery.isPresent;
|
||||
}
|
||||
return battery.ready && battery.percentage !== undefined && (battery.percentage > 0 || isCharging);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (battery) {
|
||||
// For default device, check isPresent if it's a Battery type, otherwise require percentage > 0
|
||||
if (battery.type === UPowerDeviceType.Battery && battery.isPresent !== undefined) {
|
||||
return battery.isPresent;
|
||||
}
|
||||
// For non-battery types or when isPresent is undefined, require actual percentage
|
||||
return battery.ready && battery.percentage !== undefined && battery.percentage > 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
readonly property bool isReady: testMode ? true : (initializationComplete && battery && battery.ready && isDevicePresent && (battery.percentage !== undefined || hasBluetoothBattery))
|
||||
readonly property real percent: testMode ? testPercent : (isReady ? (hasBluetoothBattery ? (bluetoothDevice.battery * 100) : (battery.percentage * 100)) : 0)
|
||||
readonly property bool isCharging: testMode ? testCharging : (isReady ? battery.state === UPowerDeviceState.Charging : false)
|
||||
readonly property bool isPluggedIn: testMode ? testPluggedIn : (isReady ? battery.state === UPowerDeviceState.FullyCharged || battery.state === UPowerDeviceState.PendingCharge : false)
|
||||
|
||||
property bool hasNotifiedLowBattery: false
|
||||
|
||||
implicitWidth: pill.width
|
||||
implicitHeight: pill.height
|
||||
|
||||
function maybeNotify(currentPercent, charging, pluggedIn, isReady) {
|
||||
if (isReady && (!charging && !pluggedIn) && !hasNotifiedLowBattery && currentPercent <= warningThreshold) {
|
||||
hasNotifiedLowBattery = true;
|
||||
ToastService.showWarning(I18n.tr("toast.battery.low"), I18n.tr("toast.battery.low-desc", {
|
||||
"percent": Math.round(currentPercent)
|
||||
}));
|
||||
} else if (hasNotifiedLowBattery && (charging || pluggedIn || currentPercent > warningThreshold + 5)) {
|
||||
hasNotifiedLowBattery = false;
|
||||
}
|
||||
}
|
||||
|
||||
function getCurrentPercent() {
|
||||
return hasBluetoothBattery ? (bluetoothDevice.battery * 100) : (battery ? battery.percentage * 100 : 0);
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: battery
|
||||
function onPercentageChanged() {
|
||||
if (battery) {
|
||||
maybeNotify(getCurrentPercent(), isCharging, isPluggedIn, isReady);
|
||||
}
|
||||
}
|
||||
function onStateChanged() {
|
||||
if (battery) {
|
||||
if (isCharging || isPluggedIn) {
|
||||
hasNotifiedLowBattery = false;
|
||||
}
|
||||
maybeNotify(getCurrentPercent(), isCharging, isPluggedIn, isReady);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: bluetoothDevice
|
||||
function onBatteryChanged() {
|
||||
if (bluetoothDevice && hasBluetoothBattery) {
|
||||
maybeNotify(bluetoothDevice.battery * 100, battery ? isCharging : false, battery ? isPluggedIn : false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
implicitWidth: useGraphicMode ? capsule.width : pill.width
|
||||
implicitHeight: useGraphicMode ? capsule.height : pill.height
|
||||
|
||||
NPopupContextMenu {
|
||||
id: contextMenu
|
||||
@@ -187,10 +137,8 @@ Item {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
@@ -198,62 +146,114 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
BarPill {
|
||||
id: pill
|
||||
// ==================== GRAPHIC MODE ====================
|
||||
|
||||
screen: root.screen
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: testMode ? BatteryService.getIcon(testPercent, testCharging, testPluggedIn, true) : BatteryService.getIcon(percent, isCharging, isPluggedIn, isReady)
|
||||
text: (isReady || testMode) ? Math.round(percent) : "-"
|
||||
suffix: "%"
|
||||
autoHide: false
|
||||
forceOpen: isReady && displayMode === "alwaysShow"
|
||||
forceClose: displayMode === "alwaysHide" || (initializationComplete && !isReady)
|
||||
customBackgroundColor: !initializationComplete ? "transparent" : (isCharging ? Color.mPrimary : (isLowBattery ? Color.mError : "transparent"))
|
||||
customTextIconColor: !initializationComplete ? "transparent" : (isCharging ? Color.mOnPrimary : (isLowBattery ? Color.mOnError : "transparent"))
|
||||
// Capsule background (graphic mode only)
|
||||
Rectangle {
|
||||
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
|
||||
radius: Math.min(Style.radiusL, width / 2)
|
||||
color: graphicMouseArea.containsMouse ? Color.mHover : Style.capsuleColor
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
tooltipText: {
|
||||
let lines = [];
|
||||
if (testMode) {
|
||||
lines.push(`Time left: ${Time.formatVagueHumanReadableDuration(12345)}.`);
|
||||
return lines.join("\n");
|
||||
}
|
||||
if (!isReady || !isDevicePresent) {
|
||||
return I18n.tr("battery.no-battery-detected");
|
||||
}
|
||||
if (!isPluggedIn && battery.timeToEmpty > 0) {
|
||||
lines.push(I18n.tr("battery.time-left", {
|
||||
"time": Time.formatVagueHumanReadableDuration(battery.timeToEmpty)
|
||||
}));
|
||||
}
|
||||
if (!isPluggedIn && battery.timeToFull > 0) {
|
||||
lines.push(I18n.tr("battery.time-until-full", {
|
||||
"time": Time.formatVagueHumanReadableDuration(battery.timeToFull)
|
||||
}));
|
||||
}
|
||||
if (battery.changeRate !== undefined) {
|
||||
const rate = Math.abs(battery.changeRate);
|
||||
if (isPluggedIn) {
|
||||
lines.push(I18n.tr("battery.plugged-in"));
|
||||
} else if (isCharging) {
|
||||
lines.push(I18n.tr("battery.charging-rate", {
|
||||
"rate": rate.toFixed(2)
|
||||
}));
|
||||
} else {
|
||||
lines.push(I18n.tr("battery.discharging-rate", {
|
||||
"rate": rate.toFixed(2)
|
||||
}));
|
||||
}
|
||||
}
|
||||
return lines.join("\n");
|
||||
}
|
||||
onClicked: PanelService.getPanel("batteryPanel", screen)?.toggle(this)
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(pill, screen);
|
||||
Behavior on color {
|
||||
enabled: !Color.isTransitioning
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NBattery {
|
||||
id: nBattery
|
||||
visible: root.useGraphicMode
|
||||
anchors.centerIn: parent
|
||||
baseSize: Style.barFontSize
|
||||
showPercentageText: root.displayMode !== "graphic-clean"
|
||||
vertical: root.isBarVertical
|
||||
percentage: root.percent
|
||||
ready: root.isReady
|
||||
charging: root.isCharging
|
||||
pluggedIn: root.isPluggedIn
|
||||
low: root.isLowBattery
|
||||
critical: root.isCriticalBattery
|
||||
baseColor: graphicMouseArea.containsMouse ? Color.mOnHover : Color.mOnSurface
|
||||
textColor: graphicMouseArea.containsMouse ? Color.mHover : Color.mSurface
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: graphicMouseArea
|
||||
visible: root.useGraphicMode
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onEntered: {
|
||||
if (root.tooltipContent) {
|
||||
TooltipService.show(root, root.tooltipContent, BarService.getTooltipDirection(root.screen?.name));
|
||||
}
|
||||
tooltipRefreshTimer.start();
|
||||
}
|
||||
onExited: {
|
||||
tooltipRefreshTimer.stop();
|
||||
TooltipService.hide();
|
||||
}
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
PanelService.showContextMenu(contextMenu, nBattery, screen);
|
||||
} else {
|
||||
openBatteryPanel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: tooltipRefreshTimer
|
||||
interval: 1000
|
||||
repeat: true
|
||||
onTriggered: {
|
||||
if (graphicMouseArea.containsMouse) {
|
||||
TooltipService.updateText(root.tooltipContent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== ICON MODE ====================
|
||||
|
||||
BarPill {
|
||||
id: pill
|
||||
visible: !root.useGraphicMode
|
||||
screen: root.screen
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
icon: BatteryService.getIcon(root.percent, root.isCharging, root.isPluggedIn, root.isReady)
|
||||
text: root.isReady ? root.percent : "-"
|
||||
suffix: "%"
|
||||
autoHide: false
|
||||
forceOpen: root.isReady && root.displayMode === "icon-always"
|
||||
forceClose: root.displayMode === "icon-only" || !root.isReady
|
||||
customBackgroundColor: root.isCharging ? Color.mPrimary : ((root.isLowBattery || root.isCriticalBattery) ? Color.mError : "transparent")
|
||||
customTextIconColor: root.isCharging ? Color.mOnPrimary : ((root.isLowBattery || root.isCriticalBattery) ? Color.mOnError : "transparent")
|
||||
tooltipText: root.tooltipContent
|
||||
|
||||
onClicked: openBatteryPanel()
|
||||
onRightClicked: PanelService.showContextMenu(contextMenu, pill, screen)
|
||||
}
|
||||
|
||||
// ==================== SHARED ====================
|
||||
|
||||
function openBatteryPanel() {
|
||||
var panel = PanelService.getPanel("batteryPanel", screen);
|
||||
if (panel) {
|
||||
panel.panelID = {
|
||||
showPowerProfiles: widgetSettings.showPowerProfiles !== undefined ? widgetSettings.showPowerProfiles : widgetMetadata.showPowerProfiles,
|
||||
showNoctaliaPerformance: widgetSettings.showNoctaliaPerformance !== undefined ? widgetSettings.showNoctaliaPerformance : widgetMetadata.showNoctaliaPerformance
|
||||
};
|
||||
panel.toggle(root);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,9 +19,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -29,9 +31,11 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
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
|
||||
|
||||
implicitWidth: pill.width
|
||||
implicitHeight: pill.height
|
||||
@@ -53,10 +57,8 @@ Item {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "toggle-bluetooth") {
|
||||
BluetoothService.setBluetoothEnabled(!BluetoothService.enabled);
|
||||
@@ -71,6 +73,8 @@ Item {
|
||||
|
||||
screen: root.screen
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
customIconColor: Color.resolveColorKeyOptional(root.iconColorKey)
|
||||
customTextColor: Color.resolveColorKeyOptional(root.textColorKey)
|
||||
icon: !BluetoothService.enabled ? "bluetooth-off" : ((BluetoothService.connectedDevices && BluetoothService.connectedDevices.length > 0) ? "bluetooth-connected" : "bluetooth")
|
||||
text: {
|
||||
if (BluetoothService.connectedDevices && BluetoothService.connectedDevices.length > 0) {
|
||||
@@ -94,11 +98,7 @@ Item {
|
||||
p.toggle(this);
|
||||
}
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(pill, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, pill, screen);
|
||||
}
|
||||
tooltipText: {
|
||||
if (pill.text !== "") {
|
||||
|
||||
@@ -20,9 +20,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -30,9 +32,11 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
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
|
||||
|
||||
// Used to avoid opening the pill on Quickshell startup
|
||||
property bool firstBrightnessReceived: false
|
||||
@@ -114,10 +118,8 @@ Item {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "open-display-settings") {
|
||||
var settingsPanel = PanelService.getPanel("settingsPanel", screen);
|
||||
@@ -134,6 +136,8 @@ Item {
|
||||
|
||||
screen: root.screen
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
customIconColor: Color.resolveColorKeyOptional(root.iconColorKey)
|
||||
customTextColor: Color.resolveColorKeyOptional(root.textColorKey)
|
||||
icon: getIcon()
|
||||
autoHide: false // Important to be false so we can hover as long as we want
|
||||
text: {
|
||||
@@ -169,11 +173,7 @@ Item {
|
||||
onClicked: PanelService.getPanel("brightnessPanel", screen)?.toggle(this)
|
||||
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(pill, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, pill, screen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import qs.Modules.Bar.Extras
|
||||
import qs.Services.UI
|
||||
import qs.Widgets
|
||||
|
||||
Rectangle {
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property ShellScreen screen
|
||||
@@ -19,9 +19,11 @@ Rectangle {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -29,90 +31,105 @@ Rectangle {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screen?.name)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screenName)
|
||||
readonly property var now: Time.now
|
||||
|
||||
// Resolve settings: try user settings or defaults from BarWidgetRegistry
|
||||
readonly property bool usePrimaryColor: widgetSettings.usePrimaryColor !== undefined ? widgetSettings.usePrimaryColor : widgetMetadata.usePrimaryColor
|
||||
readonly property string clockColor: widgetSettings.clockColor !== undefined ? widgetSettings.clockColor : widgetMetadata.clockColor
|
||||
readonly property bool useCustomFont: widgetSettings.useCustomFont !== undefined ? widgetSettings.useCustomFont : widgetMetadata.useCustomFont
|
||||
readonly property string customFont: widgetSettings.customFont !== undefined ? widgetSettings.customFont : widgetMetadata.customFont
|
||||
readonly property string formatHorizontal: widgetSettings.formatHorizontal !== undefined ? widgetSettings.formatHorizontal : widgetMetadata.formatHorizontal
|
||||
readonly property string formatVertical: widgetSettings.formatVertical !== undefined ? widgetSettings.formatVertical : widgetMetadata.formatVertical
|
||||
readonly property string tooltipFormat: widgetSettings.tooltipFormat !== undefined ? widgetSettings.tooltipFormat : widgetMetadata.tooltipFormat
|
||||
|
||||
implicitWidth: isBarVertical ? capsuleHeight : Math.round((isBarVertical ? verticalLoader.implicitWidth : horizontalLoader.implicitWidth) + Style.marginXL)
|
||||
readonly property color textColor: Color.resolveColorKey(clockColor)
|
||||
|
||||
implicitHeight: isBarVertical ? Math.round(verticalLoader.implicitHeight + Style.marginS * 2) : capsuleHeight
|
||||
// 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
|
||||
|
||||
radius: Style.radiusS
|
||||
color: Style.capsuleColor
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
// Size: use implicit width/height
|
||||
// BarWidgetLoader sets explicit width/height to extend click area
|
||||
implicitWidth: contentWidth
|
||||
implicitHeight: contentHeight
|
||||
|
||||
Item {
|
||||
id: clockContainer
|
||||
// Visual clock capsule - stays at content size, centered in parent
|
||||
Rectangle {
|
||||
id: visualClock
|
||||
width: root.contentWidth
|
||||
height: root.contentHeight
|
||||
anchors.centerIn: parent
|
||||
|
||||
// Horizontal
|
||||
Loader {
|
||||
id: horizontalLoader
|
||||
active: !isBarVertical
|
||||
radius: Style.radiusL
|
||||
color: Style.capsuleColor
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
Item {
|
||||
id: clockContainer
|
||||
anchors.centerIn: parent
|
||||
sourceComponent: ColumnLayout {
|
||||
|
||||
// Horizontal
|
||||
Loader {
|
||||
id: horizontalLoader
|
||||
active: !isBarVertical
|
||||
anchors.centerIn: parent
|
||||
spacing: Settings.data.bar.showCapsule ? -5 : -3
|
||||
Repeater {
|
||||
id: repeater
|
||||
model: I18n.locale.toString(now, formatHorizontal.trim()).split("\\n")
|
||||
NText {
|
||||
visible: text !== ""
|
||||
text: modelData
|
||||
family: useCustomFont && customFont ? customFont : Settings.data.ui.fontDefault
|
||||
Binding on pointSize {
|
||||
value: {
|
||||
if (repeater.model.length == 1) {
|
||||
// Single line: Full size
|
||||
return barFontSize;
|
||||
} else if (repeater.model.length == 2) {
|
||||
// Two lines: First line is bigger than the second
|
||||
return (index == 0) ? Math.round(barFontSize * 0.9) : Math.round(barFontSize * 0.75);
|
||||
} else {
|
||||
// More than two lines: Make it small!
|
||||
return Math.round(barFontSize * 0.75);
|
||||
sourceComponent: ColumnLayout {
|
||||
anchors.centerIn: parent
|
||||
spacing: Settings.data.bar.showCapsule ? -5 : -3
|
||||
Repeater {
|
||||
id: repeater
|
||||
model: I18n.locale.toString(now, formatHorizontal.trim()).split("\\n")
|
||||
NText {
|
||||
visible: text !== ""
|
||||
text: modelData
|
||||
family: useCustomFont && customFont ? customFont : Settings.data.ui.fontDefault
|
||||
Binding on pointSize {
|
||||
value: {
|
||||
if (repeater.model.length == 1) {
|
||||
// Single line: Full size
|
||||
return barFontSize;
|
||||
} else if (repeater.model.length == 2) {
|
||||
// Two lines: First line is bigger than the second
|
||||
return (index == 0) ? Math.round(barFontSize * 0.9) : Math.round(barFontSize * 0.75);
|
||||
} else {
|
||||
// More than two lines: Make it small!
|
||||
return Math.round(barFontSize * 0.75);
|
||||
}
|
||||
}
|
||||
}
|
||||
applyUiScale: false
|
||||
color: textColor
|
||||
wrapMode: Text.WordWrap
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
}
|
||||
applyUiScale: false
|
||||
color: usePrimaryColor ? Color.mPrimary : Color.mOnSurface
|
||||
wrapMode: Text.WordWrap
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Vertical
|
||||
Loader {
|
||||
id: verticalLoader
|
||||
active: isBarVertical
|
||||
anchors.centerIn: parent // Now this works without layout conflicts
|
||||
sourceComponent: ColumnLayout {
|
||||
anchors.centerIn: parent
|
||||
spacing: -2
|
||||
Repeater {
|
||||
model: I18n.locale.toString(now, formatVertical.trim()).split(" ")
|
||||
delegate: NText {
|
||||
visible: text !== ""
|
||||
text: modelData
|
||||
family: useCustomFont && customFont ? customFont : Settings.data.ui.fontDefault
|
||||
pointSize: barFontSize
|
||||
applyUiScale: false
|
||||
color: usePrimaryColor ? Color.mPrimary : Color.mOnSurface
|
||||
wrapMode: Text.WordWrap
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
// Vertical
|
||||
Loader {
|
||||
id: verticalLoader
|
||||
active: isBarVertical
|
||||
anchors.centerIn: parent // Now this works without layout conflicts
|
||||
sourceComponent: ColumnLayout {
|
||||
anchors.centerIn: parent
|
||||
spacing: -2
|
||||
Repeater {
|
||||
model: I18n.locale.toString(now, formatVertical.trim()).split(" ")
|
||||
delegate: NText {
|
||||
visible: text !== ""
|
||||
text: modelData
|
||||
family: useCustomFont && customFont ? customFont : Settings.data.ui.fontDefault
|
||||
pointSize: barFontSize
|
||||
applyUiScale: false
|
||||
color: textColor
|
||||
wrapMode: Text.WordWrap
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -136,10 +153,9 @@ Rectangle {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
// Close the context menu
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "open-calendar") {
|
||||
PanelService.getPanel("clockPanel", screen)?.toggle(root);
|
||||
@@ -177,11 +193,7 @@ Rectangle {
|
||||
onClicked: mouse => {
|
||||
TooltipService.hide();
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
} else {
|
||||
PanelService.getPanel("clockPanel", screen)?.toggle(this);
|
||||
}
|
||||
|
||||
@@ -22,9 +22,11 @@ NIconButton {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -32,21 +34,14 @@ NIconButton {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string customIcon: widgetSettings.icon || widgetMetadata.icon
|
||||
readonly property bool useDistroLogo: (widgetSettings.useDistroLogo !== undefined) ? widgetSettings.useDistroLogo : widgetMetadata.useDistroLogo
|
||||
readonly property string customIconPath: widgetSettings.customIconPath || ""
|
||||
readonly property bool enableColorization: widgetSettings.enableColorization || false
|
||||
|
||||
readonly property string colorizeSystemIcon: {
|
||||
if (widgetSettings.colorizeSystemIcon !== undefined)
|
||||
return widgetSettings.colorizeSystemIcon;
|
||||
return widgetMetadata.colorizeSystemIcon !== undefined ? widgetMetadata.colorizeSystemIcon : "none";
|
||||
}
|
||||
|
||||
readonly property bool isColorizing: enableColorization && colorizeSystemIcon !== "none"
|
||||
readonly property string customIcon: widgetSettings.icon !== undefined ? widgetSettings.icon : widgetMetadata.icon
|
||||
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
|
||||
|
||||
readonly property color iconColor: {
|
||||
if (!isColorizing)
|
||||
if (!enableColorization)
|
||||
return Color.mOnSurface;
|
||||
switch (colorizeSystemIcon) {
|
||||
case "primary":
|
||||
@@ -61,22 +56,6 @@ NIconButton {
|
||||
return Color.mOnSurface;
|
||||
}
|
||||
}
|
||||
readonly property color iconHoverColor: {
|
||||
if (!isColorizing)
|
||||
return Color.mOnHover;
|
||||
switch (colorizeSystemIcon) {
|
||||
case "primary":
|
||||
return Qt.darker(Color.mPrimary, 1.2);
|
||||
case "secondary":
|
||||
return Qt.darker(Color.mSecondary, 1.2);
|
||||
case "tertiary":
|
||||
return Qt.darker(Color.mTertiary, 1.2);
|
||||
case "error":
|
||||
return Qt.darker(Color.mError, 1.2);
|
||||
default:
|
||||
return Color.mOnHover;
|
||||
}
|
||||
}
|
||||
|
||||
// If we have a custom path and not using distro logo, use the theme icon.
|
||||
// If using distro logo, don't use theme icon.
|
||||
@@ -88,13 +67,10 @@ NIconButton {
|
||||
customRadius: Style.radiusL
|
||||
colorBg: Style.capsuleColor
|
||||
colorFg: iconColor
|
||||
colorBgHover: useDistroLogo ? Color.mSurfaceVariant : Color.mHover
|
||||
colorFgHover: iconHoverColor
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: useDistroLogo ? Color.mHover : "transparent"
|
||||
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
colorBgHover: Color.mHover
|
||||
colorFgHover: Color.mOnHover
|
||||
colorBorder: Style.capsuleBorderColor
|
||||
colorBorderHover: Style.capsuleBorderColor
|
||||
|
||||
NPopupContextMenu {
|
||||
id: contextMenu
|
||||
@@ -118,13 +94,11 @@ NIconButton {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "open-launcher") {
|
||||
PanelService.getPanel("launcherPanel", screen)?.toggle();
|
||||
PanelService.toggleLauncher(screen);
|
||||
} else if (action === "open-settings") {
|
||||
var panel = PanelService.getPanel("settingsPanel", screen);
|
||||
panel.requestedTab = SettingsPanel.Tab.General;
|
||||
@@ -145,18 +119,14 @@ NIconButton {
|
||||
}
|
||||
}
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
onMiddleClicked: PanelService.getPanel("launcherPanel", screen)?.toggle()
|
||||
onMiddleClicked: PanelService.toggleLauncher(screen)
|
||||
|
||||
IconImage {
|
||||
id: customOrDistroLogo
|
||||
anchors.centerIn: parent
|
||||
width: root.width * 0.8
|
||||
width: root.buttonSize * 0.8
|
||||
height: width
|
||||
source: {
|
||||
if (useDistroLogo)
|
||||
@@ -168,9 +138,9 @@ NIconButton {
|
||||
visible: source !== ""
|
||||
smooth: true
|
||||
asynchronous: true
|
||||
layer.enabled: isColorizing && (useDistroLogo || customIconPath !== "")
|
||||
layer.enabled: (enableColorization) && (useDistroLogo || customIconPath !== "")
|
||||
layer.effect: ShaderEffect {
|
||||
property color targetColor: isColorizing ? iconColor : (Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mSurfaceVariant)
|
||||
property color targetColor: !hovering ? iconColor : Color.mOnHover
|
||||
property real colorizeMode: 2.0
|
||||
|
||||
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/appicon_colorize.frag.qsb")
|
||||
|
||||
@@ -21,9 +21,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -31,7 +33,7 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
|
||||
|
||||
readonly property string customIcon: widgetSettings.icon || widgetMetadata.icon
|
||||
@@ -142,39 +144,48 @@ Item {
|
||||
|
||||
readonly property bool isColorizing: enableColorization && colorizeSystemIcon !== "none"
|
||||
|
||||
readonly property color iconColor: {
|
||||
if (!isColorizing)
|
||||
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;
|
||||
}
|
||||
// Get color value from color name (returns null for invalid names)
|
||||
function _getColorValue(colorName, forHover) {
|
||||
const baseColor = (function () {
|
||||
switch (colorName) {
|
||||
case "primary":
|
||||
return Color.mPrimary;
|
||||
case "secondary":
|
||||
return Color.mSecondary;
|
||||
case "tertiary":
|
||||
return Color.mTertiary;
|
||||
case "error":
|
||||
return Color.mError;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
})();
|
||||
return baseColor !== null ? (forHover ? Qt.darker(baseColor, 1.2) : baseColor) : null;
|
||||
}
|
||||
readonly property color iconHoverColor: {
|
||||
if (!isColorizing)
|
||||
return Color.mOnHover;
|
||||
switch (colorizeSystemIcon) {
|
||||
case "primary":
|
||||
return Qt.darker(Color.mPrimary, 1.2);
|
||||
case "secondary":
|
||||
return Qt.darker(Color.mSecondary, 1.2);
|
||||
case "tertiary":
|
||||
return Qt.darker(Color.mTertiary, 1.2);
|
||||
case "error":
|
||||
return Qt.darker(Color.mError, 1.2);
|
||||
default:
|
||||
return Color.mOnHover;
|
||||
|
||||
// Resolve icon color with priority: dynamic > static > default
|
||||
function _resolveIconColor(dynamicColorName, staticColorName, isHover) {
|
||||
if (dynamicColorName && dynamicColorName !== "") {
|
||||
if (dynamicColorName === "none") {
|
||||
return isHover ? Color.mOnHover : Color.mOnSurface;
|
||||
}
|
||||
const color = _getColorValue(dynamicColorName, isHover);
|
||||
if (color !== null)
|
||||
return color;
|
||||
}
|
||||
|
||||
if (staticColorName && staticColorName !== "" && isColorizing) {
|
||||
const color = _getColorValue(staticColorName, isHover);
|
||||
if (color !== null)
|
||||
return color;
|
||||
}
|
||||
|
||||
return isHover ? Color.mOnHover : Color.mOnSurface;
|
||||
}
|
||||
|
||||
readonly property color iconColor: _resolveIconColor(_dynamicColor, colorizeSystemIcon, false)
|
||||
readonly property color iconHoverColor: _resolveIconColor(_dynamicColor, colorizeSystemIcon, true)
|
||||
|
||||
implicitWidth: pill.width
|
||||
implicitHeight: pill.height
|
||||
|
||||
@@ -190,7 +201,7 @@ Item {
|
||||
rotateText: isVerticalBar && currentMaxTextLength > 0
|
||||
autoHide: false
|
||||
forceOpen: _pillForceOpen
|
||||
customTextIconColor: isColorizing ? iconColor : "transparent"
|
||||
customTextIconColor: iconColor
|
||||
|
||||
tooltipText: {
|
||||
var tooltipLines = [];
|
||||
@@ -231,16 +242,17 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: root.onClicked()
|
||||
onRightClicked: root.onRightClicked()
|
||||
onMiddleClicked: root.onMiddleClicked()
|
||||
onWheel: delta => root.onWheel(delta)
|
||||
onClicked: root.clicked()
|
||||
onRightClicked: root.rightClicked()
|
||||
onMiddleClicked: root.middleClicked()
|
||||
onWheel: delta => root.wheeled(delta)
|
||||
}
|
||||
|
||||
// Internal state for dynamic text
|
||||
property string _dynamicText: ""
|
||||
property string _dynamicIcon: ""
|
||||
property string _dynamicTooltip: ""
|
||||
property string _dynamicColor: ""
|
||||
|
||||
// Maximum length for text display before scrolling (different values for horizontal and vertical)
|
||||
readonly property var maxTextLength: {
|
||||
@@ -356,27 +368,31 @@ Item {
|
||||
function parseDynamicContent(content) {
|
||||
var contentStr = String(content || "").trim();
|
||||
|
||||
if (parseJson) {
|
||||
var lineToParse = contentStr;
|
||||
|
||||
if (!textStream && contentStr.includes('\n')) {
|
||||
if (parseJson && contentStr) {
|
||||
// Handle multi-line JSON by filtering empty lines and joining
|
||||
var jsonStr = contentStr;
|
||||
if (contentStr.includes('\n')) {
|
||||
const lines = contentStr.split('\n').filter(line => line.trim() !== '');
|
||||
if (lines.length > 0) {
|
||||
lineToParse = lines[lines.length - 1];
|
||||
}
|
||||
jsonStr = lines.join('');
|
||||
}
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(lineToParse);
|
||||
const parsed = JSON.parse(jsonStr);
|
||||
const text = parsed.text || "";
|
||||
const icon = parsed.icon || "";
|
||||
let tooltip = parsed.tooltip || "";
|
||||
const color = parsed.color || "";
|
||||
|
||||
// Validate color value
|
||||
const validColors = ["primary", "secondary", "tertiary", "error", "none"];
|
||||
const validColor = (color && validColors.includes(color)) ? color : "";
|
||||
|
||||
if (checkCollapse(text)) {
|
||||
_scrollState.originalText = "";
|
||||
_dynamicText = "";
|
||||
_dynamicIcon = "";
|
||||
_dynamicTooltip = "";
|
||||
_dynamicColor = "";
|
||||
_scrollState.needsScrolling = false;
|
||||
_scrollState.phase = 0;
|
||||
_scrollState.phaseCounter = 0;
|
||||
@@ -386,23 +402,23 @@ Item {
|
||||
_scrollState.originalText = text;
|
||||
_scrollState.needsScrolling = text.length > currentMaxTextLength && currentMaxTextLength > 0;
|
||||
if (_scrollState.needsScrolling) {
|
||||
// Start with the beginning of the text
|
||||
_dynamicText = text.substring(0, currentMaxTextLength);
|
||||
_scrollState.phase = 0; // Start at phase 0 (static beginning)
|
||||
_scrollState.phase = 0;
|
||||
_scrollState.phaseCounter = 0;
|
||||
_scrollState.offset = 0;
|
||||
scrollTimer.start(); // Start the scrolling timer
|
||||
scrollTimer.start();
|
||||
} else {
|
||||
_dynamicText = text;
|
||||
scrollTimer.stop();
|
||||
}
|
||||
_dynamicIcon = icon;
|
||||
_dynamicColor = validColor;
|
||||
|
||||
_dynamicTooltip = toHtml(tooltip);
|
||||
_scrollState.offset = 0;
|
||||
return;
|
||||
} catch (e) {
|
||||
Logger.w("CustomButton", `Failed to parse JSON. Content: "${lineToParse}"`);
|
||||
Logger.w("CustomButton", `Failed to parse JSON. Content: "${contentStr}"`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -411,6 +427,7 @@ Item {
|
||||
_dynamicText = "";
|
||||
_dynamicIcon = "";
|
||||
_dynamicTooltip = "";
|
||||
_dynamicColor = "";
|
||||
_scrollState.needsScrolling = false;
|
||||
_scrollState.phase = 0;
|
||||
_scrollState.phaseCounter = 0;
|
||||
@@ -420,17 +437,17 @@ Item {
|
||||
_scrollState.originalText = contentStr;
|
||||
_scrollState.needsScrolling = contentStr.length > currentMaxTextLength && currentMaxTextLength > 0;
|
||||
if (_scrollState.needsScrolling) {
|
||||
// Start with the beginning of the text
|
||||
_dynamicText = contentStr.substring(0, currentMaxTextLength);
|
||||
_scrollState.phase = 0; // Start at phase 0 (static beginning)
|
||||
_scrollState.phase = 0;
|
||||
_scrollState.phaseCounter = 0;
|
||||
_scrollState.offset = 0;
|
||||
scrollTimer.start(); // Start the scrolling timer
|
||||
scrollTimer.start();
|
||||
} else {
|
||||
_dynamicText = contentStr;
|
||||
scrollTimer.stop();
|
||||
}
|
||||
_dynamicIcon = "";
|
||||
_dynamicColor = "";
|
||||
_dynamicTooltip = toHtml(contentStr);
|
||||
_scrollState.offset = 0;
|
||||
}
|
||||
@@ -456,22 +473,20 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
function onClicked() {
|
||||
function clicked() {
|
||||
if (leftClickExec) {
|
||||
Quickshell.execDetached(["sh", "-lc", leftClickExec]);
|
||||
Logger.i("CustomButton", `Executing command: ${leftClickExec}`);
|
||||
} else if (!leftClickUpdateText) {
|
||||
// No left click script was defined, open settings
|
||||
var settingsPanel = PanelService.getPanel("settingsPanel", screen);
|
||||
settingsPanel.requestedTab = SettingsPanel.Tab.Bar;
|
||||
settingsPanel.open();
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
//SettingsPanelService.openToTab(SettingsPanel.Tab.Bar, 1, screen);
|
||||
}
|
||||
if (!textStream && leftClickUpdateText) {
|
||||
runTextCommand();
|
||||
}
|
||||
}
|
||||
|
||||
function onRightClicked() {
|
||||
function rightClicked() {
|
||||
if (rightClickExec) {
|
||||
Quickshell.execDetached(["sh", "-lc", rightClickExec]);
|
||||
Logger.i("CustomButton", `Executing command: ${rightClickExec}`);
|
||||
@@ -481,7 +496,7 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
function onMiddleClicked() {
|
||||
function middleClicked() {
|
||||
if (middleClickExec) {
|
||||
Quickshell.execDetached(["sh", "-lc", middleClickExec]);
|
||||
Logger.i("CustomButton", `Executing command: ${middleClickExec}`);
|
||||
@@ -516,7 +531,7 @@ Item {
|
||||
textProc.running = true;
|
||||
}
|
||||
|
||||
function onWheel(delta) {
|
||||
function wheeled(delta) {
|
||||
if (wheelMode === "unified" && wheelExec) {
|
||||
let normalizedDelta = delta > 0 ? 1 : -1;
|
||||
|
||||
|
||||
@@ -8,6 +8,26 @@ NIconButton {
|
||||
|
||||
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]
|
||||
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 iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
|
||||
|
||||
icon: "dark-mode"
|
||||
tooltipText: Settings.data.colorSchemes.darkMode ? I18n.tr("tooltips.switch-to-light-mode") : I18n.tr("tooltips.switch-to-dark-mode")
|
||||
tooltipDirection: BarService.getTooltipDirection(screen?.name)
|
||||
@@ -15,11 +35,34 @@ NIconButton {
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: Style.capsuleColor
|
||||
colorFg: Color.mOnSurface
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
colorFg: Color.resolveColorKey(iconColorKey)
|
||||
onClicked: Settings.data.colorSchemes.darkMode = !Settings.data.colorSchemes.darkMode
|
||||
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onRightClicked: {
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,9 +19,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -29,21 +31,49 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property string iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
|
||||
readonly property string textColorKey: widgetSettings.textColor !== undefined ? widgetSettings.textColor : widgetMetadata.textColor
|
||||
|
||||
implicitWidth: pill.width
|
||||
implicitHeight: pill.height
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BarPill {
|
||||
id: pill
|
||||
|
||||
screen: root.screen
|
||||
text: IdleInhibitorService.timeout == null ? "" : Time.formatVagueHumanReadableDuration(IdleInhibitorService.timeout)
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
customIconColor: Color.resolveColorKeyOptional(root.iconColorKey)
|
||||
customTextColor: Color.resolveColorKeyOptional(root.textColorKey)
|
||||
icon: IdleInhibitorService.isInhibited ? "keep-awake-on" : "keep-awake-off"
|
||||
tooltipText: IdleInhibitorService.isInhibited ? I18n.tr("tooltips.keep-awake") : I18n.tr("tooltips.keep-awake")
|
||||
onClicked: IdleInhibitorService.manualToggle()
|
||||
onRightClicked: {
|
||||
PanelService.showContextMenu(contextMenu, pill, screen);
|
||||
}
|
||||
forceOpen: IdleInhibitorService.timeout !== null
|
||||
forceClose: IdleInhibitorService.timeout == null
|
||||
onWheel: function (delta) {
|
||||
|
||||
@@ -23,9 +23,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -33,11 +35,13 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
|
||||
readonly property string displayMode: (widgetSettings.displayMode !== undefined) ? widgetSettings.displayMode : widgetMetadata.displayMode
|
||||
readonly property bool showIcon: (widgetSettings.showIcon !== undefined) ? widgetSettings.showIcon : widgetMetadata.showIcon
|
||||
readonly property string iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
|
||||
readonly property string textColorKey: widgetSettings.textColor !== undefined ? widgetSettings.textColor : widgetMetadata.textColor
|
||||
|
||||
// Use the shared service for keyboard layout
|
||||
property string currentLayout: KeyboardLayoutService.currentLayout
|
||||
@@ -57,10 +61,8 @@ Item {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
@@ -73,6 +75,8 @@ Item {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
screen: root.screen
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
customIconColor: Color.resolveColorKeyOptional(root.iconColorKey)
|
||||
customTextColor: Color.resolveColorKeyOptional(root.textColorKey)
|
||||
icon: root.showIcon ? "keyboard" : ""
|
||||
autoHide: false // Important to be false so we can hover as long as we want
|
||||
text: isBarVertical ? currentLayout.substring(0, 3).toUpperCase() : currentLayout
|
||||
@@ -82,11 +86,7 @@ Item {
|
||||
forceClose: root.showIcon && root.displayMode === "alwaysHide"
|
||||
onClicked: CompositorService.cycleKeyboardLayout()
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(pill, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, pill, screen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,9 +17,11 @@ NIconButton {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -28,18 +30,18 @@ NIconButton {
|
||||
}
|
||||
|
||||
readonly property string iconName: widgetSettings.icon || (widgetMetadata ? widgetMetadata.icon : "search")
|
||||
readonly property bool usePrimaryColor: (widgetSettings.usePrimaryColor !== undefined) ? widgetSettings.usePrimaryColor : ((widgetMetadata && widgetMetadata.usePrimaryColor !== undefined) ? widgetMetadata.usePrimaryColor : true)
|
||||
readonly property string iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
|
||||
|
||||
icon: iconName
|
||||
tooltipText: I18n.tr("actions.open-launcher")
|
||||
tooltipDirection: BarService.getTooltipDirection(screen?.name)
|
||||
baseSize: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
tooltipDirection: BarService.getTooltipDirection(screenName)
|
||||
baseSize: Style.getCapsuleHeightForScreen(screenName)
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: Style.capsuleColor
|
||||
colorBgHover: Color.mHover
|
||||
colorFg: usePrimaryColor ? Color.mPrimary : Color.mOnSurface
|
||||
colorFgHover: usePrimaryColor ? Qt.darker(Color.mPrimary, 1.2) : Color.mOnHover
|
||||
colorFg: Color.resolveColorKey(iconColorKey)
|
||||
colorFgHover: Color.mOnHover
|
||||
colorBorder: Style.capsuleBorderColor
|
||||
colorBorderHover: Style.capsuleBorderColor
|
||||
|
||||
@@ -60,10 +62,8 @@ NIconButton {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "launcher-settings") {
|
||||
var panel = PanelService.getPanel("settingsPanel", screen);
|
||||
@@ -75,13 +75,9 @@ NIconButton {
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: PanelService.getPanel("launcherPanel", screen)?.toggle()
|
||||
onMiddleClicked: PanelService.getPanel("launcherPanel", screen)?.toggle()
|
||||
onClicked: PanelService.toggleLauncher(screen)
|
||||
onMiddleClicked: PanelService.toggleLauncher(screen)
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,20 +10,23 @@ import qs.Services.Keyboard
|
||||
import qs.Services.UI
|
||||
import qs.Widgets
|
||||
|
||||
Rectangle {
|
||||
//test
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property ShellScreen screen
|
||||
|
||||
property string widgetId: ""
|
||||
property string section: ""
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
|
||||
// Settings
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -31,29 +34,27 @@ Rectangle {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||
|
||||
readonly property bool showCaps: (widgetSettings.showCapsLock !== undefined) ? widgetSettings.showCapsLock : widgetMetadata.showCapsLock
|
||||
readonly property bool showNum: (widgetSettings.showNumLock !== undefined) ? widgetSettings.showNumLock : widgetMetadata.showNumLock
|
||||
readonly property bool showScroll: (widgetSettings.showScrollLock !== undefined) ? widgetSettings.showScrollLock : widgetMetadata.showScrollLock
|
||||
// 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 bool hideWhenOff: (widgetSettings.hideWhenOff !== undefined) ? widgetSettings.hideWhenOff : (widgetMetadata.hideWhenOff !== undefined ? widgetMetadata.hideWhenOff : false)
|
||||
|
||||
readonly property string capsIcon: widgetSettings.capsLockIcon !== undefined ? widgetSettings.capsLockIcon : widgetMetadata.capsLockIcon
|
||||
readonly property string numIcon: widgetSettings.numLockIcon !== undefined ? widgetSettings.numLockIcon : widgetMetadata.numLockIcon
|
||||
readonly property string scrollIcon: widgetSettings.scrollLockIcon !== undefined ? widgetSettings.scrollLockIcon : widgetMetadata.scrollLockIcon
|
||||
readonly property bool showCaps: (widgetSettings.showCapsLock !== undefined) ? widgetSettings.showCapsLock : widgetMetadata.showCapsLock
|
||||
readonly property bool showNum: (widgetSettings.showNumLock !== undefined) ? widgetSettings.showNumLock : widgetMetadata.showNumLock
|
||||
readonly property bool showScroll: (widgetSettings.showScrollLock !== undefined) ? widgetSettings.showScrollLock : widgetMetadata.showScrollLock
|
||||
|
||||
readonly property bool hideWhenOff: (widgetSettings.hideWhenOff !== undefined) ? widgetSettings.hideWhenOff : (widgetMetadata.hideWhenOff !== undefined ? widgetMetadata.hideWhenOff : false)
|
||||
visible: !root.hideWhenOff || (root.showCaps && LockKeysService.capsLockOn) || (root.showNum && LockKeysService.numLockOn) || (root.showScroll && LockKeysService.scrollLockOn)
|
||||
|
||||
implicitWidth: isVertical ? capsuleHeight : Math.round(layout.implicitWidth + Style.marginXL)
|
||||
implicitHeight: isVertical ? Math.round(layout.implicitHeight + Style.marginXL) : capsuleHeight
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
radius: Style.radiusM
|
||||
color: Style.capsuleColor
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
implicitHeight: contentHeight
|
||||
implicitWidth: contentWidth
|
||||
|
||||
NPopupContextMenu {
|
||||
id: contextMenu
|
||||
@@ -67,10 +68,8 @@ Rectangle {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
@@ -78,70 +77,86 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
// Visual capsule centered in parent
|
||||
Rectangle {
|
||||
id: visualCapsule
|
||||
anchors.centerIn: parent
|
||||
color: Style.capsuleColor
|
||||
width: root.contentWidth
|
||||
height: root.contentHeight
|
||||
radius: Style.radiusM
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
Item {
|
||||
id: layout
|
||||
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
implicitHeight: rowLayout.visible ? rowLayout.implicitHeight : colLayout.implicitHeight
|
||||
implicitWidth: rowLayout.visible ? rowLayout.implicitWidth : colLayout.implicitWidth
|
||||
|
||||
RowLayout {
|
||||
id: rowLayout
|
||||
|
||||
spacing: 0
|
||||
visible: !root.isVertical
|
||||
|
||||
NIcon {
|
||||
color: LockKeysService.capsLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
icon: root.capsIcon
|
||||
visible: root.showCaps && (!root.hideWhenOff || LockKeysService.capsLockOn)
|
||||
}
|
||||
|
||||
NIcon {
|
||||
color: LockKeysService.numLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
icon: root.numIcon
|
||||
visible: root.showNum && (!root.hideWhenOff || LockKeysService.numLockOn)
|
||||
}
|
||||
|
||||
NIcon {
|
||||
color: LockKeysService.scrollLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
icon: root.scrollIcon
|
||||
visible: root.showScroll && (!root.hideWhenOff || LockKeysService.scrollLockOn)
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: colLayout
|
||||
|
||||
spacing: 0
|
||||
visible: root.isVertical
|
||||
|
||||
NIcon {
|
||||
color: LockKeysService.capsLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
icon: root.capsIcon
|
||||
visible: root.showCaps && (!root.hideWhenOff || LockKeysService.capsLockOn)
|
||||
}
|
||||
|
||||
NIcon {
|
||||
color: LockKeysService.numLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
icon: root.numIcon
|
||||
visible: root.showNum && (!root.hideWhenOff || LockKeysService.numLockOn)
|
||||
}
|
||||
|
||||
NIcon {
|
||||
color: LockKeysService.scrollLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
icon: root.scrollIcon
|
||||
visible: root.showScroll && (!root.hideWhenOff || LockKeysService.scrollLockOn)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MouseArea at root level for extended click area
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.RightButton
|
||||
anchors.fill: parent
|
||||
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: layout
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
implicitWidth: rowLayout.visible ? rowLayout.implicitWidth : colLayout.implicitWidth
|
||||
implicitHeight: rowLayout.visible ? rowLayout.implicitHeight : colLayout.implicitHeight
|
||||
|
||||
RowLayout {
|
||||
id: rowLayout
|
||||
visible: !root.isVertical
|
||||
spacing: 0
|
||||
|
||||
NIcon {
|
||||
visible: root.showCaps && (!root.hideWhenOff || LockKeysService.capsLockOn)
|
||||
icon: root.capsIcon
|
||||
color: LockKeysService.capsLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
}
|
||||
NIcon {
|
||||
visible: root.showNum && (!root.hideWhenOff || LockKeysService.numLockOn)
|
||||
icon: root.numIcon
|
||||
color: LockKeysService.numLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
}
|
||||
NIcon {
|
||||
visible: root.showScroll && (!root.hideWhenOff || LockKeysService.scrollLockOn)
|
||||
icon: root.scrollIcon
|
||||
color: LockKeysService.scrollLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: colLayout
|
||||
visible: root.isVertical
|
||||
spacing: 0
|
||||
|
||||
NIcon {
|
||||
visible: root.showCaps && (!root.hideWhenOff || LockKeysService.capsLockOn)
|
||||
icon: root.capsIcon
|
||||
color: LockKeysService.capsLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
}
|
||||
NIcon {
|
||||
visible: root.showNum && (!root.hideWhenOff || LockKeysService.numLockOn)
|
||||
icon: root.numIcon
|
||||
color: LockKeysService.numLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
}
|
||||
NIcon {
|
||||
visible: root.showScroll && (!root.hideWhenOff || LockKeysService.scrollLockOn)
|
||||
icon: root.scrollIcon
|
||||
color: LockKeysService.scrollLockOn ? Color.mTertiary : Qt.alpha(Color.mOnSurfaceVariant, 0.3)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,9 +20,11 @@ Item {
|
||||
|
||||
// Settings
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -31,10 +33,10 @@ Item {
|
||||
}
|
||||
|
||||
// Bar orientation (per-screen)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screen?.name)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screenName)
|
||||
|
||||
// Widget settings
|
||||
readonly property string hideMode: (widgetSettings.hideMode !== undefined) ? widgetSettings.hideMode : "hidden"
|
||||
@@ -47,6 +49,8 @@ Item {
|
||||
readonly property bool showProgressRing: (widgetSettings.showProgressRing !== undefined) ? widgetSettings.showProgressRing : widgetMetadata.showProgressRing
|
||||
readonly property bool useFixedWidth: (widgetSettings.useFixedWidth !== undefined) ? widgetSettings.useFixedWidth : widgetMetadata.useFixedWidth
|
||||
readonly property real maxWidth: (widgetSettings.maxWidth !== undefined) ? widgetSettings.maxWidth : Math.max(widgetMetadata.maxWidth, screen ? screen.width * 0.06 : 0)
|
||||
readonly property string textColorKey: (widgetSettings.textColor !== undefined) ? widgetSettings.textColor : widgetMetadata.textColor
|
||||
readonly property color textColor: Color.resolveColorKey(textColorKey)
|
||||
|
||||
// Dimensions
|
||||
readonly property int artSize: Style.toOdd(capsuleHeight * 0.75)
|
||||
@@ -73,6 +77,11 @@ Item {
|
||||
readonly property string cavaComponentId: "bar:mediamini:" + root.screen?.name + ":" + root.section + ":" + root.sectionWidgetIndex
|
||||
readonly property bool needsCava: root.showVisualizer && root.visualizerType !== "" && root.visualizerType !== "none"
|
||||
|
||||
Layout.preferredHeight: isVertical ? -1 : Style.getBarHeightForScreen(screenName)
|
||||
Layout.preferredWidth: isVertical ? Style.getBarHeightForScreen(screenName) : -1
|
||||
Layout.fillHeight: false
|
||||
Layout.fillWidth: false
|
||||
|
||||
onNeedsCavaChanged: {
|
||||
if (root.needsCava) {
|
||||
CavaService.registerComponent(root.cavaComponentId);
|
||||
@@ -205,9 +214,8 @@ Item {
|
||||
}
|
||||
|
||||
onTriggered: action => {
|
||||
var popupWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupWindow)
|
||||
popupWindow.close();
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "play-pause")
|
||||
MediaService.playPause();
|
||||
@@ -226,11 +234,11 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
// Main container
|
||||
// Main container - stays at content size, pixel-perfect centered in parent
|
||||
Rectangle {
|
||||
id: container
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, height)
|
||||
width: isVertical ? (isHidden ? 0 : verticalSize) : (isHidden ? 0 : contentWidth)
|
||||
height: isVertical ? (isHidden ? 0 : verticalSize) : capsuleHeight
|
||||
radius: Style.radiusM
|
||||
@@ -329,10 +337,15 @@ Item {
|
||||
}
|
||||
cursorShape: hasPlayer ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
maxWidth: root.maxWidth - root.mainContentWidth
|
||||
forcedHover: mainMouseArea.containsMouse
|
||||
gradientColor: Style.capsuleColor
|
||||
gradientWidth: Math.round(8 * Style.uiScaleRatio)
|
||||
cornerRadius: Style.radiusM
|
||||
|
||||
NText {
|
||||
// anchors.fill: parent
|
||||
color: hasPlayer ? Color.mOnSurface : Color.mOnSurfaceVariant
|
||||
color: hasPlayer ? root.textColor : Color.mOnSurfaceVariant
|
||||
pointSize: barFontSize
|
||||
elide: Text.ElideNone
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -365,37 +378,43 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
// Mouse interaction
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
||||
// Mouse interaction moved to root
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
PanelService.getPanel("mediaPlayerPanel", screen)?.toggle(container);
|
||||
} else if (mouse.button === Qt.RightButton) {
|
||||
TooltipService.hide();
|
||||
var popupWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupWindow) {
|
||||
popupWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(container, screen);
|
||||
}
|
||||
} else if (mouse.button === Qt.MiddleButton && hasPlayer) {
|
||||
MediaService.playPause();
|
||||
TooltipService.hide();
|
||||
}
|
||||
}
|
||||
// Mouse interaction
|
||||
MouseArea {
|
||||
id: mainMouseArea
|
||||
anchors.fill: parent
|
||||
|
||||
onEntered: {
|
||||
if (isVertical || scrollingMode === "never") {
|
||||
TooltipService.show(root, title, BarService.getTooltipDirection(root.screen?.name));
|
||||
}
|
||||
}
|
||||
onExited: TooltipService.hide()
|
||||
// Extend click area to screen edge if widget is at the start/end
|
||||
anchors.leftMargin: (!isVertical && section === "left" && sectionWidgetIndex === 0) ? -Style.marginS : 0
|
||||
anchors.rightMargin: (!isVertical && section === "right" && sectionWidgetIndex === sectionWidgetsCount - 1) ? -Style.marginS : 0
|
||||
anchors.topMargin: (isVertical && section === "left" && sectionWidgetIndex === 0) ? -Style.marginM : 0
|
||||
anchors.bottomMargin: (isVertical && section === "right" && sectionWidgetIndex === sectionWidgetsCount - 1) ? -Style.marginM : 0
|
||||
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
||||
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
PanelService.getPanel("mediaPlayerPanel", screen)?.toggle(container);
|
||||
} else if (mouse.button === Qt.RightButton) {
|
||||
TooltipService.hide();
|
||||
PanelService.showContextMenu(contextMenu, container, screen);
|
||||
} else if (mouse.button === Qt.MiddleButton && hasPlayer) {
|
||||
MediaService.playPause();
|
||||
TooltipService.hide();
|
||||
}
|
||||
}
|
||||
|
||||
onEntered: {
|
||||
if (isVertical || scrollingMode === "never") {
|
||||
TooltipService.show(root, title, BarService.getTooltipDirection(root.screen?.name));
|
||||
}
|
||||
}
|
||||
onExited: TooltipService.hide()
|
||||
}
|
||||
|
||||
// Components
|
||||
|
||||
@@ -22,9 +22,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -32,10 +34,12 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property string displayMode: (widgetSettings.displayMode !== undefined) ? widgetSettings.displayMode : widgetMetadata.displayMode
|
||||
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
|
||||
|
||||
// Used to avoid opening the pill on Quickshell startup
|
||||
property bool firstInputVolumeReceived: false
|
||||
@@ -109,15 +113,13 @@ Item {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "toggle-mute") {
|
||||
AudioService.setInputMuted(!AudioService.inputMuted);
|
||||
} else if (action === "custom-command") {
|
||||
Quickshell.execDetached(["sh", "-lc", middleClickCommand]);
|
||||
Quickshell.execDetached(["sh", "-c", middleClickCommand]);
|
||||
} else if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
}
|
||||
@@ -129,6 +131,8 @@ Item {
|
||||
|
||||
screen: root.screen
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
customIconColor: Color.resolveColorKeyOptional(root.iconColorKey)
|
||||
customTextColor: Color.resolveColorKeyOptional(root.textColorKey)
|
||||
icon: AudioService.getInputIcon()
|
||||
autoHide: false // Important to be false so we can hover as long as we want
|
||||
text: {
|
||||
@@ -164,14 +168,10 @@ Item {
|
||||
PanelService.getPanel("audioPanel", screen)?.toggle(this);
|
||||
}
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(pill, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, pill, screen);
|
||||
}
|
||||
onMiddleClicked: {
|
||||
Quickshell.execDetached(["sh", "-lc", middleClickCommand]);
|
||||
Quickshell.execDetached(["sh", "-c", middleClickCommand]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,9 +19,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -29,9 +31,11 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
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
|
||||
|
||||
implicitWidth: pill.width
|
||||
implicitHeight: pill.height
|
||||
@@ -53,10 +57,8 @@ Item {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "toggle-wifi") {
|
||||
NetworkService.setWifiEnabled(!Settings.data.network.wifiEnabled);
|
||||
@@ -71,6 +73,8 @@ Item {
|
||||
|
||||
screen: root.screen
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
customIconColor: Color.resolveColorKeyOptional(root.iconColorKey)
|
||||
customTextColor: Color.resolveColorKeyOptional(root.textColorKey)
|
||||
icon: {
|
||||
try {
|
||||
if (NetworkService.ethernetConnected) {
|
||||
@@ -115,11 +119,7 @@ Item {
|
||||
panel?.toggle(this);
|
||||
}
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(pill, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, pill, screen);
|
||||
}
|
||||
tooltipText: {
|
||||
try {
|
||||
|
||||
@@ -14,13 +14,31 @@ NIconButton {
|
||||
|
||||
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]
|
||||
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 iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
|
||||
|
||||
baseSize: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: Settings.data.nightLight.forced ? Color.mPrimary : Style.capsuleColor
|
||||
colorFg: Settings.data.nightLight.forced ? Color.mOnPrimary : Color.mOnSurface
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
colorFg: Settings.data.nightLight.forced ? Color.mOnPrimary : Color.resolveColorKey(iconColorKey)
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
@@ -45,9 +63,28 @@ NIconButton {
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onRightClicked: {
|
||||
var settingsPanel = PanelService.getPanel("settingsPanel", screen);
|
||||
settingsPanel.requestedTab = SettingsPanel.Tab.Display;
|
||||
settingsPanel.open();
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,13 +14,31 @@ NIconButton {
|
||||
|
||||
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]
|
||||
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 iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
|
||||
|
||||
baseSize: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: PowerProfileService.noctaliaPerformanceMode ? Color.mPrimary : Style.capsuleColor
|
||||
colorFg: PowerProfileService.noctaliaPerformanceMode ? Color.mOnPrimary : Color.mOnSurface
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
colorFg: PowerProfileService.noctaliaPerformanceMode ? Color.mOnPrimary : Color.resolveColorKey(iconColorKey)
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
@@ -28,4 +46,29 @@ NIconButton {
|
||||
tooltipText: PowerProfileService.noctaliaPerformanceMode ? I18n.tr("tooltips.noctalia-performance-enabled") : I18n.tr("tooltips.noctalia-performance-enabled")
|
||||
tooltipDirection: BarService.getTooltipDirection(screen?.name)
|
||||
onClicked: PowerProfileService.toggleNoctaliaPerformance()
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onRightClicked: {
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,18 +21,37 @@ NIconButton {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
readonly property bool showUnreadBadge: (widgetSettings.showUnreadBadge !== undefined) ? widgetSettings.showUnreadBadge : widgetMetadata.showUnreadBadge
|
||||
readonly property bool hideWhenZero: (widgetSettings.hideWhenZero !== undefined) ? widgetSettings.hideWhenZero : widgetMetadata.hideWhenZero
|
||||
readonly property bool hideWhenZeroUnread: (widgetSettings.hideWhenZeroUnread !== undefined) ? widgetSettings.hideWhenZeroUnread : widgetMetadata.hideWhenZeroUnread
|
||||
readonly property bool showUnreadBadge: widgetSettings.showUnreadBadge !== undefined ? widgetSettings.showUnreadBadge : widgetMetadata.showUnreadBadge
|
||||
readonly property bool hideWhenZero: widgetSettings.hideWhenZero !== undefined ? widgetSettings.hideWhenZero : widgetMetadata.hideWhenZero
|
||||
readonly property bool hideWhenZeroUnread: widgetSettings.hideWhenZeroUnread !== undefined ? widgetSettings.hideWhenZeroUnread : widgetMetadata.hideWhenZeroUnread
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
function computeUnreadCount() {
|
||||
var since = NotificationService.lastSeenTs;
|
||||
@@ -56,9 +75,7 @@ NIconButton {
|
||||
tooltipText: NotificationService.doNotDisturb ? I18n.tr("tooltips.open-notification-history-enable-dnd") : I18n.tr("tooltips.open-notification-history-enable-dnd")
|
||||
tooltipDirection: BarService.getTooltipDirection(screen?.name)
|
||||
colorBg: Style.capsuleColor
|
||||
colorFg: Color.mOnSurface
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
colorFg: Color.resolveColorKey(iconColorKey)
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
visible: !((hideWhenZero && NotificationService.historyList.count === 0) || (hideWhenZeroUnread && count === 0))
|
||||
@@ -86,10 +103,8 @@ NIconButton {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "toggle-dnd") {
|
||||
NotificationService.doNotDisturb = !NotificationService.doNotDisturb;
|
||||
@@ -107,26 +122,22 @@ NIconButton {
|
||||
}
|
||||
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
|
||||
Loader {
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
anchors.rightMargin: 2
|
||||
anchors.topMargin: 1
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenterOffset: parent.baseSize / 4
|
||||
anchors.verticalCenterOffset: -parent.baseSize / 4
|
||||
z: 2
|
||||
active: showUnreadBadge
|
||||
sourceComponent: Rectangle {
|
||||
id: badge
|
||||
height: 8
|
||||
height: 7
|
||||
width: height
|
||||
radius: Style.radiusXS
|
||||
color: Color.mError
|
||||
color: root.hovering ? Color.mOnHover : (root.badgeColor || Color.mError)
|
||||
border.color: Color.mSurface
|
||||
border.width: Style.borderS
|
||||
visible: count > 0
|
||||
|
||||
@@ -12,6 +12,26 @@ NIconButton {
|
||||
|
||||
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]
|
||||
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 iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
|
||||
|
||||
baseSize: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
@@ -22,11 +42,33 @@ NIconButton {
|
||||
})
|
||||
tooltipDirection: BarService.getTooltipDirection(screen?.name)
|
||||
colorBg: (PowerProfileService.profile === PowerProfile.Balanced) ? Style.capsuleColor : Color.mPrimary
|
||||
colorFg: (PowerProfileService.profile === PowerProfile.Balanced) ? Color.mOnSurface : Color.mOnPrimary
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
colorFg: (PowerProfileService.profile === PowerProfile.Balanced) ? Color.resolveColorKey(iconColorKey) : Color.mOnPrimary
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
onClicked: PowerProfileService.cycleProfile()
|
||||
onRightClicked: PowerProfileService.cycleProfileReverse()
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onRightClicked: {
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,9 +19,11 @@ NIconButton {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -29,34 +31,16 @@ NIconButton {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string colorName: widgetSettings.colorName !== undefined ? widgetSettings.colorName : widgetMetadata.colorName
|
||||
readonly property string iconColorKey: (widgetSettings.iconColor !== undefined) ? widgetSettings.iconColor : widgetMetadata.iconColor
|
||||
|
||||
readonly property color iconColor: {
|
||||
switch (colorName) {
|
||||
case "primary":
|
||||
return Color.mPrimary;
|
||||
case "secondary":
|
||||
return Color.mSecondary;
|
||||
case "tertiary":
|
||||
return Color.mTertiary;
|
||||
case "error":
|
||||
return Color.mError;
|
||||
case "onSurface":
|
||||
default:
|
||||
return Color.mOnSurface;
|
||||
}
|
||||
}
|
||||
|
||||
baseSize: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
baseSize: Style.getCapsuleHeightForScreen(screenName)
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
icon: "power"
|
||||
tooltipText: I18n.tr("tooltips.session-menu")
|
||||
tooltipDirection: BarService.getTooltipDirection(screen?.name)
|
||||
tooltipDirection: BarService.getTooltipDirection(screenName)
|
||||
colorBg: Style.capsuleColor
|
||||
colorFg: root.iconColor
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
colorFg: Color.resolveColorKey(iconColorKey)
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
@@ -72,10 +56,8 @@ NIconButton {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
@@ -85,10 +67,6 @@ NIconButton {
|
||||
|
||||
onClicked: PanelService.getPanel("sessionMenuPanel", screen)?.toggle()
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,9 +17,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -27,9 +29,9 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(screen?.name)
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(screenName)
|
||||
readonly property int spacerSize: widgetSettings.width !== undefined ? widgetSettings.width : widgetMetadata.width
|
||||
|
||||
implicitWidth: isBarVertical ? barHeight : spacerSize
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+304
-306
@@ -10,7 +10,7 @@ import qs.Services.System
|
||||
import qs.Services.UI
|
||||
import qs.Widgets
|
||||
|
||||
Rectangle {
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property ShellScreen screen
|
||||
@@ -21,16 +21,18 @@ Rectangle {
|
||||
property int sectionWidgetIndex: -1
|
||||
property int sectionWidgetsCount: 0
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
// Explicit screenName property ensures reactive binding when screen changes
|
||||
readonly property string screenName: screen ? screen.name : ""
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(screen?.name)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screen?.name)
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(screenName)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screenName)
|
||||
|
||||
property var widgetMetadata: BarWidgetRegistry.widgetMetadata[widgetId]
|
||||
property var widgetSettings: {
|
||||
if (section && sectionWidgetIndex >= 0) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -59,19 +61,21 @@ Rectangle {
|
||||
}
|
||||
|
||||
readonly property int titleWidth: {
|
||||
if (smartWidth && showTitle && !isVerticalBar && combinedModel.length > 0) {
|
||||
var entriesCount = combinedModel.length;
|
||||
var baseWidth = 140;
|
||||
var calculatedWidth = baseWidth / Math.sqrt(entriesCount);
|
||||
// First, use user-defined title width if set
|
||||
var calculatedWidth = (widgetSettings.titleWidth !== undefined) ? widgetSettings.titleWidth : widgetMetadata.titleWidth;
|
||||
|
||||
// Second, shrink title width if it exceeds maxTaskbarWidth when smartWidth is enabled
|
||||
if (smartWidth && combinedModel.length > 0) {
|
||||
if (maxTaskbarWidth > 0) {
|
||||
var entriesCount = combinedModel.length;
|
||||
var maxWidthPerEntry = (maxTaskbarWidth / entriesCount) - itemSize - Style.marginS - Style.marginXL;
|
||||
calculatedWidth = Math.min(calculatedWidth, maxWidthPerEntry);
|
||||
}
|
||||
|
||||
return Math.max(Math.round(calculatedWidth), 20);
|
||||
calculatedWidth = Math.max(Math.round(calculatedWidth), 20);
|
||||
}
|
||||
return (widgetSettings.titleWidth !== undefined) ? widgetSettings.titleWidth : widgetMetadata.titleWidth;
|
||||
|
||||
return calculatedWidth;
|
||||
}
|
||||
readonly property bool showPinnedApps: (widgetSettings.showPinnedApps !== undefined) ? widgetSettings.showPinnedApps : widgetMetadata.showPinnedApps
|
||||
|
||||
@@ -391,9 +395,9 @@ Rectangle {
|
||||
Logger.d("Taskbar", "Executing terminal app manually: " + app.name);
|
||||
const terminal = Settings.data.appLauncher.terminalCommand.split(" ");
|
||||
const command = terminal.concat(app.command);
|
||||
Quickshell.execDetached(command);
|
||||
CompositorService.spawn(command);
|
||||
} else if (app.command && app.command.length > 0) {
|
||||
Quickshell.execDetached(app.command);
|
||||
CompositorService.spawn(app.command);
|
||||
} else if (app.execute) {
|
||||
app.execute();
|
||||
} else {
|
||||
@@ -458,10 +462,8 @@ Rectangle {
|
||||
return items;
|
||||
}
|
||||
onTriggered: (action, item) => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(root.screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(root.screen);
|
||||
|
||||
// Look up the window fresh each time to avoid stale references
|
||||
const selectedWindow = root.getSelectedWindow();
|
||||
@@ -589,11 +591,12 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
implicitWidth: {
|
||||
// Content dimensions for implicit sizing
|
||||
readonly property real contentWidth: {
|
||||
if (!visible)
|
||||
return 0;
|
||||
if (isVerticalBar)
|
||||
return capsuleHeight;
|
||||
return barHeight;
|
||||
|
||||
var calculatedWidth = showTitle ? taskbarLayout.implicitWidth : taskbarLayout.implicitWidth + Style.marginXL;
|
||||
|
||||
@@ -604,311 +607,329 @@ Rectangle {
|
||||
|
||||
return Math.round(calculatedWidth);
|
||||
}
|
||||
implicitHeight: visible ? (isVerticalBar ? Math.round(taskbarLayout.implicitHeight + Style.marginXL) : capsuleHeight) : 0
|
||||
radius: Style.radiusM
|
||||
color: Style.capsuleColor
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
readonly property real contentHeight: visible ? (isVerticalBar ? Math.round(taskbarLayout.implicitHeight + Style.marginS * 2) : capsuleHeight) : 0
|
||||
|
||||
GridLayout {
|
||||
id: taskbarLayout
|
||||
implicitWidth: contentWidth
|
||||
implicitHeight: contentHeight
|
||||
|
||||
// Pixel-perfect centering
|
||||
x: isVerticalBar ? Style.pixelAlignCenter(parent.width, width) : ((root.showTitle) ? Style.pixelAlignCenter(parent.width, width) : Style.marginM)
|
||||
y: Style.pixelAlignCenter(parent.height, height)
|
||||
// Visual capsule centered in parent
|
||||
Rectangle {
|
||||
id: visualCapsule
|
||||
width: root.contentWidth
|
||||
height: root.contentHeight
|
||||
anchors.centerIn: parent
|
||||
radius: Style.radiusM
|
||||
color: Style.capsuleColor
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
// Configure GridLayout to behave like RowLayout or ColumnLayout
|
||||
rows: isVerticalBar ? -1 : 1 // -1 means unlimited
|
||||
columns: isVerticalBar ? 1 : -1 // -1 means unlimited
|
||||
GridLayout {
|
||||
id: taskbarLayout
|
||||
|
||||
rowSpacing: isVerticalBar ? Style.marginXXS : 0
|
||||
columnSpacing: isVerticalBar ? 0 : Style.marginXXS
|
||||
// Pixel-perfect centering
|
||||
x: isVerticalBar ? Style.pixelAlignCenter(parent.width, width) : ((root.showTitle) ? Style.pixelAlignCenter(parent.width, width) : Style.marginM)
|
||||
y: Style.pixelAlignCenter(parent.height, height)
|
||||
|
||||
Repeater {
|
||||
model: root.combinedModel
|
||||
delegate: Item {
|
||||
id: taskbarItem
|
||||
required property var modelData
|
||||
required property int index
|
||||
property ShellScreen screen: root.screen
|
||||
// Configure GridLayout to behave like RowLayout or ColumnLayout
|
||||
rows: isVerticalBar ? -1 : 1 // -1 means unlimited
|
||||
columns: isVerticalBar ? 1 : -1 // -1 means unlimited
|
||||
|
||||
readonly property bool isRunning: modelData.window !== null
|
||||
readonly property bool isPinned: modelData.type === "pinned" || modelData.type === "pinned-running"
|
||||
readonly property bool isFocused: isRunning && modelData.window && modelData.window.isFocused
|
||||
readonly property bool isPinnedRunning: isPinned && isRunning && !isFocused
|
||||
readonly property bool isHovered: root.hoveredWindowId === modelData.id
|
||||
rowSpacing: isVerticalBar ? Style.marginXXS : 0
|
||||
columnSpacing: isVerticalBar ? 0 : Style.marginXXS
|
||||
|
||||
readonly property bool shouldShowTitle: root.showTitle && modelData.type !== "pinned"
|
||||
readonly property real itemSpacing: Style.marginS
|
||||
readonly property real contentWidth: shouldShowTitle ? root.itemSize + itemSpacing + root.titleWidth : root.itemSize
|
||||
Repeater {
|
||||
model: root.combinedModel
|
||||
delegate: Item {
|
||||
id: taskbarItem
|
||||
required property var modelData
|
||||
required property int index
|
||||
property ShellScreen screen: root.screen
|
||||
|
||||
readonly property string title: modelData.title || modelData.appId || "Unknown application"
|
||||
readonly property color titleBgColor: (isHovered || isFocused) ? Color.mHover : Style.capsuleColor
|
||||
readonly property color titleFgColor: (isHovered || isFocused) ? Color.mOnHover : Color.mOnSurface
|
||||
readonly property bool isRunning: modelData.window !== null
|
||||
readonly property bool isPinned: modelData.type === "pinned" || modelData.type === "pinned-running"
|
||||
readonly property bool isFocused: isRunning && modelData.window && modelData.window.isFocused
|
||||
readonly property bool isPinnedRunning: isPinned && isRunning && !isFocused
|
||||
readonly property bool isHovered: root.hoveredWindowId === modelData.id
|
||||
|
||||
Layout.preferredWidth: root.showTitle ? Math.round(contentWidth + Style.marginXL) : Math.round(contentWidth) // Add margins for both pinned and running apps
|
||||
Layout.preferredHeight: root.itemSize
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
readonly property bool shouldShowTitle: root.showTitle && modelData.type !== "pinned"
|
||||
readonly property real itemSpacing: Style.marginS
|
||||
readonly property real contentWidth: shouldShowTitle ? root.itemSize + itemSpacing + root.titleWidth : root.itemSize
|
||||
|
||||
// Ensure dragged item is on top
|
||||
z: (root.dragSourceIndex === index) ? 1000 : 1
|
||||
readonly property string title: modelData.title || modelData.appId || "Unknown application"
|
||||
readonly property color titleBgColor: (isHovered || isFocused) ? Color.mHover : Style.capsuleColor
|
||||
readonly property color titleFgColor: (isHovered || isFocused) ? Color.mOnHover : Color.mOnSurface
|
||||
|
||||
property int modelIndex: index
|
||||
objectName: "taskbarAppItem"
|
||||
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.preferredHeight: root.isVerticalBar ? root.itemSize : root.barHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
|
||||
DropArea {
|
||||
anchors.fill: parent
|
||||
keys: ["taskbar-app"]
|
||||
onEntered: function (drag) {
|
||||
if (drag.source && drag.source.objectName === "taskbarAppItem") {
|
||||
root.dragTargetIndex = taskbarItem.modelIndex;
|
||||
// Ensure dragged item is on top
|
||||
z: (root.dragSourceIndex === index) ? 1000 : 1
|
||||
|
||||
property int modelIndex: index
|
||||
objectName: "taskbarAppItem"
|
||||
|
||||
DropArea {
|
||||
anchors.fill: parent
|
||||
keys: ["taskbar-app"]
|
||||
onEntered: function (drag) {
|
||||
if (drag.source && drag.source.objectName === "taskbarAppItem") {
|
||||
root.dragTargetIndex = taskbarItem.modelIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
onExited: function () {
|
||||
if (root.dragTargetIndex === taskbarItem.modelIndex) {
|
||||
onExited: function () {
|
||||
if (root.dragTargetIndex === taskbarItem.modelIndex) {
|
||||
root.dragTargetIndex = -1;
|
||||
}
|
||||
}
|
||||
onDropped: function (drop) {
|
||||
root.dragSourceIndex = -1;
|
||||
root.dragTargetIndex = -1;
|
||||
}
|
||||
}
|
||||
onDropped: function (drop) {
|
||||
root.dragSourceIndex = -1;
|
||||
root.dragTargetIndex = -1;
|
||||
Logger.d("Taskbar", "Dropped! Source: " + (drop.source ? drop.source.objectName : "null") + " Index: " + (drop.source ? drop.source.modelIndex : "?") + " -> Target Index: " + taskbarItem.modelIndex);
|
||||
if (drop.source && drop.source.objectName === "taskbarAppItem" && drop.source !== taskbarItem) {
|
||||
root.reorderApps(drop.source.modelIndex, taskbarItem.modelIndex);
|
||||
} else {
|
||||
Logger.d("Taskbar", "Drop ignored. Source objectName: " + (drop.source ? drop.source.objectName : "null"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: draggableContent
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
anchors.centerIn: dragging ? undefined : parent
|
||||
|
||||
// Visual shifting logic
|
||||
readonly property bool isDragged: root.dragSourceIndex === index
|
||||
property real shiftOffset: 0
|
||||
|
||||
// Calculate shift based on drag state
|
||||
// If I am NOT the dragged item, but I am in the path of the drag
|
||||
Binding on shiftOffset {
|
||||
value: {
|
||||
if (root.dragSourceIndex !== -1 && root.dragTargetIndex !== -1 && !draggableContent.isDragged) {
|
||||
if (root.dragSourceIndex < root.dragTargetIndex) {
|
||||
// Dragging Right: Items between source and target shift Left
|
||||
if (index > root.dragSourceIndex && index <= root.dragTargetIndex) {
|
||||
return -1 * (root.isVerticalBar ? root.itemSize : draggableContent.width); // Simple approximation, could be refined
|
||||
}
|
||||
} else if (root.dragSourceIndex > root.dragTargetIndex) {
|
||||
// Dragging Left: Items between target and source shift Right
|
||||
if (index >= root.dragTargetIndex && index < root.dragSourceIndex) {
|
||||
return (root.isVerticalBar ? root.itemSize : draggableContent.width);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
transform: Translate {
|
||||
x: !root.isVerticalBar ? draggableContent.shiftOffset : 0
|
||||
y: root.isVerticalBar ? draggableContent.shiftOffset : 0
|
||||
|
||||
Behavior on x {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.OutQuad
|
||||
}
|
||||
}
|
||||
Behavior on y {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.OutQuad
|
||||
Logger.d("Taskbar", "Dropped! Source: " + (drop.source ? drop.source.objectName : "null") + " Index: " + (drop.source ? drop.source.modelIndex : "?") + " -> Target Index: " + taskbarItem.modelIndex);
|
||||
if (drop.source && drop.source.objectName === "taskbarAppItem" && drop.source !== taskbarItem) {
|
||||
root.reorderApps(drop.source.modelIndex, taskbarItem.modelIndex);
|
||||
} else {
|
||||
Logger.d("Taskbar", "Drop ignored. Source objectName: " + (drop.source ? drop.source.objectName : "null"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
property bool dragging: taskbarMouseArea.drag.active
|
||||
onDraggingChanged: {
|
||||
if (dragging) {
|
||||
root.dragSourceIndex = index;
|
||||
} else {
|
||||
// Don't reset immediately on release to allow drop to handle it,
|
||||
// or use a timer if needed, but drop handler usually fires.
|
||||
// However, if dropped outside, we need to reset.
|
||||
// Let's reset if not handled by drop area quickly?
|
||||
// Actually, drag.active becomes false on release.
|
||||
// We might want to clear it if no drop happened.
|
||||
if (root.dragSourceIndex === index) {
|
||||
// Slight delay/check? For now, let DropArea handle reset on success.
|
||||
// If cancelled (dropped nowhere), we should reset.
|
||||
Qt.callLater(() => {
|
||||
if (!taskbarMouseArea.drag.active && root.dragSourceIndex === index) {
|
||||
root.dragSourceIndex = -1;
|
||||
root.dragTargetIndex = -1;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Drag.active: dragging
|
||||
Drag.source: taskbarItem
|
||||
Drag.hotSpot.x: width / 2
|
||||
Drag.hotSpot.y: height / 2
|
||||
Drag.keys: ["taskbar-app"]
|
||||
|
||||
z: dragging ? 1000 : 0
|
||||
scale: dragging ? 1.05 : 1.0
|
||||
Behavior on scale {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: titleBackground
|
||||
visible: shouldShowTitle
|
||||
anchors.centerIn: parent
|
||||
Item {
|
||||
id: draggableContent
|
||||
width: parent.width
|
||||
height: root.height
|
||||
color: titleBgColor
|
||||
radius: Style.radiusM
|
||||
height: parent.height
|
||||
anchors.centerIn: dragging ? undefined : parent
|
||||
|
||||
Behavior on color {
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.InOutQuad
|
||||
// Visual shifting logic
|
||||
readonly property bool isDragged: root.dragSourceIndex === index
|
||||
property real shiftOffset: 0
|
||||
|
||||
// Calculate shift based on drag state
|
||||
// If I am NOT the dragged item, but I am in the path of the drag
|
||||
Binding on shiftOffset {
|
||||
value: {
|
||||
if (root.dragSourceIndex !== -1 && root.dragTargetIndex !== -1 && !draggableContent.isDragged) {
|
||||
if (root.dragSourceIndex < root.dragTargetIndex) {
|
||||
// Dragging Right: Items between source and target shift Left
|
||||
if (index > root.dragSourceIndex && index <= root.dragTargetIndex) {
|
||||
return -1 * (root.isVerticalBar ? root.itemSize : draggableContent.width); // Simple approximation, could be refined
|
||||
}
|
||||
} else if (root.dragSourceIndex > root.dragTargetIndex) {
|
||||
// Dragging Left: Items between target and source shift Right
|
||||
if (index >= root.dragTargetIndex && index < root.dragSourceIndex) {
|
||||
return (root.isVerticalBar ? root.itemSize : draggableContent.width);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.centerIn: parent
|
||||
width: taskbarItem.contentWidth
|
||||
height: parent.height
|
||||
color: "transparent"
|
||||
transform: Translate {
|
||||
x: !root.isVerticalBar ? draggableContent.shiftOffset : 0
|
||||
y: root.isVerticalBar ? draggableContent.shiftOffset : 0
|
||||
|
||||
RowLayout {
|
||||
id: itemLayout
|
||||
anchors.fill: parent
|
||||
spacing: taskbarItem.itemSpacing
|
||||
Behavior on x {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.OutQuad
|
||||
}
|
||||
}
|
||||
Behavior on y {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.OutQuad
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: root.itemSize
|
||||
Layout.preferredHeight: root.itemSize
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
property bool dragging: taskbarMouseArea.drag.active
|
||||
onDraggingChanged: {
|
||||
if (dragging) {
|
||||
root.dragSourceIndex = index;
|
||||
} else {
|
||||
// Don't reset immediately on release to allow drop to handle it,
|
||||
// or use a timer if needed, but drop handler usually fires.
|
||||
// However, if dropped outside, we need to reset.
|
||||
// Let's reset if not handled by drop area quickly?
|
||||
// Actually, drag.active becomes false on release.
|
||||
// We might want to clear it if no drop happened.
|
||||
if (root.dragSourceIndex === index) {
|
||||
// Slight delay/check? For now, let DropArea handle reset on success.
|
||||
// If cancelled (dropped nowhere), we should reset.
|
||||
Qt.callLater(() => {
|
||||
if (!taskbarMouseArea.drag.active && root.dragSourceIndex === index) {
|
||||
root.dragSourceIndex = -1;
|
||||
root.dragTargetIndex = -1;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IconImage {
|
||||
id: appIcon
|
||||
anchors.fill: parent
|
||||
Drag.active: dragging
|
||||
Drag.source: taskbarItem
|
||||
Drag.hotSpot.x: width / 2
|
||||
Drag.hotSpot.y: height / 2
|
||||
Drag.keys: ["taskbar-app"]
|
||||
|
||||
source: ThemeIcons.iconForAppId(taskbarItem.modelData.appId)
|
||||
smooth: true
|
||||
asynchronous: true
|
||||
z: dragging ? 1000 : 0
|
||||
scale: dragging ? 1.05 : 1.0
|
||||
Behavior on scale {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
}
|
||||
}
|
||||
|
||||
// Apply dock shader to all taskbar icons
|
||||
layer.enabled: widgetSettings.colorizeIcons !== false
|
||||
layer.effect: ShaderEffect {
|
||||
property color targetColor: Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mSurfaceVariant
|
||||
property real colorizeMode: 0.0 // Dock mode (grayscale)
|
||||
Rectangle {
|
||||
id: titleBackground
|
||||
visible: shouldShowTitle
|
||||
anchors.centerIn: parent
|
||||
width: parent.width
|
||||
height: root.capsuleHeight
|
||||
color: titleBgColor
|
||||
radius: Style.radiusM
|
||||
|
||||
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/appicon_colorize.frag.qsb")
|
||||
Behavior on color {
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.centerIn: parent
|
||||
width: taskbarItem.contentWidth
|
||||
height: parent.height
|
||||
color: "transparent"
|
||||
|
||||
RowLayout {
|
||||
id: itemLayout
|
||||
anchors.fill: parent
|
||||
spacing: taskbarItem.itemSpacing
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: root.itemSize
|
||||
Layout.preferredHeight: root.itemSize
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
|
||||
IconImage {
|
||||
id: appIcon
|
||||
anchors.fill: parent
|
||||
|
||||
source: ThemeIcons.iconForAppId(taskbarItem.modelData.appId)
|
||||
smooth: true
|
||||
asynchronous: true
|
||||
|
||||
// Apply dock shader to all taskbar icons
|
||||
layer.enabled: widgetSettings.colorizeIcons !== false
|
||||
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")
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: iconBackground
|
||||
visible: !shouldShowTitle
|
||||
anchors.bottomMargin: -2
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: Style.toOdd(root.itemSize * 0.25)
|
||||
height: 4
|
||||
color: taskbarItem.isFocused ? Color.mPrimary : (taskbarItem.isHovered ? Color.mHover : "transparent")
|
||||
radius: Math.min(Style.radiusXXS, width / 2)
|
||||
|
||||
Behavior on color {
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: iconBackground
|
||||
visible: !shouldShowTitle
|
||||
anchors.bottomMargin: -2
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: Style.toOdd(root.itemSize * 0.25)
|
||||
height: 4
|
||||
color: taskbarItem.isFocused ? Color.mPrimary : "transparent"
|
||||
radius: Math.min(Style.radiusXXS, width / 2)
|
||||
NText {
|
||||
id: titleText
|
||||
visible: shouldShowTitle
|
||||
Layout.preferredWidth: root.titleWidth
|
||||
Layout.preferredHeight: root.itemSize
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.fillWidth: false
|
||||
|
||||
text: taskbarItem.title
|
||||
elide: Text.ElideRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
|
||||
pointSize: barFontSize
|
||||
color: titleFgColor
|
||||
opacity: Style.opacityFull
|
||||
}
|
||||
}
|
||||
|
||||
NText {
|
||||
id: titleText
|
||||
visible: shouldShowTitle
|
||||
Layout.preferredWidth: root.titleWidth
|
||||
Layout.preferredHeight: root.itemSize
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.fillWidth: false
|
||||
|
||||
text: taskbarItem.title
|
||||
elide: Text.ElideRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
|
||||
pointSize: barFontSize
|
||||
color: titleFgColor
|
||||
opacity: Style.opacityFull
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: taskbarMouseArea
|
||||
objectName: "taskbarMouseArea"
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
MouseArea {
|
||||
id: taskbarMouseArea
|
||||
objectName: "taskbarMouseArea"
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||
|
||||
drag.target: draggableContent
|
||||
drag.axis: root.isVerticalBar ? Drag.YAxis : Drag.XAxis
|
||||
preventStealing: true
|
||||
drag.target: draggableContent
|
||||
drag.axis: root.isVerticalBar ? Drag.YAxis : Drag.XAxis
|
||||
preventStealing: true
|
||||
|
||||
onPressed: {
|
||||
// Constrain drag to roughly the taskbar area but allow some freedom
|
||||
// Or just let it be free since we only care about drops
|
||||
}
|
||||
|
||||
onReleased: {
|
||||
if (draggableContent.Drag.active) {
|
||||
draggableContent.Drag.drop();
|
||||
onPressed: {
|
||||
// Constrain drag to roughly the taskbar area but allow some freedom
|
||||
// Or just let it be free since we only care about drops
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: function (mouse) {
|
||||
if (!modelData)
|
||||
return;
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
if (isRunning && modelData.window) {
|
||||
// Running app - focus it
|
||||
try {
|
||||
CompositorService.focusWindow(modelData.window);
|
||||
} catch (error) {
|
||||
Logger.e("Taskbar", "Failed to activate toplevel: " + error);
|
||||
}
|
||||
} else if (isPinned) {
|
||||
// Pinned app not running - launch it
|
||||
root.launchPinnedApp(modelData.appId);
|
||||
onReleased: {
|
||||
if (draggableContent.Drag.active) {
|
||||
draggableContent.Drag.drop();
|
||||
}
|
||||
} else if (mouse.button === Qt.RightButton) {
|
||||
}
|
||||
|
||||
onClicked: mouse => {
|
||||
if (!modelData)
|
||||
return;
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
if (isRunning && modelData.window) {
|
||||
// Running app - focus it
|
||||
try {
|
||||
CompositorService.focusWindow(modelData.window);
|
||||
} catch (error) {
|
||||
Logger.e("Taskbar", "Failed to activate toplevel: " + error);
|
||||
}
|
||||
} else if (isPinned) {
|
||||
// Pinned app not running - launch it
|
||||
root.launchPinnedApp(modelData.appId);
|
||||
}
|
||||
} else if (mouse.button === Qt.RightButton) {
|
||||
TooltipService.hide();
|
||||
// Only show context menu for running apps
|
||||
if (isRunning && modelData.window) {
|
||||
root.selectedWindowId = modelData.id;
|
||||
root.selectedAppId = modelData.appId;
|
||||
root.openTaskbarContextMenu(taskbarItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
onEntered: {
|
||||
root.hoveredWindowId = taskbarItem.modelData.id;
|
||||
TooltipService.show(taskbarItem, taskbarItem.title, BarService.getTooltipDirection(root.screen?.name));
|
||||
}
|
||||
onExited: {
|
||||
root.hoveredWindowId = "";
|
||||
TooltipService.hide();
|
||||
// Only show context menu for running apps
|
||||
if (isRunning && modelData.window) {
|
||||
root.selectedWindowId = modelData.id;
|
||||
root.selectedAppId = modelData.appId;
|
||||
root.openTaskbarContextMenu(taskbarItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
onEntered: {
|
||||
root.hoveredWindowId = taskbarItem.modelData.id;
|
||||
TooltipService.show(taskbarItem, taskbarItem.title, BarService.getTooltipDirection(root.screen?.name));
|
||||
}
|
||||
onExited: {
|
||||
root.hoveredWindowId = "";
|
||||
TooltipService.hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -964,30 +985,7 @@ Rectangle {
|
||||
// Set the model directly
|
||||
contextMenu.model = items;
|
||||
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.open();
|
||||
|
||||
// Calculate menu position
|
||||
const globalPos = item.mapToItem(root, 0, 0);
|
||||
let menuX, menuY;
|
||||
if (root.barPosition === "top") {
|
||||
menuX = globalPos.x + (item.width / 2) - (contextMenu.implicitWidth / 2);
|
||||
menuY = barHeight + Style.marginS;
|
||||
} else if (root.barPosition === "bottom") {
|
||||
const menuHeight = 12 + contextMenu.model.length * contextMenu.itemHeight;
|
||||
menuX = globalPos.x + (item.width / 2) - (contextMenu.implicitWidth / 2);
|
||||
menuY = -menuHeight - Style.marginS;
|
||||
} else if (root.barPosition === "left") {
|
||||
menuX = barHeight + Style.marginS;
|
||||
menuY = globalPos.y + (item.height / 2) - (contextMenu.implicitHeight / 2);
|
||||
} else {
|
||||
// right
|
||||
menuX = -contextMenu.implicitWidth - Style.marginS;
|
||||
menuY = globalPos.y + (item.height / 2) - (contextMenu.implicitHeight / 2);
|
||||
}
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
// Anchor to root (stable) but center horizontally on the clicked item
|
||||
PanelService.showContextMenu(contextMenu, root, screen, item);
|
||||
}
|
||||
}
|
||||
|
||||
+178
-95
@@ -10,7 +10,7 @@ import qs.Modules.Bar.Extras
|
||||
import qs.Services.UI
|
||||
import qs.Widgets
|
||||
|
||||
Rectangle {
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property ShellScreen screen
|
||||
@@ -43,9 +43,11 @@ Rectangle {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -53,10 +55,10 @@ Rectangle {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(screen?.name)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(screenName)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||
readonly property bool density: Settings.data.bar.density
|
||||
readonly property int iconSize: Style.toOdd(capsuleHeight * 0.65)
|
||||
|
||||
@@ -64,8 +66,11 @@ Rectangle {
|
||||
property var pinned: widgetSettings.pinned || widgetMetadata.pinned || [] // Pinned items (shown inline)
|
||||
property bool drawerEnabled: widgetSettings.drawerEnabled !== undefined ? widgetSettings.drawerEnabled : (widgetMetadata.drawerEnabled !== undefined ? widgetMetadata.drawerEnabled : true) // Enable drawer panel
|
||||
property bool hidePassive: widgetSettings.hidePassive !== undefined ? widgetSettings.hidePassive : true // Hide passive status items
|
||||
readonly property string chevronColorKey: widgetSettings.chevronColor !== undefined ? widgetSettings.chevronColor : widgetMetadata.chevronColor
|
||||
readonly property color chevronColor: Color.resolveColorKey(chevronColorKey)
|
||||
property var filteredItems: [] // Items to show inline (pinned)
|
||||
property var dropdownItems: [] // Items to show in drawer (unpinned)
|
||||
property int hoveredItemIndex: -1 // Track hovered item for dot indicator
|
||||
|
||||
Timer {
|
||||
id: updateDebounceTimer
|
||||
@@ -115,8 +120,8 @@ Rectangle {
|
||||
function _performFilteredItemsUpdate() {
|
||||
// Force a fresh read of settings to ensure we have the latest blacklist
|
||||
var currentSettings = {};
|
||||
if (section && sectionWidgetIndex >= 0) {
|
||||
var w = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var w = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (w && sectionWidgetIndex < w.length) {
|
||||
currentSettings = w[sectionWidgetIndex];
|
||||
}
|
||||
@@ -284,35 +289,73 @@ Rectangle {
|
||||
Component.onCompleted: {
|
||||
root.updateFilteredItems(); // Initial update
|
||||
}
|
||||
implicitWidth: isVertical ? capsuleHeight : Math.round(trayFlow.implicitWidth)
|
||||
implicitHeight: isVertical ? Math.round(trayFlow.implicitHeight) : capsuleHeight
|
||||
radius: Style.radiusM
|
||||
color: Style.capsuleColor
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
// Content dimensions for implicit sizing
|
||||
readonly property int visibleItemCount: (root.drawerEnabled && dropdownItems.length > 0 ? 1 : 0) + filteredItems.length
|
||||
readonly property real capsulePadding: 0
|
||||
readonly property real capsuleWidth: isVertical ? capsuleHeight : Math.round(trayFlow.implicitWidth + capsulePadding * 2)
|
||||
readonly property real capsuleContentHeight: isVertical ? Math.round(trayFlow.implicitHeight + capsulePadding * 2) : capsuleHeight
|
||||
|
||||
implicitWidth: isVertical ? barHeight : Math.round(trayFlow.implicitWidth + capsulePadding * 2)
|
||||
implicitHeight: isVertical ? Math.round(trayFlow.implicitHeight + capsulePadding * 2) : barHeight
|
||||
visible: filteredItems.length > 0 || dropdownItems.length > 0
|
||||
opacity: (filteredItems.length > 0 || dropdownItems.length > 0) ? 1.0 : 0.0
|
||||
|
||||
// Visual capsule centered in parent
|
||||
Rectangle {
|
||||
id: visualCapsule
|
||||
width: capsuleWidth
|
||||
height: capsuleContentHeight
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, height)
|
||||
radius: Style.radiusM
|
||||
color: Style.capsuleColor
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
}
|
||||
|
||||
NPopupContextMenu {
|
||||
id: chevronContextMenu
|
||||
|
||||
model: [
|
||||
{
|
||||
"label": I18n.tr("actions.widget-settings"),
|
||||
"action": "widget-settings",
|
||||
"icon": "settings"
|
||||
},
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
chevronContextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Flow {
|
||||
id: trayFlow
|
||||
spacing: Style.marginXS
|
||||
spacing: 0
|
||||
flow: isVertical ? Flow.TopToBottom : Flow.LeftToRight
|
||||
|
||||
// Pixel-perfect centering
|
||||
x: isVertical ? Style.pixelAlignCenter(parent.width, width) : 0
|
||||
y: isVertical ? 0 : Style.pixelAlignCenter(parent.height, height)
|
||||
// Position centered in capsule
|
||||
anchors.centerIn: visualCapsule
|
||||
|
||||
// Drawer opener (before items if opposite direction)
|
||||
NIconButton {
|
||||
id: chevronIconBefore
|
||||
visible: root.drawerEnabled && dropdownItems.length > 0 && BarService.getPillDirection(root)
|
||||
width: isVertical ? barHeight : capsuleHeight
|
||||
height: isVertical ? capsuleHeight : barHeight
|
||||
tooltipText: I18n.tr("tooltips.open-tray-dropdown")
|
||||
tooltipDirection: BarService.getTooltipDirection(root.screen?.name)
|
||||
baseSize: capsuleHeight
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: "transparent"
|
||||
colorFg: Settings.data.colorSchemes.darkMode ? Color.mOnSurface : Color.mOnPrimary
|
||||
colorFg: root.chevronColor
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
icon: {
|
||||
@@ -329,7 +372,7 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
onClicked: toggleDrawer(this)
|
||||
onRightClicked: toggleDrawer(this)
|
||||
onRightClicked: PanelService.showContextMenu(chevronContextMenu, this, screen)
|
||||
}
|
||||
|
||||
// Pinned items
|
||||
@@ -338,9 +381,22 @@ Rectangle {
|
||||
model: root.filteredItems
|
||||
|
||||
delegate: Item {
|
||||
width: capsuleHeight
|
||||
height: capsuleHeight
|
||||
id: trayDelegate
|
||||
required property var modelData
|
||||
required property int index
|
||||
width: isVertical ? barHeight : capsuleHeight
|
||||
height: isVertical ? capsuleHeight : barHeight
|
||||
visible: modelData
|
||||
readonly property bool isHovered: root.hoveredItemIndex === index
|
||||
|
||||
// Tooltip anchor representing the visual area (for proper tooltip positioning)
|
||||
Item {
|
||||
id: tooltipAnchor
|
||||
width: capsuleHeight
|
||||
height: capsuleHeight
|
||||
x: Style.pixelAlignCenter(parent.width, width)
|
||||
y: Style.pixelAlignCenter(parent.height, height)
|
||||
}
|
||||
|
||||
IconImage {
|
||||
id: trayIcon
|
||||
@@ -351,8 +407,6 @@ Rectangle {
|
||||
asynchronous: true
|
||||
backer.fillMode: Image.PreserveAspectFit
|
||||
|
||||
property bool menuJustOpened: false
|
||||
|
||||
source: {
|
||||
let icon = modelData?.icon || "";
|
||||
if (!icon) {
|
||||
@@ -378,82 +432,109 @@ Rectangle {
|
||||
|
||||
fragmentShader: Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/appicon_colorize.frag.qsb")
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
||||
onClicked: mouse => {
|
||||
if (!modelData) {
|
||||
return;
|
||||
}
|
||||
Rectangle {
|
||||
id: hoverIndicator
|
||||
anchors.bottom: trayIcon.bottom
|
||||
anchors.bottomMargin: -2
|
||||
anchors.horizontalCenter: trayIcon.horizontalCenter
|
||||
width: Style.toOdd(iconSize * 0.25)
|
||||
height: 4
|
||||
color: trayDelegate.isHovered ? Color.mHover : "transparent"
|
||||
radius: Math.min(Style.radiusXXS, width / 2)
|
||||
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
// Close any open menu first
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
Behavior on color {
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!modelData.onlyMenu) {
|
||||
modelData.activate();
|
||||
}
|
||||
} else if (mouse.button === Qt.MiddleButton) {
|
||||
// Close the menu if it was visible
|
||||
if (popupMenuWindow && popupMenuWindow.visible) {
|
||||
popupMenuWindow.close();
|
||||
return;
|
||||
}
|
||||
modelData.secondaryActivate && modelData.secondaryActivate();
|
||||
} else if (mouse.button === Qt.RightButton) {
|
||||
TooltipService.hideImmediately();
|
||||
|
||||
// Close the menu if it was visible
|
||||
if (popupMenuWindow && popupMenuWindow.visible) {
|
||||
popupMenuWindow.close();
|
||||
return;
|
||||
}
|
||||
|
||||
// Close any opened panel
|
||||
if ((PanelService.openedPanel !== null) && !PanelService.openedPanel.isClosing) {
|
||||
PanelService.openedPanel.close();
|
||||
}
|
||||
|
||||
if (modelData.hasMenu && modelData.menu && popupMenuWindow && trayMenu && trayMenu.item) {
|
||||
popupMenuWindow.open();
|
||||
|
||||
// Position menu based on bar position
|
||||
let menuX, menuY;
|
||||
if (barPosition === "left") {
|
||||
// For left bar: position menu to the right of the bar
|
||||
menuX = width + Style.marginM;
|
||||
menuY = 0;
|
||||
} else if (barPosition === "right") {
|
||||
// For right bar: position menu to the left of the bar
|
||||
menuX = -trayMenu.item.width - Style.marginM;
|
||||
menuY = 0;
|
||||
} else {
|
||||
// For horizontal bars: center horizontally and position below
|
||||
menuX = (width / 2) - (trayMenu.item.width / 2);
|
||||
menuY = (barPosition === "top") ? barHeight + Style.marginS - 2 : barHeight + Style.marginS - 2;
|
||||
}
|
||||
trayMenu.item.trayItem = modelData;
|
||||
trayMenu.item.widgetSection = root.section;
|
||||
trayMenu.item.widgetIndex = root.sectionWidgetIndex;
|
||||
trayMenu.item.showAt(parent, menuX, menuY);
|
||||
} else {
|
||||
Logger.d("Tray", "No menu available for", modelData.id, "or trayMenu not set");
|
||||
}
|
||||
}
|
||||
}
|
||||
onEntered: {
|
||||
MouseArea {
|
||||
id: itemMouseArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
||||
onContainsMouseChanged: {
|
||||
if (containsMouse) {
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
TooltipService.show(trayIcon, modelData.tooltipTitle || modelData.name || modelData.id || "Tray Item", BarService.getTooltipDirection(root.screen?.name));
|
||||
root.hoveredItemIndex = trayDelegate.index;
|
||||
TooltipService.show(tooltipAnchor, modelData.tooltipTitle || modelData.name || modelData.id || "Tray Item", BarService.getTooltipDirection(root.screen?.name));
|
||||
} else if (root.hoveredItemIndex === trayDelegate.index) {
|
||||
root.hoveredItemIndex = -1;
|
||||
TooltipService.hide(tooltipAnchor);
|
||||
}
|
||||
onExited: TooltipService.hide()
|
||||
}
|
||||
onClicked: mouse => {
|
||||
if (!modelData) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
// Close any open menu first
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
|
||||
if (!modelData.onlyMenu) {
|
||||
modelData.activate();
|
||||
}
|
||||
} else if (mouse.button === Qt.MiddleButton) {
|
||||
// Close the menu if it was visible
|
||||
if (popupMenuWindow && popupMenuWindow.visible) {
|
||||
popupMenuWindow.close();
|
||||
return;
|
||||
}
|
||||
modelData.secondaryActivate && modelData.secondaryActivate();
|
||||
} else if (mouse.button === Qt.RightButton) {
|
||||
TooltipService.hideImmediately();
|
||||
|
||||
// Close the menu if it was visible
|
||||
if (popupMenuWindow && popupMenuWindow.visible) {
|
||||
popupMenuWindow.close();
|
||||
return;
|
||||
}
|
||||
|
||||
// Close any opened panel
|
||||
if ((PanelService.openedPanel !== null) && !PanelService.openedPanel.isClosing) {
|
||||
PanelService.openedPanel.close();
|
||||
}
|
||||
|
||||
if (modelData.hasMenu && modelData.menu && trayMenu && trayMenu.item) {
|
||||
// Calculate menu position after ensuring menu is loaded
|
||||
const calculateAndShow = () => {
|
||||
// Position menu based on bar position, using tooltipAnchor for proper positioning
|
||||
// Increased spacing for better alignment with other context menus
|
||||
let menuX, menuY;
|
||||
if (barPosition === "left") {
|
||||
// For left bar: position menu to the right of the visual area
|
||||
menuX = tooltipAnchor.width + Style.marginL;
|
||||
menuY = 0;
|
||||
} else if (barPosition === "right") {
|
||||
// For right bar: position menu to the left of the visual area
|
||||
menuX = -trayMenu.item.implicitWidth - Style.marginL;
|
||||
menuY = 0;
|
||||
} else {
|
||||
// For horizontal bars: center horizontally and position below visual area
|
||||
menuX = (tooltipAnchor.width / 2) - (trayMenu.item.implicitWidth / 2);
|
||||
menuY = tooltipAnchor.height + Style.marginS;
|
||||
}
|
||||
|
||||
PanelService.showTrayMenu(root.screen, modelData, trayMenu.item, tooltipAnchor, menuX, menuY, root.section, root.sectionWidgetIndex);
|
||||
};
|
||||
|
||||
// Use Qt.callLater to ensure menu dimensions are calculated
|
||||
Qt.callLater(calculateAndShow);
|
||||
} else {
|
||||
Logger.d("Tray", "No menu available for", modelData.id, "or trayMenu not set");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -462,13 +543,15 @@ Rectangle {
|
||||
NIconButton {
|
||||
id: chevronIconAfter
|
||||
visible: root.drawerEnabled && dropdownItems.length > 0 && !BarService.getPillDirection(root)
|
||||
width: isVertical ? barHeight : capsuleHeight
|
||||
height: isVertical ? capsuleHeight : barHeight
|
||||
tooltipText: I18n.tr("tooltips.open-tray-dropdown")
|
||||
tooltipDirection: BarService.getTooltipDirection(root.screen?.name)
|
||||
baseSize: capsuleHeight
|
||||
applyUiScale: false
|
||||
customRadius: Style.radiusL
|
||||
colorBg: "transparent"
|
||||
colorFg: Color.mOnSurface
|
||||
colorFg: root.chevronColor
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
icon: {
|
||||
@@ -485,7 +568,7 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
onClicked: toggleDrawer(this)
|
||||
onRightClicked: toggleDrawer(this)
|
||||
onRightClicked: PanelService.showContextMenu(chevronContextMenu, this, screen)
|
||||
}
|
||||
}
|
||||
} // closes Flow
|
||||
}
|
||||
|
||||
+13
-12
@@ -18,9 +18,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -28,9 +30,11 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
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
|
||||
|
||||
implicitWidth: pill.width
|
||||
implicitHeight: pill.height
|
||||
@@ -71,10 +75,9 @@ Item {
|
||||
}
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (!action) {
|
||||
return;
|
||||
}
|
||||
@@ -99,6 +102,8 @@ Item {
|
||||
|
||||
screen: root.screen
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
customIconColor: Color.resolveColorKeyOptional(root.iconColorKey)
|
||||
customTextColor: Color.resolveColorKeyOptional(root.textColorKey)
|
||||
icon: VPNService.hasActiveConnection ? "shield-lock" : "shield"
|
||||
text: {
|
||||
if (VPNService.activeConnections.length > 0) {
|
||||
@@ -122,11 +127,7 @@ Item {
|
||||
forceOpen: !isBarVertical && root.displayMode === "alwaysShow"
|
||||
forceClose: isBarVertical || root.displayMode === "alwaysHide" || !pill.text
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(pill, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, pill, screen);
|
||||
}
|
||||
tooltipText: {
|
||||
if (pill.text !== "") {
|
||||
|
||||
@@ -21,9 +21,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -31,10 +33,12 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isBarVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property string displayMode: (widgetSettings.displayMode !== undefined) ? widgetSettings.displayMode : widgetMetadata.displayMode
|
||||
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
|
||||
|
||||
// Used to avoid opening the pill on Quickshell startup
|
||||
property bool firstVolumeReceived: false
|
||||
@@ -91,16 +95,13 @@ Item {
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
// Close the popup menu window before handling the action
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "toggle-mute") {
|
||||
AudioService.setOutputMuted(!AudioService.muted);
|
||||
} else if (action === "custom-command") {
|
||||
Quickshell.execDetached(["sh", "-lc", middleClickCommand]);
|
||||
Quickshell.execDetached(["sh", "-c", middleClickCommand]);
|
||||
} else if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
}
|
||||
@@ -112,6 +113,8 @@ Item {
|
||||
|
||||
screen: root.screen
|
||||
oppositeDirection: BarService.getPillDirection(root)
|
||||
customIconColor: Color.resolveColorKeyOptional(root.iconColorKey)
|
||||
customTextColor: Color.resolveColorKeyOptional(root.textColorKey)
|
||||
icon: AudioService.getOutputIcon()
|
||||
autoHide: false // Important to be false so we can hover as long as we want
|
||||
text: {
|
||||
@@ -147,15 +150,10 @@ Item {
|
||||
PanelService.getPanel("audioPanel", screen)?.toggle(this);
|
||||
}
|
||||
onRightClicked: {
|
||||
// Get the shared popup menu window for this screen
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(pill, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, pill, screen);
|
||||
}
|
||||
onMiddleClicked: {
|
||||
Quickshell.execDetached(["sh", "-lc", middleClickCommand]);
|
||||
Quickshell.execDetached(["sh", "-c", middleClickCommand]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,26 @@ NIconButton {
|
||||
|
||||
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]
|
||||
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 iconColorKey: widgetSettings.iconColor !== undefined ? widgetSettings.iconColor : widgetMetadata.iconColor
|
||||
|
||||
enabled: Settings.data.wallpaper.enabled
|
||||
baseSize: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
applyUiScale: false
|
||||
@@ -20,9 +40,7 @@ NIconButton {
|
||||
tooltipText: I18n.tr("tooltips.wallpaper-selector")
|
||||
tooltipDirection: BarService.getTooltipDirection(screen?.name)
|
||||
colorBg: Style.capsuleColor
|
||||
colorFg: Color.mOnSurface
|
||||
colorBorder: "transparent"
|
||||
colorBorderHover: "transparent"
|
||||
colorFg: Color.resolveColorKey(iconColorKey)
|
||||
border.color: Style.capsuleBorderColor
|
||||
border.width: Style.capsuleBorderWidth
|
||||
|
||||
@@ -35,16 +53,21 @@ NIconButton {
|
||||
"action": "random-wallpaper",
|
||||
"icon": "dice"
|
||||
},
|
||||
{
|
||||
"label": I18n.tr("actions.widget-settings"),
|
||||
"action": "widget-settings",
|
||||
"icon": "settings"
|
||||
},
|
||||
]
|
||||
|
||||
onTriggered: action => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
if (action === "random-wallpaper") {
|
||||
WallpaperService.setRandomWallpaper();
|
||||
} else if (action === "widget-settings") {
|
||||
BarService.openWidgetSettings(screen, section, sectionWidgetIndex, widgetId, widgetSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -58,10 +81,6 @@ NIconButton {
|
||||
}
|
||||
}
|
||||
onRightClicked: {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(root, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, root, screen);
|
||||
}
|
||||
}
|
||||
|
||||
+140
-388
@@ -24,9 +24,11 @@ Item {
|
||||
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) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screen?.name)[section];
|
||||
if (section && sectionWidgetIndex >= 0 && screenName) {
|
||||
var widgets = Settings.getBarWidgetsForScreen(screenName)[section];
|
||||
if (widgets && sectionWidgetIndex < widgets.length) {
|
||||
return widgets[sectionWidgetIndex];
|
||||
}
|
||||
@@ -34,12 +36,11 @@ Item {
|
||||
return {};
|
||||
}
|
||||
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
||||
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||
readonly property bool isVertical: barPosition === "left" || barPosition === "right"
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(screen?.name)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screen?.name)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screen?.name)
|
||||
readonly property real baseDimensionRatio: 0.65 * (widgetSettings.labelMode === "none" ? 0.75 : 1)
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(screenName)
|
||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screenName)
|
||||
|
||||
readonly property string labelMode: (widgetSettings.labelMode !== undefined) ? widgetSettings.labelMode : widgetMetadata.labelMode
|
||||
readonly property bool hasLabel: (labelMode !== "none")
|
||||
@@ -47,6 +48,12 @@ Item {
|
||||
readonly property bool followFocusedScreen: (widgetSettings.followFocusedScreen !== undefined) ? widgetSettings.followFocusedScreen : widgetMetadata.followFocusedScreen
|
||||
readonly property int characterCount: isVertical ? 2 : ((widgetSettings.characterCount !== undefined) ? widgetSettings.characterCount : widgetMetadata.characterCount)
|
||||
|
||||
// Pill size setting (0.5-1.0 range)
|
||||
readonly property real pillSize: (widgetSettings.pillSize !== undefined) ? widgetSettings.pillSize : widgetMetadata.pillSize
|
||||
|
||||
// When no label the pills are smaller
|
||||
readonly property real baseDimensionRatio: pillSize
|
||||
|
||||
// Grouped mode (show applications) settings
|
||||
readonly property bool showApplications: (widgetSettings.showApplications !== undefined) ? widgetSettings.showApplications : widgetMetadata.showApplications
|
||||
readonly property bool showLabelsOnlyWhenOccupied: (widgetSettings.showLabelsOnlyWhenOccupied !== undefined) ? widgetSettings.showLabelsOnlyWhenOccupied : widgetMetadata.showLabelsOnlyWhenOccupied
|
||||
@@ -54,7 +61,27 @@ 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 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)
|
||||
@@ -69,16 +96,12 @@ Item {
|
||||
function getSelectedWindow() {
|
||||
if (!selectedWindowId)
|
||||
return null;
|
||||
for (var i = 0; i < localWorkspaces.count; i++) {
|
||||
var ws = localWorkspaces.get(i);
|
||||
if (ws && ws.windows) {
|
||||
for (var j = 0; j < ws.windows.count; j++) {
|
||||
var win = ws.windows.get(j);
|
||||
// Using loose equality on purpose (==)
|
||||
if (win && (win.id == selectedWindowId || win.address == selectedWindowId)) {
|
||||
return win;
|
||||
}
|
||||
}
|
||||
// Search directly in CompositorService to get the live window object
|
||||
for (var i = 0; i < CompositorService.windows.count; i++) {
|
||||
var win = CompositorService.windows.get(i);
|
||||
// Using loose equality on purpose (==)
|
||||
if (win && (win.id == selectedWindowId || win.address == selectedWindowId)) {
|
||||
return win;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@@ -89,6 +112,8 @@ Item {
|
||||
|
||||
// Revision counter to force icon re-evaluation
|
||||
property int iconRevision: 0
|
||||
// Revision counter to force window list re-evaluation (for liveWindows binding in grouped mode)
|
||||
property int windowRevision: 0
|
||||
|
||||
property ListModel localWorkspaces: ListModel {}
|
||||
property int lastFocusedWorkspaceId: -1
|
||||
@@ -115,7 +140,7 @@ Item {
|
||||
|
||||
// Don't calculate text width if labels are off
|
||||
if (labelMode === "none") {
|
||||
return Math.round(d * factor);
|
||||
return Style.toOdd(d * factor);
|
||||
}
|
||||
|
||||
var displayText = ws.idx.toString();
|
||||
@@ -229,7 +254,9 @@ Item {
|
||||
}
|
||||
|
||||
onScreenChanged: refreshWorkspaces()
|
||||
onScreenNameChanged: refreshWorkspaces()
|
||||
onHideUnoccupiedChanged: refreshWorkspaces()
|
||||
onShowApplicationsChanged: refreshWorkspaces()
|
||||
|
||||
Connections {
|
||||
target: CompositorService
|
||||
@@ -238,11 +265,13 @@ Item {
|
||||
}
|
||||
function onWindowListChanged() {
|
||||
if (showApplications || showLabelsOnlyWhenOccupied) {
|
||||
root.windowRevision++;
|
||||
refreshWorkspaces();
|
||||
}
|
||||
}
|
||||
function onActiveWindowChanged() {
|
||||
if (showApplications) {
|
||||
root.windowRevision++;
|
||||
refreshWorkspaces();
|
||||
}
|
||||
}
|
||||
@@ -271,7 +300,8 @@ Item {
|
||||
const screenName = screen.name.toLowerCase();
|
||||
for (var i = 0; i < CompositorService.workspaces.count; i++) {
|
||||
const ws = CompositorService.workspaces.get(i);
|
||||
const matchesScreen = (followFocusedScreen && ws.output.toLowerCase() == focusedOutput) || (!followFocusedScreen && ws.output.toLowerCase() == screenName);
|
||||
// For global workspaces (e.g., LabWC), show all workspaces on all screens
|
||||
const matchesScreen = CompositorService.globalWorkspaces || (followFocusedScreen && ws.output.toLowerCase() == focusedOutput) || (!followFocusedScreen && ws.output.toLowerCase() == screenName);
|
||||
|
||||
if (!matchesScreen)
|
||||
continue;
|
||||
@@ -290,10 +320,13 @@ Item {
|
||||
isOccupied: ws.isOccupied
|
||||
};
|
||||
|
||||
if (showApplications) {
|
||||
workspaceData.windows = CompositorService.getWindowsForWorkspace(ws.id);
|
||||
if (ws.handle !== null && ws.handle !== undefined) {
|
||||
workspaceData.handle = ws.handle;
|
||||
}
|
||||
|
||||
// Windows are fetched live via liveWindows property in grouped mode
|
||||
// to avoid Qt 6.9 ListModel nested array serialization issues
|
||||
|
||||
targetList.push(workspaceData);
|
||||
}
|
||||
}
|
||||
@@ -424,10 +457,8 @@ Item {
|
||||
}
|
||||
|
||||
onTriggered: (action, item) => {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.close();
|
||||
}
|
||||
contextMenu.close();
|
||||
PanelService.closeContextMenu(screen);
|
||||
|
||||
const selectedWindow = root.getSelectedWindow();
|
||||
|
||||
@@ -469,11 +500,7 @@ Item {
|
||||
acceptedButtons: Qt.RightButton
|
||||
onClicked: mouse => {
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(workspaceBackground, screen);
|
||||
}
|
||||
PanelService.showContextMenu(contextMenu, workspaceBackground, screen);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -509,6 +536,8 @@ Item {
|
||||
var step = 120;
|
||||
if (Math.abs(root.wheelAccumulatedDelta) >= step) {
|
||||
var direction = root.wheelAccumulatedDelta > 0 ? -1 : 1;
|
||||
if (root.reverseScroll)
|
||||
direction *= -1;
|
||||
// For vertical layout, natural mapping: wheel up -> previous, down -> next (already handled by sign)
|
||||
// For horizontal layout, same mapping using vertical wheel
|
||||
root.switchByOffset(direction);
|
||||
@@ -525,173 +554,31 @@ Item {
|
||||
id: pillRow
|
||||
spacing: spacingBetweenPills
|
||||
x: horizontalPadding
|
||||
y: workspaceBackground.y + Style.pixelAlignCenter(workspaceBackground.height, height)
|
||||
y: 0
|
||||
visible: !isVertical && !showApplications
|
||||
|
||||
Repeater {
|
||||
id: workspaceRepeaterHorizontal
|
||||
model: localWorkspaces
|
||||
Item {
|
||||
id: workspacePillContainer
|
||||
height: Style.toOdd(capsuleHeight * root.baseDimensionRatio)
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "active"
|
||||
when: model.isActive
|
||||
PropertyChanges {
|
||||
target: workspacePillContainer
|
||||
width: root.getWorkspaceWidth(model, true)
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "inactive"
|
||||
when: !model.isActive
|
||||
PropertyChanges {
|
||||
target: workspacePillContainer
|
||||
width: root.getWorkspaceWidth(model, false)
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
transitions: [
|
||||
Transition {
|
||||
from: "inactive"
|
||||
to: "active"
|
||||
NumberAnimation {
|
||||
property: "width"
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
},
|
||||
Transition {
|
||||
from: "active"
|
||||
to: "inactive"
|
||||
NumberAnimation {
|
||||
property: "width"
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Rectangle {
|
||||
id: pill
|
||||
anchors.fill: parent
|
||||
|
||||
Loader {
|
||||
active: (labelMode !== "none") && (!root.showLabelsOnlyWhenOccupied || model.isOccupied || model.isFocused)
|
||||
sourceComponent: Component {
|
||||
NText {
|
||||
x: Style.pixelAlignCenter(pill.width, width)
|
||||
y: Style.pixelAlignCenter(pill.height, height)
|
||||
text: {
|
||||
if (model.name && model.name.length > 0) {
|
||||
if (root.labelMode === "name") {
|
||||
return model.name.substring(0, characterCount);
|
||||
}
|
||||
if (root.labelMode === "index+name") {
|
||||
return (model.idx.toString() + " " + model.name.substring(0, characterCount));
|
||||
}
|
||||
}
|
||||
return model.idx.toString();
|
||||
}
|
||||
family: Settings.data.ui.fontFixed
|
||||
pointSize: workspacePillContainer.height * root.textRatio
|
||||
applyUiScale: false
|
||||
font.capitalization: Font.AllUppercase
|
||||
font.weight: Style.fontWeightBold
|
||||
wrapMode: Text.Wrap
|
||||
color: {
|
||||
if (model.isFocused)
|
||||
return Color.mOnPrimary;
|
||||
if (model.isUrgent)
|
||||
return Color.mOnError;
|
||||
if (model.isOccupied)
|
||||
return Color.mOnSecondary;
|
||||
|
||||
return Color.mOnSecondary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
radius: Style.radiusM
|
||||
color: {
|
||||
if (model.isFocused)
|
||||
return Color.mPrimary;
|
||||
if (model.isUrgent)
|
||||
return Color.mError;
|
||||
if (model.isOccupied)
|
||||
return Color.mSecondary;
|
||||
|
||||
return Qt.alpha(Color.mSecondary, 0.3);
|
||||
}
|
||||
z: 0
|
||||
|
||||
MouseArea {
|
||||
id: pillMouseArea
|
||||
anchors.fill: parent
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: {
|
||||
CompositorService.switchToWorkspace(model);
|
||||
}
|
||||
hoverEnabled: true
|
||||
}
|
||||
// Material 3-inspired smooth animation for scale, color, opacity, and radius
|
||||
Behavior on scale {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
Behavior on color {
|
||||
enabled: !Color.isTransitioning
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.InOutCubic
|
||||
}
|
||||
}
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.InOutCubic
|
||||
}
|
||||
}
|
||||
Behavior on radius {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on width {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
Behavior on height {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
// Burst effect overlay for focused pill (smaller outline)
|
||||
Rectangle {
|
||||
id: pillBurst
|
||||
anchors.centerIn: workspacePillContainer
|
||||
width: workspacePillContainer.width + 18 * root.masterProgress * scale
|
||||
height: workspacePillContainer.height + 18 * root.masterProgress * scale
|
||||
radius: width / 2
|
||||
color: "transparent"
|
||||
border.color: root.effectColor
|
||||
border.width: Math.max(1, Math.round((2 + 6 * (1.0 - root.masterProgress))))
|
||||
opacity: root.effectsActive && model.isFocused ? (1.0 - root.masterProgress) * 0.7 : 0
|
||||
visible: root.effectsActive && model.isFocused
|
||||
z: 1
|
||||
}
|
||||
delegate: WorkspacePill {
|
||||
required property var model
|
||||
workspace: model
|
||||
isVertical: false
|
||||
baseDimensionRatio: root.baseDimensionRatio
|
||||
capsuleHeight: root.capsuleHeight
|
||||
barHeight: root.barHeight
|
||||
labelMode: root.labelMode
|
||||
characterCount: root.characterCount
|
||||
textRatio: root.textRatio
|
||||
showLabelsOnlyWhenOccupied: root.showLabelsOnlyWhenOccupied
|
||||
focusedColor: root.focusedColor
|
||||
occupiedColor: root.occupiedColor
|
||||
emptyColor: root.emptyColor
|
||||
masterProgress: root.masterProgress
|
||||
effectsActive: root.effectsActive
|
||||
effectColor: root.effectColor
|
||||
getWorkspaceWidth: root.getWorkspaceWidth
|
||||
getWorkspaceHeight: root.getWorkspaceHeight
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -700,174 +587,32 @@ Item {
|
||||
Column {
|
||||
id: pillColumn
|
||||
spacing: spacingBetweenPills
|
||||
x: workspaceBackground.x + Style.pixelAlignCenter(workspaceBackground.width, width)
|
||||
x: 0
|
||||
y: horizontalPadding
|
||||
visible: isVertical && !showApplications
|
||||
|
||||
Repeater {
|
||||
id: workspaceRepeaterVertical
|
||||
model: localWorkspaces
|
||||
Item {
|
||||
id: workspacePillContainerVertical
|
||||
width: Style.toOdd(capsuleHeight * root.baseDimensionRatio)
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "active"
|
||||
when: model.isActive
|
||||
PropertyChanges {
|
||||
target: workspacePillContainerVertical
|
||||
height: root.getWorkspaceHeight(model, true)
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "inactive"
|
||||
when: !model.isActive
|
||||
PropertyChanges {
|
||||
target: workspacePillContainerVertical
|
||||
height: root.getWorkspaceHeight(model, false)
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
transitions: [
|
||||
Transition {
|
||||
from: "inactive"
|
||||
to: "active"
|
||||
NumberAnimation {
|
||||
property: "height"
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
},
|
||||
Transition {
|
||||
from: "active"
|
||||
to: "inactive"
|
||||
NumberAnimation {
|
||||
property: "height"
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Rectangle {
|
||||
id: pillVertical
|
||||
anchors.fill: parent
|
||||
|
||||
Loader {
|
||||
active: (labelMode !== "none") && (!root.showLabelsOnlyWhenOccupied || model.isOccupied || model.isFocused)
|
||||
sourceComponent: Component {
|
||||
NText {
|
||||
x: Style.pixelAlignCenter(pillVertical.width, width)
|
||||
y: Style.pixelAlignCenter(pillVertical.height, height)
|
||||
text: {
|
||||
if (model.name && model.name.length > 0) {
|
||||
if (root.labelMode === "name") {
|
||||
return model.name.substring(0, characterCount);
|
||||
}
|
||||
if (root.labelMode === "index+name") {
|
||||
return (model.idx.toString() + model.name.substring(0, 1));
|
||||
}
|
||||
}
|
||||
return model.idx.toString();
|
||||
}
|
||||
family: Settings.data.ui.fontFixed
|
||||
pointSize: workspacePillContainerVertical.width * root.textRatio
|
||||
applyUiScale: false
|
||||
font.capitalization: Font.AllUppercase
|
||||
font.weight: Style.fontWeightBold
|
||||
wrapMode: Text.Wrap
|
||||
color: {
|
||||
if (model.isFocused)
|
||||
return Color.mOnPrimary;
|
||||
if (model.isUrgent)
|
||||
return Color.mOnError;
|
||||
if (model.isOccupied)
|
||||
return Color.mOnSecondary;
|
||||
|
||||
return Color.mOnSecondary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
radius: Style.radiusM
|
||||
color: {
|
||||
if (model.isFocused)
|
||||
return Color.mPrimary;
|
||||
if (model.isUrgent)
|
||||
return Color.mError;
|
||||
if (model.isOccupied)
|
||||
return Color.mSecondary;
|
||||
|
||||
return Qt.alpha(Color.mSecondary, 0.3);
|
||||
}
|
||||
z: 0
|
||||
|
||||
MouseArea {
|
||||
id: pillMouseAreaVertical
|
||||
anchors.fill: parent
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: {
|
||||
CompositorService.switchToWorkspace(model);
|
||||
}
|
||||
hoverEnabled: true
|
||||
}
|
||||
// Material 3-inspired smooth animation for scale, color, opacity, and radius
|
||||
Behavior on scale {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
Behavior on color {
|
||||
enabled: !Color.isTransitioning
|
||||
ColorAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.InOutCubic
|
||||
}
|
||||
}
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationFast
|
||||
easing.type: Easing.InOutCubic
|
||||
}
|
||||
}
|
||||
Behavior on radius {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on width {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
Behavior on height {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutBack
|
||||
}
|
||||
}
|
||||
// Burst effect overlay for focused pill (smaller outline)
|
||||
Rectangle {
|
||||
id: pillBurstVertical
|
||||
anchors.centerIn: workspacePillContainerVertical
|
||||
width: workspacePillContainerVertical.width + 18 * root.masterProgress * scale
|
||||
height: workspacePillContainerVertical.height + 18 * root.masterProgress * scale
|
||||
radius: width / 2
|
||||
color: "transparent"
|
||||
border.color: root.effectColor
|
||||
border.width: Math.max(1, Math.round((2 + 6 * (1.0 - root.masterProgress))))
|
||||
opacity: root.effectsActive && model.isFocused ? (1.0 - root.masterProgress) * 0.7 : 0
|
||||
visible: root.effectsActive && model.isFocused
|
||||
z: 1
|
||||
}
|
||||
delegate: WorkspacePill {
|
||||
required property var model
|
||||
workspace: model
|
||||
isVertical: true
|
||||
baseDimensionRatio: root.baseDimensionRatio
|
||||
capsuleHeight: root.capsuleHeight
|
||||
barHeight: root.barHeight
|
||||
labelMode: root.labelMode
|
||||
characterCount: root.characterCount
|
||||
textRatio: root.textRatio
|
||||
showLabelsOnlyWhenOccupied: root.showLabelsOnlyWhenOccupied
|
||||
focusedColor: root.focusedColor
|
||||
occupiedColor: root.occupiedColor
|
||||
emptyColor: root.emptyColor
|
||||
masterProgress: root.masterProgress
|
||||
effectsActive: root.effectsActive
|
||||
effectColor: root.effectColor
|
||||
getWorkspaceWidth: root.getWorkspaceWidth
|
||||
getWorkspaceHeight: root.getWorkspaceHeight
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -875,7 +620,6 @@ Item {
|
||||
// ========================================
|
||||
// Grouped mode (showApplications = true)
|
||||
// ========================================
|
||||
|
||||
Component {
|
||||
id: groupedWorkspaceDelegate
|
||||
|
||||
@@ -884,7 +628,28 @@ Item {
|
||||
|
||||
required property var model
|
||||
property var workspaceModel: model
|
||||
property bool hasWindows: (workspaceModel?.windows?.length > 0 || workspaceModel?.windows?.count > 0)
|
||||
// Fetch windows directly from service to avoid Qt 6.9 ListModel nested array issues
|
||||
property var liveWindows: []
|
||||
property bool hasWindows: liveWindows.length > 0
|
||||
|
||||
function updateWindows() {
|
||||
var wsId = workspaceModel?.id;
|
||||
if (wsId !== undefined && wsId !== null) {
|
||||
liveWindows = CompositorService.getWindowsForWorkspace(wsId);
|
||||
} else {
|
||||
liveWindows = [];
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: updateWindows()
|
||||
onWorkspaceModelChanged: updateWindows()
|
||||
|
||||
Connections {
|
||||
target: root
|
||||
function onWindowRevisionChanged() {
|
||||
groupedContainer.updateWindows();
|
||||
}
|
||||
}
|
||||
|
||||
width: Style.toOdd((hasWindows ? groupedIconsFlow.implicitWidth : root.iconSize) + (root.isVertical ? (root.baseItemSize - root.iconSize + Style.marginXS) : Style.marginXL))
|
||||
height: Style.toOdd((hasWindows ? groupedIconsFlow.implicitHeight : root.iconSize) + (root.isVertical ? Style.marginL : (root.baseItemSize - root.iconSize + Style.marginXS)))
|
||||
@@ -938,7 +703,7 @@ Item {
|
||||
flow: root.isVertical ? Flow.TopToBottom : Flow.LeftToRight
|
||||
|
||||
Repeater {
|
||||
model: groupedContainer.workspaceModel.windows
|
||||
model: groupedContainer.liveWindows
|
||||
|
||||
delegate: Item {
|
||||
id: groupedTaskbarItem
|
||||
@@ -955,17 +720,16 @@ Item {
|
||||
height: parent.height
|
||||
source: {
|
||||
root.iconRevision; // Force re-evaluation when revision changes
|
||||
const win = (typeof modelData !== "undefined") ? modelData : model;
|
||||
return ThemeIcons.iconForAppId(win.appId?.toLowerCase());
|
||||
return ThemeIcons.iconForAppId(modelData.appId?.toLowerCase());
|
||||
}
|
||||
smooth: true
|
||||
asynchronous: true
|
||||
opacity: (typeof modelData !== "undefined" ? modelData.isFocused : model.isFocused) ? Style.opacityFull : unfocusedIconsOpacity
|
||||
layer.enabled: root.colorizeIcons && !(typeof modelData !== "undefined" ? modelData.isFocused : model.isFocused)
|
||||
opacity: modelData.isFocused ? Style.opacityFull : unfocusedIconsOpacity
|
||||
layer.enabled: root.colorizeIcons && !modelData.isFocused
|
||||
|
||||
Rectangle {
|
||||
id: groupedFocusIndicator
|
||||
visible: (typeof modelData !== "undefined" ? modelData.isFocused : model.isFocused)
|
||||
visible: modelData.isFocused
|
||||
anchors.bottomMargin: -2
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
@@ -990,30 +754,23 @@ Item {
|
||||
preventStealing: true
|
||||
|
||||
onPressed: mouse => {
|
||||
const win = (typeof modelData !== "undefined") ? modelData : model;
|
||||
if (!win)
|
||||
return;
|
||||
if (mouse.button === Qt.LeftButton) {
|
||||
CompositorService.focusWindow(win);
|
||||
CompositorService.focusWindow(modelData);
|
||||
}
|
||||
}
|
||||
|
||||
onReleased: mouse => {
|
||||
const win = (typeof modelData !== "undefined") ? modelData : model;
|
||||
if (!win)
|
||||
return;
|
||||
if (mouse.button === Qt.RightButton) {
|
||||
mouse.accepted = true;
|
||||
TooltipService.hide();
|
||||
root.selectedWindowId = win.id || win.address || "";
|
||||
root.selectedAppId = win.appId;
|
||||
root.selectedWindowId = modelData.id || modelData.address || "";
|
||||
root.selectedAppId = modelData.appId;
|
||||
openGroupedContextMenu(groupedTaskbarItem);
|
||||
}
|
||||
}
|
||||
onEntered: {
|
||||
const win = (typeof modelData !== "undefined") ? modelData : model;
|
||||
groupedTaskbarItem.itemHovered = true;
|
||||
TooltipService.show(groupedTaskbarItem, win.title || win.appId || "Unknown app.", BarService.getTooltipDirection(root.screen?.name));
|
||||
TooltipService.show(groupedTaskbarItem, modelData.title || modelData.appId || "Unknown app.", BarService.getTooltipDirection(root.screenName));
|
||||
}
|
||||
onExited: {
|
||||
groupedTaskbarItem.itemHovered = false;
|
||||
@@ -1027,7 +784,7 @@ Item {
|
||||
Item {
|
||||
id: groupedWorkspaceNumberContainer
|
||||
|
||||
visible: root.labelMode !== "none" && (!root.showLabelsOnlyWhenOccupied || groupedContainer.hasWindows || groupedContainer.workspaceModel.isFocused)
|
||||
visible: root.labelMode !== "none" && root.showBadge && (!root.showLabelsOnlyWhenOccupied || groupedContainer.hasWindows || groupedContainer.workspaceModel.isFocused)
|
||||
|
||||
anchors {
|
||||
left: parent.left
|
||||
@@ -1047,17 +804,13 @@ Item {
|
||||
|
||||
color: {
|
||||
if (groupedContainer.workspaceModel.isFocused)
|
||||
return Color.mPrimary;
|
||||
return root.getColorPair(root.focusedColor)[0];
|
||||
if (groupedContainer.workspaceModel.isUrgent)
|
||||
return Color.mError;
|
||||
if (groupedContainer.hasWindows)
|
||||
return Color.mSecondary;
|
||||
return root.getColorPair(root.occupiedColor)[0];
|
||||
|
||||
if (Settings.data.colorSchemes.darkMode) {
|
||||
return Qt.darker(Color.mSecondary, 1.5);
|
||||
} else {
|
||||
return Qt.lighter(Color.mSecondary, 1.5);
|
||||
}
|
||||
return root.getColorPair(root.emptyColor)[0];
|
||||
}
|
||||
|
||||
scale: groupedContainer.workspaceModel.isActive ? 1.0 : 0.8
|
||||
@@ -1120,11 +873,13 @@ Item {
|
||||
|
||||
color: {
|
||||
if (groupedContainer.workspaceModel.isFocused)
|
||||
return Color.mOnPrimary;
|
||||
return root.getColorPair(root.focusedColor)[1];
|
||||
if (groupedContainer.workspaceModel.isUrgent)
|
||||
return Color.mOnError;
|
||||
if (groupedContainer.hasWindows)
|
||||
return root.getColorPair(root.occupiedColor)[1];
|
||||
|
||||
return Color.mOnSecondary;
|
||||
return root.getColorPair(root.emptyColor)[1];
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
@@ -1162,10 +917,7 @@ Item {
|
||||
}
|
||||
|
||||
function openGroupedContextMenu(item) {
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (popupMenuWindow) {
|
||||
popupMenuWindow.showContextMenu(contextMenu);
|
||||
contextMenu.openAtItem(item, screen);
|
||||
}
|
||||
// Anchor to root (stable) but center horizontally on the clicked item
|
||||
PanelService.showContextMenu(contextMenu, root, screen, item);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -294,6 +294,7 @@ NBox {
|
||||
shadowOpacity: 0.9
|
||||
shadowHorizontalOffset: 0
|
||||
shadowVerticalOffset: 0
|
||||
shadowColor: Settings.data.colorSchemes.darkMode ? "black" : "white"
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
|
||||
@@ -26,6 +26,7 @@ NBox {
|
||||
height: parent.height / 4
|
||||
|
||||
NCircleStat {
|
||||
id: cpuUsageGauge
|
||||
anchors.centerIn: parent
|
||||
ratio: SystemStatService.cpuUsage / 100
|
||||
icon: "cpu-usage"
|
||||
@@ -33,6 +34,15 @@ NBox {
|
||||
fillColor: SystemStatService.cpuColor
|
||||
tooltipText: I18n.tr("system-monitor.cpu-usage") + `: ${Math.round(SystemStatService.cpuUsage)}%`
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: SystemStatService
|
||||
function onCpuUsageChanged() {
|
||||
if (TooltipService.activeTooltip && TooltipService.activeTooltip.targetItem === cpuUsageGauge) {
|
||||
TooltipService.updateText(I18n.tr("system-monitor.cpu-usage") + `: ${Math.round(SystemStatService.cpuUsage)}%`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
@@ -40,6 +50,7 @@ NBox {
|
||||
height: parent.height / 4
|
||||
|
||||
NCircleStat {
|
||||
id: cpuTempGauge
|
||||
anchors.centerIn: parent
|
||||
ratio: SystemStatService.cpuTemp / 100
|
||||
suffix: "°C"
|
||||
@@ -48,6 +59,15 @@ NBox {
|
||||
fillColor: SystemStatService.tempColor
|
||||
tooltipText: I18n.tr("system-monitor.cpu-temp") + `: ${Math.round(SystemStatService.cpuTemp)}°C`
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: SystemStatService
|
||||
function onCpuTempChanged() {
|
||||
if (TooltipService.activeTooltip && TooltipService.activeTooltip.targetItem === cpuTempGauge) {
|
||||
TooltipService.updateText(I18n.tr("system-monitor.cpu-temp") + `: ${Math.round(SystemStatService.cpuTemp)}°C`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
@@ -55,6 +75,7 @@ NBox {
|
||||
height: parent.height / 4
|
||||
|
||||
NCircleStat {
|
||||
id: memPercentGauge
|
||||
anchors.centerIn: parent
|
||||
ratio: SystemStatService.memPercent / 100
|
||||
icon: "memory"
|
||||
@@ -62,6 +83,15 @@ NBox {
|
||||
fillColor: SystemStatService.memColor
|
||||
tooltipText: I18n.tr("common.memory") + `: ${Math.round(SystemStatService.memPercent)}%`
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: SystemStatService
|
||||
function onMemPercentChanged() {
|
||||
if (TooltipService.activeTooltip && TooltipService.activeTooltip.targetItem === memPercentGauge) {
|
||||
TooltipService.updateText(I18n.tr("common.memory") + `: ${Math.round(SystemStatService.memPercent)}%`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
@@ -69,6 +99,7 @@ NBox {
|
||||
height: parent.height / 4
|
||||
|
||||
NCircleStat {
|
||||
id: diskPercentsGauge
|
||||
anchors.centerIn: parent
|
||||
ratio: (SystemStatService.diskPercents[root.diskPath] ?? 0) / 100
|
||||
icon: "storage"
|
||||
@@ -76,6 +107,15 @@ NBox {
|
||||
fillColor: SystemStatService.getDiskColor(root.diskPath)
|
||||
tooltipText: I18n.tr("system-monitor.disk") + `: ${SystemStatService.diskPercents[root.diskPath] || 0}%\n${root.diskPath}`
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: SystemStatService
|
||||
function onDiskPercentsChanged() {
|
||||
if (TooltipService.activeTooltip && TooltipService.activeTooltip.targetItem === diskPercentsGauge) {
|
||||
TooltipService.updateText(I18n.tr("system-monitor.disk") + `: ${SystemStatService.diskPercents[root.diskPath] || 0}%\n${root.diskPath}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,13 +15,18 @@ NBox {
|
||||
property bool showEffects: Settings.data.location.weatherShowEffects
|
||||
readonly property bool weatherReady: Settings.data.location.weatherEnabled && (LocationService.data.weather !== null)
|
||||
|
||||
// Test mode: set to "rain" or "snow"
|
||||
// Test mode: set to "clear_day", "clear_night", "rain", "snow", "cloud" or "fog"
|
||||
property string testEffects: ""
|
||||
|
||||
// Weather condition detection
|
||||
readonly property int currentWeatherCode: weatherReady ? LocationService.data.weather.current_weather.weathercode : 0
|
||||
readonly property bool isDayTime: weatherReady ? LocationService.data.weather.current_weather.is_day : true
|
||||
readonly property bool isRaining: testEffects === "rain" || (testEffects === "" && ((currentWeatherCode >= 51 && currentWeatherCode <= 67) || (currentWeatherCode >= 80 && currentWeatherCode <= 82)))
|
||||
readonly property bool isSnowing: testEffects === "snow" || (testEffects === "" && ((currentWeatherCode >= 71 && currentWeatherCode <= 77) || (currentWeatherCode >= 85 && currentWeatherCode <= 86)))
|
||||
readonly property bool isCloudy: testEffects === "cloud" || (testEffects === "" && (currentWeatherCode === 3))
|
||||
readonly property bool isFoggy: testEffects === "fog" || (testEffects === "" && (currentWeatherCode >= 40 && currentWeatherCode <= 49))
|
||||
readonly property bool isClearDay: testEffects === "clear_day" || (testEffects === "" && (currentWeatherCode === 0 && isDayTime))
|
||||
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))
|
||||
@@ -30,7 +35,7 @@ NBox {
|
||||
Loader {
|
||||
id: weatherEffectLoader
|
||||
anchors.fill: parent
|
||||
active: root.showEffects && (root.isRaining || root.isSnowing)
|
||||
active: root.showEffects && (root.isRaining || root.isSnowing || root.isCloudy || root.isFoggy || root.isClearDay || root.isClearNight)
|
||||
|
||||
sourceComponent: Item {
|
||||
anchors.fill: parent
|
||||
@@ -47,8 +52,8 @@ NBox {
|
||||
ShaderEffect {
|
||||
id: weatherEffect
|
||||
anchors.fill: parent
|
||||
// Snow fills the box, rain matches content margins
|
||||
anchors.margins: root.isSnowing ? root.border.width : Style.marginXL
|
||||
// Rain matches content margins, everything else fills the box
|
||||
anchors.margins: root.isRaining ? Style.marginXL : root.border.width
|
||||
|
||||
property var source: ShaderEffectSource {
|
||||
sourceItem: content
|
||||
@@ -59,9 +64,26 @@ NBox {
|
||||
property real itemWidth: weatherEffect.width
|
||||
property real itemHeight: weatherEffect.height
|
||||
property color bgColor: root.color
|
||||
property real cornerRadius: root.isSnowing ? (root.radius - root.border.width) : 0
|
||||
property real cornerRadius: root.isRaining ? 0 : (root.radius - root.border.width)
|
||||
property real alternative: root.isFoggy
|
||||
|
||||
fragmentShader: root.isSnowing ? Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/weather_snow.frag.qsb") : Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/weather_rain.frag.qsb")
|
||||
fragmentShader: {
|
||||
let shaderName;
|
||||
if (root.isSnowing)
|
||||
shaderName = "weather_snow";
|
||||
else if (root.isRaining)
|
||||
shaderName = "weather_rain";
|
||||
else if (root.isCloudy || root.isFoggy)
|
||||
shaderName = "weather_cloud";
|
||||
else if (root.isClearDay)
|
||||
shaderName = "weather_sun";
|
||||
else if (root.isClearNight)
|
||||
shaderName = "weather_stars";
|
||||
else
|
||||
shaderName = "";
|
||||
|
||||
return Qt.resolvedUrl(Quickshell.shellDir + "/Shaders/qsb/" + shaderName + ".frag.qsb");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,9 +83,7 @@ Variants {
|
||||
var metadata = DesktopWidgetRegistry.widgetMetadata[widgetId];
|
||||
if (metadata) {
|
||||
Object.keys(metadata).forEach(function (key) {
|
||||
if (key !== "allowUserSettings") {
|
||||
newWidget[key] = metadata[key];
|
||||
}
|
||||
newWidget[key] = metadata[key];
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -117,23 +117,7 @@ Item {
|
||||
if (widgetIndex < 0 || !screen || !screen.name) {
|
||||
return;
|
||||
}
|
||||
|
||||
var monitorWidgets = Settings.data.desktopWidgets.monitorWidgets || [];
|
||||
var newMonitorWidgets = monitorWidgets.slice();
|
||||
|
||||
for (var i = 0; i < newMonitorWidgets.length; i++) {
|
||||
if (newMonitorWidgets[i].name === screen.name) {
|
||||
var widgets = (newMonitorWidgets[i].widgets || []).slice();
|
||||
if (widgetIndex < widgets.length) {
|
||||
widgets[widgetIndex] = Object.assign({}, widgets[widgetIndex], properties);
|
||||
newMonitorWidgets[i] = Object.assign({}, newMonitorWidgets[i], {
|
||||
"widgets": widgets
|
||||
});
|
||||
Settings.data.desktopWidgets.monitorWidgets = newMonitorWidgets;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
DesktopWidgetRegistry.updateWidgetData(screen.name, widgetIndex, properties);
|
||||
}
|
||||
|
||||
function removeWidget() {
|
||||
@@ -208,79 +192,7 @@ Item {
|
||||
}
|
||||
|
||||
function openWidgetSettings() {
|
||||
if (!widgetData || !widgetData.id || !screen) {
|
||||
return;
|
||||
}
|
||||
|
||||
var widgetId = widgetData.id;
|
||||
var hasSettings = false;
|
||||
|
||||
// Check if widget has settings
|
||||
if (DesktopWidgetRegistry.isPluginWidget(widgetId)) {
|
||||
var pluginId = widgetId.replace("plugin:", "");
|
||||
var manifest = PluginRegistry.getPluginManifest(pluginId);
|
||||
if (manifest && manifest.entryPoints && manifest.entryPoints.settings) {
|
||||
hasSettings = true;
|
||||
}
|
||||
} else {
|
||||
hasSettings = DesktopWidgetRegistry.widgetSettingsMap[widgetId] !== undefined;
|
||||
}
|
||||
|
||||
if (!hasSettings) {
|
||||
Logger.w("DraggableDesktopWidget", "Widget does not have settings:", widgetId);
|
||||
return;
|
||||
}
|
||||
|
||||
var popupMenuWindow = PanelService.getPopupMenuWindow(screen);
|
||||
if (!popupMenuWindow) {
|
||||
Logger.e("DraggableDesktopWidget", "No popup menu window found for screen");
|
||||
return;
|
||||
}
|
||||
|
||||
// Hide the dynamic context menu (popup window stays open for the dialog)
|
||||
if (popupMenuWindow.hideDynamicMenu) {
|
||||
popupMenuWindow.hideDynamicMenu();
|
||||
}
|
||||
|
||||
var component = Qt.createComponent(Quickshell.shellDir + "/Modules/Panels/Settings/DesktopWidgets/DesktopWidgetSettingsDialog.qml");
|
||||
|
||||
function instantiateAndOpen() {
|
||||
var dialog = component.createObject(popupMenuWindow.dialogParent, {
|
||||
"widgetIndex": widgetIndex,
|
||||
"widgetData": widgetData,
|
||||
"widgetId": widgetId,
|
||||
"sectionId": screen.name
|
||||
});
|
||||
|
||||
if (dialog) {
|
||||
dialog.updateWidgetSettings.connect((sec, idx, settings) => {
|
||||
root.updateWidgetData(settings);
|
||||
});
|
||||
popupMenuWindow.hasDialog = true;
|
||||
dialog.closed.connect(() => {
|
||||
popupMenuWindow.hasDialog = false;
|
||||
popupMenuWindow.close();
|
||||
dialog.destroy();
|
||||
});
|
||||
dialog.open();
|
||||
} else {
|
||||
Logger.e("DraggableDesktopWidget", "Failed to create widget settings dialog");
|
||||
}
|
||||
}
|
||||
|
||||
if (component.status === Component.Ready) {
|
||||
instantiateAndOpen();
|
||||
} else if (component.status === Component.Error) {
|
||||
Logger.e("DraggableDesktopWidget", "Error loading settings dialog component:", component.errorString());
|
||||
} else {
|
||||
component.statusChanged.connect(() => {
|
||||
if (component.status === Component.Ready) {
|
||||
instantiateAndOpen();
|
||||
} else if (component.status === Component.Error) {
|
||||
Logger.e("DraggableDesktopWidget", "Error loading settings dialog component:", component.errorString());
|
||||
}
|
||||
});
|
||||
}
|
||||
DesktopWidgetRegistry.openWidgetSettings(screen, widgetIndex, widgetData.id, widgetData);
|
||||
}
|
||||
|
||||
function handleContextMenuAction(action) {
|
||||
@@ -378,6 +290,7 @@ Item {
|
||||
id: contentContainer
|
||||
anchors.fill: parent
|
||||
z: 1
|
||||
clip: true
|
||||
}
|
||||
|
||||
// Context menu model and handler - menu is created dynamically in PopupMenuWindow
|
||||
|
||||
@@ -12,21 +12,11 @@ DraggableDesktopWidget {
|
||||
readonly property var now: Time.now
|
||||
readonly property var widgetMetadata: DesktopWidgetRegistry.widgetMetadata["Clock"]
|
||||
|
||||
readonly property color clockTextColor: {
|
||||
if (usePrimaryColor) {
|
||||
return Color.mPrimary;
|
||||
}
|
||||
var txtColor = widgetData && widgetData.textColor ? widgetData.textColor : "";
|
||||
return (txtColor && txtColor !== "") ? txtColor : Color.mOnSurface;
|
||||
}
|
||||
readonly property real fontSize: {
|
||||
var size = widgetData && widgetData.fontSize ? widgetData.fontSize : 0;
|
||||
var baseSize = (size && size > 0) ? size : Style.fontSizeXXXL * 2.5;
|
||||
return Math.round(baseSize * widgetScale);
|
||||
}
|
||||
readonly property color clockTextColor: Color.resolveColorKey(clockColor)
|
||||
readonly property real fontSize: Math.round(Style.fontSizeXXXL * 2.5 * widgetScale)
|
||||
readonly property real widgetOpacity: (widgetData && widgetData.opacity !== undefined) ? widgetData.opacity : 1.0
|
||||
readonly property string clockStyle: (widgetData && widgetData.clockStyle !== undefined) ? widgetData.clockStyle : (widgetMetadata.clockStyle !== undefined ? widgetMetadata.clockStyle : "digital")
|
||||
readonly property bool usePrimaryColor: (widgetData && widgetData.usePrimaryColor !== undefined) ? widgetData.usePrimaryColor : (widgetMetadata.usePrimaryColor !== undefined ? widgetMetadata.usePrimaryColor : false)
|
||||
readonly property string clockColor: (widgetData && widgetData.clockColor !== undefined) ? widgetData.clockColor : (widgetMetadata.clockColor !== undefined ? widgetMetadata.clockColor : "none")
|
||||
readonly property bool useCustomFont: (widgetData && widgetData.useCustomFont !== undefined) ? widgetData.useCustomFont : (widgetMetadata.useCustomFont !== undefined ? widgetMetadata.useCustomFont : false)
|
||||
readonly property string customFont: (widgetData && widgetData.customFont !== undefined) ? widgetData.customFont : ""
|
||||
readonly property string format: (widgetData && widgetData.format !== undefined) ? widgetData.format : (widgetMetadata.format !== undefined ? widgetMetadata.format : "HH:mm\\nd MMMM yyyy")
|
||||
|
||||
@@ -82,12 +82,10 @@ DraggableDesktopWidget {
|
||||
z: 0
|
||||
clip: true
|
||||
active: shouldShowVisualizer
|
||||
layer.enabled: root.roundedCorners
|
||||
layer.enabled: true
|
||||
layer.smooth: true
|
||||
layer.effect: MultiEffect {
|
||||
maskEnabled: true
|
||||
maskThresholdMin: 0.95
|
||||
maskSpreadAtMin: 0.15
|
||||
maskEnabled: root.roundedCorners
|
||||
maskSource: ShaderEffectSource {
|
||||
sourceItem: Rectangle {
|
||||
width: root.width - Math.round(Style.marginXS * widgetScale) * 2
|
||||
@@ -117,7 +115,7 @@ DraggableDesktopWidget {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 1.0
|
||||
opacity: 0.5
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,7 +125,7 @@ DraggableDesktopWidget {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 1.0
|
||||
opacity: 0.5
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,7 +135,7 @@ DraggableDesktopWidget {
|
||||
anchors.fill: parent
|
||||
values: CavaService.values
|
||||
fillColor: Color.mPrimary
|
||||
opacity: 1.0
|
||||
opacity: 0.5
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,301 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import Quickshell
|
||||
import qs.Commons
|
||||
import qs.Modules.DesktopWidgets
|
||||
import qs.Services.System
|
||||
import qs.Services.UI
|
||||
import qs.Widgets
|
||||
|
||||
DraggableDesktopWidget {
|
||||
id: root
|
||||
|
||||
// Widget settings
|
||||
readonly property var widgetMetadata: DesktopWidgetRegistry.widgetMetadata["SystemStat"]
|
||||
readonly property string statType: (widgetData && widgetData.statType !== undefined) ? widgetData.statType : (widgetMetadata.statType !== undefined ? widgetMetadata.statType : "CPU")
|
||||
readonly property string diskPath: (widgetData && widgetData.diskPath !== undefined) ? widgetData.diskPath : "/"
|
||||
readonly property string layout: (widgetData && widgetData.layout !== undefined) ? widgetData.layout : (widgetMetadata.layout !== undefined ? widgetMetadata.layout : "side")
|
||||
|
||||
// Fixed colors
|
||||
readonly property color color: Color.mPrimary
|
||||
readonly property color color2: Color.mSecondary
|
||||
|
||||
// Legend items model - each item has: text, color, icon (optional), bold (optional), opacity (optional), elide (optional)
|
||||
readonly property var legendItems: {
|
||||
switch (root.statType) {
|
||||
case "CPU":
|
||||
return [
|
||||
{
|
||||
icon: "cpu-usage",
|
||||
text: Math.round(SystemStatService.cpuUsage) + "%",
|
||||
color: root.color
|
||||
},
|
||||
{
|
||||
text: "cpu-usage",
|
||||
text: SystemStatService.cpuFreq,
|
||||
color: root.color,
|
||||
opacity: 0.8
|
||||
},
|
||||
{
|
||||
icon: "cpu-temperature",
|
||||
text: SystemStatService.cpuTemp + "°C",
|
||||
color: root.color2
|
||||
}
|
||||
];
|
||||
case "GPU":
|
||||
return [
|
||||
{
|
||||
icon: "gpu-temperature",
|
||||
text: Math.round(SystemStatService.gpuTemp) + "°C",
|
||||
color: root.color
|
||||
}
|
||||
];
|
||||
case "Memory":
|
||||
return [
|
||||
{
|
||||
icon: "memory",
|
||||
text: Math.round(SystemStatService.memPercent) + "%",
|
||||
color: root.color
|
||||
}
|
||||
];
|
||||
case "Disk":
|
||||
var items = [
|
||||
{
|
||||
icon: "storage",
|
||||
text: Math.round(SystemStatService.diskPercents[root.diskPath] || 0) + "%",
|
||||
color: root.color
|
||||
}
|
||||
];
|
||||
if (root.diskPath !== "/") {
|
||||
items.push({
|
||||
text: root.diskPath,
|
||||
color: root.color,
|
||||
opacity: 0.8,
|
||||
elide: true
|
||||
});
|
||||
}
|
||||
return items;
|
||||
case "Network":
|
||||
return [
|
||||
{
|
||||
icon: "download-speed",
|
||||
text: SystemStatService.formatSpeed(SystemStatService.rxSpeed),
|
||||
color: root.color
|
||||
},
|
||||
{
|
||||
icon: "upload-speed",
|
||||
text: SystemStatService.formatSpeed(SystemStatService.txSpeed),
|
||||
color: root.color2
|
||||
}
|
||||
];
|
||||
default:
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// History from service
|
||||
readonly property var history: {
|
||||
switch (root.statType) {
|
||||
case "CPU":
|
||||
return SystemStatService.cpuHistory;
|
||||
case "GPU":
|
||||
return SystemStatService.gpuTempHistory;
|
||||
case "Memory":
|
||||
return SystemStatService.memHistory;
|
||||
case "Disk":
|
||||
return SystemStatService.diskHistories[root.diskPath] || [];
|
||||
case "Network":
|
||||
return SystemStatService.rxSpeedHistory;
|
||||
default:
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// Secondary history (CPU temp for CPU, Tx for Network)
|
||||
readonly property var history2: {
|
||||
switch (root.statType) {
|
||||
case "CPU":
|
||||
return SystemStatService.cpuTempHistory;
|
||||
case "Network":
|
||||
return SystemStatService.txSpeedHistory;
|
||||
default:
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// Graph min/max values
|
||||
readonly property real graphMinValue: root.statType === "GPU" ? Math.max(SystemStatService.gpuTempHistoryMin - 5, 0) : 0
|
||||
readonly property real graphMaxValue: {
|
||||
switch (root.statType) {
|
||||
case "CPU":
|
||||
case "Memory":
|
||||
case "Disk":
|
||||
return 100; // Percentage-based stats use fixed 0-100 range
|
||||
case "GPU":
|
||||
return Math.max(SystemStatService.gpuTempHistoryMax + 5, 1);
|
||||
case "Network":
|
||||
return SystemStatService.rxMaxSpeed;
|
||||
default:
|
||||
return 100;
|
||||
}
|
||||
}
|
||||
readonly property real graphMinValue2: {
|
||||
switch (root.statType) {
|
||||
case "CPU":
|
||||
return Math.max(SystemStatService.cpuTempHistoryMin - 5, 0);
|
||||
default:
|
||||
return graphMinValue;
|
||||
}
|
||||
}
|
||||
readonly property real graphMaxValue2: {
|
||||
switch (root.statType) {
|
||||
case "CPU":
|
||||
return Math.max(SystemStatService.cpuTempHistoryMax + 5, 1);
|
||||
case "Network":
|
||||
return SystemStatService.txMaxSpeed;
|
||||
default:
|
||||
return graphMaxValue;
|
||||
}
|
||||
}
|
||||
|
||||
implicitWidth: Math.round(240 * widgetScale)
|
||||
implicitHeight: Math.round(120 * widgetScale)
|
||||
width: implicitWidth
|
||||
height: implicitHeight
|
||||
|
||||
// Update interval per stat type
|
||||
readonly property int graphUpdateInterval: {
|
||||
switch (root.statType) {
|
||||
case "CPU":
|
||||
return Settings.data.systemMonitor.cpuPollingInterval;
|
||||
case "GPU":
|
||||
return Settings.data.systemMonitor.gpuPollingInterval;
|
||||
case "Memory":
|
||||
return Settings.data.systemMonitor.memPollingInterval;
|
||||
case "Disk":
|
||||
return Settings.data.systemMonitor.diskPollingInterval;
|
||||
case "Network":
|
||||
return Settings.data.systemMonitor.networkPollingInterval;
|
||||
default:
|
||||
return 1000;
|
||||
}
|
||||
}
|
||||
|
||||
// Graph component (shared between layouts)
|
||||
Component {
|
||||
id: graphComponent
|
||||
NGraph {
|
||||
values: root.history
|
||||
values2: root.history2
|
||||
minValue: root.graphMinValue
|
||||
maxValue: root.graphMaxValue
|
||||
minValue2: root.graphMinValue2
|
||||
maxValue2: root.graphMaxValue2
|
||||
color: root.color
|
||||
color2: root.color2
|
||||
fill: true
|
||||
updateInterval: root.graphUpdateInterval
|
||||
animateScale: root.statType === "Network"
|
||||
}
|
||||
}
|
||||
|
||||
// Side layout: icon + legend on left, graph on right
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: Math.round(Style.marginM * widgetScale)
|
||||
spacing: Math.round(Style.marginL * widgetScale)
|
||||
visible: root.layout === "side"
|
||||
|
||||
ColumnLayout {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.fillHeight: true
|
||||
Layout.preferredWidth: Math.round(64 * widgetScale)
|
||||
spacing: Style.marginXS * root.widgetScale
|
||||
|
||||
Repeater {
|
||||
model: root.legendItems
|
||||
delegate: RowLayout {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
spacing: Math.round(Style.marginXXS * root.widgetScale)
|
||||
|
||||
NIcon {
|
||||
visible: !!modelData.icon
|
||||
icon: modelData.icon || ""
|
||||
color: modelData.color
|
||||
pointSize: Style.fontSizeS * root.widgetScale
|
||||
opacity: modelData.opacity !== undefined ? modelData.opacity : 1.0
|
||||
}
|
||||
|
||||
NText {
|
||||
text: modelData.text
|
||||
color: modelData.color
|
||||
pointSize: Style.fontSizeS * root.widgetScale
|
||||
font.family: Settings.data.ui.fontFixed
|
||||
font.weight: modelData.bold ? Style.fontWeightBold : Style.fontWeightRegular
|
||||
opacity: modelData.opacity !== undefined ? modelData.opacity : 1.0
|
||||
elide: modelData.elide ? Text.ElideMiddle : Text.ElideNone
|
||||
Layout.maximumWidth: modelData.elide ? Math.round(56 * root.widgetScale) : -1
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
active: root.layout === "side"
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
sourceComponent: graphComponent
|
||||
}
|
||||
}
|
||||
|
||||
// Bottom layout: full-width graph, horizontal legend at bottom
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
anchors.margins: Math.round(Style.marginM * widgetScale)
|
||||
spacing: Math.round(Style.marginS * widgetScale)
|
||||
visible: root.layout === "bottom"
|
||||
|
||||
Loader {
|
||||
active: root.layout === "bottom"
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
sourceComponent: graphComponent
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
spacing: Math.round(Style.marginM * widgetScale)
|
||||
|
||||
Repeater {
|
||||
model: root.legendItems
|
||||
delegate: RowLayout {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
spacing: Math.round(Style.marginXXS * root.widgetScale)
|
||||
|
||||
NIcon {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
visible: !!modelData.icon
|
||||
icon: modelData.icon || ""
|
||||
color: modelData.color
|
||||
pointSize: Style.fontSizeS * root.widgetScale
|
||||
opacity: modelData.opacity !== undefined ? modelData.opacity : 1.0
|
||||
}
|
||||
|
||||
NText {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
text: modelData.text
|
||||
color: modelData.color
|
||||
pointSize: Style.fontSizeS * root.widgetScale
|
||||
font.family: Settings.data.ui.fontFixed
|
||||
font.weight: modelData.bold ? Style.fontWeightBold : Style.fontWeightRegular
|
||||
opacity: modelData.opacity !== undefined ? modelData.opacity : 1.0
|
||||
elide: modelData.elide ? Text.ElideMiddle : Text.ElideNone
|
||||
Layout.maximumWidth: modelData.elide ? Math.round(56 * root.widgetScale) : -1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+224
-109
@@ -6,6 +6,7 @@ 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
|
||||
@@ -58,11 +59,12 @@ Loader {
|
||||
}
|
||||
}
|
||||
|
||||
// Refresh icons when DesktopEntries becomes available
|
||||
// Refresh icons and names when DesktopEntries becomes available (or updates)
|
||||
Connections {
|
||||
target: DesktopEntries.applications
|
||||
function onValuesChanged() {
|
||||
root.iconRevision++;
|
||||
updateDockApps();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,6 +79,8 @@ Loader {
|
||||
readonly property int peekHeight: 1
|
||||
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
|
||||
readonly property int maxHeight: modelData ? modelData.height * 0.8 : 1000
|
||||
|
||||
// Dock position properties
|
||||
readonly property string dockPosition: Settings.data.dock.position
|
||||
@@ -110,6 +114,15 @@ Loader {
|
||||
property int dragSourceIndex: -1
|
||||
property int dragTargetIndex: -1
|
||||
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Revision counter to force icon re-evaluation
|
||||
property int iconRevision: 0
|
||||
|
||||
@@ -123,10 +136,17 @@ Loader {
|
||||
function getAppKey(appData) {
|
||||
if (!appData)
|
||||
return null;
|
||||
// prefer toplevel object identity for running apps to distinguish instances
|
||||
|
||||
// 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 for pinned-only apps
|
||||
|
||||
// fallback to appId
|
||||
return appData.appId;
|
||||
}
|
||||
|
||||
@@ -138,17 +158,23 @@ Loader {
|
||||
const sorted = [];
|
||||
const remaining = [...apps];
|
||||
|
||||
// 1. Pick apps that are in the session order
|
||||
// Pick apps that are in the session order
|
||||
for (let i = 0; i < sessionAppOrder.length; i++) {
|
||||
const key = sessionAppOrder[i];
|
||||
const idx = remaining.findIndex(app => getAppKey(app) === key);
|
||||
if (idx !== -1) {
|
||||
sorted.push(remaining[idx]);
|
||||
remaining.splice(idx, 1);
|
||||
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Append any new/remaining apps
|
||||
// Append any new/remaining apps
|
||||
remaining.forEach(app => sorted.push(app));
|
||||
|
||||
return sorted;
|
||||
@@ -201,7 +227,10 @@ Loader {
|
||||
function normalizeAppId(appId) {
|
||||
if (!appId || typeof appId !== 'string')
|
||||
return "";
|
||||
return appId.toLowerCase().trim();
|
||||
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)
|
||||
@@ -249,6 +278,9 @@ Loader {
|
||||
|
||||
//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)) {
|
||||
@@ -260,30 +292,30 @@ Loader {
|
||||
combined.push({
|
||||
"type": appType,
|
||||
"toplevel": toplevel,
|
||||
"appId": appId,
|
||||
"appId": canonicalId,
|
||||
"title": title
|
||||
});
|
||||
processedToplevels.add(toplevel);
|
||||
} else {
|
||||
// For pinned apps that aren't running, track by appId to avoid duplicates
|
||||
if (processedPinnedAppIds.has(appId)) {
|
||||
if (processedPinnedAppIds.has(canonicalId)) {
|
||||
return; // Already processed this pinned app
|
||||
}
|
||||
combined.push({
|
||||
"type": appType,
|
||||
"toplevel": toplevel,
|
||||
"appId": appId,
|
||||
"appId": canonicalId,
|
||||
"title": title
|
||||
});
|
||||
processedPinnedAppIds.add(appId);
|
||||
processedPinnedAppIds.add(canonicalId);
|
||||
}
|
||||
}
|
||||
|
||||
function pushRunning(first) {
|
||||
runningApps.forEach(toplevel => {
|
||||
if (toplevel) {
|
||||
// Skip pinned apps if they were already processed (when pinnedStatic is true)
|
||||
const isPinned = pinnedApps.includes(toplevel.appId);
|
||||
// Use robust matching to check if pinned
|
||||
const isPinned = isAppIdPinned(toplevel.appId, pinnedApps);
|
||||
if (!first && isPinned && processedToplevels.has(toplevel)) {
|
||||
return; // Already added by pushPinned()
|
||||
}
|
||||
@@ -294,8 +326,8 @@ Loader {
|
||||
|
||||
function pushPinned() {
|
||||
pinnedApps.forEach(pinnedAppId => {
|
||||
// Find all running instances of this pinned app
|
||||
const matchingToplevels = runningApps.filter(app => app && app.appId === 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
|
||||
@@ -304,7 +336,7 @@ Loader {
|
||||
});
|
||||
} else {
|
||||
// App is pinned but not running - add once
|
||||
pushApp("pinned", null, pinnedAppId, pinnedAppId);
|
||||
pushApp("pinned", null, pinnedAppId, getAppNameFromDesktopEntry(pinnedAppId) || pinnedAppId);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -321,9 +353,36 @@ Loader {
|
||||
}
|
||||
|
||||
dockApps = sortDockApps(combined);
|
||||
// Sync session order if needed (e.g. first run or new apps added)
|
||||
if (!sessionAppOrder || sessionAppOrder.length === 0 || sessionAppOrder.length !== dockApps.length) {
|
||||
|
||||
// Sync session order if needed
|
||||
// Instead of resetting everything when length changes, we reconcile the keys
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -343,6 +402,11 @@ Loader {
|
||||
id: hideTimer
|
||||
interval: hideDelay
|
||||
onTriggered: {
|
||||
// do not hide if dragging
|
||||
if (root.dragSourceIndex !== -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Force menuHovered to false if no menu is current or visible
|
||||
if (!root.currentContextMenu || !root.currentContextMenu.visible) {
|
||||
menuHovered = false;
|
||||
@@ -535,8 +599,8 @@ Loader {
|
||||
Rectangle {
|
||||
id: dockContainer
|
||||
// For vertical dock, swap width and height logic
|
||||
width: isVertical ? Math.round(iconSize * 1.5) : dockLayout.implicitWidth + Style.marginXL
|
||||
height: isVertical ? dockLayout.implicitHeight + Style.marginXL : Math.round(iconSize * 1.5)
|
||||
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
|
||||
@@ -566,12 +630,13 @@ Loader {
|
||||
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) {
|
||||
if (autoHide && !anyAppHovered && !peekHovered && !menuHovered && root.dragSourceIndex === -1) {
|
||||
hideTimer.restart();
|
||||
}
|
||||
}
|
||||
@@ -582,12 +647,48 @@ Loader {
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
Flickable {
|
||||
id: dock
|
||||
// Swap dimensions based on orientation
|
||||
width: isVertical ? parent.width - (Style.marginXL) : dockLayout.implicitWidth
|
||||
height: isVertical ? dockLayout.implicitHeight : parent.height - (Style.marginXL)
|
||||
// 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)
|
||||
@@ -602,15 +703,19 @@ Loader {
|
||||
rows: isVertical ? -1 : 1
|
||||
rowSpacing: Style.marginS
|
||||
columnSpacing: Style.marginS
|
||||
anchors.centerIn: parent
|
||||
|
||||
// Ensure the layout takes its full implicit size
|
||||
width: implicitWidth
|
||||
height: implicitHeight
|
||||
|
||||
Repeater {
|
||||
model: dockApps
|
||||
|
||||
delegate: Item {
|
||||
id: appButton
|
||||
Layout.preferredWidth: iconSize
|
||||
Layout.preferredHeight: iconSize
|
||||
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
|
||||
@@ -825,12 +930,10 @@ Loader {
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
root.currentContextMenu = contextMenu;
|
||||
anyAppHovered = false;
|
||||
} else if (root.currentContextMenu === contextMenu) {
|
||||
root.currentContextMenu = null;
|
||||
hideTimer.stop();
|
||||
menuHovered = false;
|
||||
anyAppHovered = false;
|
||||
// Restart hide timer after menu closes
|
||||
if (autoHide && !dockHovered && !anyAppHovered && !peekHovered && !menuHovered) {
|
||||
hideTimer.restart();
|
||||
@@ -850,7 +953,6 @@ Loader {
|
||||
// Only allow left-click dragging via axis control
|
||||
drag.target: iconContainer
|
||||
drag.axis: (pressedButtons & Qt.LeftButton) ? (root.isVertical ? Drag.YAxis : Drag.XAxis) : Drag.None
|
||||
preventStealing: true
|
||||
|
||||
onPressed: {
|
||||
var p1 = appButton.mapFromItem(dockContainer, 0, 0);
|
||||
@@ -878,6 +980,7 @@ Loader {
|
||||
showTimer.stop();
|
||||
hideTimer.stop();
|
||||
unloadTimer.stop(); // Cancel unload if hovering app
|
||||
hidden = false; // Make sure dock is visible
|
||||
}
|
||||
}
|
||||
|
||||
@@ -888,97 +991,109 @@ Loader {
|
||||
if (!root.currentContextMenu || !root.currentContextMenu.visible) {
|
||||
menuHovered = false;
|
||||
}
|
||||
if (autoHide && !dockHovered && !peekHovered && !menuHovered) {
|
||||
if (autoHide && !dockHovered && !peekHovered && !menuHovered && root.dragSourceIndex === -1) {
|
||||
hideTimer.restart();
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: function (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;
|
||||
}
|
||||
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();
|
||||
// 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);
|
||||
// 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 (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 (!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 (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) {
|
||||
// If app.execute() fails for terminal apps, we handle it manually.
|
||||
Logger.d("Dock", "Executing terminal app manually: " + app.name);
|
||||
const terminal = Settings.data.appLauncher.terminalCommand.split(" ");
|
||||
const command = terminal.concat(app.command);
|
||||
Quickshell.execDetached(command);
|
||||
} else if (app.command && app.command.length > 0) {
|
||||
Quickshell.execDetached(app.command);
|
||||
} else if (app.execute) {
|
||||
app.execute();
|
||||
} else {
|
||||
Logger.w("Dock", `Could not launch: ${app.name}. No valid launch method.`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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 - always below the icon
|
||||
// Active indicator - positioned at the edge of the delegate area
|
||||
Rectangle {
|
||||
visible: Settings.data.dock.inactiveIndicators ? isRunning : isActive
|
||||
width: iconSize * 0.2
|
||||
height: iconSize * 0.1
|
||||
width: isVertical ? indicatorMargin * 0.6 : iconSize * 0.2
|
||||
height: isVertical ? iconSize * 0.2 : indicatorMargin * 0.6
|
||||
color: Color.mPrimary
|
||||
radius: Style.radiusXS
|
||||
anchors.top: parent.bottom
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
// 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ PopupWindow {
|
||||
property real menuContentWidth: 160
|
||||
|
||||
implicitWidth: menuContentWidth + (Style.marginXL)
|
||||
implicitHeight: contextMenuColumn.implicitHeight + (Style.marginXL)
|
||||
implicitHeight: (root.items.length * 32) + (Style.marginXL)
|
||||
color: "transparent"
|
||||
visible: false
|
||||
|
||||
@@ -256,14 +256,9 @@ PopupWindow {
|
||||
toplevel = toplevelData;
|
||||
initItems();
|
||||
|
||||
// Force a complete re-evaluation by waiting for the next frame
|
||||
Qt.callLater(() => {
|
||||
Qt.callLater(() => {
|
||||
visible = true;
|
||||
canAutoClose = false;
|
||||
gracePeriodTimer.restart();
|
||||
});
|
||||
});
|
||||
visible = true;
|
||||
canAutoClose = false;
|
||||
gracePeriodTimer.restart();
|
||||
}
|
||||
|
||||
function hide() {
|
||||
|
||||
@@ -17,18 +17,49 @@ Scope {
|
||||
property bool showInfo: false
|
||||
property string errorMessage: ""
|
||||
property string infoMessage: ""
|
||||
property bool fprintdAvailable: false
|
||||
|
||||
readonly property string pamConfigDirectory: Quickshell.env("NOCTALIA_PAM_CONFIG") ? "/etc/pam.d" : Settings.configDir + "pam"
|
||||
readonly property string pamConfig: Quickshell.env("NOCTALIA_PAM_CONFIG") || "password.conf"
|
||||
readonly property string pamConfigDirectory: "/etc/pam.d"
|
||||
property string pamConfig: Quickshell.env("NOCTALIA_PAM_SERVICE") || "login"
|
||||
property bool pamReady: false
|
||||
|
||||
Component.onCompleted: {
|
||||
checkFprintdProc.running = true;
|
||||
|
||||
if (Quickshell.env("NOCTALIA_PAM_CONFIG")) {
|
||||
Logger.i("LockContext", "NOCTALIA_PAM_CONFIG is set, using system PAM config: /etc/pam.d/" + pamConfig);
|
||||
if (Quickshell.env("NOCTALIA_PAM_SERVICE")) {
|
||||
Logger.i("LockContext", "NOCTALIA_PAM_SERVICE is set, using system PAM config: /etc/pam.d/" + pamConfig);
|
||||
pamReady = true;
|
||||
} else {
|
||||
Logger.i("LockContext", "Using generated PAM config:", pamConfigDirectory + "/" + pamConfig);
|
||||
Logger.i("LockContext", "Probing for best PAM service...");
|
||||
detectPamServiceProc.running = true;
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: detectPamServiceProc
|
||||
command: ["sh", "-c", "
|
||||
if [ -f /etc/pam.d/login ]; then echo 'login'; exit 0; fi;
|
||||
if [ -f /etc/pam.d/system-auth ]; then echo 'system-auth'; exit 0; fi;
|
||||
if [ -f /etc/pam.d/common-auth ]; then echo 'common-auth'; exit 0; fi;
|
||||
echo 'login';
|
||||
"]
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
const service = String(text || "").trim();
|
||||
if (service.length > 0) {
|
||||
root.pamConfig = service;
|
||||
Logger.i("LockContext", "Detected PAM service: " + service);
|
||||
} else {
|
||||
Logger.w("LockContext", "Failed to detect PAM service, defaulting to login");
|
||||
}
|
||||
root.pamReady = true;
|
||||
}
|
||||
}
|
||||
stderr: StdioCollector {}
|
||||
}
|
||||
|
||||
onPamReadyChanged: {
|
||||
if (pamReady) {
|
||||
if (Settings.data.general.autoStartAuth && currentText === "") {
|
||||
pam.start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,16 +82,23 @@ Scope {
|
||||
if (!waitingForPassword) {
|
||||
pam.abort();
|
||||
}
|
||||
if (fprintdAvailable) {
|
||||
if (Settings.data.general.allowPasswordWithFprintd) {
|
||||
occupyFingerprintSensorProc.running = true;
|
||||
}
|
||||
} else {
|
||||
occupyFingerprintSensorProc.running = false;
|
||||
pam.start();
|
||||
if (pamReady && Settings.data.general.autoStartAuth) {
|
||||
pam.start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function tryUnlock() {
|
||||
if (!pamReady) {
|
||||
Logger.w("LockContext", "PAM not ready yet, ignoring unlock attempt");
|
||||
return;
|
||||
}
|
||||
|
||||
if (waitingForPassword) {
|
||||
pam.respond(currentText);
|
||||
unlockInProgress = true;
|
||||
@@ -73,14 +111,6 @@ Scope {
|
||||
pam.start();
|
||||
}
|
||||
|
||||
Process {
|
||||
id: checkFprintdProc
|
||||
command: ["sh", "-c", "command -v fprintd-verify"]
|
||||
onExited: function (exitCode) {
|
||||
fprintdAvailable = (exitCode === 0);
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: occupyFingerprintSensorProc
|
||||
command: ["fprintd-verify"]
|
||||
|
||||
+215
-200
@@ -3,7 +3,6 @@ import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import Quickshell
|
||||
import Quickshell.Services.Pam
|
||||
import Quickshell.Services.UPower
|
||||
import Quickshell.Wayland
|
||||
import qs.Commons
|
||||
import qs.Services.Compositor
|
||||
@@ -75,225 +74,241 @@ Loader {
|
||||
WlSessionLockSurface {
|
||||
id: lockSurface
|
||||
|
||||
Item {
|
||||
id: batteryIndicator
|
||||
property bool initializationComplete: false
|
||||
Timer {
|
||||
interval: 500
|
||||
running: true
|
||||
onTriggered: batteryIndicator.initializationComplete = true
|
||||
}
|
||||
|
||||
property bool isReady: initializationComplete && BatteryService.batteryReady
|
||||
property real percent: BatteryService.batteryPercentage
|
||||
property bool charging: BatteryService.batteryCharging
|
||||
property bool pluggedIn: BatteryService.batteryPluggedIn
|
||||
property bool batteryVisible: isReady && percent > 0 && BatteryService.hasAnyBattery()
|
||||
}
|
||||
|
||||
Item {
|
||||
id: keyboardLayout
|
||||
property string currentLayout: KeyboardLayoutService.currentLayout
|
||||
}
|
||||
|
||||
// Background with wallpaper, gradient, and screen corners
|
||||
LockScreenBackground {
|
||||
id: backgroundComponent
|
||||
screen: lockSurface.screen
|
||||
}
|
||||
|
||||
Item {
|
||||
Loader {
|
||||
anchors.fill: parent
|
||||
active: true
|
||||
sourceComponent: (Settings.data.general.lockScreenMonitors.length === 0 || Settings.data.general.lockScreenMonitors.includes(lockSurface.screen.name)) ? fullLockScreenComponent : blackScreenComponent
|
||||
}
|
||||
|
||||
// Mouse area to trigger focus on cursor movement (workaround for Hyprland focus issues)
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
acceptedButtons: Qt.NoButton
|
||||
onPositionChanged: {
|
||||
if (passwordInput) {
|
||||
passwordInput.forceActiveFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: fullLockScreenComponent
|
||||
|
||||
// Header with avatar, welcome, time, date
|
||||
LockScreenHeader {
|
||||
id: headerComponent
|
||||
}
|
||||
Item {
|
||||
Item {
|
||||
id: batteryIndicator
|
||||
|
||||
// Info notification
|
||||
Rectangle {
|
||||
width: infoRowLayout.implicitWidth + Style.marginXL * 1.5
|
||||
height: 50
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: (Settings.data.general.compactLockScreen ? 280 : 360) * Style.uiScaleRatio
|
||||
radius: Style.radiusL
|
||||
color: Color.mTertiary
|
||||
visible: lockContext.showInfo && lockContext.infoMessage && !panelComponent.timerActive
|
||||
opacity: visible ? 1.0 : 0.0
|
||||
|
||||
RowLayout {
|
||||
id: infoRowLayout
|
||||
anchors.centerIn: parent
|
||||
spacing: Style.marginM
|
||||
|
||||
NIcon {
|
||||
icon: "circle-key"
|
||||
pointSize: Style.fontSizeXL
|
||||
color: Color.mOnTertiary
|
||||
}
|
||||
|
||||
NText {
|
||||
text: lockContext.infoMessage
|
||||
color: Color.mOnTertiary
|
||||
pointSize: Style.fontSizeL
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
property bool isReady: BatteryService.batteryReady
|
||||
property real percent: BatteryService.batteryPercentage
|
||||
property bool charging: BatteryService.batteryCharging
|
||||
property bool pluggedIn: BatteryService.batteryPluggedIn
|
||||
property bool batteryVisible: isReady
|
||||
property string icon: BatteryService.batteryIcon
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Error notification
|
||||
Rectangle {
|
||||
width: errorRowLayout.implicitWidth + Style.marginXL * 1.5
|
||||
height: 50
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: (Settings.data.general.compactLockScreen ? 280 : 360) * Style.uiScaleRatio
|
||||
radius: Style.radiusL
|
||||
color: Color.mError
|
||||
visible: lockContext.showFailure && lockContext.errorMessage && !panelComponent.timerActive
|
||||
opacity: visible ? 1.0 : 0.0
|
||||
|
||||
RowLayout {
|
||||
id: errorRowLayout
|
||||
anchors.centerIn: parent
|
||||
spacing: Style.marginM
|
||||
|
||||
NIcon {
|
||||
icon: "alert-circle"
|
||||
pointSize: Style.fontSizeXL
|
||||
color: Color.mOnError
|
||||
}
|
||||
|
||||
NText {
|
||||
text: lockContext.errorMessage || "Authentication failed"
|
||||
color: Color.mOnError
|
||||
pointSize: Style.fontSizeL
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
Item {
|
||||
id: keyboardLayout
|
||||
property string currentLayout: KeyboardLayoutService.currentLayout
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
// Background with wallpaper, gradient, and screen corners
|
||||
LockScreenBackground {
|
||||
id: backgroundComponent
|
||||
screen: lockSurface.screen
|
||||
}
|
||||
}
|
||||
|
||||
// Countdown notification
|
||||
Rectangle {
|
||||
width: countdownRowLayout.implicitWidth + Style.marginXL * 1.5
|
||||
height: 50
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: (Settings.data.general.compactLockScreen ? 280 : 360) * Style.uiScaleRatio
|
||||
radius: Style.radiusL
|
||||
color: Color.mSurface
|
||||
visible: panelComponent.timerActive
|
||||
opacity: visible ? 1.0 : 0.0
|
||||
|
||||
RowLayout {
|
||||
id: countdownRowLayout
|
||||
Item {
|
||||
anchors.fill: parent
|
||||
anchors.margins: Style.marginM
|
||||
spacing: Style.marginM
|
||||
|
||||
NIcon {
|
||||
icon: "clock"
|
||||
pointSize: Style.fontSizeXL
|
||||
// Mouse area to trigger focus on cursor movement (workaround for Hyprland focus issues)
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
acceptedButtons: Qt.NoButton
|
||||
onPositionChanged: {
|
||||
if (passwordInput) {
|
||||
passwordInput.forceActiveFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Header with avatar, welcome, time, date
|
||||
LockScreenHeader {
|
||||
id: headerComponent
|
||||
}
|
||||
|
||||
// Info notification
|
||||
Rectangle {
|
||||
width: infoRowLayout.implicitWidth + Style.marginXL * 1.5
|
||||
height: 50
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: (Settings.data.general.compactLockScreen ? 280 : 360) * Style.uiScaleRatio
|
||||
radius: Style.radiusL
|
||||
color: Color.mTertiary
|
||||
visible: lockContext.showInfo && lockContext.infoMessage && !panelComponent.timerActive
|
||||
opacity: visible ? 1.0 : 0.0
|
||||
|
||||
RowLayout {
|
||||
id: infoRowLayout
|
||||
anchors.centerIn: parent
|
||||
spacing: Style.marginM
|
||||
|
||||
NIcon {
|
||||
icon: "circle-key"
|
||||
pointSize: Style.fontSizeXL
|
||||
color: Color.mOnTertiary
|
||||
}
|
||||
|
||||
NText {
|
||||
text: lockContext.infoMessage
|
||||
color: Color.mOnTertiary
|
||||
pointSize: Style.fontSizeL
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Error notification
|
||||
Rectangle {
|
||||
width: errorRowLayout.implicitWidth + Style.marginXL * 1.5
|
||||
height: 50
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: (Settings.data.general.compactLockScreen ? 280 : 360) * Style.uiScaleRatio
|
||||
radius: Style.radiusL
|
||||
color: Color.mError
|
||||
visible: lockContext.showFailure && lockContext.errorMessage && !panelComponent.timerActive
|
||||
opacity: visible ? 1.0 : 0.0
|
||||
|
||||
RowLayout {
|
||||
id: errorRowLayout
|
||||
anchors.centerIn: parent
|
||||
spacing: Style.marginM
|
||||
|
||||
NIcon {
|
||||
icon: "alert-circle"
|
||||
pointSize: Style.fontSizeXL
|
||||
color: Color.mOnError
|
||||
}
|
||||
|
||||
NText {
|
||||
text: lockContext.errorMessage || "Authentication failed"
|
||||
color: Color.mOnError
|
||||
pointSize: Style.fontSizeL
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Countdown notification
|
||||
Rectangle {
|
||||
width: countdownRowLayout.implicitWidth + Style.marginXL * 1.5
|
||||
height: 50
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: (Settings.data.general.compactLockScreen ? 280 : 360) * Style.uiScaleRatio
|
||||
radius: Style.radiusL
|
||||
color: Color.mSurface
|
||||
visible: panelComponent.timerActive
|
||||
opacity: visible ? 1.0 : 0.0
|
||||
|
||||
RowLayout {
|
||||
id: countdownRowLayout
|
||||
anchors.fill: parent
|
||||
anchors.margins: Style.marginM
|
||||
spacing: Style.marginM
|
||||
|
||||
NIcon {
|
||||
icon: "clock"
|
||||
pointSize: Style.fontSizeXL
|
||||
color: Color.mPrimary
|
||||
}
|
||||
|
||||
NText {
|
||||
text: I18n.tr("session-menu.action-in-seconds", {
|
||||
"action": I18n.tr("common." + panelComponent.pendingAction),
|
||||
"seconds": Math.ceil(panelComponent.timeRemaining / 1000)
|
||||
})
|
||||
color: Color.mOnSurface
|
||||
pointSize: Style.fontSizeL
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
font.weight: Style.fontWeightBold
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
NIconButton {
|
||||
icon: "x"
|
||||
tooltipText: I18n.tr("session-menu.cancel-timer")
|
||||
baseSize: 32
|
||||
colorBg: Qt.alpha(Color.mPrimary, 0.1)
|
||||
colorFg: Color.mPrimary
|
||||
colorBgHover: Color.mPrimary
|
||||
onClicked: panelComponent.cancelTimer()
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Hidden input that receives actual text
|
||||
TextInput {
|
||||
id: passwordInput
|
||||
width: 0
|
||||
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
|
||||
|
||||
Keys.onPressed: function (event) {
|
||||
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
|
||||
lockContext.tryUnlock();
|
||||
event.accepted = true;
|
||||
}
|
||||
if (event.key === Qt.Key_Escape && panelComponent.timerActive) {
|
||||
panelComponent.cancelTimer();
|
||||
event.accepted = true;
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: forceActiveFocus()
|
||||
}
|
||||
|
||||
NText {
|
||||
text: I18n.tr("session-menu.action-in-seconds", {
|
||||
"action": I18n.tr("common." + panelComponent.pendingAction),
|
||||
"seconds": Math.ceil(panelComponent.timeRemaining / 1000)
|
||||
})
|
||||
color: Color.mOnSurface
|
||||
pointSize: Style.fontSizeL
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
font.weight: Style.fontWeightBold
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
NIconButton {
|
||||
icon: "x"
|
||||
tooltipText: I18n.tr("session-menu.cancel-timer")
|
||||
baseSize: 32
|
||||
colorBg: Qt.alpha(Color.mPrimary, 0.1)
|
||||
colorFg: Color.mPrimary
|
||||
colorBgHover: Color.mPrimary
|
||||
onClicked: panelComponent.cancelTimer()
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
duration: Style.animationNormal
|
||||
easing.type: Easing.OutCubic
|
||||
// Main panel with password, weather, media, session controls
|
||||
LockScreenPanel {
|
||||
id: panelComponent
|
||||
lockControl: lockContext
|
||||
batteryIndicator: batteryIndicator
|
||||
keyboardLayout: keyboardLayout
|
||||
passwordInput: passwordInput
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Hidden input that receives actual text
|
||||
TextInput {
|
||||
id: passwordInput
|
||||
width: 0
|
||||
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
|
||||
Component {
|
||||
id: blackScreenComponent
|
||||
|
||||
Keys.onPressed: function (event) {
|
||||
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
|
||||
lockContext.tryUnlock();
|
||||
event.accepted = true;
|
||||
}
|
||||
if (event.key === Qt.Key_Escape && panelComponent.timerActive) {
|
||||
panelComponent.cancelTimer();
|
||||
event.accepted = true;
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: forceActiveFocus()
|
||||
}
|
||||
|
||||
// Main panel with password, weather, media, session controls
|
||||
LockScreenPanel {
|
||||
id: panelComponent
|
||||
lockControl: lockContext
|
||||
batteryIndicator: batteryIndicator
|
||||
keyboardLayout: keyboardLayout
|
||||
passwordInput: passwordInput
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "black"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import QtQuick
|
||||
import QtQuick.Effects
|
||||
import Quickshell
|
||||
import qs.Commons
|
||||
import qs.Services.Compositor
|
||||
import qs.Services.Power
|
||||
import qs.Services.UI
|
||||
|
||||
Item {
|
||||
@@ -10,6 +12,7 @@ Item {
|
||||
|
||||
// Cached wallpaper path - exposed for parent components
|
||||
property string resolvedWallpaperPath: ""
|
||||
property color tintColor: Settings.data.colorSchemes.darkMode ? Color.mSurface : Color.mOnSurface
|
||||
|
||||
required property var screen
|
||||
|
||||
@@ -116,6 +119,21 @@ Item {
|
||||
smooth: true
|
||||
mipmap: false
|
||||
antialiasing: true
|
||||
|
||||
layer.enabled: true
|
||||
layer.smooth: false
|
||||
layer.effect: MultiEffect {
|
||||
blurEnabled: !PowerProfileService.noctaliaPerformanceMode && (Settings.data.general.lockScreenBlur > 0)
|
||||
blur: Settings.data.general.lockScreenBlur
|
||||
blurMax: 48
|
||||
}
|
||||
|
||||
// Tint overlay
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: root.tintColor
|
||||
opacity: Settings.data.general.lockScreenTint
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
|
||||
@@ -8,6 +8,28 @@ import qs.Widgets
|
||||
// Time, Date, and User Profile Container
|
||||
Rectangle {
|
||||
id: root
|
||||
|
||||
readonly property bool animationsEnabled: Settings.data.general.lockScreenAnimations || false
|
||||
|
||||
// Use timer-driven properties instead of Time.now to avoid per-frame repaints.
|
||||
// Time.now updates every frame (~60+ Hz); these update only when needed.
|
||||
property date currentTime: new Date()
|
||||
property date currentDate: new Date()
|
||||
|
||||
Timer {
|
||||
interval: 1000
|
||||
running: true
|
||||
repeat: true
|
||||
onTriggered: root.currentTime = new Date()
|
||||
}
|
||||
|
||||
Timer {
|
||||
interval: 60000
|
||||
running: true
|
||||
repeat: true
|
||||
onTriggered: root.currentDate = new Date()
|
||||
}
|
||||
|
||||
width: Math.max(500, contentRow.implicitWidth + 32)
|
||||
height: Math.max(120, contentRow.implicitHeight + 32)
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
@@ -41,6 +63,7 @@ Rectangle {
|
||||
|
||||
SequentialAnimation on border.color {
|
||||
loops: Animation.Infinite
|
||||
running: root.animationsEnabled
|
||||
ColorAnimation {
|
||||
to: Qt.alpha(Color.mPrimary, 1.0)
|
||||
duration: 2000
|
||||
@@ -64,6 +87,7 @@ Rectangle {
|
||||
|
||||
SequentialAnimation on scale {
|
||||
loops: Animation.Infinite
|
||||
running: root.animationsEnabled
|
||||
NumberAnimation {
|
||||
to: 1.02
|
||||
duration: 4000
|
||||
@@ -102,12 +126,15 @@ Rectangle {
|
||||
"fr": "dddd d MMMM",
|
||||
"hu": "dddd, MMMM d.",
|
||||
"ja": "yyyy年M月d日 dddd",
|
||||
"ko": "yyyy년 M월 d일 dddd",
|
||||
"ku": "dddd, dê MMMM",
|
||||
"nl": "dddd d MMMM",
|
||||
"nn": "dddd d. MMMM",
|
||||
"pt": "dddd, d 'de' MMMM",
|
||||
"sv": "dddd d MMMM",
|
||||
"zh": "yyyy年M月d日 dddd"
|
||||
};
|
||||
var dateString = I18n.locale.toString(Time.now, formats[lang] || "dddd, d MMMM");
|
||||
var dateString = I18n.locale.toString(root.currentDate, formats[lang] || "dddd, d MMMM");
|
||||
return dateString.charAt(0).toUpperCase() + dateString.slice(1);
|
||||
}
|
||||
pointSize: Style.fontSizeXL
|
||||
@@ -122,17 +149,60 @@ Rectangle {
|
||||
}
|
||||
|
||||
// Clock
|
||||
NClock {
|
||||
now: Time.now
|
||||
clockStyle: Settings.data.location.analogClockInCalendar ? "analog" : "digital"
|
||||
Layout.preferredWidth: 70
|
||||
Layout.preferredHeight: 70
|
||||
Item {
|
||||
Layout.preferredWidth: Settings.data.general.clockStyle === "analog" ? 70 : (Settings.data.general.clockStyle === "custom" ? 90 : 70)
|
||||
Layout.preferredHeight: Settings.data.general.clockStyle === "analog" ? 70 : (Settings.data.general.clockStyle === "custom" ? 90 : 70)
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
backgroundColor: Color.mSurface
|
||||
clockColor: Color.mOnSurface
|
||||
secondHandColor: Color.mPrimary
|
||||
hoursFontSize: Style.fontSizeL
|
||||
minutesFontSize: Style.fontSizeL
|
||||
|
||||
// Analog Clock
|
||||
NClock {
|
||||
anchors.centerIn: parent
|
||||
width: 70
|
||||
height: 70
|
||||
visible: Settings.data.general.clockStyle === "analog"
|
||||
now: root.currentTime
|
||||
clockStyle: "analog"
|
||||
backgroundColor: "transparent"
|
||||
clockColor: Color.mOnSurface
|
||||
secondHandColor: Color.mPrimary
|
||||
}
|
||||
|
||||
// Digital Clock (Standard)
|
||||
NClock {
|
||||
anchors.centerIn: parent
|
||||
width: 70
|
||||
height: 70
|
||||
visible: Settings.data.general.clockStyle === "digital"
|
||||
now: root.currentTime
|
||||
clockStyle: "digital"
|
||||
showProgress: true
|
||||
progressColor: Color.mPrimary
|
||||
backgroundColor: "transparent"
|
||||
clockColor: Color.mOnSurface
|
||||
hoursFontSize: Style.fontSizeL
|
||||
minutesFontSize: Style.fontSizeL
|
||||
hoursFontWeight: Style.fontWeightBold
|
||||
minutesFontWeight: Style.fontWeightBold
|
||||
}
|
||||
|
||||
// Custom Clock (Stacked)
|
||||
ColumnLayout {
|
||||
anchors.centerIn: parent
|
||||
visible: Settings.data.general.clockStyle === "custom"
|
||||
spacing: -3
|
||||
|
||||
Repeater {
|
||||
model: I18n.locale.toString(root.currentTime, (Settings.data.general.clockFormat || "hh\\nmm").replace(/\\n/g, "\n")).split("\n")
|
||||
NText {
|
||||
text: modelData
|
||||
pointSize: Style.fontSizeL
|
||||
font.weight: Style.fontWeightBold
|
||||
color: Color.mOnSurface
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,8 +20,14 @@ Item {
|
||||
required property var keyboardLayout
|
||||
required property TextInput passwordInput
|
||||
|
||||
// Whether to enable lock screen animations (smooth cursor blink).
|
||||
// Defaults to false to reduce GPU usage. Set Settings.data.general.lockScreenAnimations = true to restore.
|
||||
readonly property bool animationsEnabled: Settings.data.general.lockScreenAnimations || false
|
||||
|
||||
Component.onCompleted: {
|
||||
doUnlock();
|
||||
if (Settings.data.general.autoStartAuth) {
|
||||
doUnlock();
|
||||
}
|
||||
}
|
||||
|
||||
function doUnlock() {
|
||||
@@ -107,7 +113,7 @@ Item {
|
||||
// Compact status indicators container (compact mode only)
|
||||
Rectangle {
|
||||
width: {
|
||||
var hasBattery = batteryIndicator.isReady && BatteryService.hasAnyBattery();
|
||||
var hasBattery = batteryIndicator.isReady;
|
||||
var hasKeyboard = keyboardLayout.currentLayout !== "Unknown";
|
||||
|
||||
if (hasBattery && hasKeyboard) {
|
||||
@@ -125,7 +131,7 @@ Item {
|
||||
topLeftRadius: Style.radiusL
|
||||
topRightRadius: Style.radiusL
|
||||
color: Color.mSurface
|
||||
visible: Settings.data.general.compactLockScreen && ((batteryIndicator.isReady && BatteryService.hasAnyBattery()) || keyboardLayout.currentLayout !== "Unknown")
|
||||
visible: Settings.data.general.compactLockScreen && ((batteryIndicator.isReady) || keyboardLayout.currentLayout !== "Unknown")
|
||||
|
||||
RowLayout {
|
||||
anchors.centerIn: parent
|
||||
@@ -134,10 +140,10 @@ Item {
|
||||
// Battery indicator
|
||||
RowLayout {
|
||||
spacing: Style.marginS
|
||||
visible: batteryIndicator.isReady && BatteryService.hasAnyBattery()
|
||||
visible: batteryIndicator.isReady
|
||||
|
||||
NIcon {
|
||||
icon: BatteryService.getIcon(Math.round(batteryIndicator.percent), batteryIndicator.charging, batteryIndicator.pluggedIn, batteryIndicator.isReady)
|
||||
icon: batteryIndicator.icon
|
||||
pointSize: Style.fontSizeM
|
||||
color: batteryIndicator.charging ? Color.mPrimary : Color.mOnSurfaceVariant
|
||||
}
|
||||
@@ -447,22 +453,22 @@ Item {
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: batteryIndicator.isReady && BatteryService.hasAnyBattery()
|
||||
Layout.fillWidth: batteryIndicator.isReady
|
||||
}
|
||||
|
||||
// Battery and Keyboard Layout (full mode only)
|
||||
ColumnLayout {
|
||||
Layout.alignment: (batteryIndicator.isReady && BatteryService.hasAnyBattery()) ? (Qt.AlignRight | Qt.AlignVCenter) : Qt.AlignVCenter
|
||||
Layout.alignment: (batteryIndicator.isReady) ? (Qt.AlignRight | Qt.AlignVCenter) : Qt.AlignVCenter
|
||||
spacing: Style.marginM
|
||||
visible: (batteryIndicator.isReady && BatteryService.hasAnyBattery()) || keyboardLayout.currentLayout !== "Unknown"
|
||||
visible: (batteryIndicator.isReady) || keyboardLayout.currentLayout !== "Unknown"
|
||||
|
||||
// Battery
|
||||
RowLayout {
|
||||
spacing: Style.marginXS
|
||||
visible: batteryIndicator.isReady && BatteryService.hasAnyBattery()
|
||||
visible: batteryIndicator.isReady
|
||||
|
||||
NIcon {
|
||||
icon: BatteryService.getIcon(Math.round(batteryIndicator.percent), batteryIndicator.charging, batteryIndicator.pluggedIn, batteryIndicator.isReady)
|
||||
icon: batteryIndicator.icon
|
||||
pointSize: Style.fontSizeM
|
||||
color: batteryIndicator.charging ? Color.mPrimary : Color.mOnSurfaceVariant
|
||||
}
|
||||
@@ -542,9 +548,10 @@ Item {
|
||||
visible: passwordInput.activeFocus && passwordInput.text.length === 0
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
// Smooth fade animation (when animations enabled)
|
||||
SequentialAnimation on opacity {
|
||||
loops: Animation.Infinite
|
||||
running: passwordInput.activeFocus && passwordInput.text.length === 0
|
||||
running: root.animationsEnabled && passwordInput.activeFocus && passwordInput.text.length === 0
|
||||
NumberAnimation {
|
||||
to: 0
|
||||
duration: 530
|
||||
@@ -554,6 +561,14 @@ Item {
|
||||
duration: 530
|
||||
}
|
||||
}
|
||||
|
||||
// Simple toggle (when animations disabled) — no per-frame repaints
|
||||
Timer {
|
||||
interval: 530
|
||||
running: !root.animationsEnabled && passwordInput.activeFocus && passwordInput.text.length === 0
|
||||
repeat: true
|
||||
onTriggered: parent.opacity = parent.opacity > 0.5 ? 0 : 1
|
||||
}
|
||||
}
|
||||
|
||||
// Password display - show dots or actual text based on passwordVisible
|
||||
@@ -599,9 +614,10 @@ Item {
|
||||
visible: passwordInput.activeFocus && passwordInput.text.length > 0
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
// Smooth fade animation (when animations enabled)
|
||||
SequentialAnimation on opacity {
|
||||
loops: Animation.Infinite
|
||||
running: passwordInput.activeFocus && passwordInput.text.length > 0
|
||||
running: root.animationsEnabled && passwordInput.activeFocus && passwordInput.text.length > 0
|
||||
NumberAnimation {
|
||||
to: 0
|
||||
duration: 530
|
||||
@@ -611,6 +627,14 @@ Item {
|
||||
duration: 530
|
||||
}
|
||||
}
|
||||
|
||||
// Simple toggle (when animations disabled) — no per-frame repaints
|
||||
Timer {
|
||||
interval: 530
|
||||
running: !root.animationsEnabled && passwordInput.activeFocus && passwordInput.text.length > 0
|
||||
repeat: true
|
||||
onTriggered: parent.opacity = parent.opacity > 0.5 ? 0 : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user