ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 51s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m5s
ci / ts / ts (packages + web) (push) Successful in 1m3s
ci / api / api (push) Successful in 29s
ci / db / db (push) Failing after 12s
The library page compares listen-through, early-skip and like rates per impression model version, so v1 and the trained ranker can be compared online. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
338 lines
14 KiB
JSON
338 lines
14 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",
|
|
"wave_model": "Model version",
|
|
"wave_by_model": "Wave model versions compared"
|
|
},
|
|
"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": "Formats: {{formats}}. Folder structure helps guess the artist and album.",
|
|
"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",
|
|
"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_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"
|
|
}
|
|
},
|
|
"server_settings": {
|
|
"title": "Server settings",
|
|
"subtitle": "Settings that apply to all users"
|
|
}
|
|
}
|