mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
refactor(i18n): split locale files into per-namespace modules (Phase K) (#688)
Each src/locales/<lang>.ts (~1800 LOC) becomes a folder src/locales/<lang>/ with one module per i18n namespace (44 each) plus an index.ts barrel that reassembles <lang>Translation in the original key order. Mechanical, script-driven split with a JSON round-trip check: every locale object is byte-identical to its pre-split form. i18n.ts is unchanged — './locales/<lang>' now resolves to the folder index. The per-namespace settings.ts files land ~440-460 LOC; a single i18n namespace is the natural, non-arbitrary split unit for a flat string table, so they are intentionally left whole.
This commit is contained in:
committed by
GitHub
parent
ec112922a2
commit
2409a1fec8
@@ -0,0 +1,115 @@
|
||||
export const help = {
|
||||
title: 'Help',
|
||||
searchPlaceholder: 'Search Help…',
|
||||
noResults: 'No matching topics. Try a different search term.',
|
||||
// ── Section 1: Getting Started ─────────────────────────────────────────
|
||||
s1: 'Getting Started',
|
||||
q1: 'Which servers are compatible?',
|
||||
a1: 'Psysonic is built first and foremost for Navidrome and is fully Subsonic-compatible — Gonic, Airsonic, LMS and other Subsonic-API servers also work. Some advanced features (ratings, smart playlists, magic-string sharing, user management) require Navidrome.',
|
||||
q2: 'How do I add a server?',
|
||||
a2: 'Settings → Servers → Add Server. Enter the URL (e.g. http://192.168.1.100:4533), username, and password. Psysonic tests the connection before saving — nothing is stored if it fails. You can add as many servers as you like and switch between them in the header at any time; only one is active at a time.',
|
||||
q3: 'Quick tour of the UI?',
|
||||
a3: 'Sidebar (left) for navigation, Mainstage / pages in the middle, Player Bar at the bottom, and the Queue Panel on the right (toggle from the top-right header next to the Now-Playing indicator). The search bar at the top searches your whole library; "Now Playing" shows what other users on the same Navidrome server are listening to right now.',
|
||||
// ── Section 2: Playback & Queue ────────────────────────────────────────
|
||||
s2: 'Playback & Queue',
|
||||
q4: 'How do I use the queue?',
|
||||
a4: 'Open the Queue Panel from the top-right header. Drag rows to reorder them, drop them outside to remove, or use the queue toolbar to shuffle, save the queue as a playlist, or jump to a track. Drag rows out of the panel to drop them somewhere else as a transfer.',
|
||||
q5: 'Gapless vs Crossfade — what is the difference?',
|
||||
a5: 'Gapless pre-buffers the next track so there is zero silence between songs (best for live albums and DJ mixes). Crossfade fades the current track out while the next fades in over 1–10 s (best for shuffled mixes). They are mutually exclusive — enabling one disables the other. Configure both in Settings → Audio.',
|
||||
q6: 'What is Infinite Queue?',
|
||||
a6: 'When the queue runs out and Repeat is off, Psysonic silently appends similar / random tracks from your library so playback never stops. Auto-added tracks appear below a "— Added automatically —" divider. Toggle it with the infinity icon in the queue header; restrict auto-additions to a genre in Settings → Queue.',
|
||||
q7: 'Multi-select and Shift-click range selection?',
|
||||
a7: 'Activate "Select" on Albums / New Releases / Random Albums / Playlists. Click an item to toggle it, then hold Shift and click another item to select everything between them in the visible order. Shift-clicks extend from the most recently clicked anchor. The toolbar above the grid offers bulk actions (queue, download, delete, etc.).',
|
||||
q8: 'Keyboard shortcuts and global hotkeys?',
|
||||
a8: 'Default in-app keys: Space = Play / Pause, Esc = close fullscreen / modals, F1 = shortcuts cheat-sheet. Settings → Input lets you rebind every in-app action (also as chords like Ctrl+Shift+P) and set system-wide global shortcuts that work even when Psysonic is in the background or minimized. Media keys (Play/Pause, Next, Previous) work on all platforms.',
|
||||
// ── Section 3: Audio Tools ─────────────────────────────────────────────
|
||||
s3: 'Audio Tools',
|
||||
q9: 'Replay Gain modes?',
|
||||
a9: 'Settings → Audio → Replay Gain. Track mode normalises every song to a target level. Album mode preserves the loudness curve within an album. Auto mode picks Track or Album based on whether the queue is from a single album. Tracks without Replay Gain tags fall back to a configurable preamp.',
|
||||
q10: 'What is Smart Loudness Normalization (LUFS)?',
|
||||
a10: 'A modern alternative to Replay Gain in Settings → Audio. Psysonic analyses each track to LUFS / EBU R128 and stores the result, so volume is consistent across your whole library — including tracks without Replay Gain tags. Cold-cache analysis runs in the background and uses 35–40 % CPU for ~1 minute, then drops to 0. Set your target loudness (default −10 LUFS) once.',
|
||||
q11: 'EQ and AutoEQ?',
|
||||
a11: 'A 10-band parametric EQ lives in Settings → Audio → Equalizer with manual bands and presets. AutoEQ next to it pulls a measured correction profile for your headphone model from the AutoEQ database and applies it to the bands automatically — pick your headphones and the EQ snaps to the correct curve.',
|
||||
q12: 'How do I switch the audio output device?',
|
||||
a12: 'Settings → Audio → Output Device. Psysonic lists every available output and switches instantly when you pick one. The refresh button rescans devices that were plugged in after launch. Linux ALSA names like "sysdefault" are auto-cleaned for readability.',
|
||||
q13: 'What is Hot Cache?',
|
||||
a13: 'Hot Cache preloads the current track plus the next several into RAM and onto disk so playback starts with no buffering — especially useful on slow / remote servers. Eviction kicks in when the size limit is reached. Configure size and the debounce delay (so quick skips do not over-fetch) in Settings → Audio.',
|
||||
// ── Section 4: Library & Discovery ─────────────────────────────────────
|
||||
s4: 'Library & Discovery',
|
||||
q14: 'How do ratings and Skip-to-1★ work?',
|
||||
a14: 'Psysonic supports 1–5 star ratings via OpenSubsonic (Navidrome ≥ 0.53). Rate songs in track lists, in the right-click menu, or in the player bar below the artist name; albums on the album page; artists on the artist page. Skip-to-1★ (Settings → Library → Ratings) auto-assigns 1 star after a configurable number of consecutive skips. The same panel lets you set a minimum rating filter for Random Mix and other generated mixes.',
|
||||
q15: 'How do I browse — Folders, Genres, Tracks?',
|
||||
a15: 'Folder Browser (sidebar) walks your server\'s music directory in a Miller-column layout — click a folder to drill in, click a track or a folder\'s play icon to play / enqueue. Genres uses a tag-cloud view scaled by track count; click a genre to open it. Tracks is a flat library hub with column-sortable virtual list and live search.',
|
||||
q16: 'Search and Advanced Search?',
|
||||
a16: 'The header search bar runs a fast live search across artists, albums and tracks as you type. Open Advanced Search (sidebar) for a richer view: filter by year, genre, rating, format, channels, sample rate, BPM, mood, and combine criteria. Right-click any result for the same context menu used elsewhere in the app.',
|
||||
q17: 'What are the Mixes (Random / Genre / Super Genre / Lucky)?',
|
||||
a17: 'Random Mix builds a playlist of random tracks from your library; the Keyword Filter excludes audiobooks, comedy, etc. by genre / title / album substrings. Super Genre Mix groups your library into broad styles (Rock, Metal, Electronic, Jazz, Classical…) and builds a focused mix from one. Lucky Mix uses your listening history, ratings and AudioMuse-AI similar tracks to assemble an instant playlist with one click.',
|
||||
q18: 'Statistics page?',
|
||||
a18: 'Statistics (sidebar) shows top artists, top albums, top tracks, genre breakdown, listening time over time, and per-library scope when you have more than one music folder configured. Several views are exportable as a sharable card image.',
|
||||
q19: 'How do I download an album as a ZIP?',
|
||||
a19: 'Album page → "Download (ZIP)". The server compresses the album first — for large or lossless albums (FLAC / WAV) the progress bar appears only after zipping completes and the transfer starts. This is normal.',
|
||||
// ── Section 5: Lyrics ──────────────────────────────────────────────────
|
||||
s5: 'Lyrics',
|
||||
q20: 'Where do lyrics come from?',
|
||||
a20: 'Three sources, configurable in Settings → Lyrics: your Navidrome server (embedded / OpenSubsonic lyrics), LRCLIB (community-contributed synced lyrics), and NetEase Cloud Music (large Asian + international catalog). Each source can be enabled / disabled and re-ordered by drag.',
|
||||
q21: 'How do I view lyrics during playback?',
|
||||
a21: 'Click the microphone icon in the player bar to open the Lyrics tab inside the queue panel. Synced lyrics auto-scroll and support click-to-seek; plain-text lyrics scroll as a static block. Toggle the Fullscreen Player from the player-bar artwork for an immersive lyrics view with mesh-blob background.',
|
||||
// ── Section 6: Sharing & Social ────────────────────────────────────────
|
||||
s6: 'Sharing & Social',
|
||||
q22: 'What are Magic Strings?',
|
||||
a22: 'Magic Strings are short copy-paste tokens that share things between Psysonic users without any third-party server. Server-Invite strings let a friend onboard onto your Navidrome with one paste; Album / Artist / Queue Magic Strings open the same album / artist / queue on the recipient\'s installed Psysonic. Generate them from the share menu, paste them into the search bar to consume.',
|
||||
q23: 'What is Orbit?',
|
||||
a23: 'Orbit is synchronized listen-together: a host plays a track, every guest hears it in sync, and guests can suggest songs the host can accept into the queue. Start a session from the header Orbit button, share the invite link, and others can join from any Psysonic install. The host owns playback (skip, seek, queue) — guests get a real-time view and a suggestion box. Sessions are ephemeral and end when the host closes them.',
|
||||
q24: 'What is the Now Playing dropdown?',
|
||||
a24: 'The broadcast icon in the top-right header shows what other users on your Navidrome server are currently listening to, refreshed every 10 seconds. Your own entry disappears the moment you pause. It is per-server, so users on a different active server are not shown.',
|
||||
// ── Section 7: Personalization ─────────────────────────────────────────
|
||||
s7: 'Personalization',
|
||||
q25: 'Themes and the Theme Scheduler?',
|
||||
a25: 'Settings → Appearance → Theme picks from 60+ themes across 8 groups (Psysonic, Mediaplayer, Operating Systems, Games, Movies, Series, Social Media, Open Source Classics — Catppuccin / Nord / Gruvbox / Nightfox / Dracula). Auto-Switch Theme lets you set a day theme + night theme with start times so Psysonic flips automatically.',
|
||||
q26: 'Can I customize the Sidebar, Home and Artist pages?',
|
||||
a26: 'Yes — Settings → Personalisation. The sidebar customizer lets you drag nav items into the order you want and hide ones you do not use. The Home customizer toggles each Mainstage rail (Hero, Recent, Discover, Recently Played, Starred…). The Artist page customizer reorders the sections (Top Songs, Albums, Singles, Compilations, Similar Artists, etc.) and lets you hide ones you never look at.',
|
||||
q27: 'What is the Mini Player?',
|
||||
a27: 'A small floating window with cover art, transport controls and a compact queue. Open it from the player-bar mini-player icon or with its keyboard shortcut. The window remembers its position and size between sessions. On Windows the mini-webview is pre-created at startup so opening is instant; Linux / macOS opt in via Settings → Appearance → Preload mini player.',
|
||||
q28: 'What is the Floating Player Bar?',
|
||||
a28: 'An optional player-bar style (Settings → Appearance) that detaches from the bottom edge with a themed background, accent border, rounded album art and a centered volume section. Useful on tall monitors or compact themes.',
|
||||
q29: 'Track Preview on hover?',
|
||||
a29: 'Hover over a track row, click the small preview button on the cover, or trigger preview from the right-click menu — Psysonic streams the first ~15 s through the same Rust audio engine so loudness normalisation applies. Useful for skimming an album you have not heard before.',
|
||||
q30: 'Sleep timer?',
|
||||
a30: 'Click the moon icon in the player bar to open the sleep timer. Pick a duration (or "end of current track") and Psysonic fades out and pauses at the end. The button shows a circular ring and an in-button countdown while the timer runs.',
|
||||
q31: 'UI scale, font, seekbar style?',
|
||||
a31: 'Settings → Appearance — Interface Scale (80–125 % without affecting system font size), Font (10 UI fonts including IBM Plex Mono, Fira Code, Geist, Golos Text…), Seekbar Style (Waveform analysed / pseudowave deterministic / Line & Dot / Bar / Thick Bar / Segmented / Neon Glow / Pulse Wave / Particle Trail / Liquid Fill / Retro Tape).',
|
||||
// ── Section 8: Power User ──────────────────────────────────────────────
|
||||
s8: 'Power User',
|
||||
q32: 'CLI player controls?',
|
||||
a32: 'The Psysonic binary doubles as a remote control. Examples: psysonic --player play / pause / next / prev, --player volume 75, --player seek 15, --player shuffle, --player repeat off|all|one, --player rating 1-5. Switch servers, audio devices, libraries; trigger Instant Mix; search artists / albums / tracks. Run psysonic --player --help for the full list. Shell completions for bash and zsh via psysonic completions.',
|
||||
q33: 'Smart Playlists (Navidrome)?',
|
||||
a33: 'Smart Playlists are Navidrome-side dynamic playlists defined by rules (genre = Rock AND year > 2020, etc.). The Playlists page in Psysonic lets you create, edit and delete them with a visual rule editor — Psysonic talks to the Navidrome native API for that. They behave like normal playlists in the rest of the app and update automatically as your library changes.',
|
||||
q34: 'Backup and restore settings?',
|
||||
a34: 'Settings → Storage → Backup & Restore exports server profiles, themes, keybindings and other settings to a single JSON file. Import the file on another machine or after a reinstall to restore everything at once. Server passwords are included — keep the file private.',
|
||||
q35: 'Where do I see all open-source licenses?',
|
||||
a35: 'Settings → System → Open Source Licenses. The full dependency list (cargo crates and npm packages) ships in the build with bundled license texts. Click an entry for the full text; the curated highlight block at the top calls out the user-recognisable libraries (Tauri, React, rodio, symphonia, etc.).',
|
||||
// ── Section 9: Offline & Sync ──────────────────────────────────────────
|
||||
s9: 'Offline & Sync',
|
||||
q36: 'Offline Mode — caching albums and playlists?',
|
||||
a36: 'Open any album or playlist and click the download icon in the header — Psysonic caches every track locally so it plays from disk with no network call. The Offline Library page (sidebar) lists everything cached, shows progress in flight, and lets you remove entries with the trash icon (which appears once a download completes).',
|
||||
q37: 'Offline storage limit?',
|
||||
a37: 'Settings → Library → Offline lets you set a maximum cache size. When the limit is reached, the album-page download button shows a warning banner. Free space by removing albums or playlists from the Offline Library page.',
|
||||
q38: 'Device Sync — copy music to USB / SD?',
|
||||
a38: 'Device Sync (sidebar) copies albums, playlists or whole artists to an external drive for offline listening on other devices. Pick a target folder, choose sources from the browser tabs, click "Transfer to Device". Psysonic writes a manifest (psysonic-sync.json) so it knows which files are already there even if you reopen Device Sync on a different OS with a different filename template. Templates support {artist} / {album} / {title} / {track_number} / {disc_number} / {year} tokens with / for folder separators.',
|
||||
// ── Section 10: Integrations & Troubleshooting ─────────────────────────
|
||||
s10: 'Integrations & Troubleshooting',
|
||||
q39: 'Last.fm scrobbling?',
|
||||
a39: 'Settings → Integrations → Last.fm. Connect your account once and Psysonic scrobbles directly to Last.fm — no Navidrome configuration needed. A scrobble is sent after you have heard 50 % of a track. Now-playing pings are sent at the start.',
|
||||
q40: 'Discord Rich Presence?',
|
||||
a40: 'Settings → Integrations → Discord shows your current track on your Discord profile. Choose between the app icon, your server\'s cover art (via getAlbumInfo2 — needs a publicly reachable server), or Apple Music covers. Customize the display strings (details, state, tooltip) with token templates.',
|
||||
q41: 'Bandsintown tour dates?',
|
||||
a41: 'Opt in under Settings → Integrations → Now-Playing Info. The Now Playing tab on the Now Playing page then shows upcoming tour dates for the playing artist via the Bandsintown widget API. Off by default — no requests are made until you enable it.',
|
||||
q42: 'Internet Radio — playing live streams?',
|
||||
a42: 'Internet Radio (sidebar) plays any live stream stored on your Navidrome server (add stations via the Navidrome admin UI). Playback runs through the browser HTML5 audio engine — most EQ / Replay Gain / Loudness settings do not apply to radio, but ICY metadata (current song name) does show up. Supports MP3, AAC, OGG Vorbis and most HLS streams; codec support depends on the platform.',
|
||||
q43: 'The connection test fails — what now?',
|
||||
a43: 'Double-check the URL including port (e.g. http://192.168.1.100:4533). On a local network http:// often works where https:// does not (no certificate). Make sure no firewall blocks the port and that the username and password are correct. If your server is behind a reverse proxy, try the direct URL first to isolate the cause.',
|
||||
q44: 'Cover art and artist images load slowly.',
|
||||
a44: 'Images are fetched from your server on first view and then cached locally for 30 days. If your server\'s storage is slow, the first visit to a page can take a moment; subsequent visits are instant. The Hot Cache also helps for tracks but image cache is independent.',
|
||||
q45: 'Linux issues — black screen or no audio?',
|
||||
a45: 'Black screen is usually a GPU / EGL driver issue in WebKitGTK — launch with GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1 (the AUR / .deb / .rpm installers set these automatically). For audio, make sure PipeWire or PulseAudio is running. If audio drops out after sleep / wake, this is now handled automatically by the post-sleep recovery hook.',
|
||||
};
|
||||
Reference in New Issue
Block a user