From a4d9463c5d50230b14b95b11cfdfb694cfb29f09 Mon Sep 17 00:00:00 2001 From: 3akev <3akevdev@gmail.com> Date: Wed, 26 Nov 2025 17:24:52 +0100 Subject: [PATCH 1/7] Niri: receive events directly from socket --- Services/Compositor/NiriService.qml | 221 ++++++++++++++-------------- 1 file changed, 110 insertions(+), 111 deletions(-) diff --git a/Services/Compositor/NiriService.qml b/Services/Compositor/NiriService.qml index 27960aac..314352f3 100644 --- a/Services/Compositor/NiriService.qml +++ b/Services/Compositor/NiriService.qml @@ -27,155 +27,154 @@ Item { // Initialization function initialize() { - niriEventStream.running = true; + niriEventStream.connected = true; + niriCommandSocket.connected = true; + + startEventStream(); updateWorkspaces(); updateWindows(); queryDisplayScales(); Logger.i("NiriService", "Service started"); } + // command from https://yalter.github.io/niri/niri_ipc/enum.Request.html + function sendSocketCommand(sock, command) { + sock.write(JSON.stringify(command) + "\n"); + sock.flush(); + } + + function startEventStream() { + sendSocketCommand(niriEventStream, "EventStream"); + } + // Update workspaces function updateWorkspaces() { - niriWorkspaceProcess.running = true; + sendSocketCommand(niriCommandSocket, "Workspaces"); } // Update windows function updateWindows() { - niriWindowsProcess.running = true; + sendSocketCommand(niriCommandSocket, "Windows"); } // Query display scales function queryDisplayScales() { - niriOutputsProcess.running = true; + sendSocketCommand(niriCommandSocket, "Outputs"); } - // Niri outputs process for display scale detection - Process { - id: niriOutputsProcess - running: false - command: ["niri", "msg", "--json", "outputs"] + function recollectOutputs(outputsData) { + const scales = {}; - stdout: SplitParser { + // Niri returns an object with display names as keys + for (const outputName in outputsData) { + const output = outputsData[outputName]; + if (output && output.name) { + const logical = output.logical || {}; + const currentModeIdx = output.current_mode || 0; + const modes = output.modes || []; + const currentMode = modes[currentModeIdx] || {}; + + scales[output.name] = { + "name": output.name, + "scale": logical.scale || 1.0, + "width": logical.width || 0, + "height": logical.height || 0, + "x": logical.x || 0, + "y": logical.y || 0, + "physical_width": (output.physical_size && output.physical_size[0]) || 0, + "physical_height": (output.physical_size && output.physical_size[1]) || 0, + "refresh_rate": currentMode.refresh_rate || 0, + "vrr_supported": output.vrr_supported || false, + "vrr_enabled": output.vrr_enabled || false, + "transform": logical.transform || "Normal" + }; + } + } + + // Notify CompositorService (it will emit displayScalesChanged) + if (CompositorService && CompositorService.onDisplayScalesUpdated) { + CompositorService.onDisplayScalesUpdated(scales); + } + } + + function recollectWorkspaces(workspacesData) { + const workspacesList = []; + + for (const ws of workspacesData) { + workspacesList.push({ + "id": ws.id, + "idx": ws.idx, + "name": ws.name || "", + "output": ws.output || "", + "isFocused": ws.is_focused === true, + "isActive": ws.is_active === true, + "isUrgent": ws.is_urgent === true, + "isOccupied": ws.active_window_id ? true : false + }); + } + + // Sort workspaces by output, then by index + workspacesList.sort((a, b) => { + if (a.output !== b.output) { + return a.output.localeCompare(b.output); + } + return a.idx - b.idx; + }); + + // Update the workspaces ListModel + workspaces.clear(); + for (var i = 0; i < workspacesList.length; i++) { + workspaces.append(workspacesList[i]); + } + + workspaceChanged(); + } + + // Niri command socket + Socket { + id: niriCommandSocket + path: Quickshell.env("NIRI_SOCKET") + connected: false + + parser: SplitParser { onRead: function (line) { try { - const outputsData = JSON.parse(line); - const scales = {}; + const data = JSON.parse(line); - // Niri returns an object with display names as keys - for (const outputName in outputsData) { - const output = outputsData[outputName]; - if (output && output.name) { - const logical = output.logical || {}; - const currentModeIdx = output.current_mode || 0; - const modes = output.modes || []; - const currentMode = modes[currentModeIdx] || {}; - - scales[output.name] = { - "name": output.name, - "scale": logical.scale || 1.0, - "width": logical.width || 0, - "height": logical.height || 0, - "x": logical.x || 0, - "y": logical.y || 0, - "physical_width": (output.physical_size && output.physical_size[0]) || 0, - "physical_height": (output.physical_size && output.physical_size[1]) || 0, - "refresh_rate": currentMode.refresh_rate || 0, - "vrr_supported": output.vrr_supported || false, - "vrr_enabled": output.vrr_enabled || false, - "transform": logical.transform || "Normal" - }; + if (data && data.Ok) { + const res = data.Ok; + if (res.Windows) { + recollectWindows(res.Windows); + } else if (res.Outputs) { + recollectOutputs(res.Outputs); + } else if (res.Workspaces) { + recollectWorkspaces(res.Workspaces); } + } else { + Logger.e("NiriService", "Niri returned an error:", data.Err, line); } - // Notify CompositorService (it will emit displayScalesChanged) - if (CompositorService && CompositorService.onDisplayScalesUpdated) { - CompositorService.onDisplayScalesUpdated(scales); - } } catch (e) { - Logger.e("NiriService", "Failed to parse outputs:", e, line); + Logger.e("NiriService", "Failed to parse data from socket:", e, line); + return; } } } } - // Niri workspace process - Process { - id: niriWorkspaceProcess - running: false - command: ["niri", "msg", "--json", "workspaces"] - - stdout: SplitParser { - onRead: function (line) { - try { - const workspacesData = JSON.parse(line); - const workspacesList = []; - - for (const ws of workspacesData) { - workspacesList.push({ - "id": ws.id, - "idx": ws.idx, - "name": ws.name || "", - "output": ws.output || "", - "isFocused": ws.is_focused === true, - "isActive": ws.is_active === true, - "isUrgent": ws.is_urgent === true, - "isOccupied": ws.active_window_id ? true : false - }); - } - - // Sort workspaces by output, then by index - workspacesList.sort((a, b) => { - if (a.output !== b.output) { - return a.output.localeCompare(b.output); - } - return a.idx - b.idx; - }); - - // Update the workspaces ListModel - workspaces.clear(); - for (var i = 0; i < workspacesList.length; i++) { - workspaces.append(workspacesList[i]); - } - - workspaceChanged(); - } catch (e) { - Logger.e("NiriService", "Failed to parse workspaces:", e, line); - } - } - } - } - - // Niri windows process - Process { - id: niriWindowsProcess - running: false - command: ["niri", "msg", "--json", "windows"] - - stdout: SplitParser { - onRead: function (line) { - try { - const windowsData = JSON.parse(line); - recollectWindows(windowsData); - } catch (e) { - Logger.e("NiriService", "Failed to parse windows:", e, line); - } - } - } - } - - // Niri event stream process - Process { + // Niri event stream socket + Socket { id: niriEventStream - running: false - command: ["niri", "msg", "--json", "event-stream"] + path: Quickshell.env("NIRI_SOCKET") + connected: false - stdout: SplitParser { + parser: SplitParser { onRead: data => { try { const event = JSON.parse(data.trim()); if (event.WorkspacesChanged) { - updateWorkspaces(); + recollectWorkspaces(event.WorkspacesChanged.workspaces); } else if (event.WindowOpenedOrChanged) { handleWindowOpenedOrChanged(event.WindowOpenedOrChanged); } else if (event.WindowClosed) { From 4d24791ec18c05dda462cf23f8e5dd395977e769 Mon Sep 17 00:00:00 2001 From: Adam Laughlin Date: Wed, 26 Nov 2025 20:08:13 -0500 Subject: [PATCH 2/7] Control Center: hide shortcuts box if empty --- Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml b/Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml index 2bb973f1..0d39665c 100644 --- a/Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml +++ b/Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml @@ -14,6 +14,7 @@ RowLayout { NBox { Layout.fillWidth: true Layout.preferredHeight: root.shortcutsHeight + visible: Settings.datga.controlCenter.shortcuts.left.length > 0 RowLayout { id: leftContent @@ -53,6 +54,7 @@ RowLayout { NBox { Layout.fillWidth: true Layout.preferredHeight: root.shortcutsHeight + visible: Settings.data.controlCenter.shortcuts.right.length > 0 RowLayout { id: rightContent From 84246e0d5d82b89880269d4085042785aeb55f2b Mon Sep 17 00:00:00 2001 From: Corey Woodworth Date: Wed, 26 Nov 2025 21:20:12 -0500 Subject: [PATCH 3/7] Added small margin, put theme colors on top --- Widgets/NColorPickerDialog.qml | 78 +++++++++++++++++----------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/Widgets/NColorPickerDialog.qml b/Widgets/NColorPickerDialog.qml index 1324f5b1..9ba5ae93 100644 --- a/Widgets/NColorPickerDialog.qml +++ b/Widgets/NColorPickerDialog.qml @@ -620,43 +620,6 @@ Popup { columnSpacing: 6 rowSpacing: 6 - Repeater { - model: ColorList.colors - - Rectangle { - width: 24 - height: 24 - radius: Style.radiusXXS - color: modelData.color - border.color: root.selectedColor.toString() === modelData.color.toString() ? Color.mPrimary : Color.mOutline - border.width: Math.max(1, root.selectedColor.toString() === modelData.color.toString() ? Style.borderM : Style.borderS) - - MouseArea { - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - - onEntered: { - TooltipService.show(parent, modelData.name + "\n" + parent.color.toString().toUpperCase()); - } - onExited: { - TooltipService.hide(); - } - onClicked: { - root.selectedColor = modelData.color; - TooltipService.hide(); - } - } - } - } - - NDivider { - Layout.columnSpan: 15 - Layout.fillWidth: true - Layout.topMargin: Style.marginXS - Layout.bottomMargin: 0 - } - NLabel { Layout.columnSpan: 15 Layout.fillWidth: true @@ -695,6 +658,43 @@ Popup { } ] + Rectangle { + width: 24 + height: 24 + radius: Style.radiusXXS + color: modelData.color + border.color: root.selectedColor.toString() === modelData.color.toString() ? Color.mPrimary : Color.mOutline + border.width: Math.max(1, root.selectedColor.toString() === modelData.color.toString() ? Style.borderM : Style.borderS) + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + + onEntered: { + TooltipService.show(parent, modelData.name + "\n" + parent.color.toString().toUpperCase()); + } + onExited: { + TooltipService.hide(); + } + onClicked: { + root.selectedColor = modelData.color; + TooltipService.hide(); + } + } + } + } + + NDivider { + Layout.columnSpan: 15 + Layout.fillWidth: true + Layout.topMargin: Style.marginXS + Layout.bottomMargin: 0 + } + + Repeater { + model: ColorList.colors + Rectangle { width: 24 height: 24 @@ -728,8 +728,8 @@ Popup { RowLayout { Layout.fillWidth: true - //Layout.topMargin: 20 - //Layout.bottomMargin: 20 + Layout.topMargin: 1 + Layout.bottomMargin: 1 spacing: 10 Item { From 94a582b6347fb07eba77e914ad620e6c3295a20e Mon Sep 17 00:00:00 2001 From: HAMADA Minato Date: Thu, 27 Nov 2025 21:39:34 +0900 Subject: [PATCH 4/7] Add Japanese translation (ja) --- Assets/Translations/ja.json | 2414 +++++++++++++++++++++++++++++++++++ 1 file changed, 2414 insertions(+) create mode 100644 Assets/Translations/ja.json diff --git a/Assets/Translations/ja.json b/Assets/Translations/ja.json new file mode 100644 index 00000000..705d6f3f --- /dev/null +++ b/Assets/Translations/ja.json @@ -0,0 +1,2414 @@ +{ + "authentication": { + "error": "認証エラー", + "failed": "認証失敗" + }, + "bar": { + "widget-settings": { + "active-window": { + "colorize-icons": { + "description": "アクティブウィンドウのアイコンにテーマカラーを適用します。", + "label": "テーマカラーの適用" + }, + "hide-mode": { + "description": "アクティブウィンドウがない場合のウィジェットの動作を制御します。", + "label": "非表示モード" + }, + "max-width": { + "description": "ウィジェットの最大幅を設定します。内容が短い場合は自動的に縮小します。", + "label": "最大幅" + }, + "scrolling-mode": { + "description": "長いウィンドウタイトルのスクロール動作を制御します。", + "label": "スクロールモード" + }, + "show-app-icon": { + "description": "ウィンドウタイトルの横にアプリアイコンを表示します。", + "label": "アプリアイコンを表示" + }, + "use-fixed-width": { + "description": "有効にすると、内容に合わせて自動調整せず、常に最大幅を使用します。", + "label": "固定幅を使用" + } + }, + "audio-visualizer": { + "color-name": { + "description": "ビジュアライザーの色を選択します。", + "label": "塗りつぶし色" + }, + "hide-when-idle": { + "description": "有効にすると、再生中のプレーヤーがない場合にビジュアライザーを隠します。", + "label": "メディア停止時は隠す" + }, + "width": { + "description": "コンポーネントの幅をカスタム設定します。", + "label": "幅" + } + }, + "battery": { + "display-mode": { + "description": "値の表示方法を選択します。", + "label": "表示モード" + }, + "low-battery-threshold": { + "description": "バッテリー残量がこのパーセンテージを下回ると警告を表示します。", + "label": "低バッテリー警告の閾値" + } + }, + "brightness": { + "display-mode": { + "description": "値の表示方法を選択します。", + "label": "表示モード" + } + }, + "clock": { + "clock-display": { + "description": "以下のトークンを使用して時計の表示をカスタマイズします。12時間表記にするには AP トークンを含める必要があります。", + "label": "時計の表示形式" + }, + "custom-font": { + "description": "時計表示用のカスタムフォントを選択します。", + "label": "カスタムフォント", + "placeholder": "カスタムフォントを選択...", + "search-placeholder": "フォントを検索..." + }, + "horizontal-bar": { + "description": "ヒント: \\n を使用すると改行できます。", + "label": "水平バー" + }, + "preview": "プレビュー", + "use-custom-font": { + "description": "デフォルトのフォント設定を上書きし、時計にカスタムフォントを使用します。", + "label": "カスタムフォントを使用" + }, + "use-monospaced-font": { + "description": "有効にすると、時計に等幅フォントを使用します。", + "label": "等幅フォントを使用" + }, + "use-primary-color": { + "description": "有効にすると、強調のためにプライマリカラーが適用されます。", + "label": "プライマリカラーを使用" + }, + "vertical-bar": { + "description": "各パーツを新しい行に分けるにはスペースを使用してください。", + "label": "垂直バー" + } + }, + "control-center": { + "browse-file": "ファイルを参照", + "browse-library": "ライブラリを参照", + "colorize-distro-logo": { + "description": "ディストリビューションのロゴにテーマカラーを適用します。", + "label": "テーマカラーの適用" + }, + "icon": { + "description": "ライブラリまたはカスタムファイルからアイコンを選択します。", + "label": "アイコン" + }, + "select-custom-icon": "カスタムアイコンを選択", + "use-distro-logo": { + "description": "カスタムアイコンの代わりに、ディストリビューションのロゴを使用します。", + "label": "ディストリビューションのロゴの使用" + } + }, + "custom-button": { + "browse": "参照", + "collapse-condition": { + "description": "出力テキストがこの値と一致する場合、ボタンを折りたたみます。", + "label": "折りたたみ条件" + }, + "display-command-output": { + "description": "定期的に実行するコマンドを入力します。出力の最初の行がテキストとして表示されます。", + "label": "コマンド出力を表示", + "stream-description": "継続的に実行するコマンドを入力します。" + }, + "dynamic-text": "動的テキスト", + "icon": { + "description": "ライブラリからアイコンを選択します。", + "label": "アイコン" + }, + "left-click": { + "description": "ボタンを左クリックした際に実行するコマンド。", + "label": "左クリック", + "update-text": "左クリック時に表示テキストを更新" + }, + "max-text-length-horizontal": { + "description": "水平バーに表示する最大文字数(0でテキストを非表示)。", + "label": "テキストの最大長(水平)" + }, + "max-text-length-vertical": { + "description": "垂直バーに表示する最大文字数(0でテキストを非表示)。", + "label": "テキストの最大長(垂直)" + }, + "middle-click": { + "description": "ボタンを中クリックした際に実行するコマンド。", + "label": "中クリック", + "update-text": "中クリック時に表示テキストを更新" + }, + "parse-json": { + "description": "コマンド出力を JSON オブジェクトとして解析し、テキストやアイコンを動的に設定します。", + "label": "出力を JSON として解析" + }, + "refresh-interval": { + "description": "間隔(ミリ秒)。", + "label": "更新間隔" + }, + "right-click": { + "description": "ボタンを右クリックした際に実行するコマンド。", + "label": "右クリック", + "update-text": "右クリック時に表示テキストを更新" + }, + "text-stream": { + "description": "コマンドからストリーミングされた行を、ボタン上のテキストとして表示します。", + "label": "ストリーム" + }, + "wheel": { + "description": "スクロールホイール操作時に実行するコマンド。\nコマンド内で $delta を使用して回転量を取得できます。", + "label": "スクロールホイール", + "update-text": "スクロール時に表示テキストを更新" + }, + "wheel-down": { + "description": "スクロールホイールを下方向に回転させた際に実行するコマンド。", + "label": "ホイール下回転時のコマンド" + }, + "wheel-mode-separate": { + "description": "ホイールの上回転と下回転で別々のコマンドを有効にします。", + "label": "ホイール操作を分離" + }, + "wheel-up": { + "description": "スクロールホイールを上方向に回転させた際に実行するコマンド。", + "label": "ホイール上回転時のコマンド" + } + }, + "dialog": { + "apply": "適用", + "cancel": "キャンセル" + }, + "keyboard-layout": { + "display-mode": { + "description": "値の表示方法を選択します。", + "label": "表示モード" + } + }, + "lock-keys": { + "browse": "参照", + "show-caps-lock": { + "description": "Caps Lock の状態を表示します。", + "label": "Caps Lock" + }, + "show-num-lock": { + "description": "Num Lock の状態を表示します。", + "label": "Num Lock" + }, + "show-scroll-lock": { + "description": "Scroll Lock の状態を表示します。", + "label": "Scroll Lock" + } + }, + "media-mini": { + "hide-mode": { + "description": "再生中のメディアがない場合のウィジェットの動作を制御します。", + "label": "非表示モード" + }, + "max-width": { + "description": "ウィジェットの最大幅を設定します。内容が短い場合は自動的に縮小します。", + "label": "最大幅" + }, + "no-active-player": "アクティブなプレーヤーなし", + "scrolling-mode": { + "description": "長いトラックタイトルのスクロール動作を制御します。", + "label": "スクロールモード" + }, + "show-album-art": { + "description": "現在再生中のトラックのアルバムアートを表示します。", + "label": "アルバムアートを表示" + }, + "show-artist-first": { + "description": "「アーティスト名 - タイトル」の順で表示します。", + "label": "アーティストを先に表示" + }, + "show-progress-ring": { + "description": "トラックの再生位置を示す円形の進捗インジケーターを表示します。", + "label": "プログレスリングを表示" + }, + "show-visualizer": { + "description": "音楽再生時にオーディオビジュアライザーを表示します。", + "label": "ビジュアライザーを表示" + }, + "use-fixed-width": { + "description": "有効にすると、内容に合わせて自動調整せず、常に最大幅を使用します。", + "label": "固定幅を使用" + }, + "visualizer-type": { + "description": "表示するオーディオビジュアライザーのスタイルを選択します。", + "label": "ビジュアライザーの種類" + } + }, + "microphone": { + "display-mode": { + "description": "値の表示方法を選択します。", + "label": "表示モード" + } + }, + "notification-history": { + "hide-badge-when-zero": { + "description": "未読通知がない場合、通知バッジを非表示にします。", + "label": "ゼロのときはバッジを隠す" + }, + "show-unread-badge": { + "description": "未読通知の数を表示するバッジを表示します。", + "label": "未読バッジを表示" + } + }, + "section-editor": { + "placeholder": "追加するウィジェットを選択...", + "search-placeholder": "ウィジェットを検索..." + }, + "spacer": { + "width": { + "description": "スペースの幅(ピクセル)。", + "label": "幅" + } + }, + "system-monitor": { + "cpu-temperature": { + "description": "利用可能な場合、CPU 温度を表示します。", + "label": "CPU 温度" + }, + "cpu-usage": { + "description": "現在の CPU 使用率を表示します。", + "label": "CPU 使用率" + }, + "disk-path": { + "description": "監視するディスクのマウントポイントを選択します。", + "label": "ディスクパス" + }, + "memory-percentage": { + "description": "メモリ使用量を絶対値ではなくパーセンテージで表示します。", + "label": "メモリをパーセント表示" + }, + "memory-usage": { + "description": "現在の RAM 使用量を表示します。", + "label": "メモリ使用量" + }, + "network-traffic": { + "description": "ネットワークのアップロード・ダウンロード速度を表示します。", + "label": "ネットワークトラフィック" + }, + "storage-usage": { + "description": "ストレージの使用状況を表示します。", + "label": "ストレージ使用量" + } + }, + "taskbar": { + "colorize-icons": { + "description": "タスクバーのアイコンにテーマカラーを適用します。", + "label": "テーマカラーの適用" + }, + "hide-mode": { + "description": "一致するウィンドウがない場合のウィジェットの動作を制御します。", + "label": "非表示モード" + }, + "only-active-workspaces": { + "description": "アクティブなワークスペースのアプリのみを表示します。", + "label": "アクティブなワークスペースのみ" + }, + "only-same-output": { + "description": "バーが配置されているディスプレイ上のアプリのみを表示します。", + "label": "同じディスプレイのみ" + } + }, + "taskbar-grouped": { + "show-labels-only-when-occupied": { + "description": "ウィンドウが開いているワークスペースにのみラベルを表示します。", + "label": "ウィンドウがある時のみラベルを表示" + } + }, + "tray": { + "colorize-icons": { + "description": "トレイのアイコンにテーマカラーを適用します。", + "label": "テーマカラーの適用" + }, + "drawer-enabled": { + "description": "有効にすると、ピン留めされていないトレイ項目をドロワーパネル内に表示します。\n無効にすると、すべての項目をインラインで表示します。", + "label": "ドロワーを有効化" + } + }, + "volume": { + "display-mode": { + "description": "値の表示方法を選択します。", + "label": "表示モード" + } + }, + "workspace": { + "character-count": { + "description": "ワークスペース名から表示する文字数 (1-10)。", + "label": "文字数" + }, + "follow-focused-screen": { + "description": "バーが配置されている画面ではなく、現在フォーカスされている画面のワークスペースを表示します。", + "label": "フォーカス中の画面に追従" + }, + "hide-unoccupied": { + "description": "ウィンドウがないワークスペースを表示しません。", + "label": "空のワークスペースを隠す" + }, + "label-mode": { + "description": "ワークスペースラベルの表示方法を選択します。", + "label": "ラベルモード" + } + } + } + }, + "battery": { + "battery-level": "バッテリー残量", + "brightness": "明るさ", + "charging": "充電中", + "charging-rate": "充電速度: {rate} W", + "discharging": "放電中", + "discharging-rate": "放電速度: {rate} W", + "health": "状態: {percent}%", + "idle": "待機中", + "inhibit-idle-description": "システムがスリープ状態になるのを防ぎます。", + "inhibit-idle-label": "スリープを防止", + "no-battery-detected": "バッテリーが見つかりません", + "panel-title": "バッテリー", + "plugged-in": "電源接続中", + "power-profile": "電源プロファイル", + "time-left": "残り時間: {time}", + "time-until-full": "充電完了まで: {time}" + }, + "bluetooth": { + "panel": { + "available-devices": "利用可能なデバイス", + "blocked": "ブロック中", + "connect": "接続", + "connected-devices": "接続済みデバイス", + "connecting": "接続中...", + "disabled": "Bluetooth は無効です", + "disconnect": "切断", + "enable-message": "利用可能なデバイスを表示するには Bluetooth を有効にしてください。", + "known-devices": "登録済みデバイス", + "pairing": "ペアリング中...", + "pairing-mode": "デバイスがペアリングモードになっていることを確認してください。", + "scanning": "デバイスをスキャン中...", + "title": "Bluetooth" + } + }, + "calendar": { + "panel": { + "week": "週" + }, + "timer": { + "duration": "時間", + "hours": "時間", + "minutes": "分", + "seconds": "秒", + "pause": "一時停止", + "start": "開始", + "reset": "リセット", + "stopwatch": "ストップウォッチ", + "countdown": "カウントダウン", + "timer": "タイマー", + "title": "タイマー" + }, + "weather": { + "loading": "天気を読み込み中…" + } + }, + "changelog": { + "error": { + "fetch-failed": "変更履歴データを読み込めませんでした。後ほど再試行してください。", + "rate-limit": "GitHub のレート制限を超えました。数分待ってから再試行してください。" + }, + "panel": { + "buttons": { + "discord": "Discord に参加", + "dismiss": "OK" + }, + "empty": "リリースノートはまだ利用できません。", + "highlight-title": "ハイライト", + "section": { + "released": "{date} リリース", + "version": "バージョン {version}" + }, + "subtitle": { + "fresh": "Noctalia をインストールしていただきありがとうございます!今回のビルド内容は以下の通りです。", + "updated": "{previousVersion} からアップデートされました" + }, + "title": "バージョン {version} の新機能", + "version": { + "new-user": "新規インストール" + } + } + }, + "clock": { + "tooltip": "カレンダーを開く" + }, + "context-menu": { + "activate-app": "{app} をアクティブにする", + "clear-history": "履歴を削除する", + "close-app": "{app} を閉じる", + "connect-vpn": "{name} に接続", + "cycle-visualizer": "ビジュアライザーを切り替える", + "disable-bluetooth": "Bluetooth を無効化", + "disable-dnd": "おやすみモードを無効化", + "disable-wifi": "Wi-Fi を無効化", + "disconnect-vpn": "{name} から切断", + "enable-bluetooth": "Bluetooth を有効化", + "enable-dnd": "おやすみモードを有効化", + "enable-wifi": "Wi-Fi を有効化", + "next": "次へ", + "open-calendar": "カレンダーを開く", + "open-display-settings": "ディスプレイ設定", + "open-launcher": "ランチャーを開く", + "open-mixer": "オーディオミキサー", + "open-settings": "設定を開く", + "pause": "一時停止", + "play": "再生", + "previous": "前へ", + "random-wallpaper": "壁紙をランダムに変更", + "toggle-mute": "ミュート切り替え", + "widget-settings": "ウィジェット設定" + }, + "dock": { + "menu": { + "close": "閉じる", + "focus": "フォーカス", + "pin": "ピン留め", + "unpin": "ピン留めを解除" + } + }, + "general": { + "no-results": "結果なし", + "no-summary": "概要なし", + "unknown": "不明" + }, + "launcher": { + "pin": "ドックにピン留め", + "unpin": "ドックからピン留めを解除" + }, + "lock-screen": { + "authenticating": "認証中...", + "authentication-failed": "認証に失敗しました", + "password": "パスワードを入力...", + "restart": "再起動", + "shut-down": "シャットダウン", + "suspend": "サスペンド", + "welcome-back": "おかえりなさい、" + }, + "notifications": { + "panel": { + "click-to-expand": "クリックして展開", + "description": "通知が届くとここに表示されます。", + "no-notifications": "通知なし", + "title": "通知" + }, + "time": { + "diffD": "1日前", + "diffDD": "{diff}日前", + "diffH": "1時間前", + "diffHH": "{diff}時間前", + "diffM": "1分前", + "diffMM": "{diff}分前", + "now": "今" + } + }, + "options": { + "bar": { + "density": { + "comfortable": "ゆったり", + "compact": "コンパクト", + "default": "標準", + "mini": "ミニ" + }, + "position": { + "bottom": "下", + "left": "左", + "right": "右", + "top": "上" + } + }, + "colors": { + "error": "エラー (Error)", + "onSurface": "文字・アイコン (On Surface)", + "primary": "メインカラー (Primary)", + "secondary": "サブカラー (Secondary)", + "tertiary": "アクセントカラー (Tertiary)" + }, + "control-center": { + "position": { + "bottom_center": "下部中央", + "bottom_left": "左下", + "bottom_right": "右下", + "center": "中央", + "close_to_bar_button": "バーのボタン付近", + "top_center": "上部中央", + "top_left": "左上", + "top_right": "右上" + }, + "quickSettingsStyle": { + "classic": "クラシック", + "compact": "コンパクト", + "modern": "モダン" + } + }, + "display-mode": { + "always-hide": "常に隠す", + "always-show": "常に表示", + "force-open": "強制的に開く", + "on-hover": "ホバー時のみ開く" + }, + "frame-rates": { + "fps": "{fps} FPS" + }, + "hide-modes": { + "hidden": "空の場合は非表示", + "idle": "待機中は非表示", + "transparent": "空の場合は透明にする", + "visible": "常に表示" + }, + "launcher": { + "position": { + "bottom_center": "下部中央", + "bottom_left": "左下", + "bottom_right": "右下", + "center": "中央", + "center_left": "左側中央", + "center_right": "右側中央", + "follow_bar": "バーに追従 (デフォルト)", + "top_center": "上部中央", + "top_left": "左上", + "top_right": "右上" + } + }, + "osd": { + "position": { + "bottom_center": "下部中央", + "bottom_left": "左下", + "bottom_right": "右下", + "center_left": "左側中央", + "center_right": "右側中央", + "top_center": "上部中央", + "top_left": "左上", + "top_right": "右上" + } + }, + "screen-recording": { + "audio-sources": { + "both": "システム出力 + マイク入力", + "microphone-input": "マイク入力", + "system-output": "システム出力" + }, + "color-range": { + "full": "フル", + "limited": "リミテッド" + }, + "quality": { + "high": "高", + "medium": "標準", + "ultra": "ウルトラ", + "very-high": "最高" + }, + "sources": { + "portal": "ポータル", + "screen": "スクリーン" + } + }, + "scrolling-modes": { + "always": "常にスクロール", + "hover": "ホバー時にスクロール", + "never": "スクロールしない" + }, + "shadow-direction": { + "bottom": "下", + "bottom_left": "左下", + "bottom_right": "右下", + "center": "中央", + "left": "左", + "right": "右", + "top": "上", + "top_left": "左上", + "top_right": "右上" + }, + "visualizer-quality": { + "high": "高", + "low": "低" + }, + "visualizer-types": { + "linear": "リニア", + "mirrored": "ミラー", + "none": "なし", + "wave": "ウェーブ" + }, + "workspace-labels": { + "index": "番号", + "index+name": "番号 + 名前", + "name": "名前", + "none": "なし" + } + }, + "placeholders": { + "cancel": "キャンセル", + "command-example": "echo \"Hello World\"", + "enter-command": "実行するコマンドを入力(アプリまたはスクリプト)", + "enter-text-to-collapse": "例: 'nothing is playing'。正規表現 (/.../) も使用できます。", + "enter-tooltip": "ツールチップを入力", + "enter-width-pixels": "幅を入力(ピクセル)", + "profile-picture-path": "/home/user/.face", + "search": "検索...", + "search-icons": "例: noctalia, niri, battery, cloud", + "search-launcher": "項目を検索...(または > でコマンド実行)", + "search-wallhaven": "Wallhaven で検索...", + "search-wallpapers": "壁紙を検索して絞り込む...", + "select": "選択", + "test": "テスト" + }, + "plugins": { + "applications": "アプリケーション", + "calculator": "電卓", + "calculator-description": "電卓 - 数式を計算します", + "calculator-enter-expression": "数式を入力", + "calculator-error": "エラー", + "calculator-name": "電卓", + "clipboard": "クリップボード履歴", + "clipboard-clear-description": "クリップボード履歴をすべて消去", + "clipboard-clear-description-full": "クリップボード履歴からすべての項目を削除します", + "clipboard-clear-history": "クリップボード履歴を消去", + "clipboard-history-disabled": "クリップボード履歴は無効です", + "clipboard-history-disabled-description": "設定で履歴を有効にするか、cliphist をインストールしてください", + "clipboard-loading": "クリップボード履歴を読み込み中...", + "clipboard-loading-description": "お待ちください", + "clipboard-search-description": "クリップボード履歴を検索", + "emoji": "絵文字選択", + "emoji-loading": "絵文字を読み込み中...", + "emoji-loading-description": "お待ちください", + "emoji-search-description": "絵文字を検索してコピー" + }, + "quickSettings": { + "bluetooth": { + "label": { + "disabled": "Bluetooth", + "enabled": "Bluetooth" + }, + "tooltip": { + "action": "クリックして Bluetooth デバイスを管理する" + } + }, + "keepAwake": { + "label": { + "disabled": "スリープを防止", + "enabled": "スリープを防止" + }, + "tooltip": { + "action": "クリックしてスリープ防止モードを切り替え" + } + }, + "nightLight": { + "label": { + "disabled": "夜間モード", + "enabled": "夜間モード", + "forced": "夜間モード" + }, + "tooltip": { + "action": "左クリック: 夜間モードを切り替え\n右クリック: 設定を開く" + } + }, + "notifications": { + "label": { + "disabled": "おやすみモード", + "enabled": "通知" + }, + "tooltip": { + "action": "左クリック: 通知履歴を開く\n右クリック: コンテキストメニューを開く" + } + }, + "powerProfile": { + "label": { + "unavailable": "電源プロファイル" + }, + "tooltip": { + "action": "クリックして電源プロファイルを切り替え", + "disabled": "電源プロファイルを使用するには power-profiles-daemon をインストールしてください" + } + }, + "screenRecorder": { + "label": { + "recording": "停止", + "stopped": "録画" + }, + "tooltip": { + "action": "クリックして画面録画を開始/停止" + } + }, + "wallpaperSelector": { + "label": "壁紙", + "tooltip": { + "action": "左クリック: 壁紙選択パネルを開く\n右クリック: ランダムに壁紙を設定" + } + }, + "wifi": { + "label": { + "disconnected": "Wi-Fi 未接続", + "ethernet": "イーサネット", + "wifi": "Wi-Fi" + }, + "tooltip": { + "action": "クリックして Wi-Fi 接続を管理する" + } + } + }, + "session-menu": { + "action-in-seconds": "{seconds} 秒後に {action}...", + "hibernate": "ハイバネート(休止状態)", + "lock": "ロック", + "lock-and-suspend": "ロックしてサスペンド", + "logout": "ログアウト", + "reboot": "再起動", + "shutdown": "シャットダウン", + "suspend": "サスペンド", + "title": "セッションメニュー" + }, + "settings": { + "about": { + "contributors": { + "section": { + "description": "{count}人の素晴らしいコントリビューターに感謝!", + "description_plural": "{count}人の素晴らしいコントリビューターに感謝!", + "label": "コントリビューター" + } + }, + "noctalia": { + "download-latest": "最新版をダウンロード", + "installed-version": "現在のバージョン:", + "latest-version": "最新のバージョン:", + "section": { + "description": "Wayland のために丁寧に作り込まれた、Quickshell 製の洗練されたミニマルなデスクトップシェル。", + "label": "Noctalia shell" + } + }, + "support": "支援する", + "title": "バージョン情報" + }, + "audio": { + "devices": { + "input-device": { + "description": "使用する入力デバイスを選択します。", + "label": "入力デバイス" + }, + "output-device": { + "description": "使用する出力デバイスを選択します。", + "label": "出力デバイス" + }, + "section": { + "description": "利用可能なオーディオ入出力デバイスを設定します。", + "label": "オーディオデバイス" + } + }, + "external-mixer": { + "description": "外部オーディオミキサー機能を使用する際に起動するコマンド、またはアプリケーションパスを入力します。", + "label": "外部ミキサーのコマンド", + "placeholder": "pwvucontrol || pavucontrol" + }, + "media": { + "excluded-player": { + "description": "システムに無視させたいプレーヤーのキーワードを追加します。1行につき1つのキーワードを入力してください。", + "label": "除外するプレーヤー", + "placeholder": "文字列を入力して + を押す" + }, + "frame-rate": { + "description": "値を高くすると滑らかになりますが、リソース消費が増加します。", + "label": "フレームレート" + }, + "primary-player": { + "description": "メインのプレーヤーを識別するためのキーワードを入力します。", + "label": "優先プレーヤー", + "placeholder": "例: spotify, vlc, mpv" + }, + "scrolling-speed": { + "description": "タイトルが端から端までスクロールするのにかかる時間(秒)。", + "label": "スクロール速度" + }, + "scrolling-title": { + "description": "長いメディアタイトルを連続スクロールさせます。", + "label": "タイトルのスクロール" + }, + "section": { + "description": "優先するメディアアプリや、除外設定を行います。", + "label": "メディアプレーヤー" + }, + "visualizer-quality": { + "description": "品質を高くすると、GPUリソースをより多く消費します。", + "label": "ビジュアライザーの品質" + }, + "visualizer-type": { + "description": "メディア再生時の視覚効果(ビジュアライザー)の種類を選択します。", + "label": "ビジュアライザーの種類" + } + }, + "title": "サウンド", + "volumes": { + "input-volume": { + "description": "マイクの音量レベル", + "label": "入力音量" + }, + "mute-input": { + "description": "デフォルトの音声入力(マイク)をミュートします。", + "label": "入力(マイク)をミュート" + }, + "mute-output": { + "description": "システムのメイン音声出力をミュートします。", + "label": "出力をミュート" + }, + "output-volume": { + "description": "システム全体の音量レベル。", + "label": "出力音量" + }, + "section": { + "description": "音量コントロールとレベルを調整します。", + "label": "音量" + }, + "step-size": { + "description": "音量の変化量(スクロールホイールやショートカットキー)を調整します。", + "label": "ボリューム調整ステップ" + }, + "volume-overdrive": { + "description": "音量を100%以上に上げることを許可します。すべてのハードウェアでサポートされているとは限りません。", + "label": "100%以上の音量を許可" + } + } + }, + "bar": { + "appearance": { + "background-opacity": { + "description": "バーの背景の不透明度を調整します。", + "label": "背景の不透明度" + }, + "capsule-opacity": { + "description": "カプセル表示時のウィジェット背景の不透明度を設定します。", + "label": "カプセルの不透明度" + }, + "density": { + "description": "バーの余白を調整し、コンパクトまたはゆったりとした外観にします。", + "label": "バーの密度" + }, + "floating": { + "description": "バーを浮かせて、カプセル型で表示します。", + "label": "フローティングバー" + }, + "margins": { + "description": "フローティングバーの周囲の余白を調整します。", + "horizontal": "水平方向", + "label": "余白", + "vertical": "垂直方向" + }, + "outer-corners": { + "description": "バーの角に、外向きの丸み(装飾)を表示します。", + "label": "外側のコーナー" + }, + "position": { + "description": "画面上のバーの配置場所を選択します。", + "label": "バーの位置" + }, + "section": { + "description": "バーの外観や位置をカスタマイズします。", + "label": "外観" + }, + "show-capsule": { + "description": "ウィジェットの背景を表示します。", + "label": "カプセルを表示" + } + }, + "monitors": { + "section": { + "description": "バーを表示するディスプレイを選択します。未選択の場合は全てに表示されます。", + "label": "表示するディスプレイ" + } + }, + "title": "バー", + "tray": { + "back": "戻る", + "blacklist": { + "description": "トレイから除外するルールを追加します。ワイルドカード (*) に対応しています。", + "label": "ブラックリスト", + "placeholder": "例: nm-applet, Fcitx*" + }, + "pin-application": "アプリをピン留め", + "unpin-application": "ピン留めを解除" + }, + "widgets": { + "section": { + "description": "ドラッグ&ドロップでウィジェットを並べ替えます。 バッジは配置を示します:[L]左、[C]中央、[R]右。", + "label": "ウィジェットの配置" + } + } + }, + "color-scheme": { + "color-source": { + "matugen-scheme-type": { + "description": { + "scheme-content": "元画像に馴染む色を抽出します", + "scheme-expressive": "彩度が高く、鮮やかで遊び心のあるパレット", + "scheme-fidelity": "元の色相を保持した、忠実度の高いパレット", + "scheme-fruit-salad": "明るく対照的なアクセントを混ぜたカラフルなパレット", + "scheme-monochrome": "単一の色相で構成されたミニマルなパレット", + "scheme-neutral": "彩度を抑えた、落ち着きのあるパレット", + "scheme-rainbow": "スペクトル全体をカバーする多様なパレット", + "scheme-tonal-spot": "アクセントを強調したバランスの良いパレット" + }, + "label": "Matugen のスキームタイプ" + }, + "section": { + "description": "Noctalia のメインカラーを設定します。", + "label": "配色のソース" + }, + "use-wallpaper-colors": { + "description": "Matugen を使用して壁紙から配色を生成します。色を自動抽出して統一感のあるテーマを作成します。", + "label": "壁紙の色を使用" + } + }, + "dark-mode": { + "mode": { + "description": "ライトモードとダークモードの自動切り替えを有効にします。", + "label": "ダークモードのスケジュール", + "location": "現在地", + "manual": "手動", + "off": "オフ" + }, + "switch": { + "description": "夜間でも見やすいように、暗いテーマに切り替えます。", + "label": "ダークモード" + } + }, + "delete": { + "error": { + "description": "{scheme} の削除に失敗しました。", + "title": "削除失敗" + }, + "success": { + "description": "{scheme} を削除しました。", + "title": "配色を削除しました" + } + }, + "download": { + "button": "さらにダウンロード", + "delete": "削除", + "download": "ダウンロード", + "downloading": "ダウンロード中...", + "empty": "利用可能な配色がありません", + "error": { + "api-error": "API エラー: {status}", + "description": "{scheme} のダウンロードに失敗しました。", + "download-failed": "ダウンロードに失敗しました(終了コード: {code})", + "invalid-response": "無効なAPIレスポンス形式", + "no-files": "スキームのファイルが見つかりません", + "parse-failed": "APIレスポンスの解析に失敗しました: {error}", + "rate-limit": "GitHub APIのレート制限を超えました", + "title": "ダウンロード失敗" + }, + "fetching": "利用可能な配色を取得中...", + "installed": "インストール済み", + "refresh": "更新", + "success": { + "description": "{scheme} をダウンロードしました", + "title": "配色をダウンロードしました" + }, + "title": "配色のダウンロード" + }, + "predefined": { + "generate-templates": { + "description": "プリセット配色を使用する際、Matugen テンプレート(GTK、ターミナルテーマなど)を生成します。", + "label": "プリセット配色のテンプレートを生成する" + }, + "section": { + "description": "あらかじめ用意された配色から選択します。", + "label": "プリセット配色" + } + }, + "templates": { + "misc": { + "description": "その他の設定オプション", + "label": "その他", + "user-templates": { + "description": "ユーザー定義の Matugen 設定を有効にします。初回有効化時に ~/.config/noctalia/user-templates.toml にテンプレートファイルが作成されます。", + "label": "ユーザーテンプレート" + } + }, + "programs": { + "cava": { + "description": "{filepath} を書き込みます。", + "description-missing": "{app} のインストールが必要です。" + }, + "code": { + "description": "{filepath} を書き込みます。Hyprluna テーマを手動でインストールして有効化する必要があります。", + "description-missing": "Code クライアントが検出されません。VSCode または VSCodium をインストールしてください。" + }, + "description": "アプリケーションごとのテーマ設定", + "discord": { + "description": "{client} 用に {filepath} を書き込みます。Hyprluna テーマを手動でインストールして有効化する必要があります。", + "description-missing": "Discord クライアントが検出されません。vencord、vesktop、webcord、armcord、equibop、lightcord、dorion のいずれかをインストールしてください。" + }, + "fuzzel": { + "description": "{filepath} を書き込み、リロードします。", + "description-missing": "{app} のインストールが必要です。" + }, + "label": "プログラム", + "pywalfox": { + "description": "{filepath} を書き込み、pywalfox update を実行します。", + "description-missing": "{app} のインストールが必要です。" + }, + "spicetify": { + "description": "{filepath} を書き込みます。Comfy テーマを手動でインストールして有効化する必要があります。", + "description-missing": "{app} のインストールが必要です。" + }, + "telegram": { + "description": "{filepath} を書き込みます。", + "description-missing": "{app} のインストールが必要です。" + }, + "vicinae": { + "description": "{filepath} を書き込み、リロードします。", + "description-missing": "{app} のインストールが必要です。" + }, + "walker": { + "description": "{filepath} を書き込み、テーマを noctalia に設定します。", + "description-missing": "{app} のインストールが必要です。" + } + }, + "section": { + "description": "外部アプリケーションに配色を適用します。", + "label": "テンプレート" + }, + "terminal": { + "alacritty": { + "description": "{filepath} を書き込み、リロードします。", + "description-missing": "{app} のインストールが必要です。" + }, + "description": "ターミナルエミュレータのテーマ設定", + "foot": { + "description": "{filepath} を書き込み、リロードします。", + "description-missing": "{app} のインストールが必要です。" + }, + "ghostty": { + "description": "{filepath} を書き込み、リロードします。", + "description-missing": "{app} のインストールが必要です。" + }, + "kitty": { + "description": "{filepath} を書き込み、リロードします。", + "description-missing": "{app} のインストールが必要です。" + }, + "label": "ターミナル", + "wezterm": { + "description": "{filepath} を書き込み、リロードします。", + "description-missing": "{app} のインストールが必要です。" + } + }, + "ui": { + "description": "デスクトップ環境と UI ツールキットのテーマ設定", + "gtk": { + "description": "{filepath} を書き込みます。" + }, + "kcolorscheme": { + "description": "{filepath} を書き込みます。" + }, + "label": "UI", + "qt": { + "description": "{filepath} を書き込みます。" + } + } + }, + "title": "配色" + }, + "control-center": { + "cards": { + "section": { + "description": "コントロールセンターに表示する項目と、その順序をカスタマイズします。", + "label": "カード" + } + }, + "position": { + "description": "コントロールセンターを開いたときの表示位置を選択します。", + "label": "表示位置" + }, + "section": { + "description": "コントロールセンターの位置や挙動を設定します。", + "label": "外観" + }, + "shortcuts": { + "custom-button": { + "browse": "参照", + "command": { + "description": "ボタンをクリックした際に実行するコマンド。", + "label": "コマンド" + }, + "enable-on-state-logic": { + "description": "チェックコマンドに基づいて、別のアイコンや「ON」状態を有効にします。", + "label": "ON 状態の判定ロジックを有効化" + }, + "general-tooltip-text": { + "description": "ボタンのツールチップに表示する説明文。", + "label": "ツールチップのテキスト" + }, + "icon": { + "description": "ライブラリからアイコンを選択します。", + "label": "アイコン" + }, + "on-clicked": { + "description": "ボタンを左クリックした際に実行するコマンド。", + "label": "左クリック時のコマンド" + }, + "on-middle-clicked": { + "description": "ボタンを中クリックした際に実行するコマンド。", + "label": "中クリック時のコマンド" + }, + "on-right-clicked": { + "description": "ボタンを右クリックした際に実行するコマンド。", + "label": "右クリック時のコマンド" + }, + "on-state-command": { + "description": "ボタンを「ON」状態にするか判定するコマンド。終了コード 0 でON、それ以外でOFFとなります。", + "label": "ON 状態の判定コマンド" + }, + "on-state-icon": { + "description": "「ON」状態のときに表示するアイコン。", + "label": "ON 状態のアイコン" + }, + "state-checks": { + "add": "状態チェックを追加", + "browse-icon": "参照", + "command": "この状態チェックで実行するコマンド", + "label": "状態チェック", + "remove": "削除" + }, + "tooltip": { + "description": "ボタンにカーソルを合わせた際に表示するツールチップ。", + "label": "ツールチップ" + } + }, + "dialog": { + "apply": "適用", + "cancel": "キャンセル" + }, + "section": { + "description": "ショートカットウィジェットの設定と管理を行います。", + "label": "ショートカットウィジェット" + }, + "sectionLeft": "左", + "sectionRight": "右" + }, + "title": "コントロールセンター" + }, + "display": { + "monitors": { + "brightness": "明るさ", + "brightness-step": { + "description": "明るさの変化量(スクロールホイールやショートカットキー)を調整します。", + "label": "明るさの調整ステップ" + }, + "brightness-unavailable": { + "ddc-disabled": "明るさ調整を利用できません。このディスプレイを操作するには「外部ディスプレイの明るさ制御」を有効にしてください。", + "generic": "このディスプレイでは明るさ調整を利用できません。" + }, + "enforce-minimum": { + "description": "明るさを 0% にした際に、一部のディスプレイでバックライトが完全に消えてしまう問題を回避します。", + "label": "最低輝度を確保 (1%)" + }, + "external-brightness": { + "description": "DDC/CI プロトコルを使用して外部ディスプレイの明るさを制御するため、DDCUtil を有効にします。", + "label": "外部ディスプレイの明るさ制御" + }, + "section": { + "description": "各ディスプレイの明るさ設定を調整します。", + "label": "ディスプレイごとの設定" + } + }, + "night-light": { + "auto-schedule": { + "description": "{location} の日の出・日の入り時刻に合わせます(推奨)。", + "label": "自動スケジュール" + }, + "enable": { + "description": "暖色のフィルターを適用し、ブルーライトを軽減します。", + "label": "夜間モードの有効化" + }, + "force-activation": { + "description": "スケジュールを無視して、すぐに夜間フィルターを適用します。", + "label": "常に有効にする" + }, + "manual-schedule": { + "description": "日の出と日の入りの時間を自由に設定します。", + "label": "手動スケジュール設定", + "select-start": "開始時間を選択", + "select-stop": "終了時間を選択", + "sunrise": "日の出の時間", + "sunset": "日の入りの時間" + }, + "section": { + "description": "ブルーライトを抑えて、睡眠の改善と目の疲れの軽減を助けます。", + "label": "夜間モード" + }, + "temperature": { + "day": "日中", + "description": "日中と夜間の色温度(暖かさ)を設定します。", + "label": "色温度", + "night": "夜間" + } + }, + "title": "ディスプレイ" + }, + "dock": { + "appearance": { + "background-opacity": { + "description": "ドックの背景の不透明度を調整します。", + "label": "背景の不透明度" + }, + "border-radius": { + "description": "ドックの角の丸みを調整します。", + "label": "角の丸み" + }, + "colorize-icons": { + "description": "ドックのアプリアイコンにテーマカラーを適用します(非フォーカス時のみ)。", + "label": "テーマカラーの適用" + }, + "display": { + "always-visible": "常に表示", + "auto-hide": "自動的に隠す", + "description": "ドックの表示方法を選択します。", + "exclusive": "領域を確保", + "label": "表示方法" + }, + "floating-distance": { + "description": "画面端からドックまでの距離を設定します。", + "label": "画面端からの距離" + }, + "icon-size": { + "description": "ドック全体のサイズを調整します。", + "label": "ドックのサイズ" + }, + "section": { + "description": "ドックの動作と外観をカスタマイズします。", + "label": "外観" + } + }, + "enabled": { + "description": "ドックを完全に表示または非表示にします。", + "label": "ドックの有効化" + }, + "monitors": { + "only-same-output": { + "description": "ドックが配置されているディスプレイ上のアプリのみを表示します。", + "label": "同じディスプレイのアプリのみ表示" + }, + "section": { + "description": "ドックを表示するディスプレイを選択します。未選択の場合は全てに表示されます。", + "label": "表示するディスプレイ" + } + }, + "title": "ドック" + }, + "general": { + "fonts": { + "default": { + "description": "インターフェース全体で使用されるメインフォント。", + "label": "メインフォント", + "placeholder": "フォントを選択...", + "scale": { + "description": "標準テキストのサイズを拡大・縮小します。", + "label": "メインフォントのサイズ" + }, + "search-placeholder": "フォントを検索..." + }, + "monospace": { + "description": "数字や統計情報の表示に使用される等幅フォント。", + "label": "等幅フォント", + "placeholder": "等幅フォントを選択...", + "scale": { + "description": "等幅テキストのサイズを拡大・縮小します。", + "label": "等幅フォントのサイズ" + }, + "search-placeholder": "等幅フォントを検索..." + }, + "reset-scaling": "サイズ設定をリセット", + "section": { + "description": "インターフェース全体で使用するフォントを選択します。", + "label": "フォント" + } + }, + "language": { + "section": { + "description": "アプリケーションで使用する言語を選択します。", + "label": "言語" + }, + "select": { + "auto-detect": "自動検出", + "description": "アプリケーションのインターフェースで使用する言語を選択します。", + "label": "表示言語" + } + }, + "launch-setup-wizard": "セットアップウィザードを起動", + "profile": { + "picture": { + "description": "インターフェース全体に表示されるプロフィール画像。", + "label": "{user} のプロフィール写真" + }, + "section": { + "description": "ユーザーの詳細とアバターを編集します。", + "label": "プロフィール" + }, + "select-avatar": "アバター画像を選択" + }, + "screen-corners": { + "radius": { + "description": "画面の角の丸みを調整します。", + "label": "角の丸み", + "reset": "角の丸みをリセット" + }, + "section": { + "description": "画面の角の丸みや視覚効果をカスタマイズします。", + "label": "画面の角" + }, + "show-corners": { + "description": "画面の端に丸い角(装飾)を表示します。", + "label": "画面の角を表示する" + }, + "solid-black": { + "description": "バーの背景色の代わりに、黒一色を使用します。", + "label": "角を黒く塗りつぶす" + } + }, + "title": "一般" + }, + "hooks": { + "info": { + "command-info": { + "description": "• コマンドはシェル (sh -c) 経由で実行されます\n• コマンドはバックグラウンドで実行されます\n• テストボタンは現在の設定値を使って実行されます", + "label": "コマンド実行に関する情報" + }, + "parameters": { + "description": "• 壁紙フック: $1 = 壁紙のパス, $2 = 画面名\n• テーマ切替フック: $1 = true/false(ダークモードの状態)", + "label": "利用可能なパラメータ(引数)" + } + }, + "system-hooks": { + "enable": { + "description": "すべてのフックコマンドの有効・無効を切り替えます。", + "label": "フックの有効化" + }, + "section": { + "description": "システムイベントが発生した際に実行するコマンドを設定します。", + "label": "システムフック" + } + }, + "theme-changed": { + "description": "ダークモードとライトモードが切り替わった際に実行されるコマンド。", + "label": "テーマ変更時", + "placeholder": "例: notify-send \"Theme\" \"Toggled\"" + }, + "title": "フック", + "wallpaper-changed": { + "description": "壁紙が変更された際に実行されるコマンド。", + "label": "壁紙変更時", + "placeholder": "例: notify-send \"Wallpaper\" \"Changed\"" + } + }, + "launcher": { + "settings": { + "background-opacity": { + "description": "ランチャーの背景の不透明度を調整します。", + "label": "背景の不透明度" + }, + "clip-preview": { + "description": ">clip コマンド使用時に、クリップボードの内容をプレビュー表示します。", + "label": "クリップボードのプレビューを有効化" + }, + "clipboard-history": { + "description": "以前コピーした項目にランチャーからアクセスできるようにします。", + "label": "クリップボード履歴を有効化" + }, + "custom-launch-prefix": { + "description": "コマンドの先頭にカスタムランチャーを付与します(例: systemd 連携用の 'runapp')。", + "label": "カスタム起動プレフィックス" + }, + "custom-launch-prefix-enabled": { + "description": "デフォルトの方法の代わりに、カスタムプレフィックスを使用してアプリを起動します。", + "label": "カスタム起動プレフィックスを有効化" + }, + "grid-view": { + "description": "リスト形式の代わりに、グリッド(格子状)レイアウトで項目を表示します。", + "label": "グリッド表示" + }, + "position": { + "description": "ランチャーパネルの表示位置を選択します。", + "label": "表示位置" + }, + "section": { + "description": "ランチャーの挙動と外観をカスタマイズします。", + "label": "外観" + }, + "sort-by-usage": { + "description": "有効にすると、よく使うアプリがリストの上位に表示されます。", + "label": "使用頻度順に並べ替え" + }, + "terminal-command": { + "description": "ターミナルを起動するためのコマンド(例: 'kitty -e' or 'gnome-terminal --')。", + "label": "ターミナル起動コマンド" + }, + "use-app2unit": { + "description": "アプリのプロセス管理を改善し、問題を回避するために代替の起動方法を使用します。", + "label": "App2Unit を使用して起動" + } + }, + "title": "ランチャー" + }, + "location": { + "calendar": { + "banner": { + "label": "ヘッダー" + }, + "calendar": { + "label": "カレンダー" + }, + "cards": { + "section": { + "description": "カレンダーパネルのカードを整理し、有効・無効を切り替えます。", + "label": "カレンダーカード" + } + } + }, + "date-time": { + "12hour-format": { + "description": "ロック画面とカレンダーで時刻を12時間表記で表示します。バーの時計には独自の設定があります。", + "label": "12時間表記を使用" + }, + "first-day-of-week": { + "automatic": "自動(システムのロケールを使用)", + "description": "カレンダーの週の始まりの曜日を選択します。", + "label": "週の始まり" + }, + "section": { + "description": "日付と時刻の表示形式をカスタマイズします。", + "label": "日付と時刻" + }, + "show-events": { + "description": "カレンダーパネルにイベント(予定)を表示します。", + "label": "カレンダーのイベントを表示" + }, + "use-analog": { + "description": "カレンダーウィンドウとロック画面にアナログ時計を表示します。", + "label": "アナログ時計を使用" + }, + "week-numbers": { + "description": "カレンダーに週番号(例: 第38週)を表示します。", + "label": "週番号を表示" + } + }, + "location": { + "search": { + "description": "例: Toronto, ON", + "label": "場所を検索", + "placeholder": "地名を入力" + }, + "section": { + "description": "場所を設定して、正確な天気情報や夜間モードのスケジュールを取得します。", + "label": "場所の設定" + } + }, + "title": "地域", + "weather": { + "enabled": { + "description": "インターフェース全体に天気情報を表示し、データを取得します。無効にすると、すべての天気要素が非表示になり、ネットワーク通信も行われません。", + "label": "天気を有効化" + }, + "fahrenheit": { + "description": "気温を摂氏 (°C) ではなく華氏 (°F) で表示します。", + "label": "華氏 (°F) で表示" + }, + "section": { + "description": "温度の単位などを選択します。", + "label": "天気" + }, + "show-effects": { + "description": "天気カードに視覚効果(雨、雪、雷など)を追加表示します。", + "label": "天気エフェクトを表示" + }, + "show-in-calendar": { + "description": "カレンダービューに毎日の天気予報を直接表示します。", + "label": "カレンダー" + } + } + }, + "lock-screen": { + "compact-lockscreen": { + "description": "天気やメディアウィジェットを隠し、ログイン入力とシステムコントロールのみを表示します。", + "label": "コンパクトなロック画面" + }, + "lock-on-suspend": { + "description": "システムのサスペンド時に、自動的に画面をロックします。", + "label": "サスペンド時にロック" + }, + "show-hibernate": { + "description": "電源メニューのオプションに「ハイバネート(休止状態)」を表示します。", + "label": "ハイバネートを表示" + }, + "title": "ロック画面" + }, + "network": { + "bluetooth": { + "label": "Bluetooth を有効化" + }, + "section": { + "description": "Wi-Fi と Bluetooth 接続を管理します。" + }, + "title": "ネットワーク", + "wifi": { + "label": "Wi-Fi を有効化" + } + }, + "notifications": { + "duration": { + "critical-urgency": { + "description": "緊急度「重大」の通知が表示され続ける時間。", + "label": "緊急度: 重大" + }, + "low-urgency": { + "description": "緊急度「低」の通知が表示され続ける時間。", + "label": "緊急度: 低" + }, + "normal-urgency": { + "description": "緊急度「通常」の通知が表示され続ける時間。", + "label": "緊急度: 通常" + }, + "reset": "表示時間をリセット", + "respect-expire": { + "description": "通知自体に設定された有効期限(タイムアウト)を使用します。", + "label": "通知指定の期限に従う" + }, + "section": { + "description": "緊急度レベルに基づいて、通知の表示時間を設定します。", + "label": "通知の表示時間" + } + }, + "monitors": { + "section": { + "description": "通知を表示するディスプレイを選択します。未選択の場合は全てに表示されます。", + "label": "表示するディスプレイ" + } + }, + "settings": { + "always-on-top": { + "description": "全画面ウィンドウや他のレイヤーよりも手前に通知を表示します。", + "label": "常に最前面に表示" + }, + "background-opacity": { + "description": "通知の背景の不透明度を調整します。", + "label": "背景の不透明度" + }, + "do-not-disturb": { + "description": "有効にすると、すべての通知ポップアップを無効にします。", + "label": "おやすみモード" + }, + "enable-osd": { + "description": "音量や画面の明るさの変更をリアルタイムで表示します。", + "label": "OSD (オンスクリーン表示) を有効化" + }, + "enabled": { + "description": "通知デーモンを有効化・無効化します(noctalia-shellの再起動が必要です)。", + "label": "通知を有効化" + }, + "location": { + "description": "画面上の通知の表示位置。", + "label": "表示位置" + }, + "section": { + "description": "通知の外観と挙動を設定します。", + "label": "外観" + } + }, + "title": "通知", + "toast": { + "keyboard": { + "description": "キーボードレイアウトの変更時にトーストを表示します。", + "label": "キーボードレイアウト" + }, + "section": { + "description": "トースト通知の外観と挙動を設定します。", + "label": "トースト通知" + } + } + }, + "osd": { + "always-on-top": { + "description": "全画面ウィンドウや他のレイヤーよりも手前に OSD を表示します。", + "label": "常に最前面に表示" + }, + "background-opacity": { + "description": "OSD の背景の不透明度を調整します。", + "label": "背景の不透明度" + }, + "description": "音量や輝度のオーバーレイなど、オンスクリーン表示を設定します。", + "duration": { + "auto-hide": { + "description": "OSD が消えるまでの時間を調整します。", + "label": "自動的に隠すまでの時間" + }, + "section": { + "description": "OSD が自動的に隠れるまでの表示継続時間。", + "label": "自動非表示のタイムアウト" + } + }, + "enabled": { + "description": "音量や輝度の変更をリアルタイムで表示します。", + "label": "OSD を有効化" + }, + "location": { + "description": "OSD の表示位置を選択します。", + "label": "表示位置" + }, + "monitors": { + "section": { + "description": "OSD を表示するディスプレイを選択します。未選択の場合は全てに表示されます。", + "label": "表示するディスプレイ" + } + }, + "section": { + "general": { + "description": "オンスクリーンディスプレイ (OSD) の表示と挙動を設定します。", + "label": "一般" + } + }, + "title": "オンスクリーンディスプレイ", + "types": { + "brightness": { + "description": "画面の輝度が変更された時に OSD を表示します。", + "label": "画面の明るさ" + }, + "input-volume": { + "description": "マイク音量が変更された時に OSD を表示します。", + "label": "入力音量" + }, + "lockkey": { + "description": "Caps Lock、Num Lock、Scroll Lock の切り替え時にOSDを表示します。", + "label": "ロックキー" + }, + "section": { + "description": "OSD を表示するトリガー(イベント)を選択します。何も選択しない場合、すべてのイベントで表示されます。", + "label": "OSD のトリガーイベント" + }, + "volume": { + "description": "出力音量が変更された時に OSD を表示します。", + "label": "出力音量" + } + } + }, + "screen-recorder": { + "audio": { + "audio-codec": { + "description": "最高のパフォーマンスと最小のファイルサイズを実現する Opus を推奨します。", + "label": "オーディオコーデック" + }, + "audio-source": { + "description": "録画中にキャプチャする音声ソース。", + "label": "オーディオソース" + }, + "section": { + "description": "音声録音のオプションを設定します。", + "label": "オーディオ設定" + } + }, + "general": { + "output-folder": { + "description": "画面録画ファイルを保存するフォルダ。", + "label": "出力フォルダ", + "tooltip": "出力フォルダを参照" + }, + "section": { + "description": "画面録画の出力先や内容を管理します。", + "label": "一般" + }, + "select-output-folder": "出力フォルダを選択", + "show-cursor": { + "description": "動画にマウスカーソルを含めて録画します。", + "label": "カーソルを表示" + } + }, + "title": "スクリーンレコーダー", + "video": { + "color-range": { + "description": "互換性を高めるため、リミテッドを推奨します。", + "label": "カラーレンジ" + }, + "frame-rate": { + "description": "画面録画のターゲットフレームレート。", + "label": "フレームレート" + }, + "section": { + "description": "映像録画のオプションを設定します。", + "label": "ビデオ設定" + }, + "video-codec": { + "description": "H264 が最も一般的なコーデックです。", + "label": "ビデオコーデック" + }, + "video-quality": { + "description": "品質を高くすると、ファイルサイズが大きくなります。", + "label": "ビデオ品質" + }, + "video-source": { + "description": "ポータルを推奨します。映像が乱れる場合はスクリーンを試してください。", + "label": "ビデオソース" + } + } + }, + "session-menu": { + "countdown-duration": { + "description": "カウントダウンタイマーが電源操作を実行するまでの時間を設定します。", + "label": "カウントダウンの時間" + }, + "enable-countdown": { + "description": "電源操作を実行する前にカウントダウンタイマーを表示します。", + "label": "カウントダウンタイマーの有効化" + }, + "entries": { + "section": { + "description": "セッションメニューに表示される電源操作と、その表示順序をカスタマイズします。", + "label": "電源操作" + } + }, + "general": { + "section": { + "description": "セッションメニューパネルの動作と外観を設定します。", + "label": "一般" + } + }, + "position": { + "description": "セッションメニューパネルの表示位置を選択します。", + "label": "表示位置" + }, + "show-header": { + "description": "セッションメニューの上部にタイトルと閉じるボタンを表示します。", + "label": "ヘッダーを表示" + }, + "title": "セッションメニュー" + }, + "system-monitor": { + "cpu-critical-threshold": { + "label": "危険閾値" + }, + "cpu-section": { + "label": "CPU 使用率" + }, + "cpu-warning-threshold": { + "label": "警告閾値" + }, + "critical-color": { + "label": "危険時の色" + }, + "custom-highlight-colors-title": { + "label": "カスタムハイライト色" + }, + "disk-critical-threshold": { + "label": "危険閾値" + }, + "disk-section": { + "label": "ストレージ使用量" + }, + "disk-warning-threshold": { + "label": "警告閾値" + }, + "general": { + "section": { + "description": "システムモニターの動作と外観を設定します。", + "label": "一般" + } + }, + "highlight-colors-section": { + "label": "ハイライト色" + }, + "mem-critical-threshold": { + "label": "危険閾値" + }, + "mem-warning-threshold": { + "label": "警告閾値" + }, + "memory-section": { + "label": "メモリ使用量" + }, + "temp-critical-threshold": { + "label": "危険閾値" + }, + "temp-warning-threshold": { + "label": "警告閾値" + }, + "temperature-section": { + "label": "CPU 温度" + }, + "thresholds-section": { + "description": "システムメトリクスの閾値を設定します。設定値を超えると強調表示されます。", + "label": "閾値" + }, + "title": "システムモニター", + "use-custom-highlight-colors": { + "description": "無効にすると、テーマのデフォルト強調色が使用されます。", + "label": "カスタム強調色を使用する" + }, + "warning-color": { + "label": "警告時の色" + } + }, + "user-interface": { + "allow-panels-without-bar": { + "description": "有効にすると、どの画面でもパネルを開けるようになります。無効にすると、バーがある画面でのみパネルが開き、メモリ使用量を抑えられます。", + "label": "バーのない画面でのパネル表示を許可" + }, + "animation-disable": { + "description": "すべてのアニメーションを無効にし、応答性と速度を向上させます。", + "label": "UI アニメーションの無効化" + }, + "animation-speed": { + "description": "全体のアニメーション速度を調整します。", + "label": "アニメーション速度", + "reset": "アニメーション速度をリセット" + }, + "border-radius": { + "description": "ウィンドウ、ボタン、その他の要素の角の丸みを制御します。", + "label": "角の丸み", + "reset": "角の丸みをリセット" + }, + "dim-desktop": { + "description": "パネルやメニューが開いている間、デスクトップを暗くします。", + "label": "デスクトップを暗くする" + }, + "dimmer-opacity": { + "description": "デスクトップを暗くした際の不透明度を設定します。", + "label": "デスクトップを暗くした際の不透明度", + "reset": "デスクトップを暗くした際の不透明度をリセット" + }, + "panel-background-opacity": { + "description": "すべてのパネル(ランチャー、コントロールセンター、設定など)の背景の不透明度を設定します。", + "label": "パネル背景の不透明度" + }, + "panels-attached-to-bar": { + "description": "パネルをバーや画面の端に固定します。スタイリッシュな逆アール(角の装飾)により、シームレスな外観にします。", + "label": "パネルを画面の端に吸着" + }, + "panels-overlay": { + "description": "全画面アプリケーション上でも、パネルとバーが表示され続けるようにします。", + "label": "パネルとバーを最前面に保持" + }, + "scaling": { + "description": "バーを除く、ユーザーインターフェース全体のサイズを変更します。", + "label": "インターフェースのスケール調整", + "reset-scaling": "インターフェースのスケールをリセット" + }, + "section": { + "description": "インターフェースの外観や操作感、挙動をカスタマイズします。", + "label": "外観" + }, + "settings-panel-attached-to-bar": { + "description": "設定ウィンドウをバーに合わせて配置し、統一感のある外観にします。", + "label": "設定ウィンドウをバーに吸着" + }, + "shadows": { + "description": "バーやパネルの下にドロップシャドウ(影)を表示します。", + "direction": { + "description": "影が落ちる方向を設定します。", + "label": "影の方向" + }, + "label": "ドロップシャドウ" + }, + "title": "ユーザーインターフェース", + "tooltips": { + "description": "インターフェース全体のツールチップの有効・無効を切り替えます。", + "label": "ツールチップを表示" + } + }, + "wallpaper": { + "automation": { + "custom-interval": { + "description": "時間を HH:MM 形式で入力してください(例: 01:30)。", + "label": "カスタム間隔" + }, + "interval": { + "description": "壁紙を自動的に切り替える頻度。", + "label": "変更間隔" + }, + "random-wallpaper": { + "description": "一定間隔でランダムに壁紙を変更します。", + "label": "ランダム変更" + }, + "section": { + "label": "自動化" + } + }, + "look-feel": { + "edge-smoothness": { + "description": "切り替え時の境界に、柔らかいぼかし効果(フェザー)を適用します。", + "label": "境界のぼかし" + }, + "fill-color": { + "description": "壁紙の背景に表示される塗りつぶし色を選択します。", + "label": "背景色" + }, + "fill-mode": { + "description": "画像をディスプレイの解像度に合わせる方法を選択してください。", + "label": "配置方法" + }, + "section": { + "label": "表示と演出" + }, + "transition-duration": { + "description": "切り替えアニメーションにかかる時間(秒)。", + "label": "切り替え時間" + }, + "transition-type": { + "description": "壁紙切り替え時のアニメーションの種類。", + "label": "切り替え効果" + } + }, + "settings": { + "enable-management": { + "description": "Noctalia で壁紙を管理します。他のアプリを使用する場合はチェックを外してください。", + "label": "壁紙管理を有効化" + }, + "enable-overview": { + "description": "オーバービュー画面の壁紙に、ぼかしと暗さしを適用します。", + "label": "オーバービューの壁紙効果" + }, + "folder": { + "description": "メインの壁紙フォルダのパス。", + "label": "壁紙フォルダ", + "tooltip": "壁紙フォルダを参照" + }, + "hide-wallpaper-filenames": { + "description": "壁紙選択パネル内で、壁紙のファイル名を非表示にします。", + "label": "ファイル名を非表示" + }, + "monitor-specific": { + "description": "ディスプレイごとに異なる壁紙フォルダを設定します。", + "label": "ディスプレイ別の壁紙フォルダ", + "tooltip": "ディスプレイ別の壁紙フォルダを参照" + }, + "recursive-search": { + "description": "壁紙フォルダのサブフォルダ内も検索対象にします。", + "label": "サブフォルダも検索" + }, + "section": { + "description": "壁紙の管理方法や表示方法を制御します。", + "label": "壁紙設定" + }, + "select-folder": "壁紙フォルダを選択", + "select-monitor-folder": "ディスプレイ別の壁紙フォルダを選択", + "selector": { + "description": "壁紙を選択します。", + "label": "壁紙選択パネル", + "tooltip": "壁紙選択パネルを開く" + }, + "selector-position": { + "description": "壁紙選択パネルの表示位置を選択します。", + "label": "表示位置" + } + }, + "title": "壁紙" + } + }, + "setup": { + "appearance": { + "header": "外観", + "subheader": "ダークモードとカラースキーム(Matugen またはプリセット)を選択します。" + }, + "customize": { + "header": "自分好みにカスタマイズ", + "subheader": "バーの位置や密度、インターフェースのスケールなどを調整します。" + }, + "wallpaper": { + "choose-dir": "壁紙画像が含まれているフォルダを選択します。", + "dir": { + "browse": "壁紙フォルダを参照", + "description": "壁紙画像が含まれているフォルダを選択します。", + "label": "壁紙フォルダ", + "select-title": "壁紙フォルダを選択" + }, + "header": "壁紙を選択", + "no-dir": "壁紙フォルダが選択されていません", + "no-valid": "有効な画像ファイルが見つかりませんでした: {dir}", + "none-in-dir": "ディレクトリに壁紙が見つかりませんでした", + "preview-error": "画像を読み込めませんでした", + "select-prompt": "以下から壁紙を選択します", + "subheader": "美しい背景で雰囲気を演出しましょう。" + }, + "welcome": { + "note": "まずは基本設定から始めましょう。詳細なオプションは「設定」にあります。" + } + }, + "system": { + "cpu-temperature": "{temp}°C", + "disk-usage": "{percent}%", + "location-display": "{name} ({coordinates})", + "monitor-description": "{model} ({width}x{height} @ {scale}x)", + "no-media-player-detected": "メディアプレーヤーが見つかりません", + "scaling-percentage": "{percentage}%", + "signal-strength": "{signal}%", + "unknown": "不明", + "unknown-app": "不明なアプリ", + "unknown-layout": "不明", + "unknown-version": "不明", + "uptime": "稼働時間: {uptime}", + "user-requested": "ユーザーの要求", + "welcome-back": "おかえりなさい、", + "widget-settings-title": "{widget} の設定" + }, + "toast": { + "airplane-mode": { + "disabled": "無効", + "enabled": "有効", + "title": "機内モード" + }, + "battery": { + "low": "バッテリー残量低下", + "low-desc": "バッテリー残量が {percent}% です。充電器を接続してください。" + }, + "bluetooth": { + "disabled": "無効", + "enabled": "有効" + }, + "clipboard": { + "unavailable": "クリップボード履歴を利用できません", + "unavailable-desc": "cliphist がインストールされていません。クリップボード履歴機能を使用するにはインストールしてください。" + }, + "dark-mode": { + "dark-mode": "ダークモード", + "light-mode": "ライトモード", + "enabled": "有効" + }, + "do-not-disturb": { + "disabled": "おやすみモードを無効化", + "disabled-desc": "すべての通知を表示します。", + "enabled": "おやすみモードを有効化", + "enabled-desc": "通知は履歴に保存されます。" + }, + "internet": { + "limited": "インターネット未接続" + }, + "ipc": { + "powerpanel-deprecated": "PowerPanel は SessionMenu に名称変更されました。この IPC コールはまもなく廃止されます。代わりに \"ipc call sessionMenu toggle\" を使用してください。", + "sidepanel-deprecated": "SidePanel は ControlCenter に名称変更されました。この IPC コールはまもなく廃止されます。代わりに \"ipc call controlCenter toggle\" を使用してください。" + }, + "keep-awake": { + "disabled": "無効", + "enabled": "有効" + }, + "keyboard-layout": { + "changed": "キーボードレイアウトを {layout} に変更しました" + }, + "kofi": { + "opened": "ブラウザで Ko-fi ページを開きました" + }, + "missing-control-center": { + "description": "コントロールセンターウィジェットがバーから削除されました。再度アクセスするには、ウィジェットを追加し直す必要があります。バーを右クリックして開くことも可能です。", + "label": "最後のコントロールセンターが削除されました" + }, + "night-light": { + "disabled": "無効", + "enabled": "有効", + "forced": "強制的に有効化", + "normal": "通常モード", + "not-installed": "wlsunset がインストールされていません" + }, + "noctalia-performance": { + "disabled": "パフォーマンスモード: 無効", + "enabled": "パフォーマンスモード: 有効", + "label": "Noctalia パフォーマンス" + }, + "power-profile": { + "changed": "電源プロファイルを変更しました", + "profile-name": "\"{profile}\"" + }, + "recording": { + "failed-general": "レコーダーがエラーで終了しました。", + "failed-gpu": "gpu-screen-recorder が予期せず終了しました。", + "failed-start": "録画を開始できませんでした", + "no-portals": "デスクトップポータルが実行されていません", + "no-portals-desc": "xdg-desktop-portal およびコンポジタポータル (wlr/hyprland/gnome/kde) を起動してください。", + "not-installed": "gpu-screen-recorder がインストールされていません", + "not-installed-desc": "画面録画機能を使用するには gpu-screen-recorder をインストールしてください。", + "saved": "録画を保存しました", + "started": "録画を開始しました", + "stopping": "録画を停止中…" + }, + "theming-processor-failed": { + "desc-generic": "テンプレートの処理中にエラーが発生しました", + "title-matugen": "Matugen テンプレート処理に失敗しました", + "title-predefined": "プリセット配色の処理に失敗しました" + }, + "vpn": { + "connected": "{name} に接続しました", + "disconnected": "{name} から切断しました" + }, + "wallpaper-colors": { + "disabled": "壁紙配色の生成: 無効", + "enabled": "壁紙配色の生成: 有効", + "label": "壁紙配色の生成", + "not-installed": "Matugen がインストールされていません(壁紙からの色抽出に必要です)" + }, + "wifi": { + "connected": "{ssid} に接続しました", + "disabled": "無効", + "disconnected": "{ssid} から切断しました", + "enabled": "有効" + } + }, + "tooltips": { + "add-widget": "ウィジェットを追加", + "bluetooth-devices": "Bluetooth デバイス", + "brightness-at": "画面の明るさ: {brightness}%\nスクロールして明るさを調整", + "cancel-timer": "タイマーをキャンセル", + "clear-history": "履歴を消去", + "click-to-start-recording": "クリックして録画を開始", + "click-to-stop-recording": "クリックして録画を停止", + "close": "閉じる", + "connect-disconnect-devices": "左クリック: 接続\n右クリック: 登録解除", + "delete-notification": "通知を削除", + "disable-keep-awake": "クリック: スリープ防止モードを無効化\nスクロール: タイムアウトを調整", + "do-not-disturb-disabled": "おやすみモード: 無効", + "do-not-disturb-enabled": "おやすみモード: 有効", + "enable-keep-awake": "クリック: スリープ防止モードを有効化\nスクロール: タイムアウトを調整", + "forget-network": "ネットワーク設定を削除", + "home": "ホーム", + "input-muted": "入力ミュート切り替え", + "keep-awake": "スリープを防止", + "keyboard-layout": "キーボードレイアウト: {layout}", + "manage-vpn": "VPN 接続を管理", + "manage-wifi": "Wi-Fi を管理", + "microphone-volume-at": "マイク音量: {volume}%\nスクロールで音量を調整", + "move-to-center-section": "中央セクションへ移動", + "move-to-left-section": "左セクションへ移動", + "move-to-right-section": "右セクションへ移動", + "next-media": "次のメディア", + "next-month": "翌月", + "night-light-disabled": "夜間モード: 無効\n左クリック: モード切り替え\n右クリック: 設定を開く", + "night-light-enabled": "夜間モード: 有効\n左クリック: モード切り替え\n右クリック: 設定を開く", + "night-light-forced": "夜間モード: 強制有効\n左クリック: モード切り替え\n右クリック: 設定を開く", + "night-light-not-installed": "夜間モードを利用できません\nwlsunset がインストールされていません", + "noctalia-performance-disabled": "Noctalia パフォーマンスモード: 無効\n左クリックで有効化", + "noctalia-performance-enabled": "Noctalia パフォーマンスモード: 有効\n左クリックで無効化", + "open-control-center": "コントロールセンターを開く", + "open-notification-history-disable-dnd": "通知履歴を開く\n右クリック: コンテキストメニューを開く", + "open-notification-history-enable-dnd": "通知履歴を開く\n右クリック: コンテキストメニューを開く", + "open-settings": "設定を開く", + "open-tray-dropdown": "トレイのドロップダウンを開く", + "open-wallpaper-selector": "壁紙選択パネルを開く", + "output-muted": "出力ミュート切り替え", + "pause": "一時停止", + "play": "再生", + "power-profile": "電源プロファイル: {profile}", + "previous-media": "前のメディア", + "previous-month": "前月", + "refresh": "更新", + "refresh-devices": "デバイスを更新", + "refresh-wallhaven": "Wallhaven の検索結果を更新", + "refresh-wallpaper-list": "壁紙リストを更新", + "remove-widget": "ウィジェットを削除", + "screen-recorder-not-installed": "スクリーンレコーダーがインストールされていません", + "session-menu": "セッションメニュー", + "set-power-profile": "電源プロファイルを {profile} に設定", + "start-screen-recording": "画面録画を開始", + "stop-screen-recording": "画面録画を停止", + "switch-to-dark-mode": "ダークモードに切り替え", + "switch-to-light-mode": "ライトモードに切り替え", + "up": "上へ", + "volume-at": "出力音量: {volume}%\nスクロールで音量を調整", + "wallpaper-selector": "左クリック: 壁紙選択パネルを開く\n右クリック: ランダムに壁紙を設定", + "widget-settings": "ウィジェットの設定" + }, + "wallpaper": { + "configure-directory": "画像ファイルが含まれる壁紙フォルダを設定してください。", + "fill-modes": { + "center": "中央に配置する", + "crop": "拡大する", + "fit": "画面に合わせる", + "stretch": "引き伸ばして表示" + }, + "no-match": "一致する項目がありません。", + "no-wallpaper": "壁紙が見つかりません。", + "panel": { + "apply-all-monitors": { + "description": "選択した壁紙をすべてのディスプレイに適用します。", + "label": "全ディスプレイに適用" + }, + "categories": { + "anime": "アニメ", + "general": "一般", + "label": "カテゴリ", + "people": "人物" + }, + "order": { + "asc": "昇順", + "desc": "降順", + "label": "順序" + }, + "purity": { + "all": "すべて", + "label": "コンテンツフィルタ", + "sfw": "SFW(全年齢)", + "sketchy": "Sketchy(際どい)" + }, + "resolution": { + "atleast": "以上", + "exact": "完全一致", + "label": "解像度", + "mode": { + "label": "モード" + } + }, + "search": "検索", + "sorting": { + "date_added": "追加日", + "favorites": "お気に入り数", + "label": "並べ替え", + "random": "ランダム", + "relevance": "関連度", + "toplist": "トップリスト", + "views": "閲覧数" + }, + "source": { + "label": "取得元", + "local": "ローカル", + "wallhaven": "Wallhaven" + }, + "title": "壁紙選択パネル", + "wallhaven-settings": { + "apply": "適用", + "title": "Wallhaven 設定" + } + }, + "transitions": { + "disc": "ディスク", + "fade": "フェード", + "none": "なし", + "random": "ランダム", + "stripes": "ストライプ", + "wipe": "ワイプ" + }, + "try-different-search": "別の検索条件を試してください。", + "unknown": "不明", + "wallhaven": { + "loading": "壁紙を読み込み中...", + "no-results": "壁紙が見つかりません。別の検索条件を試してください。", + "page": "{current} / {total}" + } + }, + "weather": { + "clear-sky": "快晴", + "drizzle": "霧雨", + "fog": "霧", + "mainly-clear": "晴れ", + "overcast": "曇り", + "partly-cloudy": "晴れ時々曇り", + "rain-showers": "雨", + "snow": "雪", + "thunderstorm": "雷雨", + "unknown": "不明" + }, + "widgets": { + "color-picker": { + "apply": "適用", + "cancel": "キャンセル", + "palette": { + "description": "豊富なプリセットカラーから選択します。", + "label": "パレット", + "theme-colors": "テーマのカラーパレット" + }, + "title": "色選択" + }, + "datetime-tokens": { + "ampm": { + "lowercase": "午前/午後(英語表記では小文字)", + "uppercase": "午前/午後(英語表記では大文字)" + }, + "common": { + "12hour-time-minutes": "12時間表記(分を含む)", + "24hour-time-minutes": "24時間表記(分を含む)", + "24hour-time-seconds": "24時間表記(秒を含む)", + "european-date": "ヨーロッパ形式の日付(日.月.年)", + "iso-date": "ISO 形式の日付(年-月-日)", + "us-date": "米国形式の日付(月/日/年)", + "weekday-date": "曜日と日付", + "weekday-month-day": "曜日、月、日" + }, + "day": { + "abbreviated": "曜日の短縮名(例: 火)", + "full": "曜日の完全名(例: 月曜日)", + "leading-zero": "ゼロ埋めありの日付 (01-31)", + "no-leading-zero": "ゼロ埋めなしの日付 (1-31)" + }, + "hour": { + "leading-zero": "ゼロ埋めありの時間 (00-23) - 24時間表記", + "no-leading-zero": "ゼロ埋めなしの時間 (0-23) - 24時間表記" + }, + "minute": { + "leading-zero": "ゼロ埋めありの分 (00-59)", + "no-leading-zero": "ゼロ埋めなしの分 (0-59)" + }, + "month": { + "abbreviated": "月の短縮名(例: 1月/Jan)", + "full": "月の完全名(例: 1月/January)", + "number-leading-zero": "ゼロ埋めありの月 (01-12)", + "number-no-zero": "ゼロ埋めなしの月 (1-12)" + }, + "second": { + "leading-zero": "ゼロ埋めありの秒 (00-59)", + "no-leading-zero": "ゼロ埋めなしの秒 (0-59)" + }, + "timezone": { + "abbreviation": "タイムゾーンの略称" + }, + "year": { + "four-digit": "4桁の西暦", + "two-digit": "2桁の西暦 (00-99)" + } + }, + "file-picker": { + "cancel": "キャンセル", + "search-placeholder": "ファイルとフォルダを検索...", + "select-current": "現在のフォルダを選択する", + "select-file": "ファイルを選択する", + "select-folder": "フォルダを選択する", + "title": "ファイル選択" + }, + "icon-picker": { + "apply": "適用", + "cancel": "キャンセル", + "search": { + "label": "検索" + }, + "title": "アイコン選択" + }, + "text-input": { + "clear": "クリア" + }, + "tooltip": { + "placeholder": "プレースホルダー" + } + }, + "wifi": { + "panel": { + "available-networks": "利用可能なネットワーク", + "connect": "接続", + "connected": "接続済み", + "disabled": "Wi-Fi は無効です", + "disconnect": "切断", + "disconnecting": "切断中...", + "enable-message": "利用可能なネットワークを表示するには Wi-Fi を有効にしてください。", + "enter-password": "パスワードを入力...", + "forget": "削除", + "forget-network": "このネットワーク設定を削除しますか?", + "forgetting": "削除中...", + "known-networks": "保存済みネットワーク", + "no-networks": "ネットワークが見つかりません", + "password": "パスワード", + "saved": "保存済み", + "scan-again": "再スキャン", + "searching": "近くのネットワークを検索中...", + "title": "Wi-Fi" + } + } +} From 8c339fc1997fd4f7a7de87d85c9824440b7f1125 Mon Sep 17 00:00:00 2001 From: ItsLemmy Date: Thu, 27 Nov 2025 08:35:13 -0500 Subject: [PATCH 5/7] i18n: autosorting --- Assets/Translations/de.json | 4 ++-- Assets/Translations/en.json | 4 ++-- Assets/Translations/es.json | 4 ++-- Assets/Translations/fr.json | 4 ++-- Assets/Translations/ja.json | 10 +++++----- Assets/Translations/nl.json | 4 ++-- Assets/Translations/pt.json | 4 ++-- Assets/Translations/ru.json | 4 ++-- Assets/Translations/tr.json | 4 ++-- Assets/Translations/uk-UA.json | 4 ++-- Assets/Translations/zh-CN.json | 4 ++-- 11 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Assets/Translations/de.json b/Assets/Translations/de.json index cc0c03a3..06f72d09 100644 --- a/Assets/Translations/de.json +++ b/Assets/Translations/de.json @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "Dunkler Modus", - "light-mode": "Heller Modus", - "enabled": "Aktiviert" + "enabled": "Aktiviert", + "light-mode": "Heller Modus" }, "do-not-disturb": { "disabled": "'Nicht stören' deaktiviert", diff --git a/Assets/Translations/en.json b/Assets/Translations/en.json index 1de9a487..d9554713 100644 --- a/Assets/Translations/en.json +++ b/Assets/Translations/en.json @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "Dark Mode", - "light-mode": "Light Mode", - "enabled": "Enabled" + "enabled": "Enabled", + "light-mode": "Light Mode" }, "do-not-disturb": { "disabled": "Do Not Disturb disabled", diff --git a/Assets/Translations/es.json b/Assets/Translations/es.json index ad169615..6dd70f57 100644 --- a/Assets/Translations/es.json +++ b/Assets/Translations/es.json @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "Modo oscuro", - "light-mode": "Modo claro", - "enabled": "Activado" + "enabled": "Activado", + "light-mode": "Modo claro" }, "do-not-disturb": { "disabled": "'No molestar' desactivado", diff --git a/Assets/Translations/fr.json b/Assets/Translations/fr.json index 5bf6d3d1..a6c5ddc3 100644 --- a/Assets/Translations/fr.json +++ b/Assets/Translations/fr.json @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "Mode sombre", - "light-mode": "Mode clair", - "enabled": "Activé" + "enabled": "Activé", + "light-mode": "Mode clair" }, "do-not-disturb": { "disabled": "'Ne pas déranger' désactivé", diff --git a/Assets/Translations/ja.json b/Assets/Translations/ja.json index 705d6f3f..8006b775 100644 --- a/Assets/Translations/ja.json +++ b/Assets/Translations/ja.json @@ -400,15 +400,15 @@ "week": "週" }, "timer": { + "countdown": "カウントダウン", "duration": "時間", "hours": "時間", "minutes": "分", - "seconds": "秒", "pause": "一時停止", - "start": "開始", "reset": "リセット", + "seconds": "秒", + "start": "開始", "stopwatch": "ストップウォッチ", - "countdown": "カウントダウン", "timer": "タイマー", "title": "タイマー" }, @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "ダークモード", - "light-mode": "ライトモード", - "enabled": "有効" + "enabled": "有効", + "light-mode": "ライトモード" }, "do-not-disturb": { "disabled": "おやすみモードを無効化", diff --git a/Assets/Translations/nl.json b/Assets/Translations/nl.json index da10e71f..9d55cf78 100644 --- a/Assets/Translations/nl.json +++ b/Assets/Translations/nl.json @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "Donkere modus", - "light-mode": "Lichte modus", - "enabled": "Ingeschakeld" + "enabled": "Ingeschakeld", + "light-mode": "Lichte modus" }, "do-not-disturb": { "disabled": "\"Niet storen\" uitgeschakeld", diff --git a/Assets/Translations/pt.json b/Assets/Translations/pt.json index a65f2839..4e9d2e38 100644 --- a/Assets/Translations/pt.json +++ b/Assets/Translations/pt.json @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "Modo escuro", - "light-mode": "Modo claro", - "enabled": "Ativado" + "enabled": "Ativado", + "light-mode": "Modo claro" }, "do-not-disturb": { "disabled": "'Não perturbe' desativado", diff --git a/Assets/Translations/ru.json b/Assets/Translations/ru.json index 66f72431..e33ce4b0 100644 --- a/Assets/Translations/ru.json +++ b/Assets/Translations/ru.json @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "Тёмный режим", - "light-mode": "Светлый режим", - "enabled": "Включен" + "enabled": "Включен", + "light-mode": "Светлый режим" }, "do-not-disturb": { "disabled": "Режим 'Не беспокоить' отключен", diff --git a/Assets/Translations/tr.json b/Assets/Translations/tr.json index 817a7d9e..5bbb4408 100644 --- a/Assets/Translations/tr.json +++ b/Assets/Translations/tr.json @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "Karanlık mod", - "light-mode": "Aydınlık mod", - "enabled": "Etkin" + "enabled": "Etkin", + "light-mode": "Aydınlık mod" }, "do-not-disturb": { "disabled": "'Rahatsız etme' devre dışı", diff --git a/Assets/Translations/uk-UA.json b/Assets/Translations/uk-UA.json index f4e76130..6f80588d 100644 --- a/Assets/Translations/uk-UA.json +++ b/Assets/Translations/uk-UA.json @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "Темний режим", - "light-mode": "Світлий режим", - "enabled": "Увімкнено" + "enabled": "Увімкнено", + "light-mode": "Світлий режим" }, "do-not-disturb": { "disabled": "'Не турбувати' вимкнено", diff --git a/Assets/Translations/zh-CN.json b/Assets/Translations/zh-CN.json index 7d6c1432..0266d668 100644 --- a/Assets/Translations/zh-CN.json +++ b/Assets/Translations/zh-CN.json @@ -2076,8 +2076,8 @@ }, "dark-mode": { "dark-mode": "深色模式", - "light-mode": "浅色模式", - "enabled": "已启用" + "enabled": "已启用", + "light-mode": "浅色模式" }, "do-not-disturb": { "disabled": "'勿扰模式'已禁用", From fd17032fe5af3c2ec26294d5589773057470a400 Mon Sep 17 00:00:00 2001 From: ItsLemmy Date: Thu, 27 Nov 2025 08:45:42 -0500 Subject: [PATCH 6/7] ShortcutCard: fixed typo introduced by #882 --- Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml b/Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml index 0d39665c..37f80164 100644 --- a/Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml +++ b/Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml @@ -14,7 +14,7 @@ RowLayout { NBox { Layout.fillWidth: true Layout.preferredHeight: root.shortcutsHeight - visible: Settings.datga.controlCenter.shortcuts.left.length > 0 + visible: Settings.data.controlCenter.shortcuts.left.length > 0 RowLayout { id: leftContent From 2fe915e3bc476ab045c6639857a693f32dd215ac Mon Sep 17 00:00:00 2001 From: ItsLemmy Date: Thu, 27 Nov 2025 09:00:19 -0500 Subject: [PATCH 7/7] NSectionEditor/ControlCenter: Allow up to 10 widgets if using a single side. --- Modules/Panels/Settings/Tabs/ControlCenterTab.qml | 4 ++-- Services/Compositor/NiriService.qml | 1 - Widgets/NSectionEditor.qml | 6 +++--- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Modules/Panels/Settings/Tabs/ControlCenterTab.qml b/Modules/Panels/Settings/Tabs/ControlCenterTab.qml index e9b26674..aa2fd4b4 100644 --- a/Modules/Panels/Settings/Tabs/ControlCenterTab.qml +++ b/Modules/Panels/Settings/Tabs/ControlCenterTab.qml @@ -249,7 +249,7 @@ ColumnLayout { sectionName: I18n.tr("settings.control-center.shortcuts.sectionLeft") sectionId: "left" settingsDialogComponent: Qt.resolvedUrl(Quickshell.shellDir + "/Modules/Panels/Settings/ControlCenter/ControlCenterWidgetSettingsDialog.qml") - maxWidgets: 5 + maxWidgets: Settings.data.controlCenter.shortcuts["right"].length > 5 ? 0 : (Settings.data.controlCenter.shortcuts["right"].length > 0 ? 5 : 10) widgetRegistry: ControlCenterWidgetRegistry widgetModel: Settings.data.controlCenter.shortcuts["left"] availableWidgets: availableWidgets @@ -266,7 +266,7 @@ ColumnLayout { sectionName: I18n.tr("settings.control-center.shortcuts.sectionRight") sectionId: "right" settingsDialogComponent: Qt.resolvedUrl(Quickshell.shellDir + "/Modules/Panels/Settings/ControlCenter/ControlCenterWidgetSettingsDialog.qml") - maxWidgets: 5 + maxWidgets: Settings.data.controlCenter.shortcuts["left"].length > 5 ? 0 : (Settings.data.controlCenter.shortcuts["left"].length > 0 ? 5 : 10) widgetRegistry: ControlCenterWidgetRegistry widgetModel: Settings.data.controlCenter.shortcuts["right"] availableWidgets: availableWidgets diff --git a/Services/Compositor/NiriService.qml b/Services/Compositor/NiriService.qml index 314352f3..bf9f9b1d 100644 --- a/Services/Compositor/NiriService.qml +++ b/Services/Compositor/NiriService.qml @@ -153,7 +153,6 @@ Item { } else { Logger.e("NiriService", "Niri returned an error:", data.Err, line); } - } catch (e) { Logger.e("NiriService", "Failed to parse data from socket:", e, line); return; diff --git a/Widgets/NSectionEditor.qml b/Widgets/NSectionEditor.qml index 06098b85..19f20c0b 100644 --- a/Widgets/NSectionEditor.qml +++ b/Widgets/NSectionEditor.qml @@ -19,7 +19,7 @@ NBox { property string settingsDialogComponent: "BarWidgetSettingsDialog.qml" readonly property real miniButtonSize: Style.baseWidgetSize * 0.65 - readonly property bool isAtMaxCapacity: maxWidgets > 0 && widgetModel.length >= maxWidgets + readonly property bool isAtMaxCapacity: maxWidgets >= 0 && widgetModel.length >= maxWidgets signal addWidget(string widgetId, string section) signal removeWidget(string section, int index) @@ -93,8 +93,8 @@ NBox { // Widget count indicator (when max is set) NText { - visible: root.maxWidgets > 0 - text: "(" + widgetModel.length + "/" + root.maxWidgets + ")" + visible: root.maxWidgets >= 0 + text: root.maxWidgets === 0 ? "(LOCKED)" : "(" + widgetModel.length + "/" + root.maxWidgets + ")" pointSize: Style.fontSizeS color: root.isAtMaxCapacity ? Color.mError : Color.mOnSurfaceVariant Layout.alignment: Qt.AlignVCenter