From a32edd387e92dcb67b48d17e964aead77e5637db Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 20 May 2025 00:35:09 +0200 Subject: [PATCH] mfking chore: add qsTr() to strings for translations --- .config/quickshell/GlobalStates.qml | 2 +- .config/quickshell/modules/bar/Bar.qml | 4 ++-- .config/quickshell/modules/bar/Media.qml | 2 +- .../modules/cheatsheet/Cheatsheet.qml | 6 +++--- .../modules/common/ConfigOptions.qml | 4 ++-- .../common/widgets/NotificationWidget.qml | 2 +- .../modules/mediaControls/MediaControls.qml | 6 +++--- .../OnScreenDisplayBrightness.qml | 4 ++-- .../onScreenDisplay/OnScreenDisplayVolume.qml | 4 ++-- .../quickshell/modules/overview/Overview.qml | 12 +++++------ .../modules/overview/SearchItem.qml | 2 +- .../modules/overview/SearchWidget.qml | 18 +++++++--------- .../quickshell/modules/session/Session.qml | 4 ++-- .../modules/sidebarLeft/SidebarLeft.qml | 6 +++--- .../modules/sidebarLeft/aiChat/AiMessage.qml | 2 +- .../sidebarLeft/aiChat/MessageThinkBlock.qml | 2 +- .../modules/sidebarLeft/anime/BooruImage.qml | 4 ++-- .../sidebarLeft/anime/BooruResponse.qml | 4 +++- .../modules/sidebarRight/SidebarRight.qml | 9 ++++---- .../quickToggles/BluetoothToggle.qml | 6 ++++-- .../quickToggles/NetworkToggle.qml | 5 +++-- .config/quickshell/services/Ai.qml | 21 ++++++++++--------- .config/quickshell/services/Booru.qml | 4 ++-- .config/quickshell/services/Brightness.qml | 4 ++-- .config/quickshell/services/ConfigLoader.qml | 8 +++---- .../quickshell/services/KeyringStorage.qml | 5 +++-- 26 files changed, 78 insertions(+), 72 deletions(-) diff --git a/.config/quickshell/GlobalStates.qml b/.config/quickshell/GlobalStates.qml index b9e3362a..1b879421 100644 --- a/.config/quickshell/GlobalStates.qml +++ b/.config/quickshell/GlobalStates.qml @@ -31,7 +31,7 @@ Singleton { GlobalShortcut { name: "workspaceNumber" - description: "Hold to show workspace numbers, release to show icons" + description: qsTr("Hold to show workspace numbers, release to show icons") onPressed: { workspaceShowNumbersTimer.start() diff --git a/.config/quickshell/modules/bar/Bar.qml b/.config/quickshell/modules/bar/Bar.qml index 516fa8a3..ea5aa58a 100644 --- a/.config/quickshell/modules/bar/Bar.qml +++ b/.config/quickshell/modules/bar/Bar.qml @@ -108,7 +108,7 @@ Scope { ScrollHint { reveal: barLeftSideMouseArea.hovered icon: "light_mode" - tooltipText: "Scroll to change brightness" + tooltipText: qsTr("Scroll to change brightness") side: "left" anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter @@ -283,7 +283,7 @@ Scope { ScrollHint { reveal: barRightSideMouseArea.hovered icon: "volume_up" - tooltipText: "Scroll to change volume" + tooltipText: qsTr("Scroll to change volume") side: "right" anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter diff --git a/.config/quickshell/modules/bar/Media.qml b/.config/quickshell/modules/bar/Media.qml index 424cf860..2cebc4d3 100644 --- a/.config/quickshell/modules/bar/Media.qml +++ b/.config/quickshell/modules/bar/Media.qml @@ -12,7 +12,7 @@ import Quickshell.Hyprland Item { id: root readonly property MprisPlayer activePlayer: MprisController.activePlayer - readonly property string cleanedTitle: StringUtils.cleanMusicTitle(activePlayer?.trackTitle) || "No media" + readonly property string cleanedTitle: StringUtils.cleanMusicTitle(activePlayer?.trackTitle) || qsTr("No media") Layout.fillHeight: true implicitWidth: rowLayout.implicitWidth + rowLayout.spacing * 2 diff --git a/.config/quickshell/modules/cheatsheet/Cheatsheet.qml b/.config/quickshell/modules/cheatsheet/Cheatsheet.qml index eeeb4a69..2474430a 100644 --- a/.config/quickshell/modules/cheatsheet/Cheatsheet.qml +++ b/.config/quickshell/modules/cheatsheet/Cheatsheet.qml @@ -156,7 +156,7 @@ Scope { // Scope GlobalShortcut { name: "cheatsheetToggle" - description: "Toggles cheatsheet on press" + description: qsTr("Toggles cheatsheet on press") onPressed: { cheatsheetLoader.active = !cheatsheetLoader.active; @@ -165,7 +165,7 @@ Scope { // Scope GlobalShortcut { name: "cheatsheetOpen" - description: "Opens cheatsheet on press" + description: qsTr("Opens cheatsheet on press") onPressed: { cheatsheetLoader.active = true; @@ -174,7 +174,7 @@ Scope { // Scope GlobalShortcut { name: "cheatsheetClose" - description: "Closes cheatsheet on press" + description: qsTr("Closes cheatsheet on press") onPressed: { cheatsheetLoader.active = false; diff --git a/.config/quickshell/modules/common/ConfigOptions.qml b/.config/quickshell/modules/common/ConfigOptions.qml index 57d6e5aa..8b8b5f4e 100644 --- a/.config/quickshell/modules/common/ConfigOptions.qml +++ b/.config/quickshell/modules/common/ConfigOptions.qml @@ -5,7 +5,7 @@ pragma ComponentBehavior: Bound Singleton { property QtObject ai: QtObject { - property string systemPrompt: "Use casual tone. No user knowledge is to be assumed except basic Linux literacy. Be brief and concise: When explaining concepts, use bullet points (prefer minus sign (-) over asterisk (*)) and highlight keywords in bold to pinpoint the main concepts instead of long paragraphs. You are also encouraged to split your response with h2 headers, each header title beginning with an emoji, like `## 🐧 Linux`." + property string systemPrompt: qsTr("Use casual tone. No user knowledge is to be assumed except basic Linux literacy. Be brief and concise: When explaining concepts, use bullet points (prefer minus sign (-) over asterisk (*)) and highlight keywords in bold to pinpoint the main concepts instead of long paragraphs. You are also encouraged to split your response with h2 headers, each header title beginning with an emoji, like `## 🐧 Linux`.") } property QtObject appearance: QtObject { @@ -70,7 +70,7 @@ Singleton { property string defaultProvider: "yandere" property int limit: 20 property QtObject zerochan: QtObject { - property string username: "" + property string username: "[unset]" } } } diff --git a/.config/quickshell/modules/common/widgets/NotificationWidget.qml b/.config/quickshell/modules/common/widgets/NotificationWidget.qml index a99fd1bf..fd7106ba 100644 --- a/.config/quickshell/modules/common/widgets/NotificationWidget.qml +++ b/.config/quickshell/modules/common/widgets/NotificationWidget.qml @@ -127,7 +127,7 @@ Item { onPressAndHold: (mouse) => { if (mouse.button === Qt.LeftButton) { Hyprland.dispatch(`exec wl-copy '${StringUtils.shellSingleQuoteEscape(notificationObject.body)}'`) - notificationSummaryText.text = `${notificationObject.summary} (copied)` + notificationSummaryText.text = String.format(qsTr("{0} (copied)"), notificationObject.summary) } } onDragStartedChanged: () => { diff --git a/.config/quickshell/modules/mediaControls/MediaControls.qml b/.config/quickshell/modules/mediaControls/MediaControls.qml index 20495611..345bd3bb 100644 --- a/.config/quickshell/modules/mediaControls/MediaControls.qml +++ b/.config/quickshell/modules/mediaControls/MediaControls.qml @@ -115,7 +115,7 @@ Scope { GlobalShortcut { name: "mediaControlsToggle" - description: "Toggles media controls on press" + description: qsTr("Toggles media controls on press") onPressed: { if (!mediaControlsLoader.active && Mpris.players.values.filter(player => isRealPlayer(player)).length === 0) { @@ -127,7 +127,7 @@ Scope { } GlobalShortcut { name: "mediaControlsOpen" - description: "Opens media controls on press" + description: qsTr("Opens media controls on press") onPressed: { mediaControlsLoader.active = true; @@ -136,7 +136,7 @@ Scope { } GlobalShortcut { name: "mediaControlsClose" - description: "Closes media controls on press" + description: qsTr("Closes media controls on press") onPressed: { mediaControlsLoader.active = false; diff --git a/.config/quickshell/modules/onScreenDisplay/OnScreenDisplayBrightness.qml b/.config/quickshell/modules/onScreenDisplay/OnScreenDisplayBrightness.qml index bec442a8..0bcc3615 100644 --- a/.config/quickshell/modules/onScreenDisplay/OnScreenDisplayBrightness.qml +++ b/.config/quickshell/modules/onScreenDisplay/OnScreenDisplayBrightness.qml @@ -131,7 +131,7 @@ Scope { GlobalShortcut { name: "osdBrightnessTrigger" - description: "Triggers brightness OSD on press" + description: qsTr("Triggers brightness OSD on press") onPressed: { root.triggerOsd() @@ -139,7 +139,7 @@ Scope { } GlobalShortcut { name: "osdBrightnessHide" - description: "Hides brightness OSD on press" + description: qsTr("Hides brightness OSD on press") onPressed: { root.showOsdValues = false diff --git a/.config/quickshell/modules/onScreenDisplay/OnScreenDisplayVolume.qml b/.config/quickshell/modules/onScreenDisplay/OnScreenDisplayVolume.qml index 3ecc01cd..9a6c4327 100644 --- a/.config/quickshell/modules/onScreenDisplay/OnScreenDisplayVolume.qml +++ b/.config/quickshell/modules/onScreenDisplay/OnScreenDisplayVolume.qml @@ -129,7 +129,7 @@ Scope { } GlobalShortcut { name: "osdVolumeTrigger" - description: "Triggers volume OSD on press" + description: qsTr("Triggers volume OSD on press") onPressed: { root.triggerOsd() @@ -137,7 +137,7 @@ Scope { } GlobalShortcut { name: "osdVolumeHide" - description: "Hides volume OSD on press" + description: qsTr("Hides volume OSD on press") onPressed: { root.showOsdValues = false diff --git a/.config/quickshell/modules/overview/Overview.qml b/.config/quickshell/modules/overview/Overview.qml index 9aa5da31..0b267699 100644 --- a/.config/quickshell/modules/overview/Overview.qml +++ b/.config/quickshell/modules/overview/Overview.qml @@ -128,7 +128,7 @@ Scope { GlobalShortcut { name: "overviewToggle" - description: "Toggles overview on press" + description: qsTr("Toggles overview on press") onPressed: { GlobalStates.overviewOpen = !GlobalStates.overviewOpen @@ -136,7 +136,7 @@ Scope { } GlobalShortcut { name: "overviewClose" - description: "Closes overview" + description: qsTr("Closes overview") onPressed: { GlobalStates.overviewOpen = false @@ -144,7 +144,7 @@ Scope { } GlobalShortcut { name: "overviewToggleRelease" - description: "Toggles overview on release" + description: qsTr("Toggles overview on release") onPressed: { GlobalStates.superReleaseMightTrigger = true @@ -160,9 +160,9 @@ Scope { } GlobalShortcut { name: "overviewToggleReleaseInterrupt" - description: "Interrupts possibility of overview being toggled on release. " + - "This is necessary because GlobalShortcut.onReleased in quickshell triggers whether or not you press something else while holding the key. " + - "To make sure this works consistently, use binditn = MODKEYS, catchall in an automatically triggered submap that includes everything." + description: qsTr("Interrupts possibility of overview being toggled on release. ") + + qsTr("This is necessary because GlobalShortcut.onReleased in quickshell triggers whether or not you press something else while holding the key. ") + + qsTr("To make sure this works consistently, use binditn = MODKEYS, catchall in an automatically triggered submap that includes everything.") onPressed: { GlobalStates.superReleaseMightTrigger = false diff --git a/.config/quickshell/modules/overview/SearchItem.qml b/.config/quickshell/modules/overview/SearchItem.qml index 1eb5bcac..7643af80 100644 --- a/.config/quickshell/modules/overview/SearchItem.qml +++ b/.config/quickshell/modules/overview/SearchItem.qml @@ -103,7 +103,7 @@ Button { StyledText { font.pixelSize: Appearance.font.pixelSize.small color: Appearance.colors.colSubtext - visible: root.itemType && root.itemType != "App" + visible: root.itemType && root.itemType != qsTr("App") text: root.itemType } StyledText { diff --git a/.config/quickshell/modules/overview/SearchWidget.qml b/.config/quickshell/modules/overview/SearchWidget.qml index c861b454..887480de 100644 --- a/.config/quickshell/modules/overview/SearchWidget.qml +++ b/.config/quickshell/modules/overview/SearchWidget.qml @@ -276,7 +276,7 @@ Item { // Wrapper nonAppResultsTimer.restart(); const mathResultObject = { name: root.mathResult, - clickActionName: "Copy", + clickActionName: qsTr("Copy"), type: qsTr("Math result"), fontType: "monospace", materialSymbol: 'calculate', @@ -286,7 +286,7 @@ Item { // Wrapper } const commandResultObject = { name: searchingText, - clickActionName: "Run", + clickActionName: qsTr("Run"), type: qsTr("Run command"), fontType: "monospace", materialSymbol: 'terminal', @@ -300,8 +300,8 @@ Item { // Wrapper if (actionString.startsWith(root.searchingText) || root.searchingText.startsWith(actionString)) { return { name: root.searchingText.startsWith(actionString) ? root.searchingText : actionString, - clickActionName: "Run", - type: "Action", + clickActionName: qsTr("Run"), + type: qsTr("Action"), materialSymbol: 'settings_suggest', execute: () => { action.execute(root.searchingText.split(" ").slice(1).join(" ")) @@ -319,8 +319,8 @@ Item { // Wrapper result = result.concat( AppSearch.fuzzyQuery(root.searchingText) .map((entry) => { - entry.clickActionName = "Launch"; - entry.type = "App" + entry.clickActionName = qsTr("Launch"); + entry.type = qsTr("App"); return entry; }) ); @@ -344,8 +344,8 @@ Item { // Wrapper // Web search result.push({ name: root.searchingText, - clickActionName: "Search", - type: "Search the web", + clickActionName: qsTr("Search"), + type: qsTr("Search the web"), materialSymbol: 'travel_explore', execute: () => { let url = ConfigOptions.search.engineBaseUrl + root.searchingText @@ -361,8 +361,6 @@ Item { // Wrapper } delegate: SearchItem { entry: modelData - // itemName: modelData.name - // itemIcon: modelData.icon } } diff --git a/.config/quickshell/modules/session/Session.qml b/.config/quickshell/modules/session/Session.qml index f5ed7358..190666bd 100644 --- a/.config/quickshell/modules/session/Session.qml +++ b/.config/quickshell/modules/session/Session.qml @@ -209,7 +209,7 @@ Scope { GlobalShortcut { name: "sessionToggle" - description: "Toggles session screen on press" + description: qsTr("Toggles session screen on press") onPressed: { sessionLoader.active = !sessionLoader.active; @@ -218,7 +218,7 @@ Scope { GlobalShortcut { name: "sessionOpen" - description: "Opens session screen on press" + description: qsTr("Opens session screen on press") onPressed: { sessionLoader.active = true; diff --git a/.config/quickshell/modules/sidebarLeft/SidebarLeft.qml b/.config/quickshell/modules/sidebarLeft/SidebarLeft.qml index 4c60bdac..eff535d6 100644 --- a/.config/quickshell/modules/sidebarLeft/SidebarLeft.qml +++ b/.config/quickshell/modules/sidebarLeft/SidebarLeft.qml @@ -192,7 +192,7 @@ Scope { // Scope GlobalShortcut { name: "sidebarLeftToggle" - description: "Toggles left sidebar on press" + description: qsTr("Toggles left sidebar on press") onPressed: { sidebarLoader.active = !sidebarLoader.active; @@ -202,7 +202,7 @@ Scope { // Scope GlobalShortcut { name: "sidebarLeftOpen" - description: "Opens left sidebar on press" + description: qsTr("Opens left sidebar on press") onPressed: { sidebarLoader.active = true; @@ -212,7 +212,7 @@ Scope { // Scope GlobalShortcut { name: "sidebarLeftClose" - description: "Closes left sidebar on press" + description: qsTr("Closes left sidebar on press") onPressed: { sidebarLoader.active = false; diff --git a/.config/quickshell/modules/sidebarLeft/aiChat/AiMessage.qml b/.config/quickshell/modules/sidebarLeft/aiChat/AiMessage.qml index 7418e31a..4c412719 100644 --- a/.config/quickshell/modules/sidebarLeft/aiChat/AiMessage.qml +++ b/.config/quickshell/modules/sidebarLeft/aiChat/AiMessage.qml @@ -151,7 +151,7 @@ Rectangle { color: Appearance.m3colors.m3onSecondaryContainer text: messageData.role == 'assistant' ? Ai.models[messageData.model].name : (messageData.role == 'user' && SystemInfo.username) ? SystemInfo.username : - (messageData.role == 'interface') ? qsTr("Interface") : qsTr("Unknown") + qsTr("Interface") } } } diff --git a/.config/quickshell/modules/sidebarLeft/aiChat/MessageThinkBlock.qml b/.config/quickshell/modules/sidebarLeft/aiChat/MessageThinkBlock.qml index 3f8f620b..e00615b0 100644 --- a/.config/quickshell/modules/sidebarLeft/aiChat/MessageThinkBlock.qml +++ b/.config/quickshell/modules/sidebarLeft/aiChat/MessageThinkBlock.qml @@ -99,7 +99,7 @@ Item { id: thinkBlockLanguage Layout.fillWidth: false Layout.alignment: Qt.AlignLeft - text: root.completed ? "Chain of Thought" : ("Thinking" + ".".repeat(Math.random() * 4)) + text: root.completed ? qsTr("Chain of Thought") : (qsTr("Thinking") + ".".repeat(Math.random() * 4)) } Item { Layout.fillWidth: true } Button { // Expand button diff --git a/.config/quickshell/modules/sidebarLeft/anime/BooruImage.qml b/.config/quickshell/modules/sidebarLeft/anime/BooruImage.qml index c36a52ca..3bc9b461 100644 --- a/.config/quickshell/modules/sidebarLeft/anime/BooruImage.qml +++ b/.config/quickshell/modules/sidebarLeft/anime/BooruImage.qml @@ -94,7 +94,7 @@ Button { PointingHandInteraction {} StyledToolTip { - content: `${StringUtils.wordWrap(root.imageData.tags, root.maxTagStringLineLength)}\nClick for options` + content: `${StringUtils.wordWrap(root.imageData.tags, root.maxTagStringLineLength)}\n${qsTr("Click for options")}` } background: Rectangle { @@ -177,7 +177,7 @@ Button { MenuButton { id: downloadButton Layout.fillWidth: true - buttonText: "Download" + buttonText: qsTr("Download") onClicked: { root.showActions = false Hyprland.dispatch(`exec curl '${root.imageData.file_url}' -o '${root.imageData.is_nsfw ? root.nsfwPath : root.downloadPath}/${root.fileName}' && notify-send '${qsTr("Download complete")}' '${root.downloadPath}/${root.fileName}'`) diff --git a/.config/quickshell/modules/sidebarLeft/anime/BooruResponse.qml b/.config/quickshell/modules/sidebarLeft/anime/BooruResponse.qml index e62e5544..4822a222 100644 --- a/.config/quickshell/modules/sidebarLeft/anime/BooruResponse.qml +++ b/.config/quickshell/modules/sidebarLeft/anime/BooruResponse.qml @@ -2,6 +2,7 @@ import "root:/" import "root:/services" import "root:/modules/common" import "root:/modules/common/widgets" +import "root:/modules/common/functions/string_utils.js" as StringUtils import "../" import QtQuick import QtQuick.Controls @@ -93,7 +94,8 @@ Rectangle { anchors.centerIn: parent font.pixelSize: Appearance.font.pixelSize.smaller color: Appearance.colors.colOnLayer2 - text: `Page ${root.responseData.page}` + // text: `Page ${root.responseData.page}` + text: StringUtils.format(qsTr("Page {0}"), root.responseData.page) } } } diff --git a/.config/quickshell/modules/sidebarRight/SidebarRight.qml b/.config/quickshell/modules/sidebarRight/SidebarRight.qml index 8d994184..e7dd4d9e 100644 --- a/.config/quickshell/modules/sidebarRight/SidebarRight.qml +++ b/.config/quickshell/modules/sidebarRight/SidebarRight.qml @@ -2,6 +2,7 @@ import "root:/" import "root:/services" import "root:/modules/common" import "root:/modules/common/widgets" +import "root:/modules/common/functions/string_utils.js" as StringUtils import "./quickToggles/" import QtQuick import QtQuick.Controls @@ -102,7 +103,7 @@ Scope { StyledText { font.pixelSize: Appearance.font.pixelSize.normal color: Appearance.colors.colOnLayer0 - text: `Uptime: ${DateTime.uptime}` + text: StringUtils.format(qsTr("Uptime: {0}"), DateTime.uptime) textFormat: Text.MarkdownText } @@ -197,7 +198,7 @@ Scope { GlobalShortcut { name: "sidebarRightToggle" - description: "Toggles right sidebar on press" + description: qsTr("Toggles right sidebar on press") onPressed: { sidebarLoader.active = !sidebarLoader.active; @@ -206,7 +207,7 @@ Scope { } GlobalShortcut { name: "sidebarRightOpen" - description: "Opens right sidebar on press" + description: qsTr("Opens right sidebar on press") onPressed: { sidebarLoader.active = true; @@ -215,7 +216,7 @@ Scope { } GlobalShortcut { name: "sidebarRightClose" - description: "Closes right sidebar on press" + description: qsTr("Closes right sidebar on press") onPressed: { sidebarLoader.active = false; diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/BluetoothToggle.qml b/.config/quickshell/modules/sidebarRight/quickToggles/BluetoothToggle.qml index d73a6607..fc432c09 100644 --- a/.config/quickshell/modules/sidebarRight/quickToggles/BluetoothToggle.qml +++ b/.config/quickshell/modules/sidebarRight/quickToggles/BluetoothToggle.qml @@ -2,6 +2,7 @@ import "../" import "root:/services" import "root:/modules/common" import "root:/modules/common/widgets" +import "root:/modules/common/functions/string_utils.js" as StringUtils import QtQuick import Quickshell import Quickshell.Io @@ -37,8 +38,9 @@ QuickToggleButton { } } StyledToolTip { - content: `${(Bluetooth.bluetoothEnabled && Bluetooth.bluetoothDeviceName.length > 0) ? - Bluetooth.bluetoothDeviceName : "Bluetooth"} | ${qsTr("Right-click to configure")}` + content: StringUtils.format(qsTr("{0} | Right-click to configure"), + (Bluetooth.bluetoothEnabled && Bluetooth.bluetoothDeviceName.length > 0) ? + Bluetooth.bluetoothDeviceName : qsTr("Bluetooth")) } } diff --git a/.config/quickshell/modules/sidebarRight/quickToggles/NetworkToggle.qml b/.config/quickshell/modules/sidebarRight/quickToggles/NetworkToggle.qml index 742a2f48..93a4aec9 100644 --- a/.config/quickshell/modules/sidebarRight/quickToggles/NetworkToggle.qml +++ b/.config/quickshell/modules/sidebarRight/quickToggles/NetworkToggle.qml @@ -1,6 +1,7 @@ +import "root:/services" import "root:/modules/common" import "root:/modules/common/widgets" -import "root:/services" +import "root:/modules/common/functions/string_utils.js" as StringUtils import "../" import QtQuick import Quickshell @@ -42,6 +43,6 @@ QuickToggleButton { } } StyledToolTip { - content: `${Network.networkName} | Right-click to configure` + content: StringUtils.format(qsTr("{0} | Right-click to configure"), Network.networkName) } } diff --git a/.config/quickshell/services/Ai.qml b/.config/quickshell/services/Ai.qml index 04d2dbc8..4f1ac52e 100644 --- a/.config/quickshell/services/Ai.qml +++ b/.config/quickshell/services/Ai.qml @@ -36,14 +36,14 @@ Singleton { "gemini-2.0-flash-search": { "name": "Gemini 2.0 Flash", "icon": "google-gemini-symbolic", - "description": "Online | Google's model\nGives up-to-date information with search.", + "description": qsTr("Online | Google's model\nGives up-to-date information with search."), "homepage": "https://aistudio.google.com", "endpoint": "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent", "model": "gemini-2.0-flash", "requires_key": true, "key_id": "gemini", "key_get_link": "https://aistudio.google.com/app/apikey", - "key_get_description": "**Pricing**: free. Data used for training.\n\n**Instructions**: Log into Google account, allow AI Studio to create Google Cloud project or whatever it asks, go back and click Get API key", + "key_get_description": qsTr("**Pricing**: free. Data used for training.\n\n**Instructions**: Log into Google account, allow AI Studio to create Google Cloud project or whatever it asks, go back and click Get API key"), "api_format": "gemini", "tools": [ { @@ -54,25 +54,26 @@ Singleton { "openrouter-llama4-maverick": { "name": "Llama 4 Maverick", "icon": "ollama-symbolic", - "description": "Online via OpenRouter | Meta's model", + "description": StringUtils.format(qsTr("Online via {0} | {1}'s model"), "OpenRouter", "Meta"), "homepage": "https://openrouter.ai/meta-llama/llama-4-maverick:free", "endpoint": "https://openrouter.ai/api/v1/chat/completions", "model": "meta-llama/llama-4-maverick:free", "requires_key": true, "key_id": "openrouter", "key_get_link": "https://openrouter.ai/settings/keys", - "key_get_description": "**Pricing**: free. Data use policy varies depending on your OpenRouter account settings.\n\n**Instructions**: Log into OpenRouter account, go to Keys on the topright menu, click Create API Key", + "key_get_description": qsTr("**Pricing**: free. Data use policy varies depending on your OpenRouter account settings.\n\n**Instructions**: Log into OpenRouter account, go to Keys on the topright menu, click Create API Key"), }, "openrouter-deepseek-r1": { "name": "DeepSeek R1", "icon": "deepseek-symbolic", - "description": "Online via OpenRouter | DeepSeek's reasoning model", + "description": StringUtils.format(qsTr("Online via {0} | {1}'s model"), "OpenRouter", "DeepSeek"), "homepage": "https://openrouter.ai/deepseek/deepseek-r1:free", "endpoint": "https://openrouter.ai/api/v1/chat/completions", "model": "deepseek/deepseek-r1:free", "requires_key": true, "key_id": "openrouter", "key_get_link": "https://openrouter.ai/settings/keys", + "key_get_description": qsTr("**Pricing**: free. Data use policy varies depending on your OpenRouter account settings.\n\n**Instructions**: Log into OpenRouter account, go to Keys on the topright menu, click Create API Key"), }, } property var modelList: Object.keys(root.models) @@ -117,7 +118,7 @@ Singleton { root.models[model] = { "name": guessModelName(model), "icon": guessModelLogo(model), - "description": `Local Ollama model: ${model}`, + "description": StringUtils.format(qsTr("Local Ollama model | {0}"), model), "homepage": `https://ollama.com/library/${model}`, "endpoint": "http://localhost:11434/v1/chat/completions", "model": model, @@ -167,7 +168,7 @@ Singleton { modelId = modelId.toLowerCase() if (modelList.indexOf(modelId) !== -1) { PersistentStateManager.setState("ai.model", modelId); - if (feedback) root.addMessage("Model set to " + models[modelId].name, Ai.interfaceRole) + if (feedback) root.addMessage(StringUtils.format(StringUtils.format("Model set to {0}"), models[modelId].name, Ai.interfaceRole)) if (models[modelId].requires_key) { // If key not there show advice if (root.apiKeysLoaded && (!root.apiKeys[models[modelId].key_id] || root.apiKeys[models[modelId].key_id].length === 0)) { @@ -185,7 +186,7 @@ Singleton { function setApiKey(key) { const model = models[currentModelId]; if (!model.requires_key) { - root.addMessage(`${model.name} does not require an API key`, Ai.interfaceRole); + root.addMessage(StringUtils.format(qsTr("{0} does not require an API key"), model.name), Ai.interfaceRole); return; } if (!key || key.length === 0) { @@ -194,7 +195,7 @@ Singleton { return; } KeyringStorage.setNestedField(["apiKeys", model.key_id], key.trim()); - root.addMessage("API key set for " + model.name, Ai.interfaceRole); + root.addMessage(StringUtils.format(qsTr("API key set for {0}"), model.name, Ai.interfaceRole)); } function printApiKey() { @@ -207,7 +208,7 @@ Singleton { root.addMessage(StringUtils.format(qsTr("No API key set for {0}"), model.name), Ai.interfaceRole); } } else { - root.addMessage(`This model (${model.name}) does not require an API key`, Ai.interfaceRole); + root.addMessage(StringUtils.format(qsTr("{0} does not require an API key"), model.name), Ai.interfaceRole); } } diff --git a/.config/quickshell/services/Booru.qml b/.config/quickshell/services/Booru.qml index 8f0cb3f5..216fc1f5 100644 --- a/.config/quickshell/services/Booru.qml +++ b/.config/quickshell/services/Booru.qml @@ -19,7 +19,7 @@ Singleton { property var defaultUserAgent: ConfigOptions?.networking?.userAgent || "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" property var providerList: ["yandere", "konachan", "zerochan", "danbooru", "gelbooru", "waifu.im"] property var providers: { - "system": { "name": "System" }, + "system": { "name": qsTr("System") }, "yandere": { "name": "yande.re", "url": "https://yande.re", @@ -340,7 +340,7 @@ Singleton { xhr.setRequestHeader("User-Agent", defaultUserAgent) } else if (currentProvider == "zerochan") { - const userAgent = ConfigOptions?.sidebar?.booru?.zerochan?.username ? `Desktop sidebar booru viewer - ${ConfigOptions.sidebar.booru.zerochan.username}` : defaultUserAgent + const userAgent = ConfigOptions?.sidebar?.booru?.zerochan?.username ? `Desktop sidebar booru viewer - username: ${ConfigOptions.sidebar.booru.zerochan.username}` : defaultUserAgent xhr.setRequestHeader("User-Agent", userAgent) } root.runningRequests++; diff --git a/.config/quickshell/services/Brightness.qml b/.config/quickshell/services/Brightness.qml index 7fc2a2b2..ddf25f8e 100644 --- a/.config/quickshell/services/Brightness.qml +++ b/.config/quickshell/services/Brightness.qml @@ -134,13 +134,13 @@ Singleton { GlobalShortcut { name: "brightnessIncrease" - description: "Increase brightness" + description: qsTr("Increase brightness") onPressed: root.increaseBrightness() } GlobalShortcut { name: "brightnessDecrease" - description: "Decrease brightness" + description: qsTr("Decrease brightness") onPressed: root.decreaseBrightness() } } diff --git a/.config/quickshell/services/ConfigLoader.qml b/.config/quickshell/services/ConfigLoader.qml index c05b1734..6c330c68 100644 --- a/.config/quickshell/services/ConfigLoader.qml +++ b/.config/quickshell/services/ConfigLoader.qml @@ -29,11 +29,11 @@ Singleton { if (root.firstLoad) { root.firstLoad = false; } else { - Hyprland.dispatch(`exec notify-send "Shell configuration reloaded" "${root.filePath}"`) + Hyprland.dispatch(`exec notify-send "${qsTr("Shell configuration reloaded")}" "${root.filePath}"`) } } catch (e) { console.error("[ConfigLoader] Error reading file:", e); - Hyprland.dispatch(`exec notify-send "Shell configuration failed to load" "${root.filePath}"`) + Hyprland.dispatch(`exec notify-send "${qsTr("Shell configuration failed to load")}" "${root.filePath}"`) return; } } @@ -66,9 +66,9 @@ Singleton { console.log("[ConfigLoader] File not found, creating new file.") const plainConfig = ObjectUtils.toPlainObject(ConfigOptions) configFileView.setText(JSON.stringify(plainConfig, null, 2)) - Hyprland.dispatch(`exec notify-send "Shell configuration created" "${root.filePath}"`) + Hyprland.dispatch(`exec notify-send "${qsTr("Shell configuration created")}" "${root.filePath}"`) } else { - Hyprland.dispatch(`exec notify-send "Shell configuration failed to load" "${root.filePath}"`) + Hyprland.dispatch(`exec notify-send "${qsTr("Shell configuration failed to load")}" "${root.filePath}"`) } } } diff --git a/.config/quickshell/services/KeyringStorage.qml b/.config/quickshell/services/KeyringStorage.qml index 39632c6c..0de61910 100644 --- a/.config/quickshell/services/KeyringStorage.qml +++ b/.config/quickshell/services/KeyringStorage.qml @@ -2,6 +2,7 @@ pragma Singleton pragma ComponentBehavior: Bound import "root:/modules/common" +import "root:/modules/common/functions/string_utils.js" as StringUtils import Quickshell; import Quickshell.Io; import Qt.labs.platform @@ -18,14 +19,14 @@ Singleton { property var properties: { "application": "illogical-impulse", - "explanation": "For storing API keys and other sensitive information", + "explanation": qsTr("For storing API keys and other sensitive information"), } property var propertiesAsArgs: Object.keys(root.properties).reduce( function(arr, key) { return arr.concat([key, root.properties[key]]); }, [] ) - property string keyringLabel: "illogical-impulse Safe Storage" + property string keyringLabel: StringUtils.format(qsTr("{0} Safe Storage"), "illogical-impulse") function setNestedField(path, value) { if (!root.keyringData) root.keyringData = {};