feat(docker-watcher): phase 14 - frontend polish & modern UI
Design system with CSS custom properties (light/dark themes). 38 Lucide SVG icon components. Dark mode with system preference. EN/RU localization with i18n store. Skeleton loaders, empty states, toggle switches, micro-interactions. Responsive sidebar with mobile hamburger menu. All pages polished with consistent styling.
This commit is contained in:
@@ -0,0 +1,351 @@
|
||||
{
|
||||
"app": {
|
||||
"name": "Docker Watcher",
|
||||
"version": "v0.1"
|
||||
},
|
||||
"nav": {
|
||||
"dashboard": "Dashboard",
|
||||
"projects": "Projects",
|
||||
"deploy": "Deploy",
|
||||
"settings": "Settings"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Dashboard",
|
||||
"quickDeploy": "Quick Deploy",
|
||||
"totalProjects": "Total Projects",
|
||||
"runningInstances": "Running Instances",
|
||||
"failedInstances": "Failed Instances",
|
||||
"projects": "Projects",
|
||||
"retry": "Retry",
|
||||
"noProjects": "No projects yet.",
|
||||
"addFirst": "Add your first project",
|
||||
"loadFailed": "Failed to load dashboard"
|
||||
},
|
||||
"projects": {
|
||||
"title": "Projects",
|
||||
"addProject": "Add Project",
|
||||
"cancel": "Cancel",
|
||||
"newProject": "New Project",
|
||||
"name": "Name",
|
||||
"image": "Image",
|
||||
"port": "Port",
|
||||
"registry": "Registry",
|
||||
"created": "Created",
|
||||
"view": "View",
|
||||
"noProjects": "No projects configured yet.",
|
||||
"getStarted": "Click \"Add Project\" to get started.",
|
||||
"createProject": "Create Project",
|
||||
"creating": "Creating...",
|
||||
"healthcheck": "Healthcheck Path",
|
||||
"nameRequired": "Name and image are required.",
|
||||
"loadFailed": "Failed to load projects",
|
||||
"createFailed": "Failed to create project"
|
||||
},
|
||||
"projectDetail": {
|
||||
"deleteProject": "Delete Project",
|
||||
"envVars": "Environment Variables",
|
||||
"volumes": "Volume Mounts",
|
||||
"stages": "Stages",
|
||||
"noStages": "No stages configured for this project.",
|
||||
"pattern": "Pattern",
|
||||
"autoDeploy": "auto-deploy",
|
||||
"requiresConfirm": "requires confirm",
|
||||
"instances": "instances",
|
||||
"deployNewVersion": "Deploy new version",
|
||||
"selectTag": "Select tag to deploy",
|
||||
"loadingTags": "Loading tags...",
|
||||
"chooseTag": "Choose a tag...",
|
||||
"enterTag": "Enter image tag (e.g., dev-abc123)",
|
||||
"deploy": "Deploy",
|
||||
"deploying": "Deploying...",
|
||||
"recentDeploys": "Recent Deploys",
|
||||
"noDeployHistory": "No deploy history for this project.",
|
||||
"tag": "Tag",
|
||||
"status": "Status",
|
||||
"started": "Started",
|
||||
"finished": "Finished",
|
||||
"error": "Error",
|
||||
"noInstancesRunning": "No instances running",
|
||||
"deleteConfirmTitle": "Delete Project",
|
||||
"deleteConfirmMessage": "This will permanently delete the project '{name}' and all its stages, instances, and deploy history. This cannot be undone.",
|
||||
"loadFailed": "Failed to load project",
|
||||
"deleteFailed": "Failed to delete project",
|
||||
"deployFailed": "Deploy failed"
|
||||
},
|
||||
"envEditor": {
|
||||
"title": "Environment Variables",
|
||||
"description": "Manage per-stage environment variable overrides. Stage-level values override project-level defaults.",
|
||||
"stage": "Stage",
|
||||
"projectDefaults": "Project-Level Defaults",
|
||||
"stageOverrides": "Stage Overrides",
|
||||
"key": "Key",
|
||||
"value": "Value",
|
||||
"secret": "Secret",
|
||||
"source": "Source",
|
||||
"actions": "Actions",
|
||||
"overridden": "overridden",
|
||||
"inherited": "inherited",
|
||||
"overridesProject": "overrides project",
|
||||
"stageOnly": "stage only",
|
||||
"edit": "Edit",
|
||||
"change": "Change",
|
||||
"delete": "Delete",
|
||||
"save": "Save",
|
||||
"add": "Add",
|
||||
"adding": "Adding...",
|
||||
"noStages": "No stages configured. Add stages to the project first.",
|
||||
"loadFailed": "Failed to load project",
|
||||
"envAdded": "Environment variable added",
|
||||
"envUpdated": "Environment variable updated",
|
||||
"envDeleted": "Environment variable deleted",
|
||||
"addFailed": "Failed to add env var",
|
||||
"updateFailed": "Failed to update env var",
|
||||
"deleteFailed": "Failed to delete env var",
|
||||
"loadEnvFailed": "Failed to load env vars"
|
||||
},
|
||||
"volumeEditor": {
|
||||
"title": "Volume Mounts",
|
||||
"description": "Configure volume mounts for containers.",
|
||||
"sharedDesc": "Shared mode uses the source path as-is for all instances.",
|
||||
"isolatedDesc": "Isolated mode appends /{stage}-{tag}/ to the source, giving each instance its own directory.",
|
||||
"sourceHost": "Source (Host)",
|
||||
"targetContainer": "Target (Container)",
|
||||
"mode": "Mode",
|
||||
"actions": "Actions",
|
||||
"shared": "Shared",
|
||||
"isolated": "Isolated",
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
"save": "Save",
|
||||
"add": "Add",
|
||||
"adding": "Adding...",
|
||||
"noVolumes": "No volumes configured yet. Add one above.",
|
||||
"volumeAdded": "Volume added",
|
||||
"volumeUpdated": "Volume updated",
|
||||
"volumeDeleted": "Volume deleted",
|
||||
"loadFailed": "Failed to load volumes",
|
||||
"addFailed": "Failed to add volume",
|
||||
"updateFailed": "Failed to update volume",
|
||||
"deleteFailed": "Failed to delete volume"
|
||||
},
|
||||
"quickDeploy": {
|
||||
"title": "Quick Deploy",
|
||||
"description": "Deploy a container image with zero configuration. Paste an image URL, review the defaults, and deploy.",
|
||||
"step1": "1. Enter Image URL",
|
||||
"imageUrl": "Image URL",
|
||||
"imageUrlHelp": "Full image URL including tag (e.g., git.example.com/user/app:dev-abc123)",
|
||||
"inspect": "Inspect",
|
||||
"inspecting": "Inspecting...",
|
||||
"step2": "2. Review Configuration",
|
||||
"reviewDesc": "These defaults were detected from the image. Adjust as needed before deploying.",
|
||||
"projectName": "Project Name",
|
||||
"port": "Port",
|
||||
"portHelp": "Container port to expose (1-65535)",
|
||||
"healthCheckPath": "Health Check Path",
|
||||
"healthCheckHelp": "Optional HTTP path for health verification",
|
||||
"stage": "Stage",
|
||||
"development": "Development",
|
||||
"release": "Release",
|
||||
"production": "Production",
|
||||
"stageHelp": "Deployment stage for this image",
|
||||
"subdomainOverride": "Subdomain Override",
|
||||
"subdomainHelp": "Leave empty to use the default subdomain pattern",
|
||||
"envVars": "Environment Variables",
|
||||
"envVarsHelp": "One per line, KEY=VALUE format",
|
||||
"step3": "3. Deploy",
|
||||
"deployDesc": "A new project will be created and the container will be deployed immediately.",
|
||||
"deployBtn": "Deploy",
|
||||
"inspectedSuccess": "Image inspected successfully",
|
||||
"deployedSuccess": "Deployed {name} successfully!",
|
||||
"inspectFailed": "Failed to inspect image",
|
||||
"deployFailed": "Deployment failed"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"general": "General",
|
||||
"registries": "Registries",
|
||||
"credentials": "Credentials",
|
||||
"authentication": "Authentication",
|
||||
"appearance": "Appearance"
|
||||
},
|
||||
"settingsGeneral": {
|
||||
"title": "General Settings",
|
||||
"globalConfig": "Global Configuration",
|
||||
"domain": "Domain",
|
||||
"domainHelp": "Base domain for subdomain routing",
|
||||
"serverIp": "Server IP",
|
||||
"serverIpHelp": "Public IP address of the server",
|
||||
"dockerNetwork": "Docker Network",
|
||||
"dockerNetworkHelp": "Docker network for deployed containers",
|
||||
"subdomainPattern": "Subdomain Pattern",
|
||||
"subdomainPatternHelp": "Pattern for auto-generated subdomains",
|
||||
"pollingInterval": "Polling Interval (seconds)",
|
||||
"pollingIntervalHelp": "How often to check registries for new tags (10-86400)",
|
||||
"notificationUrl": "Notification URL",
|
||||
"notificationUrlHelp": "Webhook URL for deploy notifications",
|
||||
"saveSettings": "Save Settings",
|
||||
"saving": "Saving...",
|
||||
"saved": "Settings saved successfully",
|
||||
"saveFailed": "Failed to save settings",
|
||||
"loadFailed": "Failed to load settings",
|
||||
"webhookUrl": "Webhook URL",
|
||||
"webhookDesc": "This secret URL receives image push notifications from your CI pipeline.",
|
||||
"noWebhookUrl": "No webhook URL configured",
|
||||
"copy": "Copy",
|
||||
"copied": "Webhook URL copied to clipboard",
|
||||
"regenerateUrl": "Regenerate URL",
|
||||
"regenerating": "Regenerating...",
|
||||
"regenerated": "Webhook URL regenerated",
|
||||
"regenerateFailed": "Failed to regenerate webhook URL",
|
||||
"regenerateWarning": "Warning: regenerating will invalidate the current URL. Update your CI pipelines."
|
||||
},
|
||||
"settingsRegistries": {
|
||||
"title": "Container Registries",
|
||||
"description": "Manage your container registries for image detection.",
|
||||
"addRegistry": "Add Registry",
|
||||
"editRegistry": "Edit Registry",
|
||||
"addNewRegistry": "Add New Registry",
|
||||
"name": "Name",
|
||||
"nameHelp": "A friendly name for this registry",
|
||||
"url": "URL",
|
||||
"urlHelp": "Registry base URL",
|
||||
"type": "Type",
|
||||
"typeHelp": "Registry type for API compatibility",
|
||||
"token": "Token",
|
||||
"tokenHelpNew": "API token for authentication",
|
||||
"tokenHelpEdit": "Leave empty to keep the existing token",
|
||||
"save": "Save",
|
||||
"saving": "Saving...",
|
||||
"update": "Update",
|
||||
"test": "Test",
|
||||
"testing": "Testing...",
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
"noRegistries": "No registries configured yet.",
|
||||
"addFirst": "Add your first registry",
|
||||
"registryUpdated": "Registry updated",
|
||||
"registryAdded": "Registry added",
|
||||
"registryDeleted": "Registry \"{name}\" deleted",
|
||||
"testSuccess": "Connection to \"{name}\" successful",
|
||||
"saveFailed": "Failed to save registry",
|
||||
"deleteFailed": "Failed to delete registry",
|
||||
"testFailed": "Connection test failed",
|
||||
"loadFailed": "Failed to load registries",
|
||||
"deleteConfirm": "Delete registry \"{name}\"? This cannot be undone."
|
||||
},
|
||||
"settingsCredentials": {
|
||||
"title": "Credentials",
|
||||
"description": "Manage credentials for Nginx Proxy Manager and registry tokens. All values are encrypted at rest.",
|
||||
"npm": "Nginx Proxy Manager",
|
||||
"npmDesc": "Credentials for managing proxy hosts via NPM API",
|
||||
"configured": "Configured",
|
||||
"npmUrl": "NPM URL",
|
||||
"npmUrlHelp": "Nginx Proxy Manager API URL",
|
||||
"email": "Email",
|
||||
"emailHelp": "NPM admin email",
|
||||
"password": "Password",
|
||||
"passwordHelpNew": "NPM admin password (will be encrypted)",
|
||||
"passwordHelpEdit": "Enter the new password to replace the existing one",
|
||||
"changeCredentials": "Change Credentials",
|
||||
"save": "Save",
|
||||
"saving": "Saving...",
|
||||
"saved": "NPM credentials saved",
|
||||
"saveFailed": "Failed to save NPM credentials",
|
||||
"loadFailed": "Failed to load credentials",
|
||||
"registryTokens": "Registry Tokens",
|
||||
"registryTokensDesc": "Registry authentication tokens are managed per-registry in the",
|
||||
"registriesLink": "Registries",
|
||||
"registryTokensSuffix": "section. Each registry stores its token encrypted in the database."
|
||||
},
|
||||
"settingsAuth": {
|
||||
"title": "Authentication Settings",
|
||||
"description": "Configure authentication mode and manage users.",
|
||||
"authMode": "Authentication Mode",
|
||||
"local": "Local (username/password)",
|
||||
"oidc": "OIDC (SSO)",
|
||||
"oidcConfig": "OIDC Provider Configuration",
|
||||
"issuerUrl": "Issuer URL",
|
||||
"clientId": "Client ID",
|
||||
"clientSecret": "Client Secret",
|
||||
"redirectUrl": "Redirect URL",
|
||||
"saveSettings": "Save Settings",
|
||||
"saving": "Saving...",
|
||||
"saved": "Settings saved",
|
||||
"saveFailed": "Failed to save",
|
||||
"loadFailed": "Failed to load settings",
|
||||
"localUsers": "Local Users",
|
||||
"username": "Username",
|
||||
"email": "Email",
|
||||
"role": "Role",
|
||||
"created": "Created",
|
||||
"noUsers": "No users found.",
|
||||
"addUser": "Add User",
|
||||
"viewer": "Viewer",
|
||||
"admin": "Admin",
|
||||
"userCreated": "User created",
|
||||
"userDeleted": "User deleted",
|
||||
"createFailed": "Failed to create user",
|
||||
"deleteFailed": "Failed to delete user",
|
||||
"deleteConfirm": "Are you sure you want to delete this user?",
|
||||
"usernameRequired": "Username and password are required"
|
||||
},
|
||||
"login": {
|
||||
"title": "Docker Watcher",
|
||||
"subtitle": "Sign in to your account",
|
||||
"username": "Username",
|
||||
"password": "Password",
|
||||
"signIn": "Sign in",
|
||||
"signingIn": "Signing in...",
|
||||
"or": "or",
|
||||
"ssoButton": "Sign in with SSO (OIDC)",
|
||||
"loginFailed": "Login failed",
|
||||
"networkError": "Network error"
|
||||
},
|
||||
"common": {
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Confirm",
|
||||
"delete": "Delete",
|
||||
"edit": "Edit",
|
||||
"save": "Save",
|
||||
"retry": "Retry",
|
||||
"loading": "Loading...",
|
||||
"noData": "No data",
|
||||
"project": "Project",
|
||||
"back": "Back",
|
||||
"actions": "Actions",
|
||||
"stop": "Stop",
|
||||
"start": "Start",
|
||||
"restart": "Restart",
|
||||
"remove": "Remove"
|
||||
},
|
||||
"instance": {
|
||||
"stopConfirm": "This will stop the running container. The instance can be started again later.",
|
||||
"restartConfirm": "This will restart the container, causing brief downtime.",
|
||||
"removeConfirm": "This will permanently remove the container and its proxy configuration. This cannot be undone.",
|
||||
"actionFailed": "Action failed"
|
||||
},
|
||||
"empty": {
|
||||
"noProjects": "No projects yet",
|
||||
"noProjectsDesc": "Get started by creating your first project or use Quick Deploy.",
|
||||
"createProject": "Create Project",
|
||||
"noInstances": "No instances",
|
||||
"noInstancesDesc": "Deploy a new version to see instances here.",
|
||||
"noDeploys": "No deploy history",
|
||||
"noDeploysDesc": "Deploy history will appear here after your first deployment.",
|
||||
"noRegistries": "No registries",
|
||||
"noRegistriesDesc": "Add a container registry to enable image detection.",
|
||||
"noVolumes": "No volumes",
|
||||
"noVolumesDesc": "Configure volume mounts for persistent data.",
|
||||
"noUsers": "No users",
|
||||
"noUsersDesc": "Add local users to manage access."
|
||||
},
|
||||
"theme": {
|
||||
"light": "Light",
|
||||
"dark": "Dark",
|
||||
"system": "System"
|
||||
},
|
||||
"language": {
|
||||
"en": "English",
|
||||
"ru": "Russian"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user