- WaveButton: TypeScript port of the prototype's canvas animation (orb and liquid), breathing at rest, pulsing to the track's BPM and energy in the cover palette, following the cursor, pressing with a spring; reduced motion and hidden tabs slow or stop it - home: the wave in the centre with activity and mood chips; changing them while playing rebuilds the upcoming tracks without stopping - player wave mode: asks for the next batch when two tracks are left, sends complete / skip / early skip / like / dislike as feedback and refreshes the queue right after a reaction or an early skip - tracks expose bpm, energy and loudness once analysed; library page shows analysis progress and 7-day wave metrics; wave style setting Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
164 lines
5.7 KiB
JSON
164 lines
5.7 KiB
JSON
{
|
|
"users": {
|
|
"title": "Users",
|
|
"subtitle": "Create users and moderators, manage roles, reset passwords, block accounts",
|
|
"create": "Create user",
|
|
"search": "Name or username",
|
|
"all": "All",
|
|
"col_user": "User",
|
|
"col_role": "Role",
|
|
"col_status": "Status",
|
|
"col_last_login": "Last seen",
|
|
"status_active": "Active",
|
|
"status_blocked": "Blocked",
|
|
"status_must_change": "Must change password",
|
|
"never": "Never signed in",
|
|
"empty": "Nobody found",
|
|
"more": "Show more",
|
|
"actions": "Actions for {{username}}",
|
|
"reset_password": "Reset password",
|
|
"block": "Block",
|
|
"unblock": "Unblock",
|
|
"make_role": "Make {{role}}",
|
|
"delete": "Delete",
|
|
"delete_confirm": "Delete {{username}}? Their history and likes will be lost.",
|
|
"block_confirm": "Block {{username}}? All their sessions will end.",
|
|
"reset_confirm": "Reset {{username}}'s password? All their sessions will end.",
|
|
"confirm": "Confirm",
|
|
"you": "you"
|
|
},
|
|
"create": {
|
|
"title": "New user",
|
|
"username": "Username",
|
|
"username_hint": "Latin letters, digits, \".\", \"_\", \"-\"",
|
|
"display_name": "Name",
|
|
"role": "Role",
|
|
"password_note": "The server will generate a password and show it once.",
|
|
"submit": "Create"
|
|
},
|
|
"temp_password": {
|
|
"title": "Temporary password",
|
|
"text": "Give this password to {{username}}. It is shown only now; they will be asked to change it on sign-in.",
|
|
"done": "Done"
|
|
},
|
|
"audit": {
|
|
"title": "Audit log",
|
|
"subtitle": "Actions of administrators and moderators",
|
|
"col_when": "When",
|
|
"col_who": "Who",
|
|
"col_action": "Action",
|
|
"col_details": "Details",
|
|
"system": "System",
|
|
"empty": "No entries yet",
|
|
"more": "Show more",
|
|
"actions": {
|
|
"user.bootstrap_create": "Initial administrator created",
|
|
"user.bootstrap_credentials": "Administrator credentials set",
|
|
"user.create": "User created",
|
|
"user.rename": "Name changed",
|
|
"user.role_change": "Role changed",
|
|
"user.block": "User blocked",
|
|
"user.unblock": "User unblocked",
|
|
"user.password_reset": "Password reset",
|
|
"user.delete": "User deleted"
|
|
}
|
|
},
|
|
"sources": {
|
|
"title": "Storage",
|
|
"subtitle": "Where the server takes music from: a folder on the server or NFS",
|
|
"add": "Add storage",
|
|
"empty": "No storage yet. Connect a music folder to get started.",
|
|
"type_local": "Server folder",
|
|
"type_nfs": "NFS",
|
|
"status_pending": "Connecting",
|
|
"status_mounted": "Connected",
|
|
"status_error": "Error",
|
|
"status_disabled": "Disabled",
|
|
"last_scan": "Last scan: {{date}}",
|
|
"never_scanned": "Not scanned yet",
|
|
"scan": "Scan",
|
|
"full_scan": "Full scan",
|
|
"test": "Test",
|
|
"patterns": "Path patterns",
|
|
"edit": "Edit",
|
|
"delete": "Delete",
|
|
"disable": "Disable",
|
|
"enable": "Enable",
|
|
"delete_confirm": "Delete “{{name}}”? Tracks that exist only in this storage will disappear from the library along with their likes.",
|
|
"scanning": "Scanning: {{processed}} of {{total}}",
|
|
"scan_walking": "Walking folders…",
|
|
"scan_done": "Found {{found}} · new {{added}} · updated {{updated}} · moved {{moved}} · missing {{missing}} · errors {{errors}}",
|
|
"scan_failed": "Scan stopped: {{error}}",
|
|
"test_ok": "Reachable, audio files found: {{count}}",
|
|
"test_fail": "Not reachable: {{message}}",
|
|
"form_title_new": "New storage",
|
|
"form_title_edit": "Storage",
|
|
"name": "Name",
|
|
"type": "Type",
|
|
"folder": "Folder",
|
|
"folder_root": "Whole folder",
|
|
"folder_hint": "A subfolder of LIBRARY_HOST on the server",
|
|
"up": "Up",
|
|
"nfs_server": "Server",
|
|
"nfs_server_hint": "Host name or IP, e.g. nas.lan",
|
|
"nfs_export": "Export",
|
|
"nfs_export_hint": "Path on the server, e.g. /export/music",
|
|
"nfs_options": "Mount options",
|
|
"nfs_options_hint": "Read-only is added automatically",
|
|
"tag_priority": "Prefer",
|
|
"tags_first": "File tags",
|
|
"path_first": "Path patterns",
|
|
"interval": "Auto scan",
|
|
"interval_off": "Manual",
|
|
"interval_hours": "Every {{count}} h",
|
|
"save": "Save"
|
|
},
|
|
"patterns": {
|
|
"title": "Path patterns: {{name}}",
|
|
"intro": "RE2 regular expressions with named groups are matched against the file path relative to the storage root. The first match wins.",
|
|
"groups": "Groups: artist, albumartist, album, year, disc, track, title, genre; skip ignores the file.",
|
|
"add": "Add pattern",
|
|
"regex": "Pattern {{n}}",
|
|
"enabled": "Enabled",
|
|
"up": "Up",
|
|
"down": "Down",
|
|
"remove": "Remove",
|
|
"preview": "Preview",
|
|
"save": "Save",
|
|
"saved": "Saved. Run a full scan to apply it to files already found.",
|
|
"col_path": "Path",
|
|
"col_pattern": "Pattern",
|
|
"col_result": "Result",
|
|
"no_match": "no match",
|
|
"skipped": "skipped",
|
|
"unmatched": "No pattern matched: {{count}} of {{total}}",
|
|
"from_tags": "from tags",
|
|
"error_at": "Error in pattern {{n}}: {{reason}}",
|
|
"examples": "Examples"
|
|
},
|
|
"library": {
|
|
"title": "Library",
|
|
"subtitle": "Catalog and scan status",
|
|
"artists": "Artists",
|
|
"albums": "Albums",
|
|
"tracks": "Tracks",
|
|
"files": "Files",
|
|
"missing": "Missing files",
|
|
"errors": "Unreadable",
|
|
"sources": "Storage",
|
|
"error_files": "Files with errors",
|
|
"reindex": "Rebuild search index",
|
|
"reindex_started": "Rebuild started",
|
|
"analysis": "Audio analysis",
|
|
"analysis_progress": "Analysed {{done}} of {{total}}",
|
|
"analysis_failed": "Could not analyse: {{count}}",
|
|
"analyzer": "Analyzer version: {{ver}}",
|
|
"wave": "My Wave, last 7 days",
|
|
"wave_served": "Tracks served",
|
|
"wave_sessions": "Sessions",
|
|
"wave_listen": "Played ≥ 50%",
|
|
"wave_early_skip": "Early skips",
|
|
"wave_likes": "Likes per 100"
|
|
}
|
|
}
|