1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-08-02 03:28:28 -04:00

i18n: term overhaul

- Delete ~160-ish useless terms
- Add context to more terms
- Add a mechanism to duplicate the same terms with different contexts
- sync
This commit is contained in:
bbedward
2026-07-16 12:15:20 -04:00
parent 6c45413d7a
commit 3c0f2cbc48
83 changed files with 19570 additions and 20947 deletions
+6 -5
View File
@@ -48,8 +48,9 @@ done
SettingsCard {
width: parent.width
iconName: "battery_charging_full"
title: I18n.tr("Battery Status")
title: I18n.tr("Status")
settingKey: "batteryStatusCard"
tags: ["battery", "status", "charge", "health"]
Column {
width: parent.width - Theme.spacingM * 2
@@ -167,8 +168,9 @@ done
SettingsCard {
width: parent.width
iconName: "tune"
title: I18n.tr("Battery Protection")
title: I18n.tr("Protection")
settingKey: "batteryProtection"
tags: ["battery", "protection", "charge", "limit"]
SettingsSliderRow {
settingKey: "batteryChargeLimit"
@@ -230,8 +232,9 @@ done
SettingsCard {
width: parent.width
iconName: "notifications"
title: I18n.tr("Battery Alerts")
title: I18n.tr("Alerts")
settingKey: "batteryAlerts"
tags: ["battery", "alerts", "low", "warning"]
SettingsSliderRow {
settingKey: "batteryLowThreshold"
@@ -332,7 +335,6 @@ done
SettingsDropdownRow {
settingKey: "acProfileName"
text: I18n.tr("Profile when Plugged In (AC)")
description: I18n.tr("Power profile to use when AC power is connected.")
options: [I18n.tr("Don't Change"), Theme.getPowerProfileLabel(0), Theme.getPowerProfileLabel(1), Theme.getPowerProfileLabel(2)]
currentValue: {
const val = SettingsData.acProfileName;
@@ -350,7 +352,6 @@ done
SettingsDropdownRow {
settingKey: "batteryProfileName"
text: I18n.tr("Profile when on Battery")
description: I18n.tr("Power profile to use when running on battery power.")
options: [I18n.tr("Don't Change"), Theme.getPowerProfileLabel(0), Theme.getPowerProfileLabel(1), Theme.getPowerProfileLabel(2)]
currentValue: {
const val = SettingsData.batteryProfileName;
+1 -2
View File
@@ -153,7 +153,7 @@ Item {
]
readonly property var entryActionKeys: ["copy", "paste", "pin", "edit", "delete"]
readonly property var entryActionLabels: [I18n.tr("Copy"), I18n.tr("Paste"), I18n.tr("Pin"), I18n.tr("Edit"), I18n.tr("Delete")]
readonly property var entryActionLabels: [I18n.tr("Copy"), I18n.tr("Paste"), I18n.tr("Pin", "pin item action"), I18n.tr("Edit"), I18n.tr("Delete")]
function getMaxHistoryText(value) {
if (value <= 0)
@@ -341,7 +341,6 @@ Item {
tags: ["clipboard", "entry", "size", "limit"]
settingKey: "maxEntrySize"
text: I18n.tr("Maximum Entry Size")
description: I18n.tr("Maximum size per clipboard entry")
options: root.maxEntrySizeOptions.map(opt => opt.text)
Component.onCompleted: {
@@ -94,7 +94,7 @@ Item {
function fixLayoutInclude() {
if (readOnly) {
ToastService.showWarning(I18n.tr("Hyprland conf mode"), I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before editing layout settings."), "dms setup", "hyprland-migration");
ToastService.showWarning(I18n.tr("Hyprland conf mode"), I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before changing these settings."), "dms setup", "hyprland-migration");
return;
}
const paths = getLayoutConfigPaths();
@@ -208,7 +208,7 @@ awk '$1 == "xray" { print FILENAME ":" FNR; exit }' $files 2>/dev/null`;
StyledText {
text: {
if (warningBox.showLegacy)
return I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before editing layout settings.");
return I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before changing these settings.");
if (warningBox.showSetup)
return I18n.tr("Click 'Setup' to create %1 and add include to your compositor config.").arg("dms/layout");
return "";
@@ -270,7 +270,7 @@ awk '$1 == "xray" { print FILENAME ":" FNR; exit }' $files 2>/dev/null`;
SettingsCard {
width: parent.width
tags: ["niri", "layout", "gaps", "radius", "window", "border"]
title: I18n.tr("Niri Layout Overrides")
title: I18n.tr("%1 Layout Overrides").arg("niri")
settingKey: "niriLayout"
iconName: "layers"
visible: CompositorService.isNiri
@@ -279,7 +279,7 @@ awk '$1 == "xray" { print FILENAME ":" FNR; exit }' $files 2>/dev/null`;
tags: ["niri", "gaps", "override", "unmanaged"]
settingKey: "niriLayoutGapsMode"
text: I18n.tr("Gaps")
description: I18n.tr("Auto matches bar spacing; Off leaves gaps to your niri config")
description: I18n.tr("Auto matches bar spacing; Off leaves gaps to your %1 config").arg("niri")
model: [I18n.tr("Auto"), I18n.tr("Custom"), I18n.tr("Off")]
currentIndex: {
if (SettingsData.niriLayoutGapsOverride === -2)
@@ -399,7 +399,7 @@ awk '$1 == "xray" { print FILENAME ":" FNR; exit }' $files 2>/dev/null`;
SettingsCard {
width: parent.width
tags: ["hyprland", "layout", "gaps", "radius", "window", "border", "rounding"]
title: I18n.tr("Hyprland Layout Overrides")
title: I18n.tr("%1 Layout Overrides").arg("Hyprland")
settingKey: "hyprlandLayout"
iconName: "crop_square"
visible: CompositorService.isHyprland
@@ -408,7 +408,7 @@ awk '$1 == "xray" { print FILENAME ":" FNR; exit }' $files 2>/dev/null`;
tags: ["hyprland", "gaps", "override", "inner", "outer", "unmanaged"]
settingKey: "hyprlandLayoutGapsMode"
text: I18n.tr("Gaps")
description: I18n.tr("Auto matches bar spacing; Off leaves gaps to your Hyprland config")
description: I18n.tr("Auto matches bar spacing; Off leaves gaps to your %1 config").arg("Hyprland")
model: [I18n.tr("Auto"), I18n.tr("Custom"), I18n.tr("Off")]
currentIndex: {
if (SettingsData.hyprlandLayoutGapsOverride === -2)
@@ -492,7 +492,6 @@ awk '$1 == "xray" { print FILENAME ":" FNR; exit }' $files 2>/dev/null`;
tags: ["hyprland", "border", "override"]
settingKey: "hyprlandLayoutBorderSizeEnabled"
text: I18n.tr("Override Border Size")
description: I18n.tr("Use custom border size")
checked: SettingsData.hyprlandLayoutBorderSize >= 0
onToggled: checked => {
if (checked) {
@@ -551,7 +550,7 @@ awk '$1 == "xray" { print FILENAME ":" FNR; exit }' $files 2>/dev/null`;
SettingsCard {
width: parent.width
tags: ["mangowc", "mango", "dwl", "layout", "gaps", "radius", "window", "border"]
title: I18n.tr("MangoWC Layout Overrides")
title: I18n.tr("%1 Layout Overrides").arg("MangoWC")
settingKey: "mangoLayout"
iconName: "crop_square"
visible: CompositorService.isMango
@@ -560,7 +559,7 @@ awk '$1 == "xray" { print FILENAME ":" FNR; exit }' $files 2>/dev/null`;
tags: ["mangowc", "mango", "gaps", "override", "inner", "outer", "unmanaged"]
settingKey: "mangoLayoutGapsMode"
text: I18n.tr("Gaps")
description: I18n.tr("Auto matches bar spacing; Off leaves gaps to your MangoWC config")
description: I18n.tr("Auto matches bar spacing; Off leaves gaps to your %1 config").arg("MangoWC")
model: [I18n.tr("Auto"), I18n.tr("Custom"), I18n.tr("Off")]
currentIndex: {
if (SettingsData.mangoLayoutGapsOverride === -2)
@@ -644,7 +643,6 @@ awk '$1 == "xray" { print FILENAME ":" FNR; exit }' $files 2>/dev/null`;
tags: ["mangowc", "mango", "border", "override"]
settingKey: "mangoLayoutBorderSizeEnabled"
text: I18n.tr("Override Border Size")
description: I18n.tr("Use custom border size")
checked: SettingsData.mangoLayoutBorderSize >= 0
onToggled: checked => {
if (checked) {
+2 -7
View File
@@ -266,7 +266,7 @@ Item {
SettingsCard {
iconName: "dashboard"
title: I18n.tr("Bar Configurations")
title: I18n.tr("Configurations")
settingKey: "barConfigurations"
visible: !dankBarTab.appearanceOnly
@@ -490,7 +490,7 @@ Item {
DankButtonGroup {
id: positionButtonGroup
anchors.horizontalCenter: parent.horizontalCenter
model: [I18n.tr("Top"), I18n.tr("Bottom"), I18n.tr("Left"), I18n.tr("Right")]
model: [I18n.tr("Top", "screen edge position"), I18n.tr("Bottom", "screen edge position"), I18n.tr("Left", "screen edge position"), I18n.tr("Right", "screen edge position")]
currentIndex: {
selectedBarId;
const config = SettingsData.getBarConfig(selectedBarId);
@@ -820,7 +820,6 @@ Item {
id: barTransparencySlider
visible: !SettingsData.frameEnabled
text: I18n.tr("Bar Opacity")
description: I18n.tr("Controls opacity of the bar background")
value: (selectedBarConfig?.transparency ?? 1.0) * 100
minimum: 0
maximum: 100
@@ -843,7 +842,6 @@ Item {
SettingsSliderRow {
id: widgetTransparencySlider
text: I18n.tr("Widget Opacity")
description: I18n.tr("Controls opacity of widget backgrounds")
value: (selectedBarConfig?.widgetTransparency ?? 1.0) * 100
minimum: 0
maximum: 100
@@ -1463,7 +1461,6 @@ Item {
SettingsSliderRow {
id: borderOpacitySlider
text: I18n.tr("Opacity")
description: I18n.tr("Controls opacity of the border")
value: (selectedBarConfig?.borderOpacity ?? 1.0) * 100
minimum: 0
maximum: 100
@@ -1558,7 +1555,6 @@ Item {
SettingsSliderRow {
id: widgetOutlineOpacitySlider
text: I18n.tr("Opacity")
description: I18n.tr("Controls opacity of the widget outline")
value: (selectedBarConfig?.widgetOutlineOpacity ?? 1.0) * 100
minimum: 0
maximum: 100
@@ -1667,7 +1663,6 @@ Item {
SettingsSliderRow {
visible: shadowCard.shadowActive
text: I18n.tr("Opacity")
description: I18n.tr("Controls opacity of the shadow layer")
minimum: 10
maximum: 100
unit: "%"
@@ -312,7 +312,6 @@ Item {
text: I18n.tr("Calendar", "Calendar")
category: root.appCategory.Calendar
tags: ["calendar", "events"]
description: I18n.tr("Manages calendar events", "Manages calendar events")
}
}
@@ -330,7 +329,6 @@ Item {
text: I18n.tr("PDF Reader", "PDF Reader")
category: root.appCategory.PDFReader
tags: ["pdf", "reader"]
description: I18n.tr("For reading PDF files", "For reading PDF files")
}
}
@@ -341,13 +339,11 @@ Item {
text: I18n.tr("Image Viewer", "Image Viewer")
category: root.appCategory.ImageViewer
tags: ["image", "viewer"]
description: I18n.tr("Opens image files", "Opens image files")
}
AppSelector {
text: I18n.tr("Video Player", "Video Player")
category: root.appCategory.VideoPlayer
tags: ["video", "player"]
description: I18n.tr("Plays video files", "Plays video files")
}
AppSelector {
text: I18n.tr("Music Player", "Music Player")
@@ -1518,7 +1518,7 @@ Singleton {
}
function showHyprlandReadOnlyWarning() {
ToastService.showWarning(I18n.tr("Hyprland conf mode"), I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before editing display settings."), "dms setup", "display-config");
ToastService.showWarning(I18n.tr("Hyprland conf mode"), I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before changing these settings."), "dms setup", "display-config");
}
function buildOutputsMap() {
@@ -2639,7 +2639,7 @@ Singleton {
function getTransformLabel(transform) {
switch (transform) {
case "Normal":
return I18n.tr("Normal");
return I18n.tr("Normal", "display rotation option", true);
case "90":
return I18n.tr("90°");
case "180":
@@ -2655,12 +2655,12 @@ Singleton {
case "Flipped270":
return I18n.tr("Flipped 270°");
default:
return I18n.tr("Normal");
return I18n.tr("Normal", "display rotation option", true);
}
}
function getTransformValue(label) {
if (label === I18n.tr("Normal"))
if (label === I18n.tr("Normal", "display rotation option", true))
return "Normal";
if (label === I18n.tr("90°"))
return "90";
@@ -60,9 +60,9 @@ StyledRect {
StyledText {
text: {
if (root.showLegacy)
return I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before editing display settings.");
return I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before changing these settings.");
if (root.showSetup)
return I18n.tr("Click 'Setup' to create the outputs config and add include to your compositor config.");
return I18n.tr("Click 'Setup' to create %1 and add include to your compositor config.").arg("dms/outputs");
return "";
}
font.pixelSize: Theme.fontSizeSmall
@@ -93,21 +93,21 @@ Column {
currentValue: {
if (!hotCornersData)
return I18n.tr("Inherit");
return I18n.tr("Inherit", "inherit from global setting");
if (hotCornersData.off)
return I18n.tr("Off");
const corners = hotCornersData.corners || [];
if (corners.length === 0)
return I18n.tr("Inherit");
return I18n.tr("Inherit", "inherit from global setting");
if (corners.length === 4)
return I18n.tr("All");
return I18n.tr("Select...");
}
options: [I18n.tr("Inherit"), I18n.tr("Off"), I18n.tr("All"), I18n.tr("Select...")]
options: [I18n.tr("Inherit", "inherit from global setting"), I18n.tr("Off"), I18n.tr("All"), I18n.tr("Select...")]
onValueChanged: value => {
switch (value) {
case I18n.tr("Inherit"):
case I18n.tr("Inherit", "inherit from global setting"):
DisplayConfigState.setNiriSetting(root.outputData, root.outputName, "hotCorners", null);
break;
case I18n.tr("Off"):
@@ -232,7 +232,7 @@ Column {
DankTextField {
width: parent.width
height: 40
placeholderText: I18n.tr("Inherit")
placeholderText: I18n.tr("Inherit", "inherit from global setting")
enabled: !settingsColumn.isDisabled
text: {
const layout = DisplayConfigState.getNiriSetting(root.outputData, root.outputName, "layout", null);
@@ -270,7 +270,7 @@ Column {
DankTextField {
width: parent.width
height: 40
placeholderText: I18n.tr("Inherit")
placeholderText: I18n.tr("Inherit", "inherit from global setting")
enabled: !settingsColumn.isDisabled
text: {
const layout = DisplayConfigState.getNiriSetting(root.outputData, root.outputName, "layout", null);
@@ -321,7 +321,7 @@ Column {
DankTextField {
width: parent.width
height: 40
placeholderText: I18n.tr("Inherit")
placeholderText: I18n.tr("Inherit", "inherit from global setting")
enabled: !settingsColumn.isDisabled
text: {
const layout = DisplayConfigState.getNiriSetting(root.outputData, root.outputName, "layout", null);
@@ -308,7 +308,7 @@ StyledRect {
return DisplayConfigState.getTransformLabel(pendingTransform);
return DisplayConfigState.getTransformLabel(root.outputData?.logical?.transform ?? "Normal");
}
options: [I18n.tr("Normal"), I18n.tr("90°"), I18n.tr("180°"), I18n.tr("270°"), I18n.tr("Flipped"), I18n.tr("Flipped 90°"), I18n.tr("Flipped 180°"), I18n.tr("Flipped 270°")]
options: [I18n.tr("Normal", "display rotation option", true), I18n.tr("90°"), I18n.tr("180°"), I18n.tr("270°"), I18n.tr("Flipped"), I18n.tr("Flipped 90°"), I18n.tr("Flipped 180°"), I18n.tr("Flipped 270°")]
onValueChanged: value => DisplayConfigState.setPendingChange(root.outputName, "transform", DisplayConfigState.getTransformValue(value))
}
}
@@ -399,7 +399,6 @@ Item {
DankToggle {
width: parent.width
text: I18n.tr("All displays")
description: I18n.tr("Show on all connected displays")
checked: {
var prefs = root.getScreenPreferences(parent.componentId);
return prefs.includes("all") || (typeof prefs[0] === "string" && prefs[0] === "all");
@@ -420,7 +419,6 @@ Item {
DankToggle {
width: parent.width
text: I18n.tr("Focused Monitor Only")
description: I18n.tr("Show notifications only on the currently focused monitor")
visible: parent.componentId === "notifications"
checked: SettingsData.notificationFocusedMonitor
onToggled: checked => SettingsData.set("notificationFocusedMonitor", checked)
+2 -4
View File
@@ -37,7 +37,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "dock_to_bottom"
title: I18n.tr("Dock Visibility")
title: I18n.tr("Visibility")
settingKey: "dockVisibility"
SettingsToggleRow {
@@ -228,7 +228,6 @@ Item {
settingKey: "dockShowOverflowBadge"
tags: ["dock", "overflow", "badge", "count", "indicator"]
text: I18n.tr("Show Overflow Badge Count")
description: I18n.tr("Displays count when overflow is active")
checked: SettingsData.dockShowOverflowBadge
onToggled: checked => SettingsData.set("dockShowOverflowBadge", checked)
}
@@ -461,7 +460,7 @@ Item {
if (!PopoutService.colorPickerModal)
return;
PopoutService.colorPickerModal.selectedColor = SettingsData.dockLauncherLogoColorOverride;
PopoutService.colorPickerModal.pickerTitle = I18n.tr("Choose Dock Launcher Logo Color");
PopoutService.colorPickerModal.pickerTitle = I18n.tr("Choose Launcher Logo Color");
PopoutService.colorPickerModal.onColorSelectedCallback = function (selectedColor) {
SettingsData.set("dockLauncherLogoColorOverride", selectedColor);
};
@@ -683,7 +682,6 @@ Item {
SettingsButtonGroupRow {
text: I18n.tr("Border Color")
description: I18n.tr("Choose the border accent color")
visible: SettingsData.dockBorderEnabled
model: [I18n.tr("Surface", "color option"), I18n.tr("Secondary", "color option"), I18n.tr("Primary", "color option")]
buttonPadding: Theme.spacingS
+1 -1
View File
@@ -31,7 +31,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "frame_source"
title: I18n.tr("Frame")
title: I18n.tr("General")
settingKey: "frameEnabled"
SettingsToggleRow {
@@ -122,7 +122,6 @@ Item {
tags: ["gamma", "day", "temperature", "kelvin", "color"]
width: parent.width - parent.leftPadding - parent.rightPadding
text: I18n.tr("Day Temperature")
description: I18n.tr("Color temperature for day time")
minimum: SessionData.nightModeTemperature
maximum: 10000
step: 100
+6 -6
View File
@@ -305,7 +305,7 @@ Item {
onExited: exitCode => {
root.greeterSyncRunning = false;
if (exitCode === 0) {
var launched = root.greeterTerminalFallbackFromPrecheck ? I18n.tr("Terminal opened. Complete sync authentication there; it will close automatically when done.") : I18n.tr("Terminal fallback opened. Complete sync there; it will close automatically when done.");
var launched = root.greeterTerminalFallbackFromPrecheck ? I18n.tr("Terminal opened. Complete authentication there; it will close automatically when done.") : I18n.tr("Terminal fallback opened. Complete authentication there; it will close automatically when done.");
root.greeterStatusText = root.greeterStatusText ? root.greeterStatusText + "\n\n" + launched : launched;
SettingsData.clearGreeterSyncPending();
return;
@@ -396,7 +396,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "info"
title: I18n.tr("Greeter Status")
title: I18n.tr("Status")
settingKey: "greeterStatus"
StyledText {
@@ -470,7 +470,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "fingerprint"
title: I18n.tr("Login Authentication")
title: I18n.tr("Authentication")
settingKey: "greeterAuth"
StyledText {
@@ -517,7 +517,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "palette"
title: I18n.tr("Greeter Appearance")
title: I18n.tr("Appearance")
settingKey: "greeterAppearance"
StyledText {
@@ -558,7 +558,7 @@ Item {
currentValue: {
var current = (SettingsData.greeterLockDateFormat !== undefined && SettingsData.greeterLockDateFormat !== "") ? SettingsData.greeterLockDateFormat : SettingsData.lockDateFormat || "";
var match = root._lockDateFormatPresets.find(p => p.format === current);
return match ? match.label : (current ? I18n.tr("Custom: ") + current : root._lockDateFormatPresets[0].label);
return match ? match.label : (current ? I18n.tr("Custom") + ": " + current : root._lockDateFormatPresets[0].label);
}
onValueChanged: value => {
var preset = root._lockDateFormatPresets.find(p => p.label === value);
@@ -601,7 +601,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "history"
title: I18n.tr("Greeter Behavior")
title: I18n.tr("Behavior")
settingKey: "greeterBehavior"
StyledText {
+2 -2
View File
@@ -117,7 +117,7 @@ Item {
function confirmResetBind(key, remainingKey) {
removeBindConfirm.showWithOptions({
title: I18n.tr("Reset to Default?"),
title: I18n.tr("Reset to default"),
message: I18n.tr("Drop your override for %1 so the DMS default action re-applies?").arg(key),
confirmText: I18n.tr("Reset"),
confirmColor: Theme.primary,
@@ -397,7 +397,7 @@ Item {
StyledText {
text: {
if (warningBox.showLegacy)
return I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before editing shortcuts in Settings.");
return I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before changing these settings.");
if (warningBox.showSetup)
return I18n.tr("Click 'Setup' to create %1 and add include to your compositor config.").arg("dms/binds");
if (warningBox.showWarning) {
+2 -3
View File
@@ -139,7 +139,7 @@ Item {
}
StyledText {
text: !root.keybindsAvailable ? I18n.tr("Bind the spotlight IPC action in your compositor config.") : SettingsData.connectedFrameModeActive ? I18n.tr("Opens the connected launcher in Connected Frame Mode.") : I18n.tr("Follows the default launcher choice selected above.")
text: !root.keybindsAvailable ? I18n.tr("Bind the %1 IPC action in your compositor config.").arg("spotlight") : SettingsData.connectedFrameModeActive ? I18n.tr("Opens the connected launcher in Connected Frame Mode.") : I18n.tr("Follows the default launcher choice selected above.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
width: parent.width
@@ -173,7 +173,6 @@ Item {
settingKey: "launcherUseOverlayLayer"
tags: ["launcher", "fullscreen", "overlay", "layer"]
text: I18n.tr("Use Overlay Layer", "launcher layer toggle: use Wayland overlay layer")
description: I18n.tr("Use the overlay layer when opening the launcher")
checked: SettingsData.launcherUseOverlayLayer
onToggled: checked => SettingsData.set("launcherUseOverlayLayer", checked)
}
@@ -233,7 +232,7 @@ Item {
}
StyledText {
text: !root.keybindsAvailable ? I18n.tr("Bind the spotlight-bar IPC action in your compositor config.") : I18n.tr("Uses the spotlight-bar IPC action and always opens the minimal bar.")
text: !root.keybindsAvailable ? I18n.tr("Bind the %1 IPC action in your compositor config.").arg("spotlight-bar") : I18n.tr("Uses the spotlight-bar IPC action and always opens the minimal bar.")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
width: parent.width
+1 -1
View File
@@ -45,7 +45,7 @@ Item {
SettingsCard {
tab: "locale"
tags: ["locale", "language", "country"]
title: I18n.tr("Locale Settings")
title: I18n.tr("General")
iconName: "language"
SettingsDropdownRow {
@@ -266,7 +266,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "lock"
title: I18n.tr("Lock Screen layout")
title: I18n.tr("Layout")
settingKey: "lockLayout"
SettingsToggleRow {
@@ -345,7 +345,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "palette"
title: I18n.tr("Lock Screen Appearance")
title: I18n.tr("Appearance")
settingKey: "lockAppearance"
StyledText {
@@ -476,7 +476,6 @@ Item {
settingKey: "lockPamExternallyManaged"
tags: ["lock", "screen", "pam", "managed", "external", "authentication", "policy"]
text: I18n.tr("Use system PAM authentication", "system PAM policy toggle")
description: I18n.tr("System PAM sets the authentication policy.", "system PAM policy toggle")
checked: SettingsData.lockPamExternallyManaged
onToggled: checked => SettingsData.set("lockPamExternallyManaged", checked)
}
@@ -582,7 +581,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "lock"
title: I18n.tr("Lock Screen behaviour")
title: I18n.tr("Behavior")
settingKey: "lockBehavior"
StyledText {
@@ -721,7 +720,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "monitor"
title: I18n.tr("Lock Screen Display")
title: I18n.tr("Display Assignment")
settingKey: "lockDisplay"
StyledText {
@@ -34,7 +34,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "music_note"
title: I18n.tr("Media Player Settings")
title: I18n.tr("General")
settingKey: "mediaPlayer"
SettingsToggleRow {
@@ -146,7 +146,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "do_not_disturb_on"
title: I18n.tr("Excluded Media Players")
title: I18n.tr("Excluded Players")
settingKey: "mediaExcludePlayers"
tags: ["media", "music", "exclude", "ignore", "player", "mpris"]
+1 -2
View File
@@ -25,7 +25,7 @@ Item {
SettingsCard {
tab: "mux"
tags: ["mux", "multiplexer", "tmux", "zellij", "type"]
title: I18n.tr("Multiplexer")
title: I18n.tr("General")
iconName: "terminal"
SettingsDropdownRow {
@@ -33,7 +33,6 @@ Item {
tags: ["mux", "multiplexer", "tmux", "zellij", "type", "backend"]
settingKey: "muxType"
text: I18n.tr("Multiplexer Type")
description: I18n.tr("Terminal multiplexer backend to use")
options: root.muxTypeOptions
currentValue: SettingsData.muxType
onValueChanged: value => SettingsData.set("muxType", value)
@@ -37,7 +37,7 @@ Item {
SettingsCard {
id: root
title: I18n.tr("Network Status")
title: I18n.tr("Status")
iconName: "lan"
settingKey: "networkStatus"
tags: ["status", "network", "connectivity", "internet"]
@@ -128,7 +128,7 @@ Item {
}
StyledText {
text: I18n.tr("Primary")
text: I18n.tr("Primary", "primary network connection label", true)
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
visible: NetworkService.primaryConnection.length > 0
@@ -318,7 +318,7 @@ Item {
visible: NetworkService.wifiConnected
StyledText {
text: I18n.tr("Signal:")
text: I18n.tr("Signal") + ":"
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
width: 100
@@ -563,7 +563,7 @@ Item {
spacing: Theme.spacingXS
StyledText {
text: isConnecting ? I18n.tr("Connecting...") : (isConnected ? I18n.tr("Connected") : (modelData.secured ? I18n.tr("Secured") : I18n.tr("Open")))
text: isConnecting ? I18n.tr("Connecting...") : (isConnected ? I18n.tr("Connected") : (modelData.secured ? I18n.tr("Secured") : I18n.tr("Open", "network security type", true)))
font.pixelSize: Theme.fontSizeSmall
color: isConnecting ? Theme.warning : (isConnected ? Theme.primary : Theme.surfaceVariantText)
}
@@ -770,7 +770,7 @@ Item {
});
fields.push({
label: I18n.tr("Security"),
value: net.secured ? (net.enterprise ? I18n.tr("Enterprise") : I18n.tr("WPA/WPA2")) : I18n.tr("Open")
value: net.secured ? (net.enterprise ? I18n.tr("Enterprise") : I18n.tr("WPA/WPA2")) : I18n.tr("Open", "network security type", true)
});
return fields;
@@ -966,7 +966,7 @@ Item {
text: {
if (isConnecting)
return I18n.tr("Connecting...");
const parts = [isConnected ? I18n.tr("Connected") : (modelData.secured ? I18n.tr("Secured") : I18n.tr("Open"))];
const parts = [isConnected ? I18n.tr("Connected") : (modelData.secured ? I18n.tr("Secured") : I18n.tr("Open", "network security type", true))];
parts.push(isOutOfRange ? I18n.tr("Unavailable") : (modelData.signal || 0) + "%");
if (modelData.hidden || false)
parts.push(I18n.tr("Hidden"));
@@ -1131,7 +1131,7 @@ Item {
});
fields.push({
label: I18n.tr("Security"),
value: net.secured ? (net.enterprise ? I18n.tr("Enterprise") : I18n.tr("WPA/WPA2")) : I18n.tr("Open")
value: net.secured ? (net.enterprise ? I18n.tr("Enterprise") : I18n.tr("WPA/WPA2")) : I18n.tr("Open", "network security type", true)
});
return fields;
@@ -203,7 +203,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "notifications"
title: I18n.tr("Notification Popups")
title: I18n.tr("Popups")
settingKey: "notificationPopups"
// Font size selectors for summary and body
@@ -211,7 +211,6 @@ Item {
settingKey: "notificationSummaryFontSize"
tags: ["notification", "font", "summary", "size"]
text: I18n.tr("Summary Font Size")
description: I18n.tr("Set the font size for notification summary text")
options: [I18n.tr("Unset"), "10", "12", "14", "16", "18"]
currentValue: (SettingsData.notificationSummaryFontSize || I18n.tr("Unset")).toString()
onValueChanged: value => {
@@ -340,7 +339,6 @@ Item {
settingKey: "notificationFocusedMonitor"
tags: ["notification", "popup", "focused", "monitor", "display", "screen", "active"]
text: I18n.tr("Focused Monitor Only")
description: I18n.tr("Show notification popups only on the currently focused monitor")
checked: SettingsData.notificationFocusedMonitor
onToggled: checked => SettingsData.set("notificationFocusedMonitor", checked)
}
@@ -445,7 +443,7 @@ Item {
id: notificationRulesCard
width: parent.width
iconName: "rule_settings"
title: I18n.tr("Notification Rules")
title: I18n.tr("Rules")
settingKey: "notificationRules"
tags: ["notification", "rules", "mute", "ignore", "priority", "regex", "history"]
collapsible: true
@@ -510,7 +508,7 @@ Item {
StyledText {
id: ruleLabel
text: I18n.tr("Rule") + " " + (index + 1)
text: I18n.tr("Rule %1").arg(index + 1)
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
anchors.verticalCenter: parent.verticalCenter
@@ -785,7 +783,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "timer"
title: I18n.tr("Notification Timeouts")
title: I18n.tr("Timeouts")
settingKey: "notificationTimeouts"
collapsible: true
expanded: false
@@ -794,7 +792,6 @@ Item {
settingKey: "notificationTimeoutLow"
tags: ["notification", "timeout", "low", "priority", "duration"]
text: I18n.tr("Low Priority")
description: I18n.tr("Timeout for low priority notifications")
currentValue: root.getTimeoutText(SettingsData.notificationTimeoutLow)
options: root.timeoutOptions.map(opt => opt.text)
onValueChanged: value => {
@@ -811,7 +808,6 @@ Item {
settingKey: "notificationTimeoutNormal"
tags: ["notification", "timeout", "normal", "priority", "duration"]
text: I18n.tr("Normal Priority")
description: I18n.tr("Timeout for normal priority notifications")
currentValue: root.getTimeoutText(SettingsData.notificationTimeoutNormal)
options: root.timeoutOptions.map(opt => opt.text)
onValueChanged: value => {
@@ -828,7 +824,6 @@ Item {
settingKey: "notificationTimeoutCritical"
tags: ["notification", "timeout", "critical", "priority", "duration"]
text: I18n.tr("Critical Priority")
description: I18n.tr("Timeout for critical priority notifications")
currentValue: root.getTimeoutText(SettingsData.notificationTimeoutCritical)
options: root.timeoutOptions.map(opt => opt.text)
onValueChanged: value => {
-9
View File
@@ -91,7 +91,6 @@ Item {
SettingsToggleRow {
settingKey: "osdVolumeEnabled"
text: I18n.tr("Volume")
description: I18n.tr("Show on-screen display when volume changes")
checked: SettingsData.osdVolumeEnabled
onToggled: checked => SettingsData.set("osdVolumeEnabled", checked)
}
@@ -99,7 +98,6 @@ Item {
SettingsToggleRow {
settingKey: "osdMediaVolumeEnabled"
text: I18n.tr("Media Volume")
description: I18n.tr("Show on-screen display when media player volume changes")
checked: SettingsData.osdMediaVolumeEnabled
onToggled: checked => SettingsData.set("osdMediaVolumeEnabled", checked)
}
@@ -107,7 +105,6 @@ Item {
SettingsToggleRow {
settingKey: "osdMediaPlaybackEnabled"
text: I18n.tr("Media Playback")
description: I18n.tr("Show on-screen display when media player status changes")
checked: SettingsData.osdMediaPlaybackEnabled
onToggled: checked => SettingsData.set("osdMediaPlaybackEnabled", checked)
}
@@ -115,7 +112,6 @@ Item {
SettingsToggleRow {
settingKey: "osdBrightnessEnabled"
text: I18n.tr("Brightness")
description: I18n.tr("Show on-screen display when brightness changes")
checked: SettingsData.osdBrightnessEnabled
onToggled: checked => SettingsData.set("osdBrightnessEnabled", checked)
}
@@ -123,7 +119,6 @@ Item {
SettingsToggleRow {
settingKey: "osdIdleInhibitorEnabled"
text: I18n.tr("Idle Inhibitor")
description: I18n.tr("Show on-screen display when idle inhibitor state changes")
checked: SettingsData.osdIdleInhibitorEnabled
onToggled: checked => SettingsData.set("osdIdleInhibitorEnabled", checked)
}
@@ -131,7 +126,6 @@ Item {
SettingsToggleRow {
settingKey: "osdMicMuteEnabled"
text: I18n.tr("Microphone Mute")
description: I18n.tr("Show on-screen display when microphone is muted/unmuted")
checked: SettingsData.osdMicMuteEnabled
onToggled: checked => SettingsData.set("osdMicMuteEnabled", checked)
}
@@ -139,7 +133,6 @@ Item {
SettingsToggleRow {
settingKey: "osdCapsLockEnabled"
text: I18n.tr("Caps Lock")
description: I18n.tr("Show on-screen display when caps lock state changes")
checked: SettingsData.osdCapsLockEnabled
onToggled: checked => SettingsData.set("osdCapsLockEnabled", checked)
}
@@ -147,7 +140,6 @@ Item {
SettingsToggleRow {
settingKey: "osdPowerProfileEnabled"
text: I18n.tr("Power Profile")
description: I18n.tr("Show on-screen display when power profile changes")
checked: SettingsData.osdPowerProfileEnabled
onToggled: checked => SettingsData.set("osdPowerProfileEnabled", checked)
}
@@ -155,7 +147,6 @@ Item {
SettingsToggleRow {
settingKey: "osdAudioOutputEnabled"
text: I18n.tr("Audio Output Switch")
description: I18n.tr("Show on-screen display when cycling audio output devices")
checked: SettingsData.osdAudioOutputEnabled
onToggled: checked => SettingsData.set("osdAudioOutputEnabled", checked)
}
@@ -46,7 +46,8 @@ StyledRect {
}
function updateSingle(plugin) {
if (isUpdating) return;
if (isUpdating)
return;
isUpdating = true;
currentUpdatingPlugin = plugin.name;
@@ -68,7 +69,8 @@ StyledRect {
}
function updateAll() {
if (isUpdating) return;
if (isUpdating)
return;
isUpdating = true;
var list = updatesList.slice();
@@ -149,7 +151,9 @@ StyledRect {
clip: true
Behavior on height {
NumberAnimation { duration: Theme.shortDuration }
NumberAnimation {
duration: Theme.shortDuration
}
}
Row {
@@ -220,7 +224,7 @@ StyledRect {
}
StyledText {
text: modelData.author ? I18n.tr("By %1").arg(modelData.author) : ""
text: modelData.author ? I18n.tr("by %1", "author attribution").arg(modelData.author) : ""
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
elide: Text.ElideRight
+3 -2
View File
@@ -21,7 +21,8 @@ FocusScope {
property var filteredPlugins: []
readonly property var pluginsWithUpdates: {
if (!DMSService.installedPlugins) return [];
if (!DMSService.installedPlugins)
return [];
return DMSService.installedPlugins.filter(p => p.hasUpdate === true);
}
@@ -438,7 +439,7 @@ FocusScope {
StyledText {
width: parent.width
text: I18n.tr("No plugins found.") + "\n" + I18n.tr("Place plugins in %1").arg(PluginService.pluginDirectory)
text: I18n.tr("No plugins found", "empty plugin list") + "\n" + I18n.tr("Place plugins in %1").arg(PluginService.pluginDirectory)
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceVariantText
horizontalAlignment: Text.AlignHCenter
@@ -71,7 +71,6 @@ Item {
tags: ["sound", "enable", "system"]
settingKey: "soundsEnabled"
text: I18n.tr("Enable System Sounds")
description: I18n.tr("Play sounds for system events")
checked: SettingsData.soundsEnabled
onToggled: checked => SettingsData.set("soundsEnabled", checked)
}
@@ -106,7 +105,6 @@ Item {
visible: SettingsData.useSystemSoundTheme && AudioService.availableSoundThemes.length > 0
enabled: SettingsData.useSystemSoundTheme && AudioService.availableSoundThemes.length > 0
text: I18n.tr("Sound Theme")
description: I18n.tr("Select system sound theme")
options: AudioService.availableSoundThemes
currentValue: {
const theme = AudioService.currentSoundTheme;
@@ -143,7 +143,7 @@ Item {
function fixCursorInclude() {
if (cursorReadOnly) {
ToastService.showWarning(I18n.tr("Hyprland conf mode"), I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before editing cursor settings."), "dms setup", "hyprland-migration");
ToastService.showWarning(I18n.tr("Hyprland conf mode"), I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before changing these settings."), "dms setup", "hyprland-migration");
return;
}
const paths = getCursorConfigPaths();
@@ -1626,7 +1626,6 @@ Item {
tags: ["widget", "background", "color", "surface", "material"]
settingKey: "widgetBackgroundColor"
text: I18n.tr("Widget Background Color")
description: I18n.tr("Choose the background color for widgets")
dropdownWidth: 220
options: themeColorsTab.widgetBackgroundOptions
currentMode: SettingsData.widgetBackgroundColor
@@ -1943,7 +1942,6 @@ Item {
tags: ["elevation", "shadow", "opacity", "transparency", "m3"]
settingKey: "m3ElevationOpacity"
text: I18n.tr("Shadow Opacity")
description: I18n.tr("Controls the opacity of the shadow")
value: SettingsData.m3ElevationOpacity ?? 30
minimum: 0
maximum: 100
@@ -2220,7 +2218,7 @@ Item {
StyledText {
text: {
if (cursorWarningBox.showLegacy)
return I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before editing cursor settings.");
return I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before changing these settings.");
if (cursorWarningBox.showSetup)
return I18n.tr("Click 'Setup' to create %1 and add include to your compositor config.").arg("dms/cursor");
return "";
@@ -84,7 +84,6 @@ Item {
tags: ["time", "seconds", "clock"]
settingKey: "showSeconds"
text: I18n.tr("Show Seconds")
description: I18n.tr("Display seconds in the clock")
checked: SettingsData.showSeconds
onToggled: checked => SettingsData.set("showSeconds", checked)
}
@@ -113,7 +112,6 @@ Item {
tags: ["show", "week"]
settingKey: "showWeekNumber"
text: I18n.tr("Show Week Number")
description: I18n.tr("Show week number in the calendar")
checked: SettingsData.showWeekNumber
onToggled: checked => SettingsData.set("showWeekNumber", checked)
}
@@ -218,7 +216,7 @@ Item {
}
];
const match = presets.find(p => p.format === SettingsData.clockDateFormat);
return match ? match.label : I18n.tr("Custom: ") + SettingsData.clockDateFormat;
return match ? match.label : I18n.tr("Custom") + ": " + SettingsData.clockDateFormat;
}
onValueChanged: value => {
const formatMap = {};
@@ -305,7 +303,7 @@ Item {
}
];
const match = presets.find(p => p.format === SettingsData.lockDateFormat);
return match ? match.label : I18n.tr("Custom: ") + SettingsData.lockDateFormat;
return match ? match.label : I18n.tr("Custom") + ": " + SettingsData.lockDateFormat;
}
onValueChanged: value => {
const formatMap = {};
@@ -455,7 +455,7 @@ Item {
buttonPadding: parent.width < 480 ? Theme.spacingXS : Theme.spacingS
minButtonWidth: parent.width < 480 ? 40 : 56
textSize: parent.width < 480 ? Theme.fontSizeSmall : Theme.fontSizeMedium
model: [I18n.tr("Default"), I18n.tr("Low"), I18n.tr("Normal"), I18n.tr("High"), I18n.tr("Very High")]
model: [I18n.tr("Default"), I18n.tr("Low", "quality level option"), I18n.tr("Normal", "quality level option"), I18n.tr("High", "quality level option"), I18n.tr("Very High", "quality level option")]
selectionMode: "single"
currentIndex: SettingsData.textRenderQuality
onSelectionChanged: (index, selected) => {
@@ -622,7 +622,6 @@ Item {
tags: ["animation", "duration", "custom", "speed", "popout"]
settingKey: "popoutCustomAnimationDuration"
text: I18n.tr("Custom Duration")
description: I18n.tr("%1 custom animation duration").arg(I18n.tr("Popouts"))
minimum: 0
maximum: 1000
value: Theme.popoutAnimationDuration
@@ -706,7 +705,6 @@ Item {
tags: ["animation", "duration", "custom", "speed", "modal"]
settingKey: "modalCustomAnimationDuration"
text: I18n.tr("Custom Duration")
description: I18n.tr("%1 custom animation duration").arg(I18n.tr("Modals"))
minimum: 0
maximum: 1000
value: Theme.modalAnimationDuration
+2 -2
View File
@@ -290,7 +290,7 @@ Item {
return;
const makeAdmin = !userRow.modelData.isAdmin;
adminToggleConfirm.showWithOptions({
title: makeAdmin ? I18n.tr("Grant admin?") : I18n.tr("Remove admin?"),
title: makeAdmin ? I18n.tr("Make admin") : I18n.tr("Remove admin"),
message: makeAdmin ? I18n.tr("Add \"%1\" to the %2 group?").arg(userRow.modelData.username).arg(UsersService.adminGroup) : I18n.tr("Remove \"%1\" from the %2 group?").arg(userRow.modelData.username).arg(UsersService.adminGroup),
confirmText: makeAdmin ? I18n.tr("Grant") : I18n.tr("Remove"),
confirmColor: Theme.primary,
@@ -317,7 +317,7 @@ Item {
if (actionBlocked)
return;
deleteUserConfirm.showWithOptions({
title: I18n.tr("Delete user?"),
title: I18n.tr("Delete user"),
message: I18n.tr("Delete \"%1\" and remove the home directory? This cannot be undone.").arg(userRow.modelData.username),
confirmText: I18n.tr("Delete"),
confirmColor: Theme.primary,
+4 -5
View File
@@ -804,7 +804,6 @@ Item {
settingKey: "selectedMonitor"
width: parent.width - Theme.spacingM * 2
text: I18n.tr("Wallpaper Monitor")
description: I18n.tr("Select monitor to configure wallpaper")
currentValue: {
var screens = Quickshell.screens;
for (var i = 0; i < screens.length; i++) {
@@ -843,7 +842,7 @@ Item {
currentValue: {
var screens = Quickshell.screens;
if (!SettingsData.matugenTargetMonitor || SettingsData.matugenTargetMonitor === "") {
return screens.length > 0 ? SettingsData.getScreenDisplayName(screens[0]) + " " + I18n.tr("(Default)", "default monitor label suffix") : I18n.tr("No monitors", "no monitors available label");
return screens.length > 0 ? SettingsData.getScreenDisplayName(screens[0]) + " " + "(" + I18n.tr("Default") + ")" : I18n.tr("No monitors", "no monitors available label");
}
for (var i = 0; i < screens.length; i++) {
if (screens[i].name === SettingsData.matugenTargetMonitor) {
@@ -858,14 +857,14 @@ Item {
for (var i = 0; i < screens.length; i++) {
var label = SettingsData.getScreenDisplayName(screens[i]);
if (i === 0 && (!SettingsData.matugenTargetMonitor || SettingsData.matugenTargetMonitor === "")) {
label += " " + I18n.tr("(Default)", "default monitor label suffix");
label += " " + "(" + I18n.tr("Default") + ")";
}
screenNames.push(label);
}
return screenNames;
}
onValueChanged: value => {
var cleanValue = value.replace(" " + I18n.tr("(Default)", "default monitor label suffix"), "");
var cleanValue = value.replace(" " + "(" + I18n.tr("Default") + ")", "");
var screens = Quickshell.screens;
for (var i = 0; i < screens.length; i++) {
if (SettingsData.getScreenDisplayName(screens[i]) === cleanValue) {
@@ -924,7 +923,7 @@ Item {
width: parent.width - Theme.spacingM * 2
StyledText {
text: I18n.tr("Mode:")
text: I18n.tr("Mode") + ":"
font.pixelSize: Theme.fontSizeMedium
color: Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
+1 -1
View File
@@ -192,7 +192,7 @@ Item {
{
"id": "battery",
"text": I18n.tr("Battery"),
"description": I18n.tr("Battery level and power management"),
"description": I18n.tr("Battery and power management"),
"icon": "battery_std",
"enabled": true
},
@@ -45,7 +45,7 @@ Item {
"appId": I18n.tr("App ID"),
"title": I18n.tr("Title"),
"isFloating": I18n.tr("Floating"),
"isActive": I18n.tr("Active"),
"isActive": I18n.tr("Active", "active state label"),
"isFocused": I18n.tr("Focused"),
"isActiveInColumn": I18n.tr("Active in Column"),
"isWindowCastTarget": I18n.tr("Cast Target"),
@@ -343,7 +343,7 @@ Item {
}
function showHyprlandReadOnlyWarning() {
ToastService.showWarning(I18n.tr("Hyprland conf mode"), I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before editing window rules in Settings."), "dms setup", "hyprland-migration");
ToastService.showWarning(I18n.tr("Hyprland conf mode"), I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before changing these settings."), "dms setup", "hyprland-migration");
}
Component.onCompleted: {
@@ -509,7 +509,7 @@ Item {
}
StyledText {
text: warningBox.showLegacy ? I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before editing window rules in Settings.") : I18n.tr("Click 'Setup' to create %1 and add include to your compositor config.").arg("dms/windowrules")
text: warningBox.showLegacy ? I18n.tr("This install is still using hyprland.conf. Run dms setup to migrate before changing these settings.") : I18n.tr("Click 'Setup' to create %1 and add include to your compositor config.").arg("dms/windowrules")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
@@ -8,7 +8,7 @@ SettingsCard {
id: root
iconName: "palette"
title: I18n.tr("Workspace Appearance")
title: I18n.tr("Appearance")
settingKey: "workspaceAppearance"
tags: ["workspace", "focused", "color", "custom"]
collapsible: true
@@ -200,10 +200,10 @@ SettingsCard {
tabHeight: 44
showIcons: false
model: [({
"text": I18n.tr("Focused Display", "workspace appearance tab")
}), ({
"text": I18n.tr("Unfocused Display(s)", "workspace appearance tab")
})]
"text": I18n.tr("Focused Display", "workspace appearance tab")
}), ({
"text": I18n.tr("Unfocused Display(s)", "workspace appearance tab")
})]
onTabClicked: index => currentIndex = index
Component.onCompleted: Qt.callLater(updateIndicator)
@@ -25,7 +25,7 @@ Item {
SettingsCard {
width: parent.width
iconName: "view_module"
title: I18n.tr("Workspace Settings")
title: I18n.tr("General")
settingKey: "workspaceSettings"
SettingsToggleRow {