const strings = {
error: {
server_error: "服务器错误,请重试"
},
title: {
donate: "捐赠",
donateTitle: "支持 P3X Redis UI",
donateDescription: "P3X Redis UI 是一个免费的开源项目。应用程序、AI 功能、Docker 镜像、服务器和基础设施的维护成本均来自开发者自掏腰包。如果您觉得这个工具有用,请考虑通过捐款支持其持续开发。每一份贡献都有助于保持项目的活力和发展。谢谢!",
jsonRecursive: "展开所有叶子",
name: "P3X Redis UI",
nameDonated: "P3X Redis UI+",
main: "您可以从左下方菜单中选择要连接的Redis进行连接访问",
statistics: "Statistics",
error: "错误",
connectingRedis: "连接到Redis ...",
socketioConnectError: "Socket.IO 错误",
db: "DB",
server: "服务端",
clients: "客户端",
memory: "内存",
persistence: "持久性",
stats: "统计",
replication: "同步复制",
cpu: "CPU",
cluster: "集群",
modules: "模块",
errorstats: "错误统计",
commandstats: "命令统计",
latencystats: "延迟统计",
keysizes: "键大小",
threads: "线程"
},
confirm: {
dropIndex: "确定要删除此索引吗?",
uploadBuffer: "您确定上传此二进制数据吗?",
uploadBufferDone: "二进制数据已上传",
uploadBufferDoneAndSave: "二进制数据上传并保存在服务器上",
title: "确认",
alert: "警告",
info: "信息",
deleteListItem: "您确定要删除该列表项吗?",
deleteHashKey: "您确定要删除该哈希键项吗?",
deleteStreamTimestamp: "您确定要删除此流时间戳吗?",
deleteSetMember: "您确定要删除该集合成员?",
deleteZSetMember: "您确定要删除该有序集合成员?",
deleteConnection: "确认",
deleteConnectionText: "您确定要删除此Redis连接吗?",
deleteNode: "您确定要删除此Redis节点吗?",
delete: "删除?",
deleteAllKeys: opts => {
return `删除此树及其所有键 (${opts.key})?`;
},
deleteSearchKeys: opts => {
return `确定要删除所有匹配 "${opts.pattern}" 的键吗?找到 ${opts.count} 个键。`;
},
socketioConnectError: "Socket.IO 无法连接到该服务,请重新加载并尝试解决此错误,客户端无法解决此错误",
socketioAuthRequired: "Socket.IO 需要授权。请先完成 HTTP Basic Auth(用户名/密码)后再刷新页面。",
deleteKey: "您确定要删除此键吗?",
rename: {
title: "您确定要重命名此键吗?",
textContent: "如果您点击重命名按钮,它将永久重命名此键。",
placeholder: "Redis键(必须存在)"
},
ttl: {
title: "您要更改此键的TTL吗?",
textContent: "如果您点击更改TTL按钮,将更改此键的生存时间,将其设置为空表示永久有效。",
placeholder: "Redis键的TTL(整数或空)",
placeholderPlaceholder: "空表示永久存在,否则使用所提供的整数。",
convertTextToTime: "将文本转换为时间",
convertTextToTimePlaceholder: "例如,1d 表示 86400"
}
},
language: {
bg: "Български / Bulgarian",
cs: "Čeština / Czech",
de: "Deutsch / German",
el: "Ελληνικά / Greek",
en: "英语 / English",
es: "Español / Spanish",
fr: "Français / French",
hu: "Magyar / Hungarian",
it: "Italiano / Italian",
ja: "日本語 / Japanese",
nl: "Nederlands / Dutch",
pl: "Polski / Polish",
"pt-PT": "Português / Portuguese",
ro: "Română / Romanian",
ru: "Русский / Russian",
sk: "Slovenčina / Slovak",
sr: "Српски / Serbian",
sv: "Svenska / Swedish",
tr: "Türkçe / Turkish",
uk: "Українська / Ukrainian",
zn: "中文 / Chinese",
ar: "العربية / Arabic",
az: "Azərbaycanca / Azerbaijani",
be: "Беларуская / Belarusian",
bn: "বাংলা / Bengali",
da: "Dansk / Danish",
et: "Eesti / Estonian",
fi: "Suomi / Finnish",
fil: "Filipino / Filipino",
he: "עברית / Hebrew",
hr: "Hrvatski / Croatian",
hy: "Հայերեն / Armenian",
id: "Bahasa Indonesia / Indonesian",
ka: "ქართული / Georgian",
kk: "Қазақша / Kazakh",
km: "ខ្មែរ / Khmer",
ko: "한국어 / Korean",
ky: "Кыргызча / Kyrgyz",
lt: "Lietuvių / Lithuanian",
mk: "Македонски / Macedonian",
ms: "Bahasa Melayu / Malay",
ne: "नेपाली / Nepali",
no: "Norsk / Norwegian",
"pt-BR": "Português (Brasil) / Portuguese (Brazil)",
sl: "Slovenščina / Slovenian",
tg: "Тоҷикӣ / Tajik",
th: "ไทย / Thai",
vi: "Tiếng Việt / Vietnamese",
"zh-HK": "中文(香港) / Chinese (Hong Kong)",
"zh-TW": "中文(台灣) / Chinese (Taiwan)",
bs: 'Bosanski / Bosnian',
si: 'සිංහල / Sinhala',
sw: 'Kiswahili / Swahili',
ta: 'தமிழ் / Tamil'
},
intention: {
copy: "复制",
downloadBuffer: "下載二進位文件",
setBuffer: "上傳二進位文件",
exportKeys: "导出键",
exportAllKeys: (opts) => `导出全部 ${opts.count} 个键`,
exportSearchResults: (opts) => `导出 ${opts.count} 个结果`,
deleteAllKeysMenu: (opts) => `删除全部 ${opts.count}`,
importKeys: "导入键",
deleteSearchKeys: (opts) => `删除 ${opts.count} 个匹配的键`,
saveWithFormatJson: "保存格式",
formatJson: "格式化Json",
wrap: "自动换行",
unwrap: "不换行",
downloadJson: "下载 JSON",
pubsubMonitor: "PubSub",
pulse: "Pulse",
profiler: "Profiler",
memoryAnalysis: "Analysis",
language: "语言 / Language",
ok: "确定",
addKey: "加入此键",
addKeyRoot: "加入一个根键",
reloadKey: "重载键",
reload: "重载",
close: "关闭",
commands: "命令",
view: "视图",
statistics: "统计",
refresh: "刷新",
pause: "暂停",
resume: "继续",
clear: "清除",
rename: "重命名",
main: "数据库",
cancel: "取消",
theme: "主题",
github: "GitHub",
githubRepo: "仓库",
githubRelease: "发布",
githubChangelog: "更新日志",
info: "Info",
settings: "设置",
connect: "连接",
disconnect: "断开",
overview: "概览",
console: "控制台",
noConnections: "没有任何连接,请在设置菜单中添加一个连接。",
noConnectionsInSettings: "没有连接,您可以在上面添加一个新的连接。",
connectionAdd: "新连接",
addGroup: "添加分组",
extend: "拓展",
collapse: "折叠",
add: "添加",
edit: "编辑",
save: "保存",
ttl: "设置 TTL",
delete: "删除",
remove: "删除",
areYouSure: "你确定吗?",
sure: "确定",
testConnection: "测试连接",
getKey: "加载Redis键及相关数据...",
jsonViewShow: "显示 JSON 树",
jsonViewEditor: "编辑JSON",
quickConsole: "快的"
},
label: {
id: {
nodeId: '节点号',
id: "连接ID",
info: "如果您不想更改以下属性:sshPassword、sshPrivateKey、password、tlsCrt、tlsKey、tlsCa,请在这些属性中输入连接 ID 以保持属性值不变。 如果您希望节点密码具有相同的逻辑,则在节点密码中输入节点 ID。"
},
secureFeature: '如果您看到以 P3X 开头的值并且看起来相似,则这是一项安全功能。 要更改设置,只需将这些设置替换为空或其他内容即可保存它们。 如果您不更改设置,这些设置将保留在服务器上的原样。',
aiTranslating: "翻译中...",
aiSettings: "AI 设置",
aiGroqApiKey: "Groq API 密钥",
aiGroqApiKeyInfo: "可选。使用自己的 Groq API 密钥获得更好性能。免费获取密钥",
aiGroqApiKeyPlaceholder: "gsk_...",
aiGroqApiKeySaved: "AI API 密钥已保存",
aiGroqApiKeyInvalid: "无效的 Groq API 密钥",
aiGroqApiKeyNotSet: "未设置(使用服务器默认)",
aiEnabled: "AI 已启用",
aiEnabledYes: "是",
aiEnabledNo: "否",
aiRouteViaNetwork: "通过 network.corifeus.com 路由",
aiRoutingDirect: "使用您自己的 API 密钥直接向 Groq 发送查询,绕过 network.corifeus.com。",
aiRoutingNetwork: "AI 查询通过 network.corifeus.com 路由。如果您有自己的免费 Groq API 密钥,可以关闭此开关直接使用 Groq。",
ssh: {
on: 'SSH 开启',
off: 'SSH 关闭',
sshHost: 'SSH 主机',
sshPort: 'SSH端口',
sshUsername: 'SSH 用户名',
sshPassword: 'SSH密码',
sshPrivateKey: 'SSH 私钥'
},
isBuffer: opts => `[object ArrayBuffer] 表示該值是二進位緩衝區或該值大於 ${opts.maxValueAsBuffer}`,
streamValue: `流字段和值是唯一的。 例如:field1 value1 "field 2" "value 2"`,
streamTimestampId: `'*'表示自动生成或指定为<millisecondsTime>-<sequenceNumber>`,
unableToLoadKey: ({
key
}) => {
return `无法加载此密钥:: ${key}。可能,密钥被删除了。确切的错误在控制台中。`;
},
bigJson: "此JSON对象超过10 kb,因此请确保您知道自己在做什么,因为某些功能可能会缓慢呈现。",
addNode: "添加节点",
validateJson: "验证JSON",
reducedFunction: `功能限制`,
tooManyKeys: opts => {
return `对于最大函数允许的键个数为 ${opts.maxLightKeysCount}. 该数据库允许共超过的键总数为 ${opts.count}.但键的排序及范式树等相关信息会被禁用。搜索仅在服务器上进行,而不是客户端搜索。`;
},
redisCommandNotFound: "找不到匹配的Redis命令...",
treeKeyStore: `该排序(自然排序)运行在客户端的浏览器上, 意味着针对大型集合(例如超过1W个键),渲染的时长开销需要增加.Redis中没有键排序, 就像这样。`,
socketIoTimeout: options => {
return `Socket.IO 请求超时,请求时最长(最大 ${options.timeout / 1000}秒) ...`;
},
resizerInfo: options => {
return `面板(左/右)的最小宽度是 ${options.width}像素`;
},
jsonViewNotParsable: "该值JSON无法解析",
ttlTitle: "设置TTL时间(秒)",
passwordSecure: "密码可能为空,但仍会显示字符,这是一项安全功能。",
treeSeparatorEmpty: "如果树分隔符为空,则树将没有嵌套节点,只有纯列表",
tlsWithoutCert: "无需额外证书即可启用 TLS",
tlsRejectUnauthorized: "拒绝未经授权的证书",
tlsSecure: "如果您看到以 P3X 开头的 TLS 配置或所有 TLS 设置看起来都相同,则这是一项安全功能。 要更改设置,只需将这些设置替换为空或其他内容即可保存。 如果您不更改 TLS 设置,这些设置将保持在服务器上的原样。",
treeSeparatorEmptyNote: "没有嵌套节点,只是一个纯列表",
welcomeConsole: "欢迎来到Redis控制台",
welcomeConsoleInfo: "上下方向键选择历史记录功能已启用",
redisListIndexInfo: "空值追加, -1 到前置或保存到光标之处",
console: "控制台",
connectiondAdd: "添加连接",
connectiondEdit: "编辑连接",
connectiondView: "查看连接",
connections: "连接",
keysSort: {
on: "开启键排序",
off: "关闭键排序"
},
cluster: {
on: "群集",
off: "集群关闭"
},
sentinel: {
on: "哨兵開啟",
off: "哨兵關閉",
name: '哨兵名称'
},
readonly: {
on: "只读",
off: "只读关闭"
},
theme: {
light: "浅棕",
dark: "黑暗企业",
darkNeu: "暗色",
darkoBluo: "蓝色",
enterprise: "企业风",
redis: "Redis风格",
matrix: "矩阵"
},
connected: opts => {
return `已连接: ${opts.name}`;
},
tree: "树",
askAuth: "请求授权",
keyboardShortcuts: "键盘快捷键",
about: "关于",
supportedLanguages: "支持的语言",
version: "版本",
redisVersion: "Redis 版本",
modules: "模块",
shortcutRefresh: "刷新",
shortcutSearch: "聚焦搜索",
shortcutNewKey: "新建键",
shortcutDisconnect: "断开",
themeAuto: "自动(系统)",
languageAuto: "自动(系统)",
shortcutCommandPalette: "命令面板",
commandPalette: "命令面板",
noResults: "无结果",
redisCommandsReference: "Redis 命令",
ungrouped: "未分组",
grouped: "已分组",
connectFirst: "请先连接到 Redis 服务器",
searchLanguage: "搜索语言...",
exportProgress: "正在导出键...",
importProgress: "正在导入键...",
importPreview: "预览",
importOverwrite: "覆盖",
importSkip: "跳过",
importConflict: "如果键已存在:",
noKeysToExport: "没有键可导出",
time: "时间",
type: "类型",
format: "格式",
loading: "加载中...",
autoRefresh: "自动",
exportSearchHint: "仅导出与当前搜索匹配的键",
importSearchHint: "导入适用于整个数据库,而不仅仅是搜索结果",
deleteSearchHint: "删除所有匹配当前搜索的键",
deletingSearchKeys: "正在删除匹配的键...",
importNoKeys: "文件中未找到键",
desktopNotifications: "桌面通知",
desktopNotificationsEnabled: "启用桌面通知",
desktopNotificationsInfo: "当应用程序不在焦点时,接收 Redis 断线和重新连线的操作系统通知。"
},
status: {
dataCopied: "数据在剪贴板中",
exportDone: "导出完成",
deletedSearchKeys: (opts) => `已删除 ${opts.count} 个键`,
indexCreated: "索引已创建",
indexDropped: "索引已删除",
importDone: (opts) => `导入完成:${opts.created} 已创建,${opts.skipped} 已跳过,${opts.errors} 个错误`,
nodeRemoved: "节点已删除",
keyIsNotExisting: "此键可能已被删除或过期。",
keyCount: opts => {
if (opts.keyCount === 0) {
return "没有任何键";
} else if (opts.keyCount === 1) {
return "1 个键";
} else {
return `${opts.keyCount} 键`;
}
},
treeExpandAll: "展开所可能的原因是,连接已删除,自动连接失败有树,该操作的代价就是有点费时...",
noRedisKeys: "此数据库中没有任何键。",
redisConnected: "Redis 连接成功",
reloadingDataInfo: "重新加载Redis数据信息",
added: "已添加",
saved: "已更新",
cancelled: "已取消",
deleted: "已删除",
savedRedis: "Redis数据已保存",
redisDisconnected: opts => {
return `该连接有一个错误: ${opts.error.message}`;
},
dbChanged: opts => {
return `db索引设置为 ${opts.db}. `;
},
treeDeleted: opts => {
return `该树已删除 (${opts.key}).`;
},
deletedKey: opts => {
return `该键已删除 (${opts.key}).`;
},
renamedKey: "该键已重命名",
ttlChanged: "该键TTL已被更改",
notInteger: "输入值不是一个整数",
persisted: "永久键",
set: "键已设置/添加",
connectionRestored: "连接已恢复"
},
code: {
"delete-connection": "此连接已删除,因此您与此Redis实例断开连接。",
"save-connection": "此连接已更改,因此您与此Redis实例断开连接。 你可以重新连接。",
"readonly-connections": "连接(添加/保存/删除)只是只读!",
"readonly-connection-mode": "此连接为只读模式!",
"list-out-of-bounds": "此列表索引超出范围",
"invalid-json-value": "The value is not valid JSON.",
"http_auth_required": "需要授权:请先完成 HTTP Basic Auth 登录后再刷新页面。",
"auto-connection-failed": "因此,可能导致连接被删除并且自动连接失败。",
invalid_console_command: "此命令无法通过 GUI 运行。",
"AI_DISABLED": "AI 已禁用。请在 AI 设置中启用。",
"AI_PROMPT_REQUIRED": "需要 AI 提示。",
"GROQ_API_KEY_READONLY": "Groq API 密钥为只读,无法修改。",
"blocked_api_access": "您的 Groq API 计划不允许访问此模型。请升级您的 Groq 计划或使用 network.corifeus.com 代理。",
"rate_limit": "已达到 AI 速率限制。请稍后重试或在设置中使用您自己的 Groq API 密钥。"
},
form: {
error: {
required: "必填",
port: "端口号范围是 1-65535",
invalid: "值无效,请重新输入"
},
connection: {
label: {
name: "连接名字",
group: "分组",
host: "主机名",
port: "端口",
password: "密码",
username: "用户名"
}
},
treeSettings: {
maxValueDisplay: "最大值显示字符串长度",
maxValueDisplayInfo: "如果最大值显示为零,则显示所有内容,如果大于0,则将截断。 如果它是-1,它将不显示没有编辑字符串的值,对于其他人,它显示所有内容。",
maxKeys: "最大密钥数",
maxKeysInfo: "为了避免GUI崩溃,我们限制了最大密钥数。",
keyCount: (opts) => {
return `键数: ${opts?.keyCount ?? 0}`;
},
label: {
animation: "使用动画",
noAnimation: "没有动画",
jsonFormatTwoSpace: "用2个空格格式化JSON",
jsonFormatFourSpace: "用4个空格格式化JSON",
formName: "Redis设置",
searchModeClient: "客户端搜索模式",
searchModeServer: "服务端搜索模式",
searchModeStartsWith: "以模式启动搜索",
searchModeIncludes: "搜索包括模式"
},
field: {
treeSeparator: "树分隔符",
treeSeparatorSelector: "树分隔符选择器",
page: "树分页数",
keyPageCount: "按键分页数",
keysSort: "对键进行排序",
searchMode: "搜索模式",
searchModeStartsWith: "搜索以 / 开头"
},
error: {
keyPageCount: "密钥页数必须为5到100之间的整数",
page: "页数必须是10 - 5000之间的整数",
maxValueDisplay: "最大显示值必须是介于-1和32768之间的整数",
maxKeys: "最大密钥计数值必须是100到100000之间的整数"
}
},
key: {
label: {
formName: {
add: "添加新的Redis键",
edit: "编辑 Redis key",
append: "添加到现有的Redis键"
}
},
field: {
streamTimestamp: "时间戳记",
key: "键",
type: "类型",
index: "索引",
hashKey: "哈希键",
score: "分数",
value: "值"
},
error: {
streamTimestamp: "时间戳是必需的,可以是Redis格式,也可以*",
key: "键至少存在一个字符",
hashKey: "哈希表键至少是一个字符",
score: "排序的集合分数是必需的",
value: "该值是必填的"
}
},
main: {
label: {
database: "DB"
}
}
},
page: {
search: {
title: "搜索",
index: "索引",
query: "查询",
results: "结果",
noIndex: "未找到索引",
createIndex: "创建索引",
dropIndex: "删除索引",
indexInfo: "索引信息",
indexName: "索引名称",
prefix: "键前缀(可选)",
fieldName: "字段名称"
},
monitor: {
title: "监控",
memory: "内存",
opsPerSec: "操作/秒",
clients: "客户端",
blocked: "已阻塞",
hitsMisses: "命中率",
networkIo: "网络 I/O",
slowLog: "慢查询日志",
totalCommands: "总计",
expired: "已过期",
evicted: "已驱逐",
clientList: "客户端列表",
topKeys: "内存最大的键",
killClient: "终止客户端",
clientKilled: "客户端已终止",
confirmKillClient: "确定要终止此客户端吗?",
noKeys: "没有键",
rss: "RSS",
peak: "峰值",
fragmentation: "碎片化",
hitsAndMisses: "命中 / 未命中",
noClients: "没有客户端"
},
analysis: {
title: "内存分析",
runAnalysis: "运行分析",
running: "分析中...",
typeDistribution: "类型分布",
prefixMemory: "按前缀分内存",
topKeysByMemory: "按内存排名的键",
expirationOverview: "键过期",
memoryBreakdown: "内存明细",
keysScanned: "已扫描键",
totalMemory: "总内存",
rssMemory: "RSS 内存",
peakMemory: "峰值内存",
luaMemory: "Lua 内存",
overheadMemory: "额外开销",
datasetMemory: "数据集",
fragmentation: "碎片化",
allocator: "分配器",
withTTL: "有 TTL",
persistent: "永久",
avgTTL: "平均 TTL",
prefix: "前缀",
keyCount: "键数量",
memoryUsage: "内存使用量",
noPrefix: "(无前缀)",
topN: "Top N",
maxScanKeys: "最大扫描键数",
type: "类型",
noData: "无数据。点击运行分析开始。",
exportAll: "导出全部"
},
overview: {
noConnected: "没有任何连接到Redis",
overviewClients: "按客户端连接计数展示所有连接",
connectedCount: opt => {
if (opt.length === 1) {
return "1 客户端";
}
return `${opt.length} 客户端`;
}
},
key: {
label: {
key: "键",
encoding: "编码",
compression: "压缩",
aiRateLimited: "已达到 AI 请求限制。请稍后重试或在设置中使用您自己的 Groq API 密钥。",
aiError: "AI 查询失败",
length: "大小",
ttl: "TTL",
ttlTitle: "生存时间",
type: "类型",
ttlNotExpire: "不会过期",
lengthString: "位元組",
lengthItem: "项数",
actions: "操作"
},
list: {
table: {
index: "索引",
value: "值"
}
},
hash: {
table: {
hashkey: "哈希",
value: "值"
}
},
set: {
table: {
value: "成员"
}
},
zset: {
table: {
value: "成员",
score: "分数"
}
},
stream: {
table: {
timestamp: "时间戳ID",
field: "领域",
value: "值"
}
},
timeseries: {
chart: "图表",
info: "信息",
addPoint: "添加数据点",
from: "起始 (ms 或 -)",
to: "结束 (ms 或 +)",
aggregation: "聚合",
timeBucket: "桶 (ms)",
none: "无",
dataPoints: "数据点",
labels: "标签",
rules: "规则",
retention: "保留",
timestamp: "时间戳",
value: "值",
retentionHint: "0 = 不过期,或毫秒",
duplicatePolicy: "重复策略",
labelsHint: "键1 值1 键2 值2",
timestampHint: "'*' 表示自动生成,或毫秒时间戳",
editAllHint: "每行一个数据点:时间戳 值(时间戳可以用 * 表示自动)",
autoSpread: "自动 * 分散间隔",
formula: "公式",
formulaLinear: "线性",
formulaRandom: "随机",
formulaSawtooth: "锯齿波",
formulaPoints: "点数",
formulaAmplitude: "振幅",
formulaOffset: "偏移",
generate: "生成",
exportChart: "导出 PNG",
overlay: "叠加键",
overlayHint: "逗号分隔的键",
mrangeFilter: "标签过滤器",
bulkMode: "批量生成",
mrangeHint: "例如 sensor=temp"
}
},
treeControls: {
settings: "树设置",
expandAll: "展开所有",
collapseAll: "折叠所有",
level: "级别",
search: {
search: "在键中搜索",
clear: "清空当前搜索结果",
placeholderClient: "客户端搜索",
placeholderServer: "服务端搜索",
info: (opts) => `客户端搜索是匹配输入的文本,服务端搜索则遵循*{search-text}*模式搜索.对于大量数据的搜索最好在服务端进行搜索,而较小数据量可以考虑客户端搜索。如果键数超过 ${opts?.maxLightKeysCount ?? 110000}个的则只能在服务端搜索`,
largeSetInfo: "在大型集合中,禁用客户端搜索。 所以现在只能进行服务器端搜索。",
infoDetails: "要了解搜索的工作原理,请查看设置"
},
pager: {
next: "下一页",
prev: "上一页",
first: "首页",
last: "末页"
}
}
},
time: {
type: "类型",
format: "格式",
loading: "加载中...",
years: "年份",
months: "个月",
days: "天",
year: "年",
month: "月",
day: "天",
second: "秒",
seconds: "秒",
minute: "分钟",
minutes: "分钟",
hour: "小时",
hours: "小时"
},
redisTypes: {
string: "String",
list: "List",
hash: "Hash table",
set: "Set",
zset: "Sorted set - zset",
stream: "Stream",
json: "JSON",
timeseries: "Time Series"
}
};
module.exports = strings;