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:
@@ -16,7 +16,7 @@ PluginComponent {
|
||||
ccWidgetPrimaryText: I18n.tr("Printers")
|
||||
ccWidgetSecondaryText: {
|
||||
if (CupsService.cupsAvailable && CupsService.getPrintersNum() > 0) {
|
||||
return I18n.tr("Printers: ") + CupsService.getPrintersNum() + " - " + I18n.tr("Jobs: ") + CupsService.getTotalJobsNum();
|
||||
return I18n.tr("Printers") + ": " + CupsService.getPrintersNum() + " - " + I18n.tr("Jobs") + ": " + CupsService.getTotalJobsNum();
|
||||
} else {
|
||||
if (!CupsService.cupsAvailable) {
|
||||
return I18n.tr("Print Server not available");
|
||||
|
||||
@@ -18,7 +18,7 @@ PluginComponent {
|
||||
ccWidgetPrimaryText: I18n.tr("VPN")
|
||||
ccWidgetSecondaryText: {
|
||||
if (vpnActivating)
|
||||
return I18n.tr("Connecting…");
|
||||
return I18n.tr("Connecting...");
|
||||
if (!vpnActivated)
|
||||
return I18n.tr("Disconnected");
|
||||
const names = DMSNetworkService.activeNames || [];
|
||||
|
||||
@@ -166,7 +166,7 @@ Rectangle {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: scanButton.isDiscovering ? I18n.tr("Scanning") : I18n.tr("Scan")
|
||||
text: scanButton.isDiscovering ? I18n.tr("Scanning...") : I18n.tr("Scan")
|
||||
color: scanButton.adapterEnabled ? Theme.primary : Theme.surfaceVariantText
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
font.weight: Font.Medium
|
||||
|
||||
@@ -624,7 +624,7 @@ Rectangle {
|
||||
spacing: Theme.spacingXS
|
||||
|
||||
StyledText {
|
||||
text: wifiDelegate.isConnecting ? I18n.tr("Connecting...") + " \u2022" : (wifiDelegate.isConnected ? I18n.tr("Connected") + " \u2022" : (modelData.secured ? I18n.tr("Secured") + " \u2022" : I18n.tr("Open") + " \u2022"))
|
||||
text: wifiDelegate.isConnecting ? I18n.tr("Connecting...") + " \u2022" : (wifiDelegate.isConnected ? I18n.tr("Connected") + " \u2022" : (modelData.secured ? I18n.tr("Secured") + " \u2022" : I18n.tr("Open", "network security type", true) + " \u2022"))
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: wifiDelegate.isConnecting ? Theme.warning : Theme.surfaceVariantText
|
||||
}
|
||||
|
||||
@@ -329,7 +329,7 @@ Item {
|
||||
spacing: Theme.spacingS
|
||||
|
||||
DankButton {
|
||||
text: root.saving ? I18n.tr("Saving…") : I18n.tr("Save")
|
||||
text: root.saving ? I18n.tr("Saving...") : I18n.tr("Save")
|
||||
iconName: "check"
|
||||
buttonHeight: 32
|
||||
backgroundColor: Theme.primary
|
||||
|
||||
@@ -692,14 +692,14 @@ Item {
|
||||
spacing: Theme.spacingM
|
||||
|
||||
StyledText {
|
||||
text: I18n.tr("Unsaved Changes")
|
||||
text: I18n.tr("Unsaved changes")
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
color: Theme.surfaceText
|
||||
font.weight: Font.Medium
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: root.pendingAction === "new" ? I18n.tr("You have unsaved changes. Save before creating a new file?") : root.pendingAction.startsWith("close_tab_") ? I18n.tr("You have unsaved changes. Save before closing this tab?") : root.pendingAction === "load_file" || root.pendingAction === "open" ? I18n.tr("You have unsaved changes. Save before opening a file?") : I18n.tr("You have unsaved changes. Save before continuing?")
|
||||
text: I18n.tr("You have unsaved changes. Save before continuing?")
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.surfaceTextMedium
|
||||
width: parent.width
|
||||
|
||||
@@ -172,7 +172,7 @@ Rectangle {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: I18n.tr("Notification Timeouts")
|
||||
text: I18n.tr("Timeouts")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
font.weight: Font.Medium
|
||||
color: Theme.surfaceVariantText
|
||||
@@ -182,7 +182,6 @@ Rectangle {
|
||||
id: lowTimeoutDropdown
|
||||
transientSurfaceTracker: root.transientSurfaceTracker
|
||||
text: I18n.tr("Low Priority")
|
||||
description: I18n.tr("Timeout for low priority notifications")
|
||||
currentValue: getTimeoutText(SettingsData.notificationTimeoutLow)
|
||||
options: timeoutOptions.map(opt => opt.text)
|
||||
onValueChanged: value => {
|
||||
@@ -199,7 +198,6 @@ Rectangle {
|
||||
id: normalTimeoutDropdown
|
||||
transientSurfaceTracker: root.transientSurfaceTracker
|
||||
text: I18n.tr("Normal Priority")
|
||||
description: I18n.tr("Timeout for normal priority notifications")
|
||||
currentValue: getTimeoutText(SettingsData.notificationTimeoutNormal)
|
||||
options: timeoutOptions.map(opt => opt.text)
|
||||
onValueChanged: value => {
|
||||
@@ -216,7 +214,6 @@ Rectangle {
|
||||
id: criticalTimeoutDropdown
|
||||
transientSurfaceTracker: root.transientSurfaceTracker
|
||||
text: I18n.tr("Critical Priority")
|
||||
description: I18n.tr("Timeout for critical priority notifications")
|
||||
currentValue: getTimeoutText(SettingsData.notificationTimeoutCritical)
|
||||
options: timeoutOptions.map(opt => opt.text)
|
||||
onValueChanged: value => {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"]
|
||||
|
||||
|
||||
@@ -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 => {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user