- 品牌: 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 未翻译、词典双逗号等
142 lines
5.8 KiB
TypeScript
142 lines
5.8 KiB
TypeScript
// settings namespace — Settings page (general/password/about, notifications, LDAP, image registry), English copy.
|
|
// Note: theme & language card titles and ThemeSection copy are owned elsewhere and are not in this dictionary.
|
|
export default {
|
|
title: 'Settings',
|
|
description: 'General settings, alert notifications, LDAP integration, and the default image registry',
|
|
tabs: {
|
|
general: 'General',
|
|
notify: 'Alert Notifications',
|
|
ldap: 'LDAP Integration',
|
|
registry: 'Default Image Registry',
|
|
},
|
|
// Action labels shared across sections
|
|
actions: {
|
|
cancel: 'Cancel',
|
|
saving: 'Saving...',
|
|
testing: 'Testing...',
|
|
},
|
|
password: {
|
|
title: 'Change Password',
|
|
oldLabel: 'Current password',
|
|
oldPlaceholder: 'Enter current password',
|
|
newLabel: 'New password',
|
|
newPlaceholder: 'Enter new password (at least 6 characters)',
|
|
confirmLabel: 'Confirm new password',
|
|
confirmPlaceholder: 'Re-enter new password',
|
|
submit: 'Change password',
|
|
submitting: 'Changing...',
|
|
errMismatch: 'Passwords do not match',
|
|
errTooShort: 'New password must be at least 6 characters',
|
|
errFailed: 'Failed to change password',
|
|
},
|
|
about: {
|
|
title: 'About LokiStack',
|
|
versionLabel: 'Version',
|
|
backendLabel: 'Backend',
|
|
frontendLabel: 'Frontend',
|
|
k8sLabel: 'Kubernetes Access',
|
|
summaryLabel: 'Overview',
|
|
backendValue: 'Go + Gin + JSON file storage',
|
|
frontendValue: 'React 19 + TypeScript + Tailwind CSS',
|
|
k8sValue: 'client-go, direct API Server access',
|
|
summaryValue: 'Lightweight Loki log management platform',
|
|
},
|
|
notify: {
|
|
cardTitle: 'Alert Channels — Feishu (Lark)',
|
|
create: 'New channel',
|
|
// Empty state is assembled as "prefix + link + suffix" (link points to the Alerts page)
|
|
emptyBefore: 'No channels yet — create one per alert group (e.g. "App alerts", "Nginx alerts"), then link rules to it on the ',
|
|
emptyLink: 'Alerts',
|
|
emptyAfter: ' page',
|
|
webhookConfigured: 'Webhook configured',
|
|
webhookMissing: 'Not configured',
|
|
secretConfigured: ' · Signing secret configured',
|
|
testAria: 'Test {{name}}',
|
|
editAria: 'Edit {{name}}',
|
|
deleteAria: 'Delete {{name}}',
|
|
editTitle: 'Edit Channel · {{name}}',
|
|
createTitle: 'New Notification Channel',
|
|
nameLabel: 'Channel name *',
|
|
namePlaceholder: 'e.g. App alerts / Nginx alerts',
|
|
webhookLabel: 'Webhook URL',
|
|
webhookKeepHint: ' (leave blank to keep current)',
|
|
webhookSavedPlaceholder: 'Saved — enter a new URL to replace it',
|
|
signingLabel: 'Signing secret (optional)',
|
|
signingSavedPlaceholder: 'Saved — leave blank to keep current',
|
|
signingPlaceholder: 'Feishu (Lark) bot signing secret',
|
|
enable: 'Enable channel',
|
|
saveChanges: 'Save changes',
|
|
createChannel: 'Create channel',
|
|
deleteTitle: 'Delete Notification Channel',
|
|
testSent: 'Test card sent to "{{name}}"',
|
|
errLoad: 'Failed to load notification channels',
|
|
errNameRequired: 'Channel name is required',
|
|
errWebhookRequired: 'A Webhook URL is required for a new channel',
|
|
errSave: 'Save failed',
|
|
errSend: 'Send failed',
|
|
errToggle: 'Failed to toggle',
|
|
errDelete: 'Delete failed',
|
|
},
|
|
ldap: {
|
|
cardTitle: 'LDAP Integration',
|
|
headerHint: 'Enables LDAP sign-in and bulk user import',
|
|
errLoad: 'Failed to load LDAP configuration',
|
|
disabledHint:
|
|
'LDAP is disabled — turn it on and fill in the directory details (server / Bind DN / Base DN). After saving, "Import from LDAP" appears on the Users page.',
|
|
hostLabel: 'Server address *',
|
|
portLabel: 'Port',
|
|
ldapsLabel: 'LDAPS',
|
|
bindDnLabel: 'Bind DN *',
|
|
bindPasswordLabel: 'Bind password *',
|
|
bindPasswordSavedPlaceholder: 'Saved — enter a new password to replace it',
|
|
bindPasswordPlaceholder: 'Administrator password',
|
|
baseDnLabel: 'Base DN *',
|
|
userFilterLabel: 'User filter',
|
|
usernameLabel: 'Username',
|
|
nameLabel: 'Full name',
|
|
emailLabel: 'Email',
|
|
noEmail: 'No email',
|
|
testButton: 'Test connection',
|
|
saveButton: 'Save configuration',
|
|
errMissingFields: 'Fill in the server address / Bind DN / Base DN first',
|
|
errTest: 'Test failed',
|
|
savedToast: 'LDAP configuration saved',
|
|
},
|
|
registry: {
|
|
cardTitle: 'Image Registry',
|
|
modeOverseasLabel: 'Official (overseas)',
|
|
modeOverseasDesc: 'docker.io, for overseas networks',
|
|
modeCnLabel: 'China mirror',
|
|
modeCnDesc: 'docker.m.daocloud.io mirror, for networks in China',
|
|
modeCustomLabel: 'Private registry',
|
|
modeCustomDesc: 'Your own registry prefix (e.g. Huawei Cloud SWR)',
|
|
errLoad: 'Failed to load image registry configuration',
|
|
savedToast: 'Image registry saved. Future deployments and collectors will use the new image addresses.',
|
|
customPrefixLabel: 'Private registry prefix *',
|
|
customPrefixHint: 'The platform prepends this prefix to image names, e.g. {{example}}/grafana/loki:3.4.0',
|
|
imagesLabel: 'Per-service images (repository / tag can be overridden)',
|
|
tagFollowVersion: 'Follows deployment version',
|
|
repoAria: '{{label}} image repository',
|
|
tagAria: '{{label}} image tag',
|
|
// The images hint is assembled as "prefix + <code>grafana/loki</code> + suffix"
|
|
imagesHintBefore: 'Repository is the image path (e.g. ',
|
|
imagesHintAfter: '); when Tag is empty, Loki / Grafana follow the deployment version and Promtail / Fluent Bit use built-in defaults.',
|
|
previewTitle: 'Effective image preview',
|
|
saveButton: 'Save image registry',
|
|
},
|
|
themeCard: {
|
|
title: 'Theme',
|
|
light: 'Light',
|
|
dark: 'Dark',
|
|
system: 'Follow System',
|
|
auto: 'Scheduled',
|
|
timezone: 'Timezone',
|
|
timezoneAria: 'Theme schedule timezone',
|
|
browser: 'Follow browser (local)',
|
|
autoHint: 'Light from {{start}}:00 to {{end}}:00 in the selected timezone, dark otherwise; the sun/moon toggle overrides anytime.',
|
|
},
|
|
prefsCard: {
|
|
title: 'Appearance & Language',
|
|
},
|
|
}
|