feat(phase2): localization EN/RU + additional widget types

- Add svelte-i18n with 224 translation keys (English + Russian)
- Language switcher in header (EN/RU toggle, persists to localStorage)
- Extract all hardcoded strings from 37 component/page files
- Add 4 new widget types: Bookmark, Note (markdown), Embed (iframe), Status
- WidgetRenderer dispatches by type, WidgetGrid supports full-width widgets
- Type-specific config forms in board editor
- Install marked for markdown rendering
This commit is contained in:
2026-03-24 23:18:05 +03:00
parent bf4e5089ee
commit 477c0e4d52
52 changed files with 1776 additions and 395 deletions
+245
View File
@@ -0,0 +1,245 @@
{
"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",
"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)",
"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.",
"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",
"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"
}