{ "users": { "change_username": "Change username", "title": "Users", "subtitle": "Create users and moderators, manage roles, upload review, 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}}", "review_uploads": "Upload review", "grant_review": "Grant upload review", "revoke_review": "Revoke upload review", "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.", "reset_recommendations": "Reset recommendations", "recs_confirm": "Reset {{username}}'s recommendations? The wave will start learning their taste from scratch and ask for favourite artists again. Likes and history stay.", "recs_done": "{{username}}'s recommendations were reset", "confirm": "Confirm", "you": "you", "manage_updates": "Server updates", "grant_updates": "Grant update management", "revoke_updates": "Revoke update management" }, "transfer": { "export": "Export users", "import": "Import users", "apply": "Import", "description": "Transfer accounts, roles and access permissions with existing passwords. Recommendations, history, likes and sessions are excluded. Existing usernames will be skipped without changes.", "sensitive": "The JSON file contains password hashes. Keep it in a secure location.", "file": "Users file (.json)", "preview": "Accounts in file: {{count}}", "invalid": "Invalid file. Select a Pipu JSON export, version 1, up to 16 MiB and 10000 users.", "result": "Created: {{count}}. Existing accounts skipped: {{skipped}}." }, "create": { "title": "New user", "username": "Username", "username_hint": "Latin letters, digits, \".\", \"_\", \"-\"", "display_name": "Name", "role": "Role", "review_uploads": "Upload review", "review_uploads_hint": "They can review the upload queue. This is not a role: several people can have it, and an admin might not.", "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": { "users.export": "Users exported", "users.import": "Users imported", "user.username_change": "Username changed", "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.recommendations_reset": "Recommendations reset", "user.delete": "User deleted", "user.manages_updates": "Server update permission changed" } }, "sources": { "cover_files": "Local covers: {{count}} of {{total}} files", "cover_pending": "Albums awaiting processing: {{count}}", "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…", "excluded_dirs": "Folders to exclude from scanning", "excluded_hint": "One folder per line, relative to the storage root. Example: Downloads_PumpEars. All subfolders are excluded too. Paths are case sensitive; wildcards are not supported. Analysis and its errors are excluded as soon as you save. Existing catalog records are retained. An empty list enables scanning and analysis again.", "excluded_running": "Wait for the current scan to finish before editing exclusions.", "excluded_count": "Folders excluded from scanning: {{count}}", "scan_walk_progress": "Walking folders… Directories checked: {{dirs}} · audio files found: {{found}}", "scan_current_dir": "Current folder: {{path}}", "scan_preparing": "Matching files with the library…", "scan_finalizing": "Finishing scan…", "scan_done": "Found {{found}} · new {{added}} · updated {{updated}} · moved {{moved}} · missing {{missing}} · errors in this scan {{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", "wave_model": "Model version", "wave_by_model": "Wave model versions compared", "analysis_retry": "Retry", "analysis_show_errors": "Show files", "analysis_errors_title": "Audio analysis errors", "analysis_errors_hint": "Each track shows its storage, path relative to the storage root and failure reason. Paths come from the current library catalog.", "analysis_errors_empty": "There are no failed analysis jobs.", "analysis_errors_more": "Show more", "analysis_error_source": "Storage: {{name}}", "analysis_error_no_file": "This track no longer has a file in the library.", "analysis_error_unknown": "No error reason was recorded." }, "write_template": { "title": "Uploads and path template", "intro": "Approved tracks from the upload queue are placed here using a template that repeats this storage's folder layout.", "accepts": "Accept uploads into this storage", "nfs_rw_hint": "The storage will be reconnected: the agent also mounts it for writing (visible only to the agent). The NFS export must allow writes for PIPU_FILE_UID.", "template": "Path template", "hint": "For example {albumartist}/{year} - {album}/{disc:1-}{track:02} - {title}.{ext}; [ … ] is an optional part", "suggest": "Suggest from layout", "check": "Check", "save": "Save", "saved": "Saved", "required": "Set a path template to accept uploads.", "no_tracks": "The storage has no tracks yet, so there is nothing to check the template against.", "check_ok": "The template is reversible: {{round_trip}} of {{total}} paths parse back unchanged, {{same_path}} match the real ones.", "check_warn": "Mismatches found: {{round_trip}} of {{total}} parse back unchanged, {{same_path}} match the real paths (90% needed). New files may be laid out differently from existing ones.", "col_real": "Real path", "col_rendered": "From template", "col_problem": "Mismatch", "no_pattern": "no pattern matched", "other_path": "different path", "badge": "accepts uploads", "write_ok": "Write: ok", "write_fail": "Write failed: {{message}}" }, "uploads": { "suggest_title": "Suggest tracks", "suggest_subtitle": "Files go to the upload queue; an administrator reviews them and places them into a storage", "drop_title": "Drop music files or folders here", "drop_hint": "Use FLAC, WAV or AIFF. MP3 only as a last resort: the quality is worse, and the queue marks that file “needs attention”.", "drop_folders": "Folder structure helps guess the artist and album.", "format_attention": "Not lossless (FLAC, WAV, AIFF). Send MP3 only when there is no lossless file.", "pick_files": "Choose files", "pick_folder": "Choose folder", "files": "Files to send", "skipped_one": "{{count}} file skipped — not audio", "skipped_few": "{{count}} files skipped — not audio", "skipped_many": "{{count}} files skipped — not audio", "skipped_other": "{{count}} files skipped — not audio", "resume_hint_one": "{{count}} file was not finished. Pick it again to resume.", "resume_hint_few": "{{count}} files were not finished. Pick them again to resume.", "resume_hint_many": "{{count}} files were not finished. Pick them again to resume.", "resume_hint_other": "{{count}} files were not finished. Pick them again to resume.", "resume_pick": "Pick files and resume", "comment": "Comment for the administrator", "comment_hint": "For example: “2011 remaster”, “replacing broken files”", "not_enough_space": "The queue is short of space: {{need}} needed, {{free}} free — some files will be refused.", "clear": "Clear list", "hashing_wait": "Checking files…", "send_one": "Send {{count}} file · {{size}}", "send_few": "Send {{count}} files · {{size}}", "send_many": "Send {{count}} files · {{size}}", "send_other": "Send {{count}} files · {{size}}", "sent_one": "Done: {{count}} file is uploaded and being processed. See statuses in “My uploads”.", "sent_few": "Done: {{count}} files are uploaded and being processed. See statuses in “My uploads”.", "sent_many": "Done: {{count}} files are uploaded and being processed. See statuses in “My uploads”.", "sent_other": "Done: {{count}} files are uploaded and being processed. See statuses in “My uploads”.", "failed_some_one": "{{count}} file did not upload — its space is reserved, you can continue.", "failed_some_few": "{{count}} files did not upload — their space is reserved, you can continue.", "failed_some_many": "{{count}} files did not upload — their space is reserved, you can continue.", "failed_some_other": "{{count}} files did not upload — their space is reserved, you can continue.", "retry_failed": "Continue upload", "uploading_now": "Uploading…", "go_mine": "My uploads →", "more": "Upload more", "dup_found": "This track is already in the library or the queue — no need to upload", "possible_dup": "A similar track exists (same artist, title and length) — the administrator will decide", "file_error": "Error: {{message}}", "remove": "Remove {{name}}", "quota": "Queue: {{used}} of {{limit}}", "quota_mine": "yours: {{used}} of {{limit}}", "mine_title": "My uploads", "mine_subtitle": "What you uploaded and what the administrator decided", "mine_empty": "You have not suggested anything yet", "filter": "Filter", "filter_all": "All", "filter_pending": "In progress", "filter_imported": "Added", "filter_declined": "Not accepted", "col_file": "Track", "col_status": "Status", "col_size": "Size", "col_date": "Uploaded", "received": "{{pct}}% received — open “Suggest tracks” in the same tab to continue", "withdraw": "Withdraw", "load_more": "Show more", "queue_title": "Upload queue", "queue_subtitle": "Check the metadata and the storage path, then approve or reject", "queue_empty": "Nothing here", "tab_review": "Awaiting review", "tab_failed": "Import errors", "tab_progress": "In progress", "tab_imported": "Added", "tab_declined": "Not accepted", "only_possible": "Possible duplicates only", "review_failed_one": "Could not apply the decision to {{count}} file: {{reason}}", "review_failed_few": "Could not apply the decision to {{count}} files: {{reason}}", "review_failed_many": "Could not apply the decision to {{count}} files: {{reason}}", "review_failed_other": "Could not apply the decision to {{count}} files: {{reason}}", "bulk": "Actions on selected", "selected_one": "{{count}} file selected", "selected_few": "{{count}} files selected", "selected_many": "{{count}} files selected", "selected_other": "{{count}} files selected", "approve": "Approve", "reject": "Reject", "batch_of": "Batch from {{author}}", "batch_size_one": "{{count}} file · {{size}}", "batch_size_few": "{{count}} files · {{size}}", "batch_size_many": "{{count}} files · {{size}}", "batch_size_other": "{{count}} files · {{size}}", "select_batch": "Select the whole batch", "select_file": "Select {{name}}", "disc": "disc {{n}}", "edited": "edited", "flag_possible": "possible duplicate", "flag_quality": "better quality", "flag_attention": "needs attention", "listen": "Listen to {{name}}", "edit_batch": "Whole batch", "batch_edit_title": "Edit batch", "batch_edit_hint": "Empty fields stay as they are. The cover is written into the files on import.", "batch_cover": "Batch cover", "batch_cover_clear": "Remove cover", "set_upgrade": "Accept the same track in better quality", "flag_existing_album": "existing album", "flag_new_album": "new album", "dup_level_sha256": "exact copy of a file", "dup_level_fingerprint": "same track by acoustic fingerprint", "dup_level_metadata": "metadata matched", "edit": "Edit {{name}}", "retry": "Retry", "edit_title": "Track metadata", "meta_artist": "Artist", "meta_albumartist": "Album artist", "meta_album": "Album", "meta_title": "Title", "meta_genre": "Genre", "meta_year": "Year", "meta_track": "Track number", "meta_disc": "Disc", "target_source": "Storage", "target_default": "Default", "tags_note": "Edited fields are written into the file tags on import, so path and tags stay consistent.", "save": "Save", "saved": "Saved", "reject_title_one": "Reject {{count}} file", "reject_title_few": "Reject {{count}} files", "reject_title_many": "Reject {{count}} files", "reject_title_other": "Reject {{count}} files", "reject_reason": "Reason (the author will see it)", "settings_title": "Queue settings", "set_queue": "Queue limit, GB", "set_per_user": "Limit per moderator, GB", "set_per_user_hint": "Empty — no limit", "set_max_file": "Maximum file size, GB", "set_source": "Default storage", "set_source_auto": "The only one accepting uploads", "set_note": "Lowering the limit below the used space deletes nothing: new uploads wait until the queue frees up.", "status": { "uploading": "Uploading", "processing": "Processing", "pending_review": "Awaiting review", "approved": "Approved", "importing": "Importing", "imported": "Added", "import_failed": "Import failed", "duplicate": "Duplicate", "invalid": "Not audio", "rejected": "Rejected", "withdrawn": "Withdrawn", "expired": "Expired" }, "stage": { "hashing": "Computing checksum", "checking": "Checking for duplicates", "ready": "Ready to send", "duplicate": "Already exists", "too_large": "Too large", "uploading": "Uploading", "done": "Uploaded, processing", "rejected": "Not accepted", "error": "Error", "resume": "Waiting for the file to resume" } }, "server_settings": { "title": "Server settings", "subtitle": "Settings that apply to all users" }, "management": { "server": "Server management", "updates": "Updates", "config": "Configuration", "updates_intro": "Choose a source and version. The server will build and report the result.", "refresh": "Refresh status", "current": "Installed version", "manual": "Updates start manually. The latest stable release is resolved when you start the update.", "update_target": "Next update", "sources": "Update sources", "source": "Source", "channel": "Update target", "channel_latest": "Latest release", "channel_version": "Choose version", "channel_main": "main", "hint_latest": "Install the latest stable tag, excluding release candidates.", "hint_version": "Choose a published tag. Downgrading to an older version requires a manual rollback.", "hint_main": "The current main branch. May include unreleased changes.", "version": "Version", "choose_version": "Choose a version", "source_unavailable": "Could not read the repository. Check its address, server access and SSH keys.", "install": "Install update", "confirm_update": "Update the server?", "confirm_update_text": "Source: {{source}}. Target: {{target}}.", "update_warning": "The service will be briefly unavailable during restart. Back up the database first. Database migrations are not rolled back.", "cancel": "Cancel", "sources_hint": "Git repositories compatible with Pipu. HTTP(S) or SSH; configure private repository keys on the agent host. Do not include tokens in the URL.", "source_name": "Name", "repository": "Git repository URL", "remove_source": "Remove source", "add_source": "Add source", "save": "Save", "job": "Last operation", "started": "Started", "finished": "Finished", "log": "Execution log", "waiting": "Waiting for command output…", "running_hint": "The task runs on the server. You can close this page without interrupting it.", "reconnecting": "Services are restarting. Waiting to reconnect to the server…", "state": { "running": "Running", "succeeded": "Completed", "failed": "Failed" }, "config_intro": "API, recommender and deployment settings in deploy/config.local.", "priority": "Priority order", "defaults": "defaults", "priority_hint": ".env values override config.local. Save and apply are separate actions.", "search": "Search settings", "group": "Section", "all": "All sections", "groups": { "api": "API", "deployment": "Deployment", "shared": "Shared", "recommender": "Recommender" }, "config_files_hint": "Supported settings are listed here. “After applying” is the value from .env, config.local or a default. Fixed paths and service parameters are read-only. Secrets can be replaced; their values stay hidden.", "value_source": { "env": "From .env", "local": "From config.local", "default": "Default" }, "effective": "After applying", "readonly": "Service parameter. Change on the host together with its Compose configuration.", "secret_saved": "Secret saved", "will_reset": "The local value will be removed when saved.", "overridden": "A value in .env takes priority. This local change will not take effect yet.", "secret_hint": "Leave unchanged to keep the stored secret. Enter a new value to replace it.", "default": "Default", "reset": "Reset local value", "no_results": "No settings found", "saved": "Changes saved to config.local", "unsaved": "Unsaved settings: {{count}}", "pending_restart": "Saved changes are waiting to be applied", "no_changes": "No changes to apply", "discard": "Discard edits", "apply": "Apply and restart", "apply_warning": "Containers will be recreated with the saved configuration. The service will be briefly unavailable; persistent volume data is preserved. Values from .env will keep taking priority.", "check_updates": "Check for updates", "unsaved_panel": "Unsaved changes", "availability": { "checking": "Checking the selected version…", "running": "Update in progress", "available": "Update available", "current": "This version is already installed — no updates", "ahead": "A newer build is already installed", "unknown": "Could not identify the installed commit. Update the server manually.", "unavailable": "The selected version is unavailable", "select_version": "Choose a version to check" } } }