diff --git a/Assets/Translations/de.json b/Assets/Translations/de.json index bf1869e7..a8cdfa5d 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 1982647e..d51313ea 100644 --- a/Assets/Translations/en.json +++ b/Assets/Translations/en.json @@ -2082,8 +2082,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 510c4c7f..02cf048a 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 ea22a1da..b0ac8558 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 abb93204..3f598d07 100644 --- a/Assets/Translations/ja.json +++ b/Assets/Translations/ja.json @@ -127,6 +127,7 @@ "description": "ライブラリからアイコンを選択します。", "label": "アイコン" }, +<<<<<<< HEAD "left-click": { "description": "ボタンを左クリックした際に実行するコマンド。", "label": "左クリック", @@ -178,12 +179,45 @@ "wheel-up": { "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": "ツールチップ" +>>>>>>> 2fe915e3bc476ab045c6639857a693f32dd215ac } }, "dialog": { "apply": "適用", "cancel": "キャンセル" }, +<<<<<<< HEAD "keyboard-layout": { "display-mode": { "description": "値の表示方法を選択します。", @@ -755,10 +789,580 @@ }, "tooltip": { "action": "クリックして Wi-Fi 接続を管理する" +======= + "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": "ビデオソース" +>>>>>>> 2fe915e3bc476ab045c6639857a693f32dd215ac } } }, "session-menu": { +<<<<<<< HEAD "action-in-seconds": "{seconds} 秒後に {action}...", "hibernate": "ハイバネート(休止状態)", "lock": "ロック", @@ -2411,4 +3015,659 @@ "title": "Wi-Fi" } } - } \ No newline at end of file + } +======= + "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": "ダークモード", + "enabled": "有効", + "light-mode": "ライトモード" + }, + "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" + } + } +} +>>>>>>> 2fe915e3bc476ab045c6639857a693f32dd215ac diff --git a/Assets/Translations/nl.json b/Assets/Translations/nl.json index 16389f55..cb74d85a 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 f194c973..3199a63c 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 31b383e5..2b6b21dd 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 56d9c081..1519649e 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 d04268b8..3a02d6cf 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 39c4dc29..6526cf2e 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": "'勿扰模式'已禁用", diff --git a/Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml b/Modules/Panels/ControlCenter/Cards/ShortcutsCard.qml index 2bb973f1..37f80164 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.data.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 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 27960aac..bf9f9b1d 100644 --- a/Services/Compositor/NiriService.qml +++ b/Services/Compositor/NiriService.qml @@ -27,155 +27,153 @@ 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); } - } - - // Notify CompositorService (it will emit displayScalesChanged) - if (CompositorService && CompositorService.onDisplayScalesUpdated) { - CompositorService.onDisplayScalesUpdated(scales); + } else { + Logger.e("NiriService", "Niri returned an error:", data.Err, line); } } 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) { 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 { 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