fix(i18n): 全站文案书面化 + 中英翻译质量修复
CI / Backend (go vet + test) (push) Canceled after 0s
CI / Frontend (lint + build + test) (push) Canceled after 0s

中文(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
This commit is contained in:
opsx committed 2026-10-29 13:42:51 +08:00
1 parent df1075f1f5
commit abe28964a1
24 files changed
+81 -84

No files matched your search

+2 -2
View File
@@ -11,7 +11,7 @@ export default {
tabs: {
rules: 'Rules',
channels: 'Channels',
history: 'Delivery history',
history: 'Delivery History',
},
notifySectionTitle: 'Notification channels (Feishu / Lark / Webhook)',
notifySectionConfigured: '{{count}} configured',
@@ -90,7 +90,7 @@ export default {
channelDisabled: '(disabled)',
window: 'Window (min)',
threshold: 'Threshold (matches)',
windowHint: 'Look back this many minutes',
windowHint: 'The number of minutes to look back',
thresholdHint: 'Alert only above this count',
cooldownHint: 'No repeat within cooldown',
cooldown: 'Cooldown (min)',
+5 -5
View File
@@ -1,19 +1,19 @@
// Log analysis page (admin) — registered via i18n/domains.ts; page entry imports '@/i18n/domains'
export default {
title: 'Log Analysis',
subtitle: 'Log volume, errors and trends by app and namespace — spot the noisiest workloads',
subtitle: 'Log volume, errors and trends by app and namespace — identify the highest-volume workloads',
adminOnly: {
title: 'Admin only',
desc: 'Log analysis provides platform-wide statistics for administrators. Contact an administrator for access.',
},
emptySource: {
title: 'No Loki data source yet',
desc: 'Connect a source on the log query page, then come back for aggregates.',
desc: 'Connect a data source on the log query page, then view the aggregate analysis here.',
goLogs: 'Go to log query',
},
filter: {
source: 'Source',
sourceEmpty: 'No sources',
sourceEmpty: 'No data sources',
namespace: 'Namespace',
namespaceEmpty: 'Loading namespaces…',
namespaceAll: 'All namespaces (slow)',
@@ -61,13 +61,13 @@ export default {
oneYear: '1y',
coverage: '{{count}} days captured',
seriesVolume: 'Volume',
inProgress: 'in progress',
inProgress: 'today: in progress',
},
table: {
title: 'App volume ranking',
computing: 'Computing per-app volume (reads log content, usually 20–30s)…',
subtitle: 'Top 10 apps by volume; click "View logs" to jump to the query page',
subtitle: 'Top 10 apps by volume; click "View logs" to open the query page',
rank: '#',
app: 'App',
appWithKey: 'App ({{key}})',
+2 -3
View File
@@ -23,7 +23,7 @@ export default {
},
delete: {
warning:
'Delete "{{name}}"? {{dep}} deployment(s) and {{col}} collector policy(ies) still reference it.',
'Delete "{{name}}"? Warning: {{dep}} deployments and {{col}} collection policies still reference this cluster and will stop working after deletion.',
},
toast: {
deleteFailed: 'Failed to delete cluster',
@@ -46,9 +46,8 @@ export default {
tokenLabel: 'Token *',
tokenLabelEdit: 'Token (leave blank to keep unchanged)',
tokenPlaceholder: 'Paste Service Account Token...',
tokenRecommended: 'Recommended: a token can be scoped precisely and revoked at any time.',
tokenInsecureHint:
'Uses insecure mode, for clusters on private networks or with self-signed certificates',
'Token mode skips TLS verification for self-signed certificates in internal networks. If the cluster has a publicly trusted certificate, switch to Kubeconfig mode for strict verification.',
rbacSummary: 'Least-privilege recommendations (click to expand)',
rbacScope:
'Grant permissions only in the <code>log</code> namespace so a leaked Token cannot affect other namespaces; <strong>do not use cluster-admin</strong>.',
+3 -3
View File
@@ -122,7 +122,7 @@ const collectors = {
nsLoadFailed: 'Failed to load namespaces',
nsHint:
'"All namespaces" collects cluster-wide; otherwise only the checked ones.',
appLabelSource: 'app label source',
appLabelSource: 'App label source',
appSourcePlaceholder: 'Empty = default (controller-name fallback chain)',
appSourceHint:
'Falls back through <code>app.kubernetes.io/name → app → controller name → pod name</code>; a cluster-specific label (e.g. <code>k8s.kuboard.cn/name</code>) set here takes priority.',
@@ -140,8 +140,8 @@ const collectors = {
logPathHint: 'Sidecar needs a shared log volume or the dedicated logs directory; click Deploy after saving.',
// ── host mode: structured scrape jobs ──
jobs: {
title: 'Log scrape jobs',
hint: 'One entry = one promtail job; add more paths for more directories. Click Deploy after saving.',
title: 'Log Scrape Jobs',
hint: 'One entry corresponds to one promtail job; add one path per directory. Click Deploy after saving.',
add: 'Add job',
remove: 'Remove job',
namePlaceholder: 'job name, e.g. app-api',
+3 -3
View File
@@ -34,9 +34,7 @@ export default {
logout: 'Sign out',
logoutShort: 'Sign out',
toLight: 'Switch to light theme',
toDark: 'Switch to dark theme',
admin: 'Admin',
loading: 'Loading page',
toDark: 'Switch to dark theme', loading: 'Loading page',
},
login: {
subtitle: 'Loki Log Management Platform',
@@ -71,6 +69,7 @@ export default {
},
pagination: {
total: '{{count}} items',
total_one: '{{count}} item',
summary: '{{count}} items · Page {{page}} of {{pages}}',
},
status: {
@@ -105,6 +104,7 @@ export default {
},
range: {
lastMinutes: 'Last {{count}} minutes',
lastMinutes_one: 'Last {{count}} minute',
lastHours: 'Last {{count}} hours',
lastHours_one: 'Last {{count}} hour',
custom: 'Custom time',
+2 -2
View File
@@ -1,7 +1,7 @@
// dashboard namespace — Dashboard domain (stat cards / quick start / recent deployments / resource lists)
export default {
stat: {
totalDeployments: 'Deployments',
totalDeployments: 'Total deployments',
runningCount: '{{count}} running',
clusters: 'Clusters',
connected: 'Connected',
@@ -18,7 +18,7 @@ export default {
},
quickStart: {
title: 'Start collecting logs in three steps',
subtitle: 'Target & environment → Storage → Deploy Loki, then add a collection strategy',
subtitle: 'Target & environment → Storage → Deploy Loki, then add a collection policy',
cta: 'Open Deploy Wizard',
},
recent: {
+7 -7
View File
@@ -36,7 +36,7 @@ export default {
ready: 'Loki ready',
notReady: 'Loki not ready',
runningHint:
'Link the Loki source under "Log Query → Data Sources" to query logs.',
'Link the Loki data source under "Log Query → Data Sources" to query logs.',
configure: 'Configure',
deploy: 'Deploy',
deploying: 'Deploying...',
@@ -60,7 +60,7 @@ export default {
namespace: 'Namespace *',
host: 'Target Host *',
hostPlaceholder: 'Select a host',
listenIP: 'Listen IP',
listenIP: 'Listen IP (internal)',
listenIPPlaceholder: 'Defaults to the host IP once a host is selected',
listenPort: 'Access Port',
dockerHint: 'Starts a Docker container on the host via SSH; config and data stay on the host.',
@@ -96,14 +96,14 @@ export default {
locationHostDocker: 'Host /etc/lokistack/loki-{{id}}/loki.yaml → limits_config.retention_period',
locationK8s: 'ConfigMap {{namespace}}/loki-config → loki.yaml',
compactorNote: 'Retention is enforced by the Loki compactor; MinIO only stores the log objects.',
liveHint: 'Read from the deployment target with storage credentials masked.',
liveHint: 'Read from the deployment target with storage credentials masked. Retention days below are still edited separately.',
daysLabel: 'Retention days',
daysUnit: 'days',
daysConvert: '= {{hours}} hours',
daysHint: 'Just enter a number — no YAML needed. Range 1–3650 days.',
daysHint: 'Enter the number of days directly — no YAML editing needed. Range: 1–3650 days.',
daysInteger: 'Enter a whole number of days',
daysRange: 'Days must be between 1 and 3650',
costWarning: 'Keeping {{days}} days grows object-storage usage linearly with retention.',
costWarning: 'Keeping {{days}} days grows object-storage usage linearly with retention. Be careful when purging historical logs.',
loading: 'Loading…',
liveToggle: 'Show the full live loki.yaml (read-only)',
applyHintRunning: 'Save & Apply redeploys Loki; log queries may be briefly interrupted (~1 min).',
@@ -128,12 +128,12 @@ export default {
cpu: 'CPU',
memory: 'Memory',
refresh: 'Refresh',
upgradeHint: 'To scale up: adjust CPU / memory in the deployment form, then redeploy.',
upgradeHint: 'To scale up: open the deployment form next to "Edit retention policy", adjust CPU / memory, then redeploy.',
noLimits: 'No resource limits configured (usage shown, ratio unavailable)',
errLoad: 'Failed to read resource usage',
},
logs: {
title: 'Deployment Logs - {{name}}',
title: 'Deployment Logs · {{name}}',
empty: 'No logs yet...',
errLoad: 'Failed to load deployment logs',
},
+2 -2
View File
@@ -24,7 +24,7 @@ export default {
},
delete: {
warning:
'Delete "{{name}}"? {{dep}} deployment(s) and {{col}} collector policy(ies) still reference it.',
'Delete "{{name}}"? Warning: {{dep}} deployments and {{col}} collection policies still reference this host and will stop working after deletion.',
},
toast: {
deleteFailed: 'Failed to delete host',
@@ -55,7 +55,7 @@ export default {
validation: {
nameRequired: 'Host name is required',
hostIpRequired: 'Host IP is required',
hostIpLoopback: 'Do not use 127.0.0.1 / localhost: the platform runs in a container, so loopback points to itself. Use the server\'s real IP.',
hostIpLoopback: 'Do not use 127.0.0.1 / localhost: the platform runs in a container, so loopback points to the platform itself. Use the server\'s real IP.',
portRequired: 'Port is required',
portNumeric: 'Port must be a number',
portRange: 'Port must be between 1 and 65535',
+4 -4
View File
@@ -32,7 +32,7 @@ export default {
goConfigure: 'Go to data sources',
sectionAria: 'Data source management',
heading: 'Loki Data Sources',
hint: 'In-cluster Loki works with "Cluster Service"; cross-cluster / public access needs an Ingress domain plus "Direct URL".',
hint: 'In-cluster Loki works with "Cluster Service"; cross-cluster / public access needs an Ingress domain configured first, then "Direct URL".',
managedCluster: 'Cluster {{name}}',
managedBadge: 'Platform deployed · managed with the deployment',
countLabel: '{{count}} total',
@@ -176,7 +176,7 @@ export default {
modeSlow: 'Top 10 slow requests',
modeDetail: 'Request details',
summary:
'Based on {{loaded}} loaded entries',
'Stats based on {{loaded}} loaded entries',
statPv: 'PV',
statUv: 'UV (IP)',
statErrors: '4xx / 5xx',
@@ -187,7 +187,7 @@ export default {
error4xx: '4xx only',
slowThreshold: 'Slow request threshold',
seconds: '{{count}}s',
slowHint: 'Sorted by request_time; 408 / 499 / 504 are timeout hints.',
slowHint: 'Sorted by request_time; 408 / 499 / 504 usually indicate timeouts.',
slowMissing: '{{count}} entries lack a valid duration.',
trafficHint: 'Success rate = 2xx / 3xx ÷ PV',
thHost: 'Request Host',
@@ -256,7 +256,7 @@ export default {
selectedCount: 'Selected {{count}}',
anyoneToggle: 'Anyone (anyone)',
anyoneActive: '✓ Anyone (anyone)',
selectFiltered: 'Select filtered',
selectFiltered: 'Select filtered users',
clear: 'Clear',
usersHint: 'A user can belong to only one policy group per data source; users already in another group are grayed out.',
searchAria: 'Search users',
+2 -2
View File
@@ -52,9 +52,9 @@ export default {
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, ',
emptyBefore: 'No channels yet — create one per alert group, then open ',
emptyLink: 'Alerts',
emptyAfter: 'then link rules to it on the alerts page.',
emptyAfter: 'to link rules to their channels.',
webhookConfigured: 'Webhook configured',
webhookMissing: 'Not configured',
secretConfigured: ' · Signing secret configured',
+1
View File
@@ -81,6 +81,7 @@ export default {
selectAll: 'Select all',
confirmTitle: 'Confirm Bulk Deletion',
confirmDesc: 'Delete {{count}} selected users? Protected accounts are skipped; this cannot be undone.',
confirmDesc_one: 'Delete {{count}} selected user? Protected accounts are skipped; this cannot be undone.',
skippedWarn: '{{count}} skipped: {{reasons}}',
failed: 'Bulk delete failed',
},
+2 -2
View File
@@ -22,7 +22,7 @@ const wizard = {
storage: 'Environment ready — object storage is recommended next',
deploy: 'Target and storage ready — create your Loki deployment',
collect: 'Loki is running — add a collection policy to start collecting logs',
all: 'All set: logs are being collected — head to Log Query to analyze them',
all: 'Setup complete: logs are being collected — head to Log Query to analyze them',
},
env: {
k8sTitle: 'Kubernetes Cluster',
@@ -50,7 +50,7 @@ const wizard = {
autoTriggerFailed: 'Auto deploy failed; trigger it manually on the Deploy Loki page',
meta: '{{mode}} · Namespace {{namespace}} · {{endpoint}}',
endpointPending: 'endpoint available after deployment',
openGrafana: 'Open log query ({url})',
openGrafana: 'Open log query ({{url}})',
openLoki: 'Open Loki',
details: 'Deployment Details',
none: 'No running Loki — deploy to Kubernetes or host Docker',
+3 -3
View File
@@ -14,7 +14,7 @@ export default {
},
notifySectionTitle: '通知通道(飞书 / Lark / Webhook)',
notifySectionConfigured: '已配置 {{count}} 个',
notifySectionEmpty: '尚未配置,告警发不出去',
notifySectionEmpty: '尚未配置,告警将无法发送',
col: {
enabled: '启用',
name: '规则',
@@ -41,7 +41,7 @@ export default {
loadFailed: '加载告警数据失败',
saveFailed: '保存失败',
deleteFailed: '删除失败',
checkDone: '已执行一次检查,结果见发送历史',
checkDone: '已执行检查,结果见「发送历史」',
checkFailed: '检查失败',
toggleFailed: '切换失败',
confirmDeleteTitle: '确认删除告警规则',
@@ -86,7 +86,7 @@ export default {
channelDisabled: '(禁用)',
window: '统计窗口(分)',
threshold: '触发阈值(条)',
windowHint: '统计最近多少分钟',
windowHint: '统计最近 N 分钟内的日志',
thresholdHint: '超过该条数才告警',
cooldown: '冷却(分)',
cooldownHint: '冷却内不重复发送',
+5 -5
View File
@@ -1,14 +1,14 @@
// 日志分析页(admin)— 经 i18n/domains.ts 注册,页面入口 import '@/i18n/domains'
export default {
title: '日志分析',
subtitle: '按应用与命名空间看日志量、错误与趋势,找出最吵的业务',
subtitle: '按应用与命名空间看日志量、错误与趋势,定位日志量最高的业务',
adminOnly: {
title: '仅管理员可访问',
desc: '日志分析面向管理员提供全量日志统计,请联系管理员开通。',
},
emptySource: {
title: '还没有可用的 Loki 数据源',
desc: '请先在日志查询页关联数据源,再回来看聚合分析。',
desc: '请先在日志查询页关联数据源,再查看聚合分析。',
goLogs: '去日志查询',
},
filter: {
@@ -18,7 +18,7 @@ export default {
namespaceEmpty: '正在加载命名空间…',
namespaceAll: '全部命名空间(较慢)',
refresh: '刷新',
pendingApply: '筛选条件已改,点「刷新」生效',
pendingApply: '筛选条件已变更,点击「刷新」生效',
},
stats: {
total: '日志总量',
@@ -56,7 +56,7 @@ export default {
badge: '平台留存历史',
title: '每日日志量',
subtitle: '每天的日志总量,平台保留历史趋势',
empty: '还没有历史数据,平台每天会自动记录一次',
empty: '暂无历史数据,平台每日自动记录一次',
lastDays: '{{count}} 天',
oneYear: '1 年',
coverage: '已有 {{count}} 天数据',
@@ -66,7 +66,7 @@ export default {
table: {
title: '应用日志量排行',
subtitle: '按日志条数排前 10 的应用,点「查看日志」跳到查询页',
subtitle: '按日志条数排前 10 的应用,点击「查看日志」跳转至查询页',
computing: '正在按应用统计(需读取日志内容,通常 20~30 秒)…',
rank: '#',
app: '应用',
+2 -2
View File
@@ -1,7 +1,7 @@
// audit 命名空间 — 审计日志页中文文案
export default {
title: '审计日志',
description: '记录所有写操作:谁在什么时候改了什么,含变更前后对比',
description: '记录全部写操作:操作人、时间与变更前后对比',
refresh: '刷新',
loadFailed: '加载审计日志失败',
filter: '筛选',
@@ -12,7 +12,7 @@ export default {
filterFailed: '仅失败',
total: '共 {{count}} 条',
emptyTitle: '暂无审计记录',
emptyDesc: '之后的所有写操作(部署、采集、存储、集群、用户等)都会自动记录在这里',
emptyDesc: '后续所有写操作(部署、采集、存储、集群、用户等)将自动记录于此',
detailTruncated: '详情已截断,仅显示列表中的摘要',
stat: {
today: '今日操作',
+5 -5
View File
@@ -23,7 +23,7 @@ export default {
},
delete: {
warning:
'确定要删除「{{name}}」吗?警告:仍有 {{dep}} 个部署、{{col}} 个采集策略引用该集群,删除后它们将无法工作。',
'确定删除「{{name}}」吗?仍有 {{dep}} 个部署、{{col}} 个采集策略在引用,删除后将不可用。',
},
toast: {
deleteFailed: '删除集群失败',
@@ -46,18 +46,18 @@ export default {
tokenLabel: 'Token *',
tokenLabelEdit: 'Token(留空保持不变)',
tokenPlaceholder: '粘贴 Service Account Token...',
tokenInsecureHint: '推荐:Token 权限可精确控制、可随时吊销;该模式下跳过 TLS 校验以兼容内网自签证书。若集群有公网可信证书,请改用 Kubeconfig 模式做严格校验。',
tokenInsecureHint: '推荐:Token 权限可精确控制、可随时吊销;该模式下跳过 TLS 校验以兼容内网自签证书。若集群有公网可信证书,请改用 Kubeconfig 模式进行严格校验。',
rbacSummary: '最小授权建议(点击展开)',
rbacScope:
'只授予 <code>log</code> 命名空间权限,Token 泄露也不会影响其他命名空间;<strong>不要使用 cluster-admin</strong>。',
rbacScriptIntro:
'在集群执行一次,创建命名空间 / SA / Role / 长期 Token:',
rbacScriptComment1: '# 1) 一次创建:命名空间 + SA + 命名空间级 Role + 长期 Token',
rbacScriptComment2: '# 2) 取出长期 Token(不自动过期),粘贴到 Token 输入框',
rbacScriptComment1: '# 1) 一次性创建:命名空间 + SA + 命名空间级 Role + 长期 Token',
rbacScriptComment2: '# 2) 提取长期 Token(不自动过期),粘贴至 Token 输入框',
rbacNamespaceNote:
'Token 无集群级权限;仅当需要平台自建命名空间时才额外授予 namespaces: create/get。',
rbacTokenNote:
'Token 仅限 log 命名空间,泄露影响面小;服务端加密存储。轮换:删除该 Secret 重建。',
'Token 仅限 log 命名空间,泄露影响面小;服务端加密存储。轮换方式:删除该 Secret 后重建。',
contextLabel: '上下文(可选)',
contextPlaceholder: '留空则使用默认上下文',
submitAdd: '添加集群',
+6 -6
View File
@@ -101,7 +101,7 @@ const collectors = {
logPathSidecarHint:
'填业务写入的路径,如 /var/log/app/*.log;仅共享已有日志卷或专用 logs 目录。',
labels: '自定义标签(JSON,可选)',
labelsHint: '合法 JSON 时将附加到每条日志的标签,便于在日志平台中筛选;留空则不加',
labelsHint: '合法 JSON 时将附加到每条日志的标签,便于在日志平台中筛选;留空则不附加',
submit: '创建并部署',
submitting: '创建中...',
validation: {
@@ -121,12 +121,12 @@ const collectors = {
allCheckbox: '所有命名空间(全集群采集)',
nsSearch: '搜索命名空间…',
loading: '加载中…',
nsListEmpty: '未取到命名空间列表(可手动输入)',
nsListEmpty: '未能获取命名空间列表(可手动输入)',
nsNoMatch: '无匹配',
nsLoadFailed: '加载命名空间失败',
// nsHint/appSourceHint/appIncludeHint 含行内 <code>,渲染处用 Trans 组件
nsHint:
'勾「所有命名空间」= 采集全集群;否则只采勾选项。',
'勾选「所有命名空间」即采集全集群;未勾选时仅采集所选命名空间。',
appLabelSource: 'app 标签取值来源',
appSourcePlaceholder: '留空 = 默认(controller 名回退链)',
appSourceHint:
@@ -142,11 +142,11 @@ const collectors = {
appIncludePlaceholder: '留空 = 不限;多个用逗号分隔,如 cex-spot-api, cex-asset-api',
appIncludeHint:
'只保留 app 命中这些值的日志(<code>action: keep</code>),是控制日志量最直接的手段。',
logPathHint: 'Sidecar 需共享日志卷或专用 logs 目录;保存后点「部署」生效。',
logPathHint: 'Sidecar 需共享日志卷或专用 logs 目录;保存后点击「部署」生效。',
// ── 主机模式:结构化采集项(B 档) ──
jobs: {
title: '日志采集项',
hint: '一个采集项 = promtail 的一个 job;多个目录就多填几个路径。保存后点「部署」下发。',
hint: '每个采集项对应一个 promtail job;每个目录填写一个路径。保存后点击「部署」下发。',
add: '添加采集项',
remove: '删除采集项',
namePlaceholder: 'job 名称,如 app-api',
@@ -173,7 +173,7 @@ const collectors = {
loading: '渲染中…',
failed: '预览失败',
title: '将要下发的 promtail.yaml',
description: '只预览,不保存也不下发;确认无误再点「保存」→「部署」。',
description: '仅预览,不保存且不下发;确认无误后点击「保存」→「部署」。',
copy: '复制',
copied: '已复制',
close: '关闭',
+3 -5
View File
@@ -34,9 +34,7 @@ export default {
logout: '退出登录',
logoutShort: '退出',
toLight: '切换为浅色',
toDark: '切换为深色',
admin: '管理员',
loading: '页面加载中',
toDark: '切换为深色', loading: '页面加载中',
},
login: {
subtitle: 'Loki 日志管理平台',
@@ -54,7 +52,7 @@ export default {
backendDown: '服务暂不可用',
showPassword: '显示密码',
hidePassword: '隐藏密码',
backendDownHint: '暂时连不上服务,请稍后再试或联系管理员。',
backendDownHint: '服务暂时无法连接,请稍后重试或联系管理员。',
},
dialog: {
confirmTitle: '确认删除',
@@ -95,7 +93,7 @@ export default {
},
boundary: {
title: '页面渲染出错',
hint: '页面遇到异常,可尝试刷新;若持续出现请把下方信息反馈给开发者。',
hint: '页面遇到异常,可尝试刷新;若持续出现,请将下方错误信息反馈给开发人员。',
unknown: '未知错误',
reload: '刷新页面',
reset: '重置组件',
+1 -1
View File
@@ -25,7 +25,7 @@ export default {
title: '最近部署',
viewAll: '查看全部',
emptyTitle: '暂无部署',
emptyDesc: '创建你的第一个 Loki 部署',
emptyDesc: '创建首个 Loki 部署',
},
list: {
manage: '管理',
+6 -7
View File
@@ -5,7 +5,7 @@ export default {
description: '部署与管理 Loki 日志聚合服务',
create: '新建部署',
emptyTitle: '暂无部署',
emptyDescription: '创建你的第一个 Loki 部署',
emptyDescription: '创建首个 Loki 部署',
// 删除确认:host-docker 连容器一起删,其余模式仅删记录不卸载资源
deleteDockerDesc: '确定要删除「{{name}}」吗?将同时移除主机上的 Loki 容器,此操作不可恢复。',
deleteRecordDesc:
@@ -35,7 +35,7 @@ export default {
ready: 'Loki 就绪',
notReady: 'Loki 未就绪',
runningHint:
'到「日志查询 → 数据源」关联 Loki 后即可查询。',
'在「日志查询 → 数据源」中关联 Loki 后即可查询。',
configure: '配置',
deploy: '部署',
deploying: '部署中...',
@@ -86,7 +86,7 @@ export default {
hostRequired: '请选择目标主机',
portInvalid: '端口须在 1-65535 之间',
namespaceRequired: '请填写命名空间',
storageSizeMin: '阿里云 ESSD 最小 20Gi,请填 20Gi 或以上',
storageSizeMin: '阿里云 ESSD 最小容量为 20Gi,请填写 20Gi 或以上',
},
retention: {
title: '编辑保留策略 · {{name}}',
@@ -95,15 +95,14 @@ export default {
locationHostDocker: '主机 /etc/lokistack/loki-{{id}}/loki.yaml → limits_config.retention_period',
locationK8s: 'ConfigMap {{namespace}}/loki-config → loki.yaml',
compactorNote: '保留策略由 Loki compactor 执行;MinIO 只负责存储日志对象。',
liveTitle: '运行中的完整 loki.yaml',
liveHint: '从部署目标读取,存储凭证已遮盖;下方保留天数仍单独编辑。',
daysLabel: '保留天数',
daysUnit: '天',
daysConvert: '= {{hours}} 小时',
daysHint: '填一个数字即可,无需写 YAML。范围 1–3650 天。',
daysHint: '填写天数即可,无需编写 YAML;范围为 1–3650 天。',
daysInteger: '请填写整数天数',
daysRange: '天数需在 1–3650 之间',
costWarning: '保留 {{days}} 天会让对象存储占用随天数线性增长;清空历史日志请谨慎。',
costWarning: '保留 {{days}} 天会让对象存储占用随天数线性增长;缩短保留期将清除历史日志,请谨慎操作。',
loading: '读取中…',
liveToggle: '查看运行中的完整 loki.yaml(只读)',
applyHintRunning: '保存并应用会重新部署 Loki,查询可能短暂中断(约 1 分钟)。',
@@ -128,7 +127,7 @@ export default {
cpu: 'CPU',
memory: '内存',
refresh: '刷新',
upgradeHint: '如需扩容:在「编辑保留策略」旁用部署表单调整 CPU / 内存后重新部署。',
upgradeHint: '如需扩容,请在「编辑保留策略」旁的部署表单中调整 CPU / 内存并重新部署。',
noLimits: '未配置资源限额(可查看实时占用,但无法计算占比)',
errLoad: '读取资源用量失败',
},
+2 -2
View File
@@ -24,7 +24,7 @@ export default {
},
delete: {
warning:
'确定删除「{{name}}」吗?仍有 {{dep}} 个部署、{{col}} 个采集策略在引用。',
'确定删除「{{name}}」吗?仍有 {{dep}} 个部署、{{col}} 个采集策略在引用,删除后将不可用。',
},
toast: {
deleteFailed: '删除主机失败',
@@ -55,7 +55,7 @@ export default {
validation: {
nameRequired: '请输入主机名称',
hostIpRequired: '请输入主机 IP',
hostIpLoopback: '不能填 127.0.0.1 / localhost:平台运行在容器内,回环地址指向平台自身,请填服务器的实际 IP',
hostIpLoopback: '请勿填写 127.0.0.1 / localhost:平台运行于容器内,回环地址指向平台自身,请填写服务器实际 IP',
portRequired: '请输入端口',
portNumeric: '端口必须为数字',
portRange: '端口必须在 1-65535 之间',
+8 -8
View File
@@ -7,8 +7,8 @@ export default {
query: 'Loki 查询',
access: '查询授权',
sources: '数据源管理',
descQuery: '按日志流与时间范围检索,可拖时间线、看前后文。',
descAccess: '用策略组复用日志范围,并一次关联多个用户。',
descQuery: '按日志流与时间范围检索,支持拖拽时间线与查看上下文。',
descAccess: '通过策略组复用日志范围,并批量关联多个用户。',
descSources: '配置 Loki 连接与认证方式。',
},
toolbar: {
@@ -19,7 +19,7 @@ export default {
sourceAria: '数据源',
sourceEmptyOption: '暂无可用数据源',
limitLabel: '每页条数',
limitHint: '默认 200 条(每条约 0.7KB)。日志量很大时先收窄时间范围或加过滤条件,比调大每页条数更有效。',
limitHint: '默认 200 条(每条约 0.7KB)。日志量较大时,建议优先收窄时间范围或增加过滤条件,而非调大每页条数。',
rangeInvalid: '请选择有效的起止时间',
queryFailed: '查询失败',
},
@@ -27,7 +27,7 @@ export default {
loadFailed: '加载数据源失败',
missingTitle: '还没有可用的 Loki 数据源',
missingBody:
'请先到「数据源管理」关联 Loki:集群内选「集群服务」,跨集群 / 公网用「URL 直连」。',
'请先到「数据源管理」关联 Loki:集群内选「集群服务」,跨集群 / 公网使用「URL 直连」。',
goConfigure: '去配置数据源',
sectionAria: '数据源管理',
heading: 'Loki 数据源',
@@ -91,7 +91,7 @@ export default {
namespace: '命名空间',
app: 'App',
appWithKey: 'App({{key}})',
pod: '副本 / Pod',
pod: 'Pod',
selectCount: '请选择(共 {{count}} 个)',
loading: '加载中…',
loadFailed: '加载失败',
@@ -243,7 +243,7 @@ export default {
sourceEmpty: '请先添加数据源',
scopeTitle: '允许查询的日志范围',
ownerFallback: '策略组',
scopeHint: '可按命名空间、App、副本 / Pod 精确限制。未选择的标签不作限制。',
scopeHint: '可按命名空间、App、Pod 精确限制。未选择的标签不作限制。',
usersTitle: '关联用户',
selectedAnyone: '已选 所有人(anyone)',
selectedCount: '已选 {{count}} 位',
@@ -251,7 +251,7 @@ export default {
anyoneActive: '✓ 所有人(anyone)',
selectFiltered: '选择当前筛选',
clear: '清空',
usersHint: '同一用户在同一数据源只能属于一个策略组;已在其他组的用户会置灰。',
usersHint: '同一用户在同一数据源仅可属于一个策略组;已在其他策略组的用户将显示为不可选。',
searchAria: '搜索用户',
searchPlaceholder: '搜索用户名或昵称',
grouped: '已分组',
@@ -263,7 +263,7 @@ export default {
ruleAria: '{{name}} 查询范围',
nsLabel: '命名空间',
appLabel: 'App',
podLabel: '副本 / Pod',
podLabel: 'Pod',
},
select: {
placeholder: '搜索并选择',
+3 -3
View File
@@ -52,9 +52,9 @@ export default {
cardTitle: '告警通知通道(飞书/Lark)',
create: '新建通道',
// 空态文案按「前段 + 链接 + 后段」拼接(链接指向日志告警页)
emptyBefore: '尚无通知通道 —— 每个告警群建一个通道,',
emptyBefore: '尚无通知通道 —— 建议为每个告警群创建一个通道,',
emptyLink: '日志告警',
emptyAfter: '在告警规则页把规则关联到对应通道。',
emptyAfter: '并在告警规则页将规则关联到对应通道。',
webhookConfigured: 'Webhook 已配置',
webhookMissing: '未配置',
secretConfigured: ' · 签名已配置',
@@ -114,7 +114,7 @@ export default {
modeOverseasLabel: '海外官方',
modeOverseasDesc: 'docker.io,海外网络环境',
modeCnLabel: '国内加速',
modeCnDesc: 'docker.m.daocloud.io 镜像,国内环境防被墙',
modeCnDesc: 'docker.m.daocloud.io 镜像,适用于国内网络环境',
modeCustomLabel: '私有仓库',
modeCustomDesc: '自有 registry 前缀(如华为云 SWR)',
errLoad: '加载镜像源配置失败',
+2 -2
View File
@@ -21,9 +21,9 @@ const wizard = {
hint: {
env: '先选择部署环境并接入集群或主机',
storage: '环境已就绪,建议先配置对象存储',
deploy: '目标与存储已就绪,创建 Loki 部署吧',
deploy: '目标与存储已就绪,请创建 Loki 部署',
collect: 'Loki 已运行,添加采集策略开始收集日志',
all: '全部就绪:日志正在收集,可到日志查询页分析',
all: '全部就绪:日志正在收集,可前往日志查询页进行分析',
},
env: {
k8sTitle: 'Kubernetes 集群',