From b5ffdcf6d4503a9fe35c4750675d3e98dd6f91d0 Mon Sep 17 00:00:00 2001 From: Lemmy Date: Sun, 19 Jul 2026 00:15:32 -0400 Subject: [PATCH] chore(i18n): push/pull --- eyecare/translations/en.json | 37 ++- lyrics/translations/en.json | 366 ++++++++++++++++--------- nextboot-selector/translations/en.json | 44 ++- nix-monitor/translations/en.json | 32 +-- web-launcher/translations/en.json | 44 +-- 5 files changed, 333 insertions(+), 190 deletions(-) diff --git a/eyecare/translations/en.json b/eyecare/translations/en.json index 58a3bc4..c6a6bad 100644 --- a/eyecare/translations/en.json +++ b/eyecare/translations/en.json @@ -1,15 +1,26 @@ { - "settings.eyecare-active-duration.label": "Active Duration", - "settings.eyecare-active-duration.description": "Active screen time before triggering a break (minutes)", - "settings.eyecare-break-duration.label": "Break Duration", - "settings.eyecare-break-duration.description": "Required duration for eye-care breaks (seconds)", - "settings.eyecare-sound.label": "Enable Audio Feedback", - "settings.eyecare-sound.description": "Play notification sound when breaks start or finish", - "settings.eyecare-notifications.label": "Enable Notifications", - "settings.eyecare-notifications.description": "Show system-level notifications for reminders", - - "notifications.eyecare-break-title": "Time for a break", - "notifications.eyecare-break-body": "Focus on an object 20 feet away for 20 seconds.", - "notifications.eyecare-break-finished-title": "Break finished", - "notifications.eyecare-break-finished-body": "Your eyes are rested. You can return to your screen." + "notifications": { + "eyecare-break-body": "Focus on an object 20 feet away for 20 seconds.", + "eyecare-break-finished-body": "Your eyes are rested. You can return to your screen.", + "eyecare-break-finished-title": "Break finished", + "eyecare-break-title": "Time for a break" + }, + "settings": { + "eyecare-active-duration": { + "description": "Active screen time before triggering a break (minutes)", + "label": "Active Duration" + }, + "eyecare-break-duration": { + "description": "Required duration for eye-care breaks (seconds)", + "label": "Break Duration" + }, + "eyecare-notifications": { + "description": "Show system-level notifications for reminders", + "label": "Enable Notifications" + }, + "eyecare-sound": { + "description": "Play notification sound when breaks start or finish", + "label": "Enable Audio Feedback" + } + } } diff --git a/lyrics/translations/en.json b/lyrics/translations/en.json index a827d74..c772d6c 100644 --- a/lyrics/translations/en.json +++ b/lyrics/translations/en.json @@ -1,173 +1,289 @@ { - "title": "Lyrics", - "no_lyrics": "♪ No lyrics available", - "intro": "Intro", "instrumental": "Instrumental", - "source_label": "Lyrics source", + "intro": "Intro", + "no_lyrics": "♪ No lyrics available", "settings": { - "player_allowlist": { - "label": "Player allowlist", - "description": "Only use matching MPRIS players. Leave empty to allow all. Supports * wildcards and matches player names or instances." + "active_color": { + "description": "Color used for the current and already-sung lyric characters. Defaults to the interface text color.", + "label": "Active lyric color" }, - "player_blocklist": { - "label": "Player blocklist", - "description": "Ignore matching MPRIS players after applying the allowlist. Supports * wildcards, for example chromium* or firefox*." + "animation": { + "description": "How lyrics animate on line change.", + "label": "Animation", + "options": { + "blink": "Blink reveal", + "cascade": "Character cascade", + "fade": "Fade only", + "karaoke": "Karaoke gradient + fade", + "none": "No animation", + "pulse": "Pulse fade", + "typewriter": "Typewriter reveal", + "wave": "Character wave reveal" + } + }, + "apple_developer_token": { + "description": "Developer token used for Apple Music catalog and lyrics requests.", + "label": "Apple Music developer token" + }, + "apple_storefront": { + "description": "Apple Music storefront code, for example us, cn, jp, or hk.", + "label": "Apple Music storefront" + }, + "apple_user_token": { + "description": "Optional Music-User-Token for lyrics requiring a user subscription.", + "label": "Apple Music user token" + }, + "char_width": { + "description": "Approximate pixel width per character, used to fix the widget width and clip scrolling.", + "label": "Character width (px)" + }, + "cover_radius": { + "description": "Corner radius used by the custom cover shape.", + "label": "Cover corner radius" + }, + "cover_shape": { + "description": "Shape of the album artwork.", + "label": "Cover shape", + "options": { + "circle": "Circle", + "custom": "Custom radius", + "rounded": "Rounded square", + "square": "Square" + } + }, + "cover_size": { + "description": "Album artwork width and height in logical pixels.", + "label": "Cover size" + }, + "cue_font_family": { + "description": "Installed font family used only for intro and interlude characters in custom-font mode.", + "label": "Intro/interlude font" + }, + "cue_font_mode": { + "description": "Choose whether intro and interlude characters follow Noctalia's interface font or use another installed font.", + "label": "Intro/interlude font mode", + "options": { + "custom": "Custom font", + "follow": "Follow interface font" + } + }, + "cue_text": { + "description": "Text or characters highlighted during intros and interludes.", + "label": "Intro/interlude characters" + }, + "custom_json_field": { + "description": "Lyrics field in a JSON response, with dotted paths such as data.lyric. Leave empty for plain LRC.", + "label": "JSON lyrics field" + }, + "custom_url": { + "description": "Supports {title}, {artist}, {album}, and {duration} placeholders. Text responses may contain LRC directly.", + "label": "Custom endpoint URL" + }, + "display_mode": { + "description": "Always show lyrics, always show track information, or allow left-click switching.", + "label": "Display mode", + "options": { + "lyrics": "Lyrics only", + "toggle": "Click to switch", + "track": "Track title and artist only" + } + }, + "double_line": { + "description": "Show translation or romanization below the current original lyric.", + "label": "Double-line lyrics" + }, + "double_line_auto_fit": { + "description": "Reduce both font sizes and their gap on horizontal bars so capsule backgrounds do not clip the second line. Vertical bars are unchanged.", + "label": "Compact double lines" + }, + "double_line_height_budget": { + "description": "Approximate total text height available on a horizontal bar. Lower values make both lines more compact.", + "label": "Double-line height budget" + }, + "font_family": { + "description": "Installed font family for all lyrics. Leave empty to follow Noctalia.", + "label": "Lyrics font family" + }, + "font_style": { + "description": "Text baseline style supported by the Noctalia renderer.", + "label": "Font layout style", + "options": { + "fixed": "Fixed text height", + "ink_centered": "Ink centered", + "normal": "Normal" + } + }, + "font_weight": { + "description": "Weight used for primary lyrics.", + "label": "Lyrics font weight", + "options": { + "bold": "Bold", + "heavy": "Heavy", + "light": "Light", + "medium": "Medium", + "normal": "Normal", + "semibold": "Semibold", + "thin": "Thin" + } }, "glyph": { "label": "Glyph" }, - "show_artist": { - "label": "Show artist" + "gradient": { + "description": "Light up each character as the song progresses (karaoke style).", + "label": "Per-character gradient" }, "hide_when_paused": { "label": "Hide when paused" }, - "show_cover": { - "label": "Show album cover", - "description": "Display the song's album art next to the lyrics." - }, - "active_color": { - "label": "Active lyric color", - "description": "Color used for the current and already-sung lyric characters. Defaults to the interface text color." - }, "inactive_color": { - "label": "Inactive lyric color", - "description": "Color used for upcoming lyrics, paused playback, and secondary lines." + "description": "Color used for upcoming lyrics, paused playback, and secondary lines.", + "label": "Inactive lyric color" + }, + "karaoke_enabled": { + "description": "Use source character timings or simulated line progress for per-character highlighting.", + "label": "Per-character karaoke" + }, + "line_gap": { + "description": "Spacing between original, translation, romanization, and context lines.", + "label": "Line gap" + }, + "lyrics_offset_ms": { + "description": "Positive values show lyrics earlier; negative values show them later.", + "label": "Lyrics offset (ms)" }, "lyrics_source": { - "label": "Lyrics source", "description": "Choose a preset source, local-player lyrics, a custom endpoint, or external push protocol.", + "label": "Lyrics source", "options": { - "auto": "Automatic fallback", - "lrclib": "LRCLIB", - "netease": "NetEase Music", - "qqmusic": "QQ Music", - "kugou": "Kugou Music", - "qishui": "Qishui Music", "apple_music": "Apple Music", - "spotify": "Spotify", - "musixmatch": "Musixmatch", - "mpris": "Local player (MPRIS)", + "auto": "Automatic fallback", "custom": "Custom HTTP endpoint", - "external": "External IPC push" + "external": "External IPC push", + "kugou": "Kugou Music", + "lrclib": "LRCLIB", + "mpris": "Local player (MPRIS)", + "musixmatch": "Musixmatch", + "netease": "NetEase Music (public API)", + "qishui": "Qishui Music", + "qqmusic": "QQ Music", + "spotify": "Spotify" } }, - "lyrics_sources": { "label": "Automatic source order", "description": "Source IDs tried from top to bottom: lrclib, netease, qqmusic, kugou, qishui, apple_music, spotify, musixmatch, mpris, or custom." }, - "translation_language": { - "label": "Translation language", "description": "Preferred translated-lyric language when supported by the source.", - "options": { "zh-hans": "Simplified Chinese", "zh-hant": "Traditional Chinese", "en": "English", "ja": "Japanese", "ko": "Korean" } + "lyrics_sources": { + "description": "Source IDs tried from top to bottom: lrclib, netease, qqmusic, kugou, qishui, apple_music, spotify, musixmatch, mpris, or custom.", + "label": "Automatic source order" }, - "spotify_sp_dc": { "label": "Spotify sp_dc", "description": "Optional manually supplied Spotify web cookie. Stored as a normal plugin setting; never written to logs." }, - "spotify_access_token": { "label": "Spotify access token", "description": "Optional manually supplied Spotify access token. Takes priority over sp_dc." }, - "apple_developer_token": { "label": "Apple Music developer token", "description": "Developer token used for Apple Music catalog and lyrics requests." }, - "apple_user_token": { "label": "Apple Music user token", "description": "Optional Music-User-Token for lyrics requiring a user subscription." }, - "apple_storefront": { "label": "Apple Music storefront", "description": "Apple Music storefront code, for example us, cn, jp, or hk." }, - "musixmatch_token": { "label": "Musixmatch user token", "description": "User token for the Musixmatch desktop subtitle endpoint." }, - "qishui_api_url": { "label": "Qishui API URL", "description": "Endpoint template supporting {title}, {artist}, and {album}. Required because public Qishui endpoints vary." }, - "qishui_token": { "label": "Qishui token", "description": "Optional Bearer token sent only to the configured Qishui endpoint." }, - "custom_url": { - "label": "Custom endpoint URL", - "description": "Supports {title}, {artist}, {album}, and {duration} placeholders. Text responses may contain LRC directly." + "marquee_speed": { + "description": "Pixels per second for long-line scrolling.", + "label": "Marquee speed" }, - "custom_json_field": { - "label": "JSON lyrics field", - "description": "Lyrics field in a JSON response, with dotted paths such as data.lyric. Leave empty for plain LRC." + "max_chars": { + "description": "Visible width before a long lyric line scrolls (marquee).", + "label": "Max characters" }, - "cue_text": { - "label": "Intro/interlude characters", - "description": "Text or characters highlighted during intros and interludes." + "max_lines": { + "description": "Maximum lyric lines to show at once.", + "label": "Max lines" }, - "cue_font_mode": { - "label": "Intro/interlude font mode", - "description": "Choose whether intro and interlude characters follow Noctalia's interface font or use another installed font.", - "options": { - "follow": "Follow interface font", - "custom": "Custom font" - } + "musixmatch_token": { + "description": "User token for the Musixmatch desktop subtitle endpoint.", + "label": "Musixmatch user token" }, - "cue_font_family": { - "label": "Intro/interlude font", - "description": "Installed font family used only for intro and interlude characters in custom-font mode." + "padding_left": { + "description": "Empty space before the widget content.", + "label": "Left padding" }, - "lyrics_offset_ms": { "label": "Lyrics offset (ms)", "description": "Positive values show lyrics earlier; negative values show them later." }, - "poll_interval_ms": { "label": "Player polling interval (ms)", "description": "How often the service refreshes MPRIS metadata and playback position." }, - "display_mode": { - "label": "Display mode", "description": "Always show lyrics, always show track information, or allow left-click switching.", - "options": { "toggle": "Click to switch", "lyrics": "Lyrics only", "track": "Track title and artist only" } + "padding_right": { + "description": "Empty space after the widget content.", + "label": "Right padding" }, - "double_line": { "label": "Double-line lyrics", "description": "Show translation or romanization below the current original lyric." }, - "double_line_auto_fit": { "label": "Compact double lines", "description": "Reduce both font sizes and their gap on horizontal bars so capsule backgrounds do not clip the second line. Vertical bars are unchanged." }, - "double_line_height_budget": { "label": "Double-line height budget", "description": "Approximate total text height available on a horizontal bar. Lower values make both lines more compact." }, - "show_translation": { "label": "Show translation", "description": "Allow translated lyrics to appear on the secondary line." }, - "show_romanization": { "label": "Show romanization", "description": "Allow romanized or transliterated lyrics to appear on the secondary line." }, - "secondary_line_mode": { - "label": "Secondary line content", "description": "Choose which additional lyric layer is preferred.", - "options": { "translation_first": "Translation, then romanization", "romanization_first": "Romanization, then translation", "translation": "Translation only", "romanization": "Romanization only" } + "player_allowlist": { + "description": "Only use matching MPRIS player names or instances. Supports * wildcards; leave empty to allow all players.", + "label": "Allowed players" + }, + "player_blocklist": { + "description": "Ignore matching MPRIS player names or instances. Supports * wildcards and takes priority over the allowlist.", + "label": "Blocked players" + }, + "poll_interval_ms": { + "description": "How often the service refreshes MPRIS metadata and playback position.", + "label": "Player polling interval (ms)" + }, + "primary_font_size": { + "description": "Font size for the original lyric line. Zero follows Noctalia.", + "label": "Primary lyric font size" + }, + "qishui_api_url": { + "description": "Endpoint template supporting {title}, {artist}, and {album}. Required because public Qishui endpoints vary.", + "label": "Qishui API URL" + }, + "qishui_token": { + "description": "Optional Bearer token sent only to the configured Qishui endpoint.", + "label": "Qishui token" }, - "karaoke_enabled": { "label": "Per-character karaoke", "description": "Use source character timings or simulated line progress for per-character highlighting." }, "scroll_mode": { - "label": "Scroll mode", "description": "How lyrics scroll in the bar.", + "label": "Scroll mode", "options": { "auto": "Auto (synced)", "marquee": "Marquee", "static": "Static" } }, - "marquee_speed": { - "label": "Marquee speed", - "description": "Pixels per second for long-line scrolling." + "secondary_color": { + "description": "Color used for translation and romanization lines.", + "label": "Secondary lyric color" }, - "max_lines": { - "label": "Max lines", - "description": "Maximum lyric lines to show at once." + "secondary_font_size": { + "description": "Font size for translations and romanization.", + "label": "Secondary font size" }, - "gradient": { - "label": "Per-character gradient", - "description": "Light up each character as the song progresses (karaoke style)." - }, - "animation": { - "label": "Animation", - "description": "How lyrics animate on line change.", + "secondary_line_mode": { + "description": "Choose which additional lyric layer is preferred.", + "label": "Secondary line content", "options": { - "karaoke": "Karaoke gradient + fade", - "cascade": "Character cascade", - "wave": "Character wave reveal", - "fade": "Fade only", - "typewriter": "Typewriter reveal", - "pulse": "Pulse fade", - "blink": "Blink reveal", - "none": "No animation" + "romanization": "Romanization only", + "romanization_first": "Romanization, then translation", + "translation": "Translation only", + "translation_first": "Translation, then romanization" } }, - "max_chars": { - "label": "Max characters", - "description": "Visible width before a long lyric line scrolls (marquee)." + "show_artist": { + "label": "Show artist" }, - "char_width": { - "label": "Character width (px)", - "description": "Approximate pixel width per character, used to fix the widget width and clip scrolling." + "show_cover": { + "description": "Display the song's album art next to the lyrics.", + "label": "Show album cover" }, - "font_family": { "label": "Lyrics font family", "description": "Installed font family for all lyrics. Leave empty to follow Noctalia." }, - "primary_font_size": { "label": "Primary lyric font size", "description": "Font size for the original lyric line. Zero follows Noctalia." }, - "font_weight": { - "label": "Lyrics font weight", "description": "Weight used for primary lyrics.", - "options": { "thin": "Thin", "light": "Light", "normal": "Normal", "medium": "Medium", "semibold": "Semibold", "bold": "Bold", "heavy": "Heavy" } + "show_romanization": { + "description": "Allow romanized or transliterated lyrics to appear on the secondary line.", + "label": "Show romanization" }, - "secondary_font_size": { "label": "Secondary font size", "description": "Font size for translations and romanization." }, - "font_style": { - "label": "Font layout style", "description": "Text baseline style supported by the Noctalia renderer.", - "options": { "normal": "Normal", "fixed": "Fixed text height", "ink_centered": "Ink centered" } + "show_translation": { + "description": "Allow translated lyrics to appear on the secondary line.", + "label": "Show translation" }, - "line_gap": { "label": "Line gap", "description": "Spacing between original, translation, romanization, and context lines." }, - "padding_left": { "label": "Left padding", "description": "Empty space before the widget content." }, - "padding_right": { "label": "Right padding", "description": "Empty space after the widget content." }, - "cover_shape": { - "label": "Cover shape", "description": "Shape of the album artwork.", - "options": { "circle": "Circle", "rounded": "Rounded square", "square": "Square", "custom": "Custom radius" } + "spotify_access_token": { + "description": "Optional manually supplied Spotify access token. Takes priority over sp_dc.", + "label": "Spotify access token" }, - "cover_radius": { "label": "Cover corner radius", "description": "Corner radius used by the custom cover shape." }, - "cover_size": { "label": "Cover size", "description": "Album artwork width and height in logical pixels." }, - "secondary_color": { "label": "Secondary lyric color", "description": "Color used for translation and romanization lines." } - } + "spotify_sp_dc": { + "description": "Optional manually supplied Spotify web cookie. Stored as a normal plugin setting; never written to logs.", + "label": "Spotify sp_dc" + }, + "translation_language": { + "description": "Preferred translated-lyric language when supported by the source.", + "label": "Translation language", + "options": { + "en": "English", + "ja": "Japanese", + "ko": "Korean", + "zh-hans": "Simplified Chinese", + "zh-hant": "Traditional Chinese" + } + } + }, + "source_label": "Lyrics source", + "title": "Lyrics" } diff --git a/nextboot-selector/translations/en.json b/nextboot-selector/translations/en.json index a0cd4ea..2ca50bf 100644 --- a/nextboot-selector/translations/en.json +++ b/nextboot-selector/translations/en.json @@ -1,16 +1,32 @@ { - "panel.title": "Next Boot Selector", - "panel.reset": "Reset", - "setting.excluded_keywords.label": "Excluded keywords", - "setting.excluded_keywords.description": "Keywords to exclude entries (case insensitive)", - "setting.privilege_command.label": "Privilege command", - "setting.privilege_command.description": "Command to escalate the privilege of the efibootmgr command", - "setting.close_on_select.label": "Close on select", - "setting.close_on_select.description": "Whether to close the panel after selecting an entry", - "setting.reboot_on_select.label": "Reboot on select", - "setting.reboot_on_select.description": "Whether to automatically reboot after selecting an entry", - "setting.reboot_command.label": "Reboot command", - "setting.reboot_command.description": "Command to be executed when reboot on select is enabled", - "notification.failed_to_set_next_boot": "Failed to set next boot", - "notification.timed_out": "Timed out" + "notification": { + "failed_to_set_next_boot": "Failed to set next boot", + "timed_out": "Timed out" + }, + "panel": { + "reset": "Reset", + "title": "Next Boot Selector" + }, + "setting": { + "close_on_select": { + "description": "Whether to close the panel after selecting an entry", + "label": "Close on select" + }, + "excluded_keywords": { + "description": "Keywords to exclude entries (case insensitive)", + "label": "Excluded keywords" + }, + "privilege_command": { + "description": "Command to escalate the privilege of the efibootmgr command", + "label": "Privilege command" + }, + "reboot_command": { + "description": "Command to be executed when reboot on select is enabled", + "label": "Reboot command" + }, + "reboot_on_select": { + "description": "Whether to automatically reboot after selecting an entry", + "label": "Reboot on select" + } + } } diff --git a/nix-monitor/translations/en.json b/nix-monitor/translations/en.json index 74140ec..9b7894e 100644 --- a/nix-monitor/translations/en.json +++ b/nix-monitor/translations/en.json @@ -16,12 +16,12 @@ "panel": { "cancel": "Cancel", "check": "Check", - "optimize": "Optimize", "clean": "Clean", "closure_size": "Closure size", "current": "Current", "last_checked": "Last checked", "local": "Local", + "optimize": "Optimize", "remote": "Remote", "store_size": "Store size", "title": "Nix Monitor", @@ -32,14 +32,6 @@ "description": "Which nixpkgs branch to use", "label": "Branch" }, - "update_command": { - "description": "Command to run when clicking Update button", - "label": "Update command" - }, - "optimize_command": { - "label": "Optimize command", - "description": "Command to run when clicking Optimize button" - }, "clean_command": { "description": "Command to run when clicking Clean button", "label": "Clean command" @@ -48,17 +40,21 @@ "description": "Add 'Press enter to exit' on the terminal window", "label": "Close on press Enter" }, + "hide_clean_button": { + "description": "Whether to hide the clean button on the panel", + "label": "Hide clean button" + }, + "hide_optimize_button": { + "description": "Whether to hide the optimize button on the panel", + "label": "Hide optimize button" + }, "hide_update_button": { "description": "Whether to hide the update button on the panel", "label": "Hide update button" }, - "hide_optimize_button": { - "label": "Hide optimize button", - "description": "Whether to hide the optimize button on the panel" - }, - "hide_clean_button": { - "description": "Whether to hide the clean button on the panel", - "label": "Hide clean button" + "optimize_command": { + "description": "Command to run when clicking Optimize button", + "label": "Optimize command" }, "option": { "branch": { @@ -105,6 +101,10 @@ "description": "How often to check for updates (in minutes)", "label": "Update check interval" }, + "update_command": { + "description": "Command to run when clicking Update button", + "label": "Update command" + }, "widget": { "checking_color": { "label": "Checking color" diff --git a/web-launcher/translations/en.json b/web-launcher/translations/en.json index c7d1ae6..b0500f6 100644 --- a/web-launcher/translations/en.json +++ b/web-launcher/translations/en.json @@ -1,27 +1,27 @@ { - "settings": { - "links": { - "label": "Links", - "description": "Format: Name|https://url" - }, - "command": { - "label": "Command", - "description": "Command that launches the website. Example: \"firefox --new-window\"" - }, - "notify": { - "label": "Notify", - "description": "Notify when opening link." - }, - "icon_provider": { - "label": "Icon Provider", - "description": "Icon download source.", - "google": "Google", - "duckduckgo": "DuckDuckGo", - "direct": "Site's own favicon.ico" - } + "notify": { + "message": "Opening {name}", + "title": "Websites" + }, + "settings": { + "command": { + "description": "Command that launches the website. Example: \"firefox --new-window\"", + "label": "Command" + }, + "icon_provider": { + "description": "Icon download source.", + "direct": "Site's own favicon.ico", + "duckduckgo": "DuckDuckGo", + "google": "Google", + "label": "Icon Provider" + }, + "links": { + "description": "Format: Name|https://url", + "label": "Links" }, "notify": { - "title": "Websites", - "message": "Opening {name}" + "description": "Notify when opening link.", + "label": "Notify" } + } }