mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-03 20:32:07 -04:00
Wrapped all missing i18n strings (#2013)
* Feat(i18n): wrapped missing strings * Feat(i18n): wrapped missing strings * feat(i18n): added pluralization to some strings * feat: updated en.json and template.json * Update en.json * Update template.json
This commit is contained in:
@@ -26,7 +26,9 @@ Rectangle {
|
||||
spacing: 2
|
||||
|
||||
StyledText {
|
||||
text: keyboardHints.enterToPaste ? I18n.tr("↑/↓: Navigate • Enter: Paste • Del: Delete • F10: Help", "Keyboard hints when enter-to-paste is enabled") : "↑/↓: Navigate • Enter/Ctrl+C: Copy • Del: Delete • F10: Help"
|
||||
text: keyboardHints.enterToPaste
|
||||
? I18n.tr("↑/↓: Navigate • Enter: Paste • Del: Delete • F10: Help", "Keyboard hints when enter-to-paste is enabled")
|
||||
: I18n.tr("↑/↓: Navigate • Enter/Ctrl+C: Copy • Del: Delete • F10: Help")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceText
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
@@ -304,7 +304,17 @@ DankModal {
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Theme.spacingS
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: I18n.tr("%1 active, %2 filtered").arg(MuxService.sessions.length).arg(muxModal.filteredSessions.length)
|
||||
text: {
|
||||
const total = MuxService.sessions.length;
|
||||
const filtered = muxModal.filteredSessions.length;
|
||||
const activePart = total === 1
|
||||
? I18n.tr("%1 active session").arg(total)
|
||||
: I18n.tr("%1 active sessions").arg(total);
|
||||
const filteredPart = filtered === 1
|
||||
? I18n.tr("%1 filtered").arg(filtered)
|
||||
: I18n.tr("%1 filtered").arg(filtered);
|
||||
return activePart + ", " + filteredPart;
|
||||
}
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.surfaceVariantText
|
||||
}
|
||||
@@ -468,7 +478,9 @@ DankModal {
|
||||
text: {
|
||||
var parts = []
|
||||
if (modelData.windows !== "N/A")
|
||||
parts.push(I18n.tr("%1 windows").arg(modelData.windows))
|
||||
parts.push(modelData.windows === 1
|
||||
? I18n.tr("%1 window").arg(modelData.windows)
|
||||
: I18n.tr("%1 windows").arg(modelData.windows))
|
||||
parts.push(modelData.attached ? I18n.tr("attached") : I18n.tr("detached"))
|
||||
return parts.join(" \u2022 ")
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ DankModal {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: `Details for "${networkSSID}"`
|
||||
text: I18n.tr("Details for \"%1\"").arg(networkSSID)
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.surfaceTextMedium
|
||||
width: parent.width
|
||||
@@ -102,7 +102,7 @@ DankModal {
|
||||
id: detailsText
|
||||
|
||||
width: parent.width
|
||||
text: NetworkService.networkInfoDetails && NetworkService.networkInfoDetails.replace(/\\n/g, '\n') || "No information available"
|
||||
text: NetworkService.networkInfoDetails && NetworkService.networkInfoDetails.replace(/\\n/g, '\n') || I18n.tr("No information available")
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.surfaceText
|
||||
wrapMode: Text.WordWrap
|
||||
|
||||
@@ -66,7 +66,7 @@ DankModal {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: `Details for "${networkID}"`
|
||||
text: I18n.tr("Details for \"%1\"").arg(networkSSID)
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.surfaceTextMedium
|
||||
width: parent.width
|
||||
@@ -102,7 +102,7 @@ DankModal {
|
||||
id: detailsText
|
||||
|
||||
width: parent.width
|
||||
text: NetworkService.networkWiredInfoDetails && NetworkService.networkWiredInfoDetails.replace(/\\n/g, '\n') || "No information available"
|
||||
text: NetworkService.networkWiredInfoDetails && NetworkService.networkWiredInfoDetails.replace(/\\n/g, '\n') || I18n.tr("No information available")
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.surfaceText
|
||||
wrapMode: Text.WordWrap
|
||||
|
||||
@@ -22,12 +22,12 @@ DankPopout {
|
||||
|
||||
function setProfile(profile) {
|
||||
if (typeof PowerProfiles === "undefined") {
|
||||
ToastService.showError("power-profiles-daemon not available");
|
||||
ToastService.showError(I18n.tr("power-profiles-daemon not available"));
|
||||
return;
|
||||
}
|
||||
PowerProfiles.profile = profile;
|
||||
if (PowerProfiles.profile !== profile) {
|
||||
ToastService.showError("Failed to set power profile");
|
||||
ToastService.showError(I18n.tr("Failed to set power profile"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,10 +173,10 @@ DankPopout {
|
||||
width: parent.width - Theme.iconSizeLarge - 32 - Theme.spacingM * 2
|
||||
readonly property string timeInfoText: {
|
||||
if (!BatteryService.batteryAvailable)
|
||||
return "Power profile management available";
|
||||
return I18n.tr("Power profile management available");
|
||||
const time = BatteryService.formatTimeRemaining();
|
||||
if (time !== "Unknown") {
|
||||
return BatteryService.isCharging ? `Time until full: ${time}` : `Time remaining: ${time}`;
|
||||
return BatteryService.isCharging ? I18n.tr("Time until full: %1").arg(time) : I18n.tr("Time remaining: %1").arg(time);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
@@ -188,7 +188,7 @@ DankPopout {
|
||||
spacing: Theme.spacingS
|
||||
|
||||
StyledText {
|
||||
text: BatteryService.batteryAvailable ? `${BatteryService.batteryLevel}%` : "Power"
|
||||
text: BatteryService.batteryAvailable ? `${BatteryService.batteryLevel}%` : I18n.tr("Power")
|
||||
font.pixelSize: Theme.fontSizeXLarge
|
||||
color: {
|
||||
if (BatteryService.isLowBattery && !BatteryService.isCharging) {
|
||||
@@ -338,7 +338,7 @@ DankPopout {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: BatteryService.batteryCapacity > 0 ? `${BatteryService.batteryCapacity.toFixed(1)} Wh` : "Unknown"
|
||||
text: BatteryService.batteryCapacity > 0 ? `${BatteryService.batteryCapacity.toFixed(1)} Wh` : I18n.tr("Unknown")
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
color: Theme.surfaceText
|
||||
font.weight: Font.Bold
|
||||
@@ -393,7 +393,7 @@ DankPopout {
|
||||
width: parent.width - percentText.width - chargingIcon.width - Theme.spacingM * 2
|
||||
|
||||
StyledText {
|
||||
text: modelData.model || `Battery ${index + 1}`
|
||||
text: modelData.model || I18n.tr("Battery %1").arg(index + 1)
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceText
|
||||
font.weight: Font.Medium
|
||||
|
||||
@@ -320,7 +320,7 @@ Item {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
StyledText {
|
||||
text: activePlayer?.trackTitle || "Unknown Track"
|
||||
text: activePlayer?.trackTitle || I18n.tr("Unknown Track")
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
font.weight: Font.Bold
|
||||
color: Theme.surfaceText
|
||||
@@ -332,7 +332,7 @@ Item {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: activePlayer?.trackArtist || "Unknown Artist"
|
||||
text: activePlayer?.trackTitle || I18n.tr("Unknown Artist")
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.8)
|
||||
width: parent.width
|
||||
@@ -669,7 +669,7 @@ Item {
|
||||
const screenY = popoutY + contentOffsetY + btnY;
|
||||
showPlayersDropdown(Qt.point(screenX, screenY), targetScreen, buttonsOnRight, activePlayer, allPlayers);
|
||||
}
|
||||
onEntered: sharedTooltip.show("Media Players", playerSelectorButton, 0, 0, isRightEdge ? "right" : "left")
|
||||
onEntered: sharedTooltip.show(I18n.tr("Media Players"), playerSelectorButton, 0, 0, isRightEdge ? "right" : "left")
|
||||
onExited: sharedTooltip.hide()
|
||||
}
|
||||
}
|
||||
@@ -788,7 +788,7 @@ Item {
|
||||
const screenY = popoutY + contentOffsetY + btnY;
|
||||
showAudioDevicesDropdown(Qt.point(screenX, screenY), targetScreen, buttonsOnRight);
|
||||
}
|
||||
onEntered: sharedTooltip.show("Output Device", audioDevicesButton, 0, 0, isRightEdge ? "right" : "left")
|
||||
onEntered: sharedTooltip.show(I18n.tr("Output Device"), audioDevicesButton, 0, 0, isRightEdge ? "right" : "left")
|
||||
onExited: sharedTooltip.hide()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ Card {
|
||||
topPadding: Theme.spacingL
|
||||
|
||||
StyledText {
|
||||
text: activePlayer?.trackTitle || "Unknown"
|
||||
text: activePlayer?.trackTitle || I18n.tr("Unknown")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
font.weight: Font.Medium
|
||||
color: Theme.surfaceText
|
||||
@@ -99,7 +99,7 @@ Card {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: activePlayer?.trackArtist || "Unknown Artist"
|
||||
text: activePlayer?.trackArtist || I18n.tr("Unknown Artist")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
|
||||
width: parent.width
|
||||
|
||||
@@ -28,7 +28,7 @@ Card {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: WeatherService.weather.loading ? "Loading..." : "No Weather"
|
||||
text: WeatherService.weather.loading ? I18n.tr("Loading...") : I18n.tr("No Weather")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
|
||||
@@ -538,7 +538,11 @@ Item {
|
||||
|
||||
StyledText {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: wallpaperFolderModel.count > 0 ? `${wallpaperFolderModel.count} wallpapers • ${currentPage + 1} / ${totalPages}` : "No wallpapers"
|
||||
text: wallpaperFolderModel.count > 0
|
||||
? (wallpaperFolderModel.count === 1
|
||||
? I18n.tr("%1 wallpaper • %2 / %3").arg(wallpaperFolderModel.count).arg(currentPage + 1).arg(totalPages)
|
||||
: I18n.tr("%1 wallpapers • %2 / %3").arg(wallpaperFolderModel.count).arg(currentPage + 1).arg(totalPages))
|
||||
: I18n.tr("No wallpapers")
|
||||
font.pixelSize: 14
|
||||
color: Theme.surfaceText
|
||||
opacity: 0.7
|
||||
|
||||
@@ -230,19 +230,19 @@ Item {
|
||||
|
||||
function currentAuthMessage() {
|
||||
if (GreeterState.pamState === "error")
|
||||
return "Authentication error - try again";
|
||||
return I18n.tr("Authentication error - try again");
|
||||
if (GreeterState.pamState === "max")
|
||||
return "Too many failed attempts - account may be locked";
|
||||
return I18n.tr("Too many failed attempts - account may be locked");
|
||||
if (GreeterState.pamState === "fail") {
|
||||
if (passwordAttemptLimitHint > 0) {
|
||||
const attempt = Math.max(1, Math.min(passwordFailureCount, passwordAttemptLimitHint));
|
||||
const remaining = Math.max(passwordAttemptLimitHint - attempt, 0);
|
||||
if (remaining > 0) {
|
||||
return "Incorrect password - attempt " + attempt + " of " + passwordAttemptLimitHint + " (lockout may follow)";
|
||||
return I18n.tr("Incorrect password - attempt %1 of %2 (lockout may follow)").arg(attempt).arg(passwordAttemptLimitHint);
|
||||
}
|
||||
return "Incorrect password - next failures may trigger account lockout";
|
||||
return I18n.tr("Incorrect password - next failures may trigger account lockout");
|
||||
}
|
||||
return "Incorrect password";
|
||||
return I18n.tr("Incorrect password");
|
||||
}
|
||||
return "";
|
||||
}
|
||||
@@ -1012,15 +1012,15 @@ Item {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: {
|
||||
if (GreeterState.unlocking) {
|
||||
return "Logging in...";
|
||||
return I18n.tr("Logging in...");
|
||||
}
|
||||
if (Greetd.state !== GreetdState.Inactive && !awaitingExternalAuth && !pendingPasswordResponse) {
|
||||
return "Authenticating...";
|
||||
return I18n.tr("Authenticating...");
|
||||
}
|
||||
if (GreeterState.showPasswordInput) {
|
||||
return "Password...";
|
||||
return I18n.tr("Password...");
|
||||
}
|
||||
return "Username...";
|
||||
return I18n.tr("Username...");
|
||||
}
|
||||
color: (GreeterState.unlocking || (Greetd.state !== GreetdState.Inactive && !awaitingExternalAuth && !pendingPasswordResponse)) ? Theme.primary : Theme.outline
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
|
||||
@@ -832,13 +832,21 @@ Column {
|
||||
spacing: Theme.spacingL
|
||||
|
||||
StyledText {
|
||||
text: textArea.text.length > 0 ? I18n.tr("%1 characters").arg(textArea.text.length) : I18n.tr("Empty")
|
||||
text: {
|
||||
const len = textArea.text.length;
|
||||
if (len === 0) return I18n.tr("Empty");
|
||||
return len === 1
|
||||
? I18n.tr("%1 character").arg(len)
|
||||
: I18n.tr("%1 characters").arg(len);
|
||||
}
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceTextMedium
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: I18n.tr("Lines: %1").arg(textArea.lineCount)
|
||||
text: textArea.lineCount === 1
|
||||
? I18n.tr("Line: %1").arg(textArea.lineCount)
|
||||
: I18n.tr("Lines: %1").arg(textArea.lineCount)
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceTextMedium
|
||||
visible: textArea.text.length > 0
|
||||
|
||||
@@ -713,7 +713,7 @@ Rectangle {
|
||||
StyledText {
|
||||
id: expandedActionText
|
||||
text: {
|
||||
const baseText = modelData.text || "Open";
|
||||
const baseText = modelData.text || I18n.tr("Open");
|
||||
if (keyboardNavigationActive && (isGroupSelected || selectedNotificationIndex >= 0))
|
||||
return `${baseText} (${index + 1})`;
|
||||
return baseText;
|
||||
@@ -849,7 +849,7 @@ Rectangle {
|
||||
StyledText {
|
||||
id: collapsedActionText
|
||||
text: {
|
||||
const baseText = modelData.text || "Open";
|
||||
const baseText = modelData.text || I18n.tr("Open");
|
||||
if (keyboardNavigationActive && isGroupSelected) {
|
||||
return `${baseText} (${index + 1})`;
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ Rectangle {
|
||||
|
||||
function getTimeoutText(value) {
|
||||
if (value === undefined || value === null || isNaN(value)) {
|
||||
return "5 seconds";
|
||||
return I18n.tr("5 seconds");
|
||||
}
|
||||
|
||||
for (let i = 0; i < timeoutOptions.length; i++) {
|
||||
@@ -94,15 +94,15 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
if (value === 0) {
|
||||
return "Never";
|
||||
return I18n.tr("Never");
|
||||
}
|
||||
if (value < 1000) {
|
||||
return value + "ms";
|
||||
}
|
||||
if (value < 60000) {
|
||||
return Math.round(value / 1000) + " seconds";
|
||||
return Math.round(value / 1000) + " " + I18n.tr("seconds");
|
||||
}
|
||||
return Math.round(value / 60000) + " minutes";
|
||||
return Math.round(value / 60000) + " " + I18n.tr("minutes");
|
||||
}
|
||||
|
||||
Column {
|
||||
@@ -169,7 +169,7 @@ Rectangle {
|
||||
|
||||
DankDropdown {
|
||||
text: I18n.tr("Low Priority")
|
||||
description: "Timeout for low priority notifications"
|
||||
description: I18n.tr("Timeout for low priority notifications")
|
||||
currentValue: getTimeoutText(SettingsData.notificationTimeoutLow)
|
||||
options: timeoutOptions.map(opt => opt.text)
|
||||
onValueChanged: value => {
|
||||
@@ -184,7 +184,7 @@ Rectangle {
|
||||
|
||||
DankDropdown {
|
||||
text: I18n.tr("Normal Priority")
|
||||
description: "Timeout for normal priority notifications"
|
||||
description: I18n.tr("Timeout for normal priority notifications")
|
||||
currentValue: getTimeoutText(SettingsData.notificationTimeoutNormal)
|
||||
options: timeoutOptions.map(opt => opt.text)
|
||||
onValueChanged: value => {
|
||||
@@ -199,7 +199,7 @@ Rectangle {
|
||||
|
||||
DankDropdown {
|
||||
text: I18n.tr("Critical Priority")
|
||||
description: "Timeout for critical priority notifications"
|
||||
description: I18n.tr("Timeout for critical priority notifications")
|
||||
currentValue: getTimeoutText(SettingsData.notificationTimeoutCritical)
|
||||
options: timeoutOptions.map(opt => opt.text)
|
||||
onValueChanged: value => {
|
||||
@@ -225,6 +225,8 @@ Rectangle {
|
||||
Row {
|
||||
id: overlayRow
|
||||
anchors.left: parent.left
|
||||
anchors.right: overlayToggle.left
|
||||
anchors.rightMargin: Theme.spacingM
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: Theme.spacingM
|
||||
|
||||
@@ -238,17 +240,22 @@ Rectangle {
|
||||
Column {
|
||||
spacing: 2
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: overlayRow.width - Theme.iconSizeSmall - Theme.spacingM
|
||||
|
||||
StyledText {
|
||||
width: parent.width
|
||||
text: I18n.tr("Notification Overlay")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceText
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
|
||||
StyledText {
|
||||
width: parent.width
|
||||
text: I18n.tr("Display all priorities over fullscreen apps")
|
||||
font.pixelSize: Theme.fontSizeSmall - 1
|
||||
color: Theme.surfaceVariantText
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -269,6 +276,8 @@ Rectangle {
|
||||
Row {
|
||||
id: privacyRow
|
||||
anchors.left: parent.left
|
||||
anchors.right: privacyToggle.left
|
||||
anchors.rightMargin: Theme.spacingM
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: Theme.spacingM
|
||||
|
||||
@@ -282,17 +291,22 @@ Rectangle {
|
||||
Column {
|
||||
spacing: 2
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: privacyRow.width - Theme.iconSizeSmall - Theme.spacingM
|
||||
|
||||
StyledText {
|
||||
width: parent.width
|
||||
text: I18n.tr("Privacy Mode")
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceText
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
|
||||
StyledText {
|
||||
width: parent.width
|
||||
text: I18n.tr("Hide notification content until expanded")
|
||||
font.pixelSize: Theme.fontSizeSmall - 1
|
||||
color: Theme.surfaceVariantText
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,22 +68,22 @@ Item {
|
||||
|
||||
property string compositorTooltip: {
|
||||
if (isHyprland)
|
||||
return "Hyprland Website";
|
||||
return I18n.tr("Hyprland Website");
|
||||
if (isSway)
|
||||
return "Sway Website";
|
||||
return I18n.tr("Sway Website");
|
||||
if (isScroll)
|
||||
return "Scroll Github";
|
||||
return I18n.tr("Scroll GitHub");
|
||||
if (isMiracle)
|
||||
return "Miracle WM GitHub";
|
||||
return I18n.tr("Scroll GitHub");
|
||||
if (isDwl)
|
||||
return "mangowc GitHub";
|
||||
return I18n.tr("mangowc GitHub");
|
||||
if (isLabwc)
|
||||
return "LabWC Website";
|
||||
return "niri GitHub";
|
||||
return I18n.tr("LabWC Website");
|
||||
return I18n.tr("niri GitHub");
|
||||
}
|
||||
|
||||
property string dmsDiscordUrl: "https://discord.gg/ppWTpKmPgT"
|
||||
property string dmsDiscordTooltip: "niri/dms Discord"
|
||||
property string dmsDiscordTooltip: I18n.tr("niri/dms Discord")
|
||||
|
||||
property string compositorDiscordUrl: {
|
||||
if (isHyprland)
|
||||
@@ -95,17 +95,17 @@ Item {
|
||||
|
||||
property string compositorDiscordTooltip: {
|
||||
if (isHyprland)
|
||||
return "Hyprland Discord Server";
|
||||
return I18n.tr("Hyprland Discord Server");
|
||||
if (isDwl)
|
||||
return "mangowc Discord Server";
|
||||
return I18n.tr("mangowc Discord Server");
|
||||
return "";
|
||||
}
|
||||
|
||||
property string redditUrl: "https://reddit.com/r/niri"
|
||||
property string redditTooltip: "r/niri Subreddit"
|
||||
property string redditTooltip: I18n.tr("r/niri Subreddit")
|
||||
|
||||
property string ircUrl: "https://web.libera.chat/gamja/?channels=#labwc"
|
||||
property string ircTooltip: "LabWC IRC Channel"
|
||||
property string ircTooltip: I18n.tr("LabWC IRC Channel")
|
||||
|
||||
property bool showMatrix: isNiri && !isHyprland && !isSway && !isScroll && !isMiracle && !isDwl && !isLabwc
|
||||
property bool showCompositorDiscord: isHyprland || isDwl
|
||||
@@ -396,7 +396,7 @@ Item {
|
||||
visible: showMatrix
|
||||
|
||||
property bool hovered: false
|
||||
property string tooltipText: "niri Matrix Chat"
|
||||
property string tooltipText: I18n.tr("niri Matrix Chat")
|
||||
|
||||
Image {
|
||||
anchors.fill: parent
|
||||
@@ -582,9 +582,7 @@ Item {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: I18n.tr(`dms is a highly customizable, modern desktop shell with a <a href="https://m3.material.io/" style="text-decoration:none; color:${Theme.primary};">material 3 inspired</a> design.
|
||||
<br /><br/>It is built with <a href="https://quickshell.org" style="text-decoration:none; color:${Theme.primary};">Quickshell</a>, a QT6 framework for building desktop shells, and <a href="https://go.dev" style="text-decoration:none; color:${Theme.primary};">Go</a>, a statically typed, compiled programming language.
|
||||
`)
|
||||
text: I18n.tr('dms is a highly customizable, modern desktop shell with a <a href="https://m3.material.io/" style="text-decoration:none; color:%1;">material 3 inspired</a> design.<br /><br/>It is built with <a href="https://quickshell.org" style="text-decoration:none; color:%1;">Quickshell</a>, a QT6 framework for building desktop shells, and <a href="https://go.dev" style="text-decoration:none; color:%1;">Go</a>, a statically typed, compiled programming language.').arg(Theme.primary)
|
||||
textFormat: Text.RichText
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
linkColor: Theme.primary
|
||||
@@ -825,7 +823,7 @@ Item {
|
||||
|
||||
StyledText {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: `<a href="https://github.com/AvengeMedia/DankMaterialShell/blob/master/LICENSE" style="text-decoration:none; color:${Theme.surfaceVariantText};">MIT License</a>`
|
||||
text: I18n.tr('<a href="https://github.com/AvengeMedia/DankMaterialShell/blob/master/LICENSE" style="text-decoration:none; color:%1;">MIT License</a>').arg(Theme.surfaceVariantText)
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.surfaceVariantText
|
||||
textFormat: Text.RichText
|
||||
|
||||
@@ -181,11 +181,11 @@ Item {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
model: [
|
||||
{
|
||||
"text": "Time",
|
||||
"text": I18n.tr("Time"),
|
||||
"icon": "access_time"
|
||||
},
|
||||
{
|
||||
"text": "Location",
|
||||
"text": I18n.tr("Location"),
|
||||
"icon": "place"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -542,7 +542,14 @@ Item {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: KeybindsService.loading ? I18n.tr("Shortcuts") : I18n.tr("Shortcuts (%1)").arg(keybindsTab._filteredBinds.length)
|
||||
text: {
|
||||
if (KeybindsService.loading)
|
||||
return I18n.tr("Shortcuts");
|
||||
const count = keybindsTab._filteredBinds.length;
|
||||
return count === 1
|
||||
? I18n.tr("Shortcut (%1)").arg(count)
|
||||
: I18n.tr("Shortcuts (%1)").arg(count);
|
||||
}
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
font.weight: Font.Medium
|
||||
color: Theme.surfaceText
|
||||
|
||||
@@ -2854,7 +2854,7 @@ Item {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: I18n.tr(`Generate baseline GTK3/4 or QT5/QT6 (requires qt6ct-kde) configurations to follow DMS colors. Only needed once.<br /><br />It is recommended to configure <a href="https://github.com/AvengeMedia/DankMaterialShell/blob/master/README.md#Theming" style="text-decoration:none; color:${Theme.primary};">adw-gtk3</a> prior to applying GTK themes.`)
|
||||
text: I18n.tr('Generate baseline GTK3/4 or QT5/QT6 (requires qt6ct-kde) configurations to follow DMS colors. Only needed once.<br /><br />It is recommended to configure <a href="https://github.com/AvengeMedia/DankMaterialShell/blob/master/README.md#Theming" style="text-decoration:none; color:%1;">adw-gtk3</a> prior to applying GTK themes.').arg(Theme.primary)
|
||||
textFormat: Text.RichText
|
||||
linkColor: Theme.primary
|
||||
onLinkActivated: url => Qt.openUrlExternally(url)
|
||||
|
||||
@@ -138,7 +138,7 @@ Item {
|
||||
{
|
||||
"id": "gpuTemp",
|
||||
"text": I18n.tr("GPU Temperature"),
|
||||
"description": "",
|
||||
"description": I18n.tr("GPU temperature display"),
|
||||
"icon": "auto_awesome_mosaic",
|
||||
"warning": !DgopService.dgopAvailable ? I18n.tr("Requires 'dgop' tool") : I18n.tr("This widget prevents GPU power off states, which can significantly impact battery life on laptops. It is not recommended to use this on laptops with hybrid graphics."),
|
||||
"enabled": DgopService.dgopAvailable
|
||||
|
||||
@@ -67,12 +67,14 @@ DankPopout {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: {
|
||||
if (SystemUpdateService.isChecking)
|
||||
return "Checking...";
|
||||
return I18n.tr("Checking...");
|
||||
if (SystemUpdateService.hasError)
|
||||
return "Error";
|
||||
return I18n.tr("Error");
|
||||
if (SystemUpdateService.updateCount === 0)
|
||||
return "Up to date";
|
||||
return SystemUpdateService.updateCount + " updates";
|
||||
return I18n.tr("Up to date");
|
||||
return SystemUpdateService.updateCount === 1
|
||||
? I18n.tr("%1 update").arg(SystemUpdateService.updateCount)
|
||||
: I18n.tr("%1 updates").arg(SystemUpdateService.updateCount);
|
||||
}
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: {
|
||||
@@ -136,18 +138,20 @@ DankPopout {
|
||||
width: parent.width
|
||||
text: {
|
||||
if (SystemUpdateService.hasError) {
|
||||
return "Failed to check for updates:\n" + SystemUpdateService.errorMessage;
|
||||
return I18n.tr("Failed to check for updates:\n%1").arg(SystemUpdateService.errorMessage);
|
||||
}
|
||||
if (!SystemUpdateService.helperAvailable) {
|
||||
return "No package manager found. Please install 'paru' or 'yay' on Arch-based systems to check for updates.";
|
||||
return I18n.tr("No package manager found. Please install 'paru' or 'yay' on Arch-based systems to check for updates.");
|
||||
}
|
||||
if (SystemUpdateService.isChecking) {
|
||||
return "Checking for updates...";
|
||||
return I18n.tr("Checking for updates...");
|
||||
}
|
||||
if (SystemUpdateService.updateCount === 0) {
|
||||
return "Your system is up to date!";
|
||||
return I18n.tr("Your system is up to date!");
|
||||
}
|
||||
return `Found ${SystemUpdateService.updateCount} packages to update:`;
|
||||
return SystemUpdateService.updateCount === 1
|
||||
? I18n.tr("Found %1 package to update:").arg(SystemUpdateService.updateCount)
|
||||
: I18n.tr("Found %1 packages to update:").arg(SystemUpdateService.updateCount);
|
||||
}
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user