ba39b08e09
apple / swift (push) Successful in 1m6s
ci / rust (push) Successful in 5m51s
android / android (push) Successful in 6m21s
ci / web (push) Successful in 49s
ci / docs-site (push) Successful in 58s
windows-host / package (push) Successful in 8m6s
release / apple (push) Successful in 8m17s
deb / build-publish (push) Successful in 3m26s
decky / build-publish (push) Successful in 25s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 5s
ci / bench (push) Successful in 4m42s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 30s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 2m36s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 2m17s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Failing after 19s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 51s
apple / screenshots (push) Successful in 5m45s
docker / deploy-docs (push) Successful in 22s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Failing after 22s
Web console - Pairing/Library/Stats refactored into self-contained subsections that each own their own queries + mutations; a shared slot-based layout (view.tsx) is filled by the live page (containers) and Storybook (pure cards + fixtures) so the layout can't drift. - All paired devices in one list on Pairing with a protocol column (punktfunk/1 + Moonlight), routing each unpair to the right endpoint; the redundant Clients page is removed. - Library: overview grid split from the add/edit form into separate files. - Login screen links out to the docs. Docs - "Console login password" section on every host page (apt/RPM/Bazzite/SteamOS/Windows) plus a new "Forgot your Password?" troubleshooting page, linked from the login screen. - Console served as HTTP/1.1 over TLS (drop the unusable HTTP/3 advertising) across the Bun entry, launchers, systemd units, and packaging. Tooling - Biome now respects .gitignore (stops linting generated code), config migrated to 2.5.1; all lint issues fixed cleanly. Also includes this branch's in-progress host, Apple client, packaging, and CI changes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
159 lines
6.6 KiB
JSON
159 lines
6.6 KiB
JSON
{
|
|
"$schema": "https://inlang.com/schema/inlang-message-format",
|
|
"app_name": "punktfunk",
|
|
"app_tagline": "management console",
|
|
"nav_dashboard": "Dashboard",
|
|
"nav_host": "Host",
|
|
"nav_clients": "Paired clients",
|
|
"nav_pairing": "Pairing",
|
|
"nav_library": "Library",
|
|
"nav_settings": "Settings",
|
|
"status_title": "Live status",
|
|
"status_video": "Video",
|
|
"status_audio": "Audio",
|
|
"status_streaming": "Streaming",
|
|
"status_idle": "Idle",
|
|
"status_session": "Session",
|
|
"status_no_session": "No active session",
|
|
"status_paired_count": "Paired clients",
|
|
"status_pin_pending": "Pairing PIN pending",
|
|
"stream_codec": "Codec",
|
|
"stream_resolution": "Resolution",
|
|
"stream_fps": "Frame rate",
|
|
"stream_bitrate": "Bitrate",
|
|
"action_stop_session": "Stop session",
|
|
"action_request_idr": "Request keyframe",
|
|
"action_unpair": "Unpair",
|
|
"host_identity": "Identity",
|
|
"host_hostname": "Hostname",
|
|
"host_local_ip": "Local IP",
|
|
"host_version": "Version",
|
|
"host_abi": "ABI version",
|
|
"host_codecs": "Codecs",
|
|
"host_ports": "Ports",
|
|
"host_uniqueid": "Unique ID",
|
|
"host_compositors": "Compositors",
|
|
"host_compositors_help": "Backends the host can drive a virtual output on. Pass an id to a client's --compositor flag; the host honors it if available, else auto-detects.",
|
|
"compositor_available": "Available",
|
|
"compositor_unavailable": "Unavailable",
|
|
"compositor_default": "Default",
|
|
"clients_title": "Paired clients",
|
|
"clients_empty": "No paired clients yet.",
|
|
"clients_name": "Name",
|
|
"clients_fingerprint": "Fingerprint",
|
|
"clients_unpair_confirm": "Unpair this client? It will need to pair again to connect.",
|
|
"pairing_title": "Pairing",
|
|
"pairing_idle": "No pairing in progress. Start pairing from a Moonlight client, then enter its PIN here.",
|
|
"pairing_waiting": "A client is waiting to pair. Enter the PIN it shows:",
|
|
"pairing_pin_label": "PIN",
|
|
"pairing_submit": "Submit PIN",
|
|
"pairing_success": "Paired successfully.",
|
|
"pairing_failed": "Pairing failed — check the PIN and try again.",
|
|
"pairing_native_title": "Pair a device",
|
|
"pairing_native_desc": "Show a one-time PIN here, then enter it in your punktfunk app to pair this device.",
|
|
"pairing_native_disabled": "The native host isn't running. Start it with `serve --native` to pair punktfunk devices.",
|
|
"pairing_native_arm": "Pair a device",
|
|
"pairing_native_enter": "Enter this PIN on your device:",
|
|
"pairing_native_expires": "Expires in",
|
|
"pairing_native_cancel": "Cancel",
|
|
"pairing_native_devices": "Paired devices",
|
|
"pairing_native_empty": "No devices paired yet.",
|
|
"pairing_native_unpair_confirm": "Unpair this device? It will need to pair again to connect.",
|
|
"pairing_protocol": "Protocol",
|
|
"pairing_protocol_native": "punktfunk/1",
|
|
"pairing_protocol_moonlight": "Moonlight",
|
|
"pairing_pending_title": "Waiting for approval",
|
|
"pairing_pending_desc": "These devices tried to connect. Approving pairs a device immediately — no PIN needed.",
|
|
"pairing_pending_approve": "Approve",
|
|
"pairing_pending_deny": "Deny",
|
|
"pairing_pending_name_prompt": "Name this device:",
|
|
"pairing_pending_age_just_now": "just now",
|
|
"pairing_pending_age_secs": "{s}s ago",
|
|
"pairing_pending_age_mins": "{min} min ago",
|
|
"pairing_moonlight_title": "Moonlight (GameStream) pairing",
|
|
"library_title": "Library",
|
|
"library_empty": "No games found yet.",
|
|
"library_store_steam": "Steam",
|
|
"library_store_custom": "Custom",
|
|
"library_add_title": "Add a custom game",
|
|
"library_edit_title": "Edit custom game",
|
|
"library_add_button": "Add custom game",
|
|
"library_field_title": "Title",
|
|
"library_field_portrait": "Portrait art URL",
|
|
"library_field_hero": "Hero art URL",
|
|
"library_field_header": "Header art URL",
|
|
"library_field_command": "Launch command",
|
|
"library_field_command_help": "Optional. The command the host runs to launch this title.",
|
|
"library_save": "Save",
|
|
"library_create": "Add",
|
|
"library_cancel": "Cancel",
|
|
"library_edit": "Edit",
|
|
"library_delete": "Delete",
|
|
"library_delete_confirm": "Delete this custom game? This can't be undone.",
|
|
"settings_title": "Settings",
|
|
"settings_token_label": "API token",
|
|
"settings_token_help": "Bearer token for the management API. Leave empty for a loopback host with no token.",
|
|
"settings_language": "Language",
|
|
"settings_save": "Save",
|
|
"settings_saved": "Saved.",
|
|
"common_loading": "Loading…",
|
|
"common_error": "Something went wrong.",
|
|
"common_retry": "Retry",
|
|
"common_yes": "Yes",
|
|
"common_cancel": "Cancel",
|
|
"common_unauthorized": "Session expired — redirecting to sign in…",
|
|
"login_title": "Sign in",
|
|
"login_subtitle": "Enter the management password to continue. Don't know what to do?",
|
|
"login_docs_link": "Visit the documentation",
|
|
"login_password": "Password",
|
|
"login_submit": "Sign in",
|
|
"login_error": "Wrong password.",
|
|
"login_signing_in": "Signing in…",
|
|
"action_logout": "Sign out",
|
|
"nav_stats": "Performance",
|
|
"stats_title": "Performance",
|
|
"stats_subtitle": "Record a session's pipeline timings and review them as graphs.",
|
|
"stats_capture_title": "Capture",
|
|
"stats_capture_desc": "Arm capture, run a session, then stop to save a recording. Sampling runs at the host's aggregation boundary — no per-frame overhead.",
|
|
"stats_recording": "Recording",
|
|
"stats_idle": "Idle",
|
|
"stats_start": "Start capture",
|
|
"stats_stop": "Stop & save",
|
|
"stats_elapsed": "Elapsed",
|
|
"stats_samples": "Samples",
|
|
"stats_kind": "Path",
|
|
"stats_kind_native": "Native",
|
|
"stats_kind_gamestream": "GameStream",
|
|
"stats_live_title": "Live",
|
|
"stats_live_waiting": "Armed — waiting for the first samples. Start a session to begin recording.",
|
|
"stats_latency_title": "Latency by stage",
|
|
"stats_latency_axis": "µs",
|
|
"stats_latency_desc": "Per-stage pipeline time, stacked — the \"where does the time go\" view.",
|
|
"stats_throughput_title": "Throughput",
|
|
"stats_health_title": "Health",
|
|
"stats_fps_new": "New fps",
|
|
"stats_fps_repeat": "Repeat fps",
|
|
"stats_mbps": "Mb/s",
|
|
"stats_p99": "p99",
|
|
"stats_p50": "p50",
|
|
"stats_frames_dropped": "Frames dropped",
|
|
"stats_packets_dropped": "Packets dropped",
|
|
"stats_send_dropped": "Send drops",
|
|
"stats_fec_recovered": "FEC recovered",
|
|
"stats_recordings_title": "Recordings",
|
|
"stats_recordings_empty": "No recordings yet. Start a capture to record one.",
|
|
"stats_col_time": "Time",
|
|
"stats_col_kind": "Path",
|
|
"stats_col_resolution": "Resolution",
|
|
"stats_col_codec": "Codec",
|
|
"stats_col_duration": "Duration",
|
|
"stats_col_samples": "Samples",
|
|
"stats_view": "View",
|
|
"stats_download": "Download",
|
|
"stats_delete": "Delete",
|
|
"stats_delete_confirm": "Delete this recording? This can't be undone.",
|
|
"stats_detail_title": "Recording detail",
|
|
"stats_close": "Close",
|
|
"stats_no_samples": "This recording has no samples."
|
|
}
|