feat: 品牌统一 LokiStack + 全站中英 i18n + 用户批量删除 + 主题定时切换与浅色侧栏

- 品牌: Go 模块/数据文件/二进制/构建部署资产全部 opsx→lokistack;前端 localStorage 命名空间迁移(读旧写新,含按用户 id 前缀迁移);修复 nginx upstream 与 Makefile 引用已改名服务的断裂
- i18n: react-i18next 落地,common + 11 个页面域命名空间全站中英(菜单/顶栏/登录/列表页/表单/确认弹窗/状态徽章);设置页语言即时切换;修复词典自注册导致的循环导入白屏
- 用户管理: 批量删除(POST /users/batch-delete,不删自己/最后管理员,部分失败不阻断)+ 行复选/全选/批量工具条
- 主题: 浅色侧栏(中性灰激活态)、四态模式(浅色/深色/跟随系统/定时切换,按时区判定)、顶栏太阳月亮二态、设置页紧凑分段选择器
- UI: 登录记住用户名、CardActionButton 统一五页卡片操作钮、shadcn Badge 替换手写徽章、语义色修正
- 清理: 移除主机 Web 终端(前后端)、k8s-helm/Helm 遗留代码与字段、README 重写精简
- 修复: 侧栏与日志告警 order 重复、路由标题 i18n key 未翻译、词典双逗号等
This commit is contained in:
opsx committed 2026-10-27 17:11:38 +08:00
1 parent 02d1bd87a7
commit f3733f0bfc
201 files changed
+5438 -2388

No files matched your search

+99
View File
@@ -0,0 +1,99 @@
// common namespace — app shell (menu / top bar / login / shared components / status)
export default {
appName: 'LokiStack',
menu: {
dashboard: 'Dashboard',
wizard: 'Deploy Wizard',
clusters: 'Clusters',
hosts: 'Hosts',
storage: 'Storage',
deployments: 'Deploy Loki',
collectors: 'Log Collectors',
logs: 'Log Query',
alerts: 'Alerts',
settings: 'Settings',
users: 'Users',
login: 'Sign In',
notFound: 'Page Not Found',
},
layout: {
nav: 'Main navigation',
sheetTitle: 'LokiStack Navigation',
collapse: 'Collapse menu',
expand: 'Expand menu',
openNav: 'Open navigation menu',
logout: 'Sign out',
logoutShort: 'Sign out',
toLight: 'Switch to light theme',
toDark: 'Switch to dark theme',
admin: 'Admin',
loading: 'Loading page',
},
login: {
subtitle: 'Loki Log Management Platform',
heading: 'Sign In',
username: 'Username',
usernamePlaceholder: 'Enter username',
password: 'Password',
passwordPlaceholder: 'Enter password',
remember: 'Remember username',
submit: 'Sign In',
submitting: 'Signing in...',
errCredential: 'Invalid username or password',
errConn: 'Cannot reach the backend. Make sure it is running on port 8080.',
errFallback: 'Sign-in failed',
backendDown: 'Backend is not running',
backendDownHint: 'Cannot reach the API service. Start the backend first:',
},
dialog: {
confirmTitle: 'Confirm Deletion',
confirmText: 'Delete',
cancel: 'Cancel',
processing: 'Processing...',
confirmIrreversible: 'Are you sure? This cannot be undone.',
confirmDefault: 'Delete "{{name}}"? This cannot be undone.',
},
error: {
title: 'Failed to load',
hint: 'Check the network or backend service, then retry',
retry: 'Retry',
},
pagination: {
total: '{{count}} items',
summary: '{{count}} items · Page {{page}} of {{pages}}',
},
status: {
active: 'Running',
running: 'Running',
inactive: 'Stopped',
stopped: 'Stopped',
pending: 'Pending',
deploying: 'Deploying',
failed: 'Failed',
error: 'Error',
},
notFound: {
heading: 'Page Not Found',
hint: 'The page does not exist or has been removed',
backHome: 'Back to Home',
},
lang: {
section: 'Language',
zh: '中文',
en: 'English',
},
boundary: {
title: 'Rendering Error',
hint: 'Something went wrong. Try refreshing; if it persists, report the details below.',
unknown: 'Unknown error',
reload: 'Reload Page',
reset: 'Reset Component',
},
spinner: {
default: 'Loading...',
},
password: {
hide: 'Hide password',
show: 'Show password',
},
}