1c0a7cb850
Phase 4 — New Widget Types: - Clock/Weather, System Stats, RSS/Feed, Calendar, Markdown, Metric/Counter, Link Group, Camera/Stream widgets - Backend services with caching for each data source - Full creation form with dynamic config fields per type Phase 5 — Visual & Styling Enhancements: - Glassmorphism card style (solid/glass/outline) - Board-level themes with per-board hue/saturation - Animated SVG status rings replacing static dots - Card size options (compact/medium/large) - Custom CSS injection (admin + per-board, sanitized) - Wallpaper backgrounds with blur/overlay/parallax Phase 6 — Functional Features: - Favorites bar with drag-and-drop reordering - Recent apps tracking with privacy toggle - Uptime dashboard page (/status, guest-accessible) - Notifications system (Discord/Slack/Telegram/HTTP webhooks) - App tags with filtering in board view - Multi-URL app cards with expandable sub-links - Personal API tokens with scoped permissions - Audit log with retention and admin viewer Phase 7 — Quality of Life: - Onboarding wizard (5-step first-launch setup) - App URL health preview with favicon/title detection - Board templates (4 built-in + custom import/export) - Keyboard shortcut overlay (j/k nav, 1-9 boards, ? help) 212 files changed, 15641 insertions, 980 deletions. Build, lint, type check, and 222 tests all pass.
342 lines
13 KiB
JSON
342 lines
13 KiB
JSON
{
|
|
"app_name": "App Launcher",
|
|
"app_title": "Web App Launcher",
|
|
|
|
"nav.navigation": "Navigation",
|
|
"nav.boards": "Boards",
|
|
"nav.apps": "Apps",
|
|
"nav.admin": "Admin",
|
|
"nav.admin_panel": "Admin Panel",
|
|
|
|
"auth.login": "Sign In",
|
|
"auth.login_title": "Welcome back",
|
|
"auth.login_subtitle": "Sign in to your account",
|
|
"auth.login_submit": "Sign In",
|
|
"auth.login_submitting": "Signing in...",
|
|
"auth.register": "Register",
|
|
"auth.register_title": "Create Account",
|
|
"auth.register_subtitle": "Get started with App Launcher",
|
|
"auth.register_submit": "Create Account",
|
|
"auth.register_submitting": "Creating account...",
|
|
"auth.email": "Email",
|
|
"auth.email_placeholder": "you@example.com",
|
|
"auth.password": "Password",
|
|
"auth.password_placeholder": "Enter your password",
|
|
"auth.password_placeholder_register": "At least 6 characters",
|
|
"auth.display_name": "Display Name",
|
|
"auth.display_name_placeholder": "Your name",
|
|
"auth.logout": "Sign Out",
|
|
"auth.oauth_signin": "Sign in with OAuth",
|
|
"auth.or": "or",
|
|
"auth.no_account": "Don't have an account?",
|
|
"auth.have_account": "Already have an account?",
|
|
"auth.sign_in_link": "Sign in",
|
|
|
|
"board.title": "Boards",
|
|
"board.boards_available": "{count} board(s) available",
|
|
"board.new": "New Board",
|
|
"board.edit": "Edit",
|
|
"board.edit_board": "Edit Board",
|
|
"board.all_boards": "All Boards",
|
|
"board.back_to_boards": "Back to Boards",
|
|
"board.back_to_board": "Back to Board",
|
|
"board.no_boards": "No boards available.",
|
|
"board.sign_in_more": "Sign in to see more boards.",
|
|
"board.no_sections": "This board has no sections yet.",
|
|
"board.default": "Default",
|
|
"board.guest": "Guest",
|
|
"board.sections_count": "{count} section(s)",
|
|
"board.properties": "Board Properties",
|
|
"board.save": "Save Board",
|
|
"board.create": "Create Board",
|
|
"board.creating": "Creating...",
|
|
"board.default_board": "Default board",
|
|
"board.guest_accessible": "Guest accessible",
|
|
"board.guest_access_title": "Guest Access",
|
|
"board.guest_access_description": "When enabled, this board is visible to unauthenticated visitors without requiring sign-in.",
|
|
"board.guest_access_enabled": "This board is publicly accessible",
|
|
"board.guest_access_disabled": "This board is private",
|
|
"board.permissions_title": "Permissions",
|
|
"board.permissions_description": "Manage who can view, edit, or administer this board.",
|
|
"board.access_grant": "Grant Access",
|
|
"board.access_search_placeholder": "Search...",
|
|
"board.access_loading": "Loading permissions...",
|
|
"board.access_none": "No permissions configured for this board.",
|
|
"board.access_private": "Private",
|
|
"board.access_shared": "Shared",
|
|
"board.share": "Share",
|
|
"board.share_title": "Share \"{name}\"",
|
|
"board.share_copy_link": "Copy Link",
|
|
"board.share_copied": "Copied!",
|
|
"board.share_guest_description": "Anyone with the link can view this board without signing in.",
|
|
"board.share_add_access": "Add People or Groups",
|
|
"board.share_current_access": "Current Access",
|
|
|
|
"section.title_label": "Title",
|
|
"section.icon_label": "Icon",
|
|
"section.icon_placeholder": "Optional",
|
|
"section.sections": "Sections",
|
|
"section.add": "Add Section",
|
|
"section.create": "Create Section",
|
|
"section.order": "Order: {order}",
|
|
|
|
"widget.add": "Add Widget",
|
|
"widget.select_app": "Select App",
|
|
"widget.choose_app": "Choose an app...",
|
|
"widget.no_widgets": "No widgets in this section.",
|
|
"widget.no_widgets_dnd": "No widgets. Drag widgets here or add one above.",
|
|
"widget.type": "{type} widget",
|
|
"widget.number": "Widget #{order}",
|
|
"widget.remove": "Remove",
|
|
|
|
"app.title": "App Registry",
|
|
"app.apps_registered": "{count} app(s) registered",
|
|
"app.add": "Add App",
|
|
"app.new": "New App",
|
|
"app.no_apps": "No apps registered yet.",
|
|
"app.no_apps_hint": "Click \"Add App\" to register your first application.",
|
|
"app.all_categories": "All",
|
|
"app.name": "Name",
|
|
"app.name_placeholder": "My Application",
|
|
"app.url": "URL",
|
|
"app.url_placeholder": "https://my-app.local:8080",
|
|
"app.description": "Description",
|
|
"app.description_placeholder": "Brief description of this app",
|
|
"app.category": "Category",
|
|
"app.category_placeholder": "e.g. Media, Monitoring, Storage",
|
|
"app.tags": "Tags",
|
|
"app.tags_placeholder": "Comma-separated tags",
|
|
"app.icon": "Icon",
|
|
"app.icon_lucide": "Lucide Icon",
|
|
"app.icon_simple": "Simple Icons",
|
|
"app.icon_url": "Image URL",
|
|
"app.icon_emoji": "Emoji",
|
|
"app.icon_lucide_placeholder": "e.g. globe, server, home",
|
|
"app.icon_simple_placeholder": "e.g. github, docker",
|
|
"app.icon_url_placeholder": "https://example.com/icon.png",
|
|
"app.icon_emoji_placeholder": "e.g. \ud83c\udf10",
|
|
"app.icon_preview": "Icon preview",
|
|
"app.save": "Save App",
|
|
"app.saving": "Saving...",
|
|
"app.healthcheck_toggle": "Healthcheck Settings",
|
|
"app.healthcheck_show": "Show",
|
|
"app.healthcheck_hide": "Hide",
|
|
"app.healthcheck_enabled": "Enable Healthcheck",
|
|
"app.healthcheck_method": "Method",
|
|
"app.healthcheck_expected_status": "Expected Status",
|
|
"app.healthcheck_timeout": "Timeout (ms)",
|
|
"app.healthcheck_interval": "Interval (seconds)",
|
|
"app.icon_board_label": "Icon (Lucide name)",
|
|
"app.uptime": "uptime",
|
|
"app.history_loading": "Loading history...",
|
|
|
|
"admin.panel": "Admin Panel",
|
|
"admin.users": "Users",
|
|
"admin.groups": "Groups",
|
|
"admin.settings": "Settings",
|
|
|
|
"admin.user_management": "User Management",
|
|
"admin.create_user": "Create User",
|
|
"admin.new_user": "New User",
|
|
"admin.user_column": "User",
|
|
"admin.email_column": "Email",
|
|
"admin.role_column": "Role",
|
|
"admin.provider_column": "Provider",
|
|
"admin.groups_column": "Groups",
|
|
"admin.actions_column": "Actions",
|
|
"admin.role_user": "User",
|
|
"admin.role_admin": "Admin",
|
|
"admin.select_group": "Select group",
|
|
"admin.add_to_group": "+ Add",
|
|
"admin.remove_from_group": "Remove from group",
|
|
"admin.no_users": "No users found.",
|
|
|
|
"admin.group_management": "Group Management",
|
|
"admin.create_group": "Create Group",
|
|
"admin.new_group": "New Group",
|
|
"admin.name_column": "Name",
|
|
"admin.description_column": "Description",
|
|
"admin.members_column": "Members",
|
|
"admin.default_column": "Default",
|
|
"admin.default_group_hint": "Default group (auto-assign new users)",
|
|
"admin.no_groups": "No groups found.",
|
|
"admin.yes": "Yes",
|
|
"admin.no": "No",
|
|
|
|
"admin.system_settings": "System Settings",
|
|
"admin.settings_description": "Configure global application settings.",
|
|
"admin.authentication": "Authentication",
|
|
"admin.auth_mode": "Auth Mode",
|
|
"admin.auth_local": "Local",
|
|
"admin.auth_oauth": "OAuth",
|
|
"admin.auth_both": "Both",
|
|
"admin.registration_enabled": "Allow user registration",
|
|
"admin.oauth_config": "OAuth Configuration",
|
|
"admin.oauth_description": "Configure your OIDC provider (e.g. Authentik, Keycloak). Set Auth Mode to \"OAuth\" or \"Both\" above to enable OAuth login.",
|
|
"admin.oauth_client_id": "Client ID",
|
|
"admin.oauth_client_id_placeholder": "OAuth client ID",
|
|
"admin.oauth_client_secret": "Client Secret",
|
|
"admin.oauth_client_secret_placeholder": "OAuth client secret",
|
|
"admin.oauth_discovery_url": "Discovery URL",
|
|
"admin.oauth_discovery_url_placeholder": "https://example.com/.well-known/openid-configuration",
|
|
"admin.oauth_test": "Test Connection",
|
|
"admin.oauth_testing": "Testing...",
|
|
"admin.oauth_connected": "Connected to issuer: {issuer}",
|
|
"admin.oauth_network_error": "Network error \u2014 could not reach the server",
|
|
"admin.theme_defaults": "Theme Defaults",
|
|
"admin.default_theme": "Default Theme",
|
|
"admin.default_primary_color": "Default Primary Color",
|
|
"admin.healthcheck_defaults": "Healthcheck Defaults",
|
|
"admin.healthcheck_defaults_description": "JSON configuration for default healthcheck behavior (interval, timeout, method).",
|
|
"admin.healthcheck_defaults_label": "Defaults (JSON)",
|
|
"admin.save_settings": "Save Settings",
|
|
"admin.saving_settings": "Saving...",
|
|
|
|
"admin.perm_title": "Grant Permission",
|
|
"admin.perm_entity_type": "Entity Type",
|
|
"admin.perm_entity": "Entity",
|
|
"admin.perm_target_type": "Target Type",
|
|
"admin.perm_target": "Target",
|
|
"admin.perm_level": "Level",
|
|
"admin.perm_board": "Board",
|
|
"admin.perm_app": "App",
|
|
"admin.perm_user": "User",
|
|
"admin.perm_group": "Group",
|
|
"admin.perm_view": "View",
|
|
"admin.perm_edit": "Edit",
|
|
"admin.perm_admin": "Admin",
|
|
"admin.perm_grant": "Grant",
|
|
"admin.perm_revoke": "Revoke",
|
|
"admin.perm_select": "Select...",
|
|
"admin.perm_entity_column": "Entity",
|
|
"admin.perm_target_column": "Target",
|
|
"admin.perm_level_column": "Level",
|
|
"admin.perm_action_column": "Action",
|
|
"admin.perm_none": "No permissions configured.",
|
|
"admin.perm_search_placeholder": "Type to search...",
|
|
|
|
"admin.discovery_title": "Service Discovery",
|
|
"admin.discovery_description": "Scan Docker containers and Traefik routers to automatically discover running services and register them as apps.",
|
|
"admin.discovery_scan": "Scan for Services",
|
|
"admin.discovery_scanning": "Scanning...",
|
|
"admin.discovery_approve": "Approve Selected",
|
|
"admin.discovery_approving": "Approving...",
|
|
"admin.discovery_source": "Source",
|
|
"admin.discovery_status": "Status",
|
|
"admin.discovery_source_docker": "Docker",
|
|
"admin.discovery_source_traefik": "Traefik",
|
|
"admin.discovery_already_registered": "Already registered",
|
|
"admin.discovery_new": "New",
|
|
"admin.discovery_no_results": "No services discovered. Check your Docker socket path or Traefik API URL.",
|
|
"admin.discovery_config": "Service Discovery Configuration",
|
|
"admin.discovery_config_description": "Configure Docker and Traefik endpoints for automatic service discovery. These settings are used by the Discovery panel below.",
|
|
"admin.discovery_docker_socket": "Docker Socket Path",
|
|
"admin.discovery_docker_socket_hint": "Path to Docker socket (e.g. /var/run/docker.sock). Set via DOCKER_SOCKET_PATH env var.",
|
|
"admin.discovery_traefik_url": "Traefik API URL",
|
|
"admin.discovery_traefik_url_hint": "Traefik dashboard API base URL (e.g. http://traefik:8080). Set via TRAEFIK_API_URL env var.",
|
|
|
|
"admin.import_export_title": "Import / Export",
|
|
"admin.import_export_description": "Export all data (apps, boards, groups, settings) as JSON, or import from a previously exported file.",
|
|
"admin.export_section": "Export Data",
|
|
"admin.export_button": "Export JSON",
|
|
"admin.export_exporting": "Exporting...",
|
|
"admin.export_success": "Export downloaded successfully.",
|
|
"admin.import_section": "Import Data",
|
|
"admin.import_select_file": "Select a JSON export file",
|
|
"admin.import_preview": "Preview",
|
|
"admin.import_mode_label": "Conflict Resolution",
|
|
"admin.import_mode_skip": "Skip existing (keep current data)",
|
|
"admin.import_mode_overwrite": "Overwrite existing (replace with imported data)",
|
|
"admin.import_button": "Import",
|
|
"admin.import_importing": "Importing...",
|
|
"admin.import_success": "Import completed.",
|
|
"admin.import_invalid_json": "Selected file is not valid JSON.",
|
|
|
|
"search.placeholder": "Search apps and boards...",
|
|
"search.trigger": "Search...",
|
|
"search.min_chars": "Type at least 2 characters to search",
|
|
"search.no_results": "No results for \"{query}\"",
|
|
"search.apps": "Apps",
|
|
"search.boards": "Boards",
|
|
"search.nav_hint": "navigate",
|
|
"search.select_hint": "select",
|
|
"search.close_hint": "close",
|
|
|
|
"common.search_filter": "Filter...",
|
|
|
|
"common.save": "Save",
|
|
"common.cancel": "Cancel",
|
|
"common.delete": "Delete",
|
|
"common.create": "Create",
|
|
"common.back": "Back",
|
|
"common.edit": "Edit",
|
|
"common.add": "Add",
|
|
"common.confirm": "Confirm?",
|
|
"common.yes": "Yes",
|
|
"common.no": "No",
|
|
"common.name": "Name",
|
|
"common.description": "Description",
|
|
"common.required": "*",
|
|
|
|
"status.online": "Online",
|
|
"status.offline": "Offline",
|
|
"status.degraded": "Degraded",
|
|
"status.unknown": "Unknown",
|
|
|
|
"theme.dark": "Dark",
|
|
"theme.light": "Light",
|
|
"theme.system": "System",
|
|
"theme.toggle": "Toggle theme (current: {mode})",
|
|
"theme.title": "Theme: {mode}",
|
|
|
|
"bg.mesh": "Mesh Gradient",
|
|
"bg.particles": "Particles",
|
|
"bg.aurora": "Aurora",
|
|
"bg.none": "None",
|
|
"bg.title": "Background effect",
|
|
"bg.aria_label": "Change background effect",
|
|
|
|
"sidebar.expand": "Expand sidebar",
|
|
"sidebar.collapse": "Collapse sidebar",
|
|
"sidebar.toggle": "Toggle sidebar",
|
|
"sidebar.close": "Close sidebar",
|
|
|
|
"home.welcome": "Welcome, {name}. No default board is configured yet.",
|
|
"home.view_boards": "View Boards",
|
|
"home.browse_apps": "Browse Apps",
|
|
|
|
"language.label": "Language",
|
|
|
|
"settings.title": "Settings",
|
|
"settings.theme": "Theme Mode",
|
|
"settings.primary_color": "Primary Color",
|
|
"settings.hue": "Hue",
|
|
"settings.saturation": "Saturation",
|
|
"settings.background": "Background Effect",
|
|
"settings.language": "Language",
|
|
"settings.save": "Save Preferences",
|
|
"settings.saving": "Saving...",
|
|
"settings.saved": "Preferences saved!",
|
|
|
|
"offline.title": "You're Offline",
|
|
"offline.description": "It looks like you've lost your internet connection. Check your network and try again.",
|
|
"offline.retry": "Retry",
|
|
|
|
"install.title": "Install App",
|
|
"install.description": "Add Web App Launcher to your home screen for quick access.",
|
|
"install.button": "Install",
|
|
"install.dismiss": "Dismiss install prompt",
|
|
|
|
"settings.bookmarklet_title": "Quick-Add Bookmarklet",
|
|
"settings.bookmarklet_instructions": "Drag the button below to your browser's bookmarks bar. When visiting any web page, click it to quickly add that site to your App Launcher.",
|
|
"settings.bookmarklet_drag": "Add to Launcher",
|
|
"settings.bookmarklet_drag_hint": "Drag this to your bookmarks bar",
|
|
"settings.bookmarklet_show_code": "Show bookmarklet code",
|
|
|
|
"app.quick_add_title": "Quick Add App",
|
|
"app.quick_add_description": "Review the details below and save to add this app to your launcher.",
|
|
"app.quick_add_success": "App added successfully!",
|
|
"app.quick_add_view_apps": "View Apps",
|
|
"app.quick_add_close": "Close Window"
|
|
}
|