中文(zh):约 40 处口语化改书面(「谁在什么时候改了什么」→「操作人、时间与变更前后对比」、
「找出最吵的业务」→「定位日志量最高的业务」、「点」→「点击」、创建你的第一个→创建首个等);
「副本 / Pod」统一为「Pod」。
英文(en)修复:
- 功能 bug:wizard openGrafana ({url}) 插值失效→({{url}});settings notify 空态链接词悬空破句
- 语义补齐:clusters/hosts 删除确认补 Warning 与后果句;tokenInsecureHint 补 Kubeconfig 建议
(并删 en 死键 tokenRecommended);retention liveHint/costWarning/upgradeHint 补丢失半句
- 术语统一:data source / collection policy / log lines / Listen IP (internal) / Total deployments
- 复数:users confirmDesc、pagination total、range lastMinutes 补 _one;storage deleteWarning 两形态对齐
- 风格:Select filtered users、Delivery History、Log Scrape Jobs、App label source、
Deployment Logs 连字符改间隔号;删除 zh 死键 liveTitle
149 lines
5.8 KiB
TypeScript
149 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 {
|
||
retention: {
|
||
title: 'Log retention',
|
||
alertLabel: 'Alert history (days)',
|
||
auditLabel: 'Audit logs (days)',
|
||
save: 'Save',
|
||
saving: 'Saving…',
|
||
saved: 'Retention saved; expired records purged',
|
||
saveFailed: 'Save failed',
|
||
},
|
||
title: 'General',
|
||
tabs: {
|
||
general: 'General',
|
||
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, then open ',
|
||
emptyLink: 'Alerts',
|
||
emptyAfter: 'to link rules to their channels.',
|
||
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 disabled — enable it and fill in the directory info to show "Import from LDAP" 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 follows 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–{{end}}:00 in the chosen timezone, dark otherwise; the top bar toggle always works.',
|
||
},
|
||
prefsCard: {
|
||
title: 'Appearance & Language',
|
||
},
|
||
}
|