ci / api / api (push) Canceled after 0s
ci / module boundaries / boundaries (push) Canceled after 0s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Canceled after 11m29s
ci / db / db (push) Canceled after 11m22s
ci / mobile / mobile (Metro-бандл Android) (push) Canceled after 6m43s
ci / recommender / recommender (push) Canceled after 6m47s
ci / ts / ts (packages + web) (push) Canceled after 1s
492 lines
19 KiB
JSON
492 lines
19 KiB
JSON
{
|
||
"desktop": {
|
||
"offline": "Downloads and cache",
|
||
"save_track": "Download",
|
||
"remove_download": "Remove download",
|
||
"download_failed": "Could not download the track",
|
||
"storage_failed": "Could not open or change the cache. Check available disk space.",
|
||
"cache_hint": "Recent tracks are cached automatically (up to 500 MB). Manual downloads remain until removed. Available offline, including after restarting the app.",
|
||
"clear_recent": "Clear recent cache",
|
||
"offline_empty": "Played and downloaded tracks will appear here.",
|
||
"updates": "App updates",
|
||
"check_failed": "Could not check for updates. Try again later.",
|
||
"installer_open": "The installer is open. Complete installation and restart the app."
|
||
},
|
||
"genius": {
|
||
"description": "Lyrics, annotations and missing artwork from Genius. Local artwork takes priority.",
|
||
"loading": "Loading…", "disabled": "Not configured", "paused": "Processing paused", "cooldown": "Waiting after Genius rate limit", "running": "Fetching data from Genius…", "queued": "Queue awaiting processing", "waiting": "Waiting for new tracks",
|
||
"progress": "Processed {{processed}} of {{total}} tracks",
|
||
"progress_label": "Genius processing progress",
|
||
"progress_hint": "Processed tracks include errors and unmatched tracks. Data refreshes every 5 seconds.",
|
||
"controls_hint": "The queue is processed automatically. Pausing saves progress; resuming continues with the remaining tracks.",
|
||
"retry_hint": "Retry queues only tracks with errors, incomplete data or no match, and resumes processing. Successfully processed tracks stay unchanged.",
|
||
"configure": "Add GENIUS_ACCESS_TOKEN to deploy/.env and recreate the API container.",
|
||
"total": "Total tracks", "pending": "Queued", "matched": "Matched on Genius", "lyrics": "Lyrics", "annotations": "With annotations", "images": "With artwork", "unmatched": "No exact match", "errors": "Errors / incomplete data",
|
||
"last_error": "Last error", "token_error": "Genius rejected the token. Check it and restart the API.", "access_error": "Genius restricted access. Processing is paused.", "no_lyrics": "Lyrics are currently unavailable.", "request_error": "Some data could not be retrieved. A retry is scheduled automatically.", "resume_at": "Retry no earlier than",
|
||
"start": "Resume processing", "pause": "Pause processing", "retry": "Queue tracks needing attention", "pending_text": "This track is waiting for Genius processing.", "about": "About the song", "explanations": "Song annotations", "verified": "Verified on Genius"
|
||
},
|
||
"app": {
|
||
"name": "pipu",
|
||
"tagline": "Your music from your own server"
|
||
},
|
||
"server": {
|
||
"title": "Server",
|
||
"checking": "Checking the server…",
|
||
"online": "Server {{version}} is online",
|
||
"offline": "The server is not responding. Check the address and your network.",
|
||
"address": "Server address",
|
||
"check": "Check",
|
||
"invalid_address": "Enter the server address, e.g. https://music.home.lan",
|
||
"unsupported_app": "This app version is too old for the server — please update the app"
|
||
},
|
||
"language": {
|
||
"label": "Language",
|
||
"ru": "Русский",
|
||
"en": "English"
|
||
},
|
||
"nav": {
|
||
"skip": "Skip to content",
|
||
"more": "More",
|
||
"main": "Navigation",
|
||
"home": "Home",
|
||
"admin": "Admin",
|
||
"users": "Users",
|
||
"audit": "Audit log",
|
||
"library": "Library",
|
||
"sources": "Storage",
|
||
"collection": "Collection",
|
||
"history": "History",
|
||
"likes": "Likes",
|
||
"dislikes": "Dislikes",
|
||
"uploads": "Uploads",
|
||
"suggest": "Suggest tracks",
|
||
"my_uploads": "My uploads",
|
||
"upload_queue": "Queue",
|
||
"admin_settings": "Settings",
|
||
"server_updates": "Updates",
|
||
"server_config": "Configuration"
|
||
},
|
||
"profile": {
|
||
"menu": "Profile menu",
|
||
"settings": "Settings",
|
||
"logout": "Sign out",
|
||
"download_apps": "Download apps"
|
||
},
|
||
"roles": {
|
||
"admin": "Administrator",
|
||
"moderator": "Moderator",
|
||
"user": "User"
|
||
},
|
||
"home": {
|
||
"greeting": "Hi, {{name}}!",
|
||
"wave": "My Wave",
|
||
"wave_soon": "An endless stream tuned to your taste will appear once the server has a library."
|
||
},
|
||
"player": {
|
||
"share": "Share track",
|
||
"link_copied": "Track link copied",
|
||
"share_error": "Could not share the link. Please try again.",
|
||
"track_page": "Track",
|
||
"empty": "Nothing is playing",
|
||
"label": "Player",
|
||
"play": "Play",
|
||
"pause": "Pause",
|
||
"next": "Next",
|
||
"prev": "Previous",
|
||
"like": "Like",
|
||
"unlike": "Remove from likes",
|
||
"dislike": "Dislike",
|
||
"undislike": "Remove dislike",
|
||
"volume": "Volume",
|
||
"mute": "Mute",
|
||
"unmute": "Unmute",
|
||
"shuffle": "Shuffle",
|
||
"repeat_off": "Repeat off",
|
||
"repeat_all": "Repeat queue",
|
||
"repeat_one": "Repeat track",
|
||
"progress": "Position",
|
||
"unavailable": "Track is unavailable — skipping",
|
||
"error": "Could not play the track",
|
||
"source_album": "Album · {{label}}",
|
||
"source_artist": "Artist · {{label}}",
|
||
"source_search": "Search · {{label}}",
|
||
"source_history": "History",
|
||
"source_likes": "Likes",
|
||
"source_dislikes": "Dislikes",
|
||
"source_wave": "My Wave",
|
||
"source_queue": "Queue",
|
||
"queue": "Queue",
|
||
"source_wave_seed": "Artist wave · {{label}}",
|
||
"queue_wave": "The wave never ends: next tracks are picked as you listen",
|
||
"now_playing": "Now playing",
|
||
"expand": "Open player"
|
||
},
|
||
"settings": {
|
||
"title": "Settings",
|
||
"account": "Account",
|
||
"display_name": "Display name",
|
||
"save": "Save",
|
||
"saved": "Saved",
|
||
"appearance": "Appearance",
|
||
"theme": "Theme",
|
||
"theme_dark": "Dark",
|
||
"theme_light": "Light",
|
||
"theme_system": "System",
|
||
"password": "Password",
|
||
"current_password": "Current password",
|
||
"new_password": "New password",
|
||
"repeat_password": "Repeat the password",
|
||
"change_password": "Change password",
|
||
"password_changed": "Password changed. Other devices have been signed out.",
|
||
"sessions": "Devices",
|
||
"session_current": "This device",
|
||
"session_last_used": "Active: {{date}}",
|
||
"session_end": "Sign out",
|
||
"logout_all": "Sign out everywhere",
|
||
"wave_variant": "Wave style",
|
||
"wave_orb": "Orb",
|
||
"wave_liquid": "Liquid",
|
||
"player_view": "Player style",
|
||
"player_bar": "Bar",
|
||
"player_island": "Island",
|
||
"ambient": "Ambient background",
|
||
"on": "On",
|
||
"off": "Off",
|
||
"search_position": "Search position",
|
||
"search_left": "Left",
|
||
"search_center": "Center",
|
||
"search_right": "Right",
|
||
"search_collapse": "Collapse search",
|
||
"home_activities": "Activity picker on home",
|
||
"home_moods": "Mood picker on home",
|
||
"normalize": "Loudness normalization",
|
||
"crossfade": "Crossfade, {{seconds}} s"
|
||
},
|
||
"form": {
|
||
"show_password": "Show password",
|
||
"hide_password": "Hide password",
|
||
"passwords_mismatch": "Passwords don't match",
|
||
"required": "Fill in this field",
|
||
"cancel": "Cancel",
|
||
"close": "Close",
|
||
"copy": "Copy",
|
||
"copied": "Copied"
|
||
},
|
||
"loading": "Loading…",
|
||
"route_error": {
|
||
"reload": "Reload the page"
|
||
},
|
||
"search": {
|
||
"placeholder": "Artists, albums, tracks",
|
||
"label": "Search",
|
||
"artists": "Artists",
|
||
"albums": "Albums",
|
||
"tracks": "Tracks",
|
||
"all": "All",
|
||
"nothing": "Nothing found",
|
||
"searching": "Searching…",
|
||
"type_query": "Type a query in the search field above",
|
||
"corrected": "Showing results for “{{query}}”",
|
||
"show_all": "All results",
|
||
"title": "Search: {{query}}",
|
||
"more": "Show more",
|
||
"artist_kind": "Artist",
|
||
"hint": "Press / to search"
|
||
},
|
||
"catalog": {
|
||
"albums": "Albums",
|
||
"appears_on": "Appears on",
|
||
"album_count_one": "{{count}} album",
|
||
"album_count_other": "{{count}} albums",
|
||
"album_count_few": "{{count}} albums",
|
||
"album_count_many": "{{count}} albums",
|
||
"track_count_one": "{{count}} track",
|
||
"track_count_other": "{{count}} tracks",
|
||
"track_count_few": "{{count}} tracks",
|
||
"track_count_many": "{{count}} tracks",
|
||
"unavailable": "Unavailable: storage is offline or the file is gone",
|
||
"not_found": "Nothing here — it may have been removed by the last scan",
|
||
"disc": "Disc {{n}}",
|
||
"col_title": "Title",
|
||
"col_album": "Album",
|
||
"col_duration": "Time",
|
||
"back_home": "Back home",
|
||
"artist": "Artist",
|
||
"album": "Album",
|
||
"play": "Play",
|
||
"artist_wave": "Artist wave",
|
||
"top_tracks": "Popular tracks"
|
||
},
|
||
"collection": {
|
||
"title": "Collection",
|
||
"history": "History",
|
||
"likes": "Likes",
|
||
"dislikes": "Dislikes",
|
||
"clear_history": "Clear history",
|
||
"clear_confirm": "Clear your listening history? Recommendations will still take it into account.",
|
||
"today": "Today",
|
||
"yesterday": "Yesterday",
|
||
"empty_history": "What you listen to will show up here",
|
||
"empty_likes": "Tap the heart on tracks — they will gather here",
|
||
"empty_dislikes": "Disliked tracks stay out of the wave. None so far",
|
||
"play_all": "Play all",
|
||
"more": "Show more",
|
||
"sub_history": "Everything you listened to, by day. Click a track to play it.",
|
||
"sub_likes_one": "{{count}} track · they shape My Wave the most",
|
||
"sub_likes_few": "{{count}} tracks · they shape My Wave the most",
|
||
"sub_likes_many": "{{count}} tracks · they shape My Wave the most",
|
||
"sub_likes_other": "{{count}} tracks · they shape My Wave the most",
|
||
"sub_dislikes": "These tracks never get into the wave or recommendations. Remove the dislike if you change your mind.",
|
||
"shuffle": "Shuffle"
|
||
},
|
||
"wave": {
|
||
"title": "My Wave",
|
||
"for_you": "Tuned to your taste",
|
||
"start": "Start My Wave",
|
||
"pause": "Pause My Wave",
|
||
"activity_label": "Activity",
|
||
"mood_label": "Mood",
|
||
"reset": "Reset",
|
||
"empty": "Nothing to suggest yet — the library is empty",
|
||
"fallback": "Recommendations are simplified for now",
|
||
"activities": {
|
||
"running": "Running",
|
||
"workout": "Workout",
|
||
"waking_up": "Waking up",
|
||
"focus": "Focus",
|
||
"commute": "Commute",
|
||
"chill": "Chilling",
|
||
"sleep": "Falling asleep"
|
||
},
|
||
"moods": {
|
||
"energetic": "Energetic",
|
||
"happy": "Happy",
|
||
"calm": "Calm",
|
||
"sad": "Sad"
|
||
}
|
||
},
|
||
"mobile": {
|
||
"connect": "Connect",
|
||
"servers": "Recent servers",
|
||
"change_server": "Another server",
|
||
"server": "Server",
|
||
"open_admin": "Admin — opens in the browser",
|
||
"version": "App version {{version}}",
|
||
"offline": "No connection to the server",
|
||
"profile": "Profile",
|
||
"search": "Search",
|
||
"recent_searches": "Recent searches",
|
||
"clear_recent": "Clear",
|
||
"now_playing": "Now playing",
|
||
"open_player": "Open the player",
|
||
"close_player": "Collapse the player",
|
||
"queue": "Queue",
|
||
"forget_server": "Forget server",
|
||
"update_check": "Check for updates",
|
||
"update_checking": "Checking…",
|
||
"update_latest": "You have the latest version",
|
||
"update_title": "Version {{version}} is available",
|
||
"update_required": "The server no longer supports this version — please update the app",
|
||
"update_size": "Size {{size}} MB",
|
||
"update_install": "Download and install",
|
||
"update_later": "Later",
|
||
"update_downloading": "Downloading {{percent}}%",
|
||
"update_verifying": "Verifying the file…",
|
||
"update_bad_checksum": "The file is corrupted — try again",
|
||
"update_failed": "Could not download the update",
|
||
"update_allow": "Allow installing apps from this app in Android settings",
|
||
"update_open_settings": "Open settings",
|
||
"dl_title": "Downloads",
|
||
"dl_download": "Download",
|
||
"dl_remove": "Remove from device",
|
||
"dl_album": "Download album",
|
||
"dl_all_likes": "Download all likes",
|
||
"dl_wifi_only": "Download over Wi-Fi only",
|
||
"dl_auto_likes": "Download new likes",
|
||
"dl_usage": "{{used}} MB used · {{free}} GB free on the phone",
|
||
"dl_pending_one": "{{count}} track queued",
|
||
"dl_pending_other": "{{count}} tracks queued",
|
||
"dl_waiting_wifi": "Downloads are waiting for Wi-Fi ({{count}})",
|
||
"dl_waiting_network": "Downloads are waiting for a connection ({{count}})",
|
||
"dl_retry": "Retry failed",
|
||
"dl_empty": "Download tracks, albums and likes to listen without a connection",
|
||
"dl_pending_few": "{{count}} tracks queued",
|
||
"dl_pending_many": "{{count}} tracks queued",
|
||
"player_view": "Player view",
|
||
"player_cover": "Cover",
|
||
"player_wave": "Wave",
|
||
"quality": "Sound quality",
|
||
"quality_wifi": "On Wi-Fi",
|
||
"quality_cellular": "On mobile data",
|
||
"quality_download": "Downloads",
|
||
"quality_hint": "The new quality applies to the next tracks; downloaded tracks are not re-downloaded.",
|
||
"q_original": "Original",
|
||
"q_high": "High",
|
||
"q_medium": "Medium",
|
||
"q_low": "Low",
|
||
"cache": "Recent tracks cache",
|
||
"cache_clear": "Clear ({{size}} MB)",
|
||
"cache_pending": "Will be cleared on next launch"
|
||
},
|
||
"onboarding": {
|
||
"title": "What do you like to listen to?",
|
||
"subtitle": "Pick a few artists and genres to start My Wave. After that it learns from what you play.",
|
||
"artists": "Artists",
|
||
"genres": "Genres",
|
||
"skip": "Skip",
|
||
"done": "Done — to the wave",
|
||
"pick_more_one": "Pick {{count}} more artist",
|
||
"pick_more_few": "Pick {{count}} more artists",
|
||
"pick_more_many": "Pick {{count}} more artists",
|
||
"pick_more_other": "Pick {{count}} more artists",
|
||
"gender": "Gender",
|
||
"age_group": "Age group",
|
||
"unspecified": "Prefer not to say",
|
||
"edit": "Recommendation preferences",
|
||
"age_hint": "Your group will advance approximately from the year selected. You can correct it in your profile.",
|
||
"genders": {
|
||
"male": "Male",
|
||
"female": "Female",
|
||
"other": "Other"
|
||
},
|
||
"ages": {
|
||
"under_13": "До 13",
|
||
"13_19": "13–19",
|
||
"20_29": "20–29",
|
||
"30_39": "30–39",
|
||
"40_49": "40–49",
|
||
"50_59": "50–59",
|
||
"60_plus": "60+"
|
||
}
|
||
},
|
||
"playlists": {
|
||
"share": "Share playlist",
|
||
"link_copied": "Playlist link copied",
|
||
"shared": "Shared by link",
|
||
"revoke_share": "Disable link access",
|
||
"share_hint": "Anyone with an account on this server and this link can listen. Only you can edit the playlist.",
|
||
"name": "Name",
|
||
"delete_confirm": "Delete playlist “{{name}}”? Tracks will remain in your library.",
|
||
"manage": "Manage tracks",
|
||
"title": "Playlists",
|
||
"move_down": "Move {{name}} down",
|
||
"edit": "Edit playlist",
|
||
"description": "Description",
|
||
"add": "Add to playlist",
|
||
"search": "Search playlists",
|
||
"create": "Create playlist",
|
||
"find_tracks": "Find music",
|
||
"remove_track": "Remove {{name}} from playlist",
|
||
"save": "Save",
|
||
"private": "Private playlist",
|
||
"empty": "Your playlists will appear here. Create your first and add your favourite music.",
|
||
"empty_tracks": "No tracks yet. Use Add to playlist in search, albums or your collection.",
|
||
"loading": "Loading playlists…",
|
||
"move_up": "Move {{name}} up",
|
||
"delete": "Delete playlist",
|
||
"no_results": "No playlists found"
|
||
},
|
||
"social": {
|
||
"title": "Friends & messages",
|
||
"subtitle": "Music worth sharing. Conversations at your own pace.",
|
||
"people": "Friends",
|
||
"notifications": "Notifications",
|
||
"search": "Find by name or username",
|
||
"loading": "Loading…",
|
||
"empty": "Find someone you know and send your first request.",
|
||
"no_results": "No matches. Try another username.",
|
||
"no_notifications": "All quiet here. New events will appear here.",
|
||
"choose_chat": "Choose a friend to start a conversation.",
|
||
"open": "Open",
|
||
"mark_read": "Mark read",
|
||
"chat": "Message",
|
||
"add": "Add friend",
|
||
"accept": "Accept",
|
||
"decline": "Decline",
|
||
"cancel": "Cancel request",
|
||
"remove": "Unfriend",
|
||
"block": "Block",
|
||
"unblock": "Unblock",
|
||
"rel_none": "Not connected",
|
||
"rel_incoming": "Incoming request",
|
||
"rel_outgoing": "Request sent",
|
||
"rel_friend": "Friend",
|
||
"rel_blocked": "Blocked",
|
||
"kind_friend_request": "Sent you a friend request",
|
||
"kind_friend_accepted": "Accepted your friend request",
|
||
"kind_message": "New private message",
|
||
"kind_music": "Shared music with you",
|
||
"chat_hint": "A private conversation. No sounds or interruptions.",
|
||
"older": "Earlier messages",
|
||
"first_message": "Say hello or share music from the player.",
|
||
"listen_track": "Open track",
|
||
"listen_playlist": "Open playlist",
|
||
"read": "Read",
|
||
"sent": "Sent",
|
||
"message": "Message",
|
||
"send": "Send",
|
||
"copy": "Copy link",
|
||
"copied": "Link copied",
|
||
"external": "Share to an app",
|
||
"send_friend": "Send to a friend",
|
||
"no_friends_share": "Add friends to share music in one tap.",
|
||
"back": "Back",
|
||
"quiet": "No sounds. New events appear in the counter.",
|
||
"share_error": "Could not send. Please try again.",
|
||
"attachment_unavailable": "This music is no longer available.",
|
||
"activity_visibility": "Show my listening activity",
|
||
"visibility_nobody": "Nobody",
|
||
"visibility_friends": "Friends",
|
||
"visibility_everyone": "Everyone",
|
||
"activity_privacy_hint": "Hidden by default. Your audience can see the track and open the playlist while you listen.",
|
||
"listening": "Listening now",
|
||
"from_playlist": "Playlist “{{name}}”",
|
||
"kind_listening_request": "Wants to listen with you",
|
||
"kind_listening_invite": "Invites you to their stream",
|
||
"kind_listening_accepted": "Accepted listening together",
|
||
"together": "Listen together",
|
||
"join_stream": "Join their listening stream",
|
||
"invite_stream": "Invite to my listening stream",
|
||
"stream_choice": "Who leads the listening session",
|
||
"stream_hint": "The host controls tracks, pause and seeking. Everyone keeps their own volume and can leave.",
|
||
"stream_requests": "Accept requests and invitations from",
|
||
"stream_auto": "Automatically accept from",
|
||
"stream_autoplay": "Start audio when joining",
|
||
"stream_prefs_hint": "Automatic acceptance still follows your allowed audience. An invitation never transfers control of another player.",
|
||
"stream_request_sent": "Request sent",
|
||
"stream_invite_sent": "Invitation sent",
|
||
"stream_incoming_join": "{{name}} wants to join you",
|
||
"stream_incoming_invite": "{{name}} invites you to their stream",
|
||
"stream_pending": "Waiting for confirmation",
|
||
"stream_host": "You are hosting",
|
||
"stream_following": "Listening with {{name}}",
|
||
"stream_controls": "The host controls playback. Your volume and likes remain available.",
|
||
"stream_end": "End stream",
|
||
"stream_leave": "Leave session",
|
||
"stream_start_audio": "Start listening",
|
||
"stream_lost": "Connection to the host was lost. Playback is paused.",
|
||
"stream_listeners": "Listeners: {{count}}",
|
||
"stream_waiting_audio": "You have joined. Start audio when you are ready.",
|
||
"friends_recommendations": "Use friends’ music in My Wave",
|
||
"friends_recommendations_hint": "Mix in a little music that friends allow you to see. Your own taste remains the main signal.",
|
||
"messages": "Messages",
|
||
"minimize": "Minimize chat",
|
||
"message_actions": "Message actions",
|
||
"reply": "Reply",
|
||
"replying": "Replying to a message",
|
||
"edit_message": "Edit",
|
||
"editing": "Editing message",
|
||
"delete_message": "Delete for everyone",
|
||
"message_deleted": "Message deleted",
|
||
"edited": "edited",
|
||
"typing": "typing…",
|
||
"chat_search": "Search conversation",
|
||
"chat_no_results": "No messages found",
|
||
"cancel_edit": "Cancel editing",
|
||
"cancel_reply": "Cancel reply",
|
||
"emoji": "Add emoji",
|
||
"draft": "Draft",
|
||
"new_messages": "New messages"
|
||
}
|
||
}
|