ChatGPT-Next-Web/app/locales/cn.ts
pacmandoh 666c80456a fix: sidebar search :focus border on Safari
* chore: add placeholder on sidebar search
* chore: modify input:focus border-color to adapting to global theme
2024-02-06 00:15:12 +08:00

517 lines
14 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { getClientConfig } from "../config/client";
import { SubmitKey } from "../store/config";
const isApp = !!getClientConfig()?.isApp;
const cn = {
WIP: "该功能仍在开发中……",
Error: {
Unauthorized: isApp
? "检测到无效 API Key请前往[设置](/#/settings)页检查 API Key 是否配置正确。"
: "访问密码不正确或为空,请前往[登录](/#/auth)页输入正确的访问密码,或者在[设置](/#/settings)页填入你自己的 OpenAI API Key。",
},
Auth: {
Title: "需要密码",
Tips: "管理员开启了密码验证,请在下方填入访问码",
SubTips: "或者输入你的 OpenAI 或 Google API 密钥",
Input: "在此处填写访问码",
Confirm: "确认",
Later: "稍后再说",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} 条对话`,
},
Chat: {
SubTitle: (count: number) => `${count} 条对话`,
EditMessage: {
Title: "编辑消息记录",
Topic: {
Title: "聊天主题",
SubTitle: "更改当前聊天主题",
},
},
Actions: {
ChatList: "查看消息列表",
CompressedHistory: "查看压缩后的历史 Prompt",
Export: "导出聊天记录",
Copy: "复制",
Stop: "停止",
Retry: "重试",
Pin: "固定",
PinToastContent: "已将 1 条对话固定至预设提示词",
PinToastAction: "查看",
Delete: "删除",
Edit: "编辑",
},
Commands: {
new: "新建聊天",
newm: "从面具新建聊天",
next: "",
prev: "",
clear: "",
del: "",
},
InputActions: {
Stop: "",
ToBottom: "",
Theme: {
auto: "",
light: "",
dark: "",
},
Prompt: "",
Masks: "",
Clear: "",
Settings: "",
EnablePlugins: "",
DisablePlugins: "",
},
Rename: "",
Typing: "",
Input: (submitKey: string) => {
var inputHints = `${submitKey} 发送`;
if (submitKey === String(SubmitKey.Enter)) {
inputHints += "Shift + Enter ";
}
return inputHints + "/ : ";
},
Send: "",
Config: {
Reset: "",
SaveAs: "",
},
IsContext: "",
},
Export: {
Title: "",
Copy: "",
Download: "",
Share: " ShareGPT",
MessageFromYou: "",
MessageFromChatGPT: "ChatGPT",
Format: {
Title: "",
SubTitle: " Markdown PNG ",
},
IncludeContext: {
Title: "",
SubTitle: "",
},
Steps: {
Select: "",
Preview: "",
},
Image: {
Toast: "",
Modal: "",
},
},
Select: {
Search: "",
All: "",
Latest: "",
Clear: "",
},
Memory: {
Title: "",
EmptyContent: "",
Send: "",
Copy: "",
Reset: "[unused]",
ResetConfirm: "",
},
Home: {
NewChat: "",
DeleteChat: "",
DeleteToast: "",
Revert: "",
Search: "",
},
Settings: {
Title: "",
SubTitle: "",
Danger: {
Reset: {
Title: "",
SubTitle: "",
Action: "",
Confirm: "",
},
Clear: {
Title: "",
SubTitle: "",
Action: "",
Confirm: "",
},
},
Lang: {
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "",
},
Avatar: "",
FontSize: {
Title: "",
SubTitle: "",
},
InjectSystemPrompts: {
Title: "",
SubTitle: " ChatGPT ",
},
InputTemplate: {
Title: "",
SubTitle: "",
},
Update: {
Version: (x: string) => `当前版本:${x}`,
IsLatest: "",
CheckUpdate: "",
IsChecking: "...",
FoundUpdate: (x: string) => `发现新版本:${x}`,
GoToUpdate: "",
},
SendKey: "",
Theme: "",
TightBorder: "",
SendPreviewBubble: {
Title: "",
SubTitle: " Markdown ",
},
AutoGenerateTitle: {
Title: "",
SubTitle: "",
},
Sync: {
CloudState: "",
NotSyncYet: "",
Success: "",
Fail: "",
Config: {
Modal: {
Title: "",
Check: "",
},
SyncType: {
Title: "",
SubTitle: "",
},
Proxy: {
Title: "",
SubTitle: "",
},
ProxyUrl: {
Title: "",
SubTitle: "",
},
WebDav: {
Endpoint: "WebDAV ",
UserName: "",
Password: "",
},
UpStash: {
Endpoint: "UpStash Redis REST Url",
UserName: "",
Password: "UpStash Redis REST Token",
},
},
LocalState: "",
Overview: (overview: any) => {
return `${overview.chat} 次对话,${overview.message} 条消息,${overview.prompt} 条提示词,${overview.mask} 个面具`;
},
ImportFailed: "",
},
Mask: {
Splash: {
Title: "",
SubTitle: "",
},
Builtin: {
Title: "",
SubTitle: "",
},
},
Prompt: {
Disable: {
Title: "",
SubTitle: " / ",
},
List: "",
ListCount: (builtin: number, custom: number) =>
`内置 ${builtin} 条,用户定义 ${custom} 条`,
Edit: "",
Modal: {
Title: "",
Add: "",
Search: "",
},
EditModal: {
Title: "",
},
},
HistoryCount: {
Title: "",
SubTitle: "",
},
CompressThreshold: {
Title: "",
SubTitle: "",
},
Usage: {
Title: "",
SubTitle(used: any, total: any) {
return `本月已使用 $${used},订阅总额 $${total}`;
},
IsChecking: "",
Check: "",
NoAccess: " API Key 访",
},
Access: {
AccessCode: {
Title: "访",
SubTitle: "访",
Placeholder: "访",
},
CustomEndpoint: {
Title: "",
SubTitle: "使 Azure OpenAI ",
},
Provider: {
Title: "",
SubTitle: "",
},
OpenAI: {
ApiKey: {
Title: "API Key",
SubTitle: "使 OpenAI Key 访",
Placeholder: "OpenAI API Key",
},
Endpoint: {
Title: "",
SubTitle: " http(s)://",
},
},
Azure: {
ApiKey: {
Title: "接口密钥",
SubTitle: "使用自定义 Azure Key 绕过密码访问限制",
Placeholder: "Azure API Key",
},
Endpoint: {
Title: "接口地址",
SubTitle: "样例:",
},
ApiVerion: {
Title: "接口版本 (azure api version)",
SubTitle: "选择指定的部分版本",
},
},
Google: {
ApiKey: {
Title: "接口密钥",
SubTitle: "使用自定义 Google AI Studio API Key 绕过密码访问限制",
Placeholder: "Google AI Studio API Key",
},
Endpoint: {
Title: "接口地址",
SubTitle: "不包含请求路径,样例:",
},
ApiVerion: {
Title: "接口版本 (gemini-pro api version)",
SubTitle: "选择指定的部分版本",
},
},
CustomModel: {
Title: "自定义模型名",
SubTitle: "增加自定义模型可选项,使用英文逗号隔开",
},
},
Model: "模型 (model)",
Temperature: {
Title: "随机性 (temperature)",
SubTitle: "值越大,回复越随机",
},
TopP: {
Title: "核采样 (top_p)",
SubTitle: "与随机性类似,但不要和随机性一起更改",
},
MaxTokens: {
Title: "单次回复限制 (max_tokens)",
SubTitle: "单次交互所用的最大 Token 数",
},
PresencePenalty: {
Title: "话题新鲜度 (presence_penalty)",
SubTitle: "值越大,越有可能扩展到新话题",
},
FrequencyPenalty: {
Title: "频率惩罚度 (frequency_penalty)",
SubTitle: "值越大,越有可能降低重复字词",
},
Plugin: {
Enable: {
Title: "启用插件",
SubTitle: "启用插件调用功能",
},
MaxIteration: {
Title: "最大迭代数",
SubTitle: "插件调用最大迭代数",
},
ReturnIntermediateStep: {
Title: "返回中间步骤",
SubTitle: "是否返回插件调用的中间步骤",
},
},
},
Store: {
DefaultTopic: "新的聊天",
BotHello: "有什么可以帮你的吗",
Error: "出错了,稍后重试吧",
Prompt: {
History: (content: string) => "这是历史聊天总结作为前情提要:" + content,
Topic:
"使用四到五个字直接返回这句话的简要主题,不要解释、不要标点、不要语气词、不要多余文本,不要加粗,如果没有主题,请直接返回“闲聊”",
Summarize:
"简要总结一下对话内容,用作后续的上下文提示 prompt控制在 200 字以内",
},
},
Copy: {
Success: "已写入剪切板",
Failed: "复制失败,请赋予剪切板权限",
},
Download: {
Success: "内容已下载到您的目录。",
Failed: "下载失败。",
},
Context: {
Toast: (x: any) => `包含 ${x} 条预设提示词`,
Edit: "当前对话设置",
Add: "新增一条对话",
Clear: "上下文已清除",
Revert: "恢复上下文",
},
Plugin: {
Name: "插件",
Page: {
Title: "预设插件",
SubTitle: (count: number) => `${count} 个预设插件`,
Search: "搜索插件",
Create: "新建",
},
Item: {
View: "查看",
Edit: "编辑",
Delete: "删除",
DeleteConfirm: "确认删除?",
},
EditModal: {
Title: (readonly: boolean) =>
`编辑预设插件 ${readonly ? "(只读)" : ""}`,
Download: "下载预设",
Clone: "克隆预设",
},
RuntimeWarning: "仅在非Vercel环境部署时可用",
},
FineTuned: {
Sysmessage: "你是一个助手",
},
Mask: {
Name: "面具",
Page: {
Title: "预设角色面具",
SubTitle: (count: number) => `${count} 个预设角色定义`,
Search: "搜索角色面具",
Create: "新建",
},
Item: {
Info: (count: number) => `包含 ${count} 条预设对话`,
Chat: "对话",
View: "查看",
Edit: "编辑",
Delete: "删除",
DeleteConfirm: "确认删除?",
},
EditModal: {
Title: (readonly: boolean) =>
`编辑预设面具 ${readonly ? "(只读)" : ""}`,
Download: "下载预设",
Clone: "克隆预设",
},
Config: {
Avatar: "角色头像",
Name: "角色名称",
Sync: {
Title: "使用全局设置",
SubTitle: "当前对话是否使用全局模型设置",
Confirm: "当前对话的自定义设置将会被自动覆盖,确认启用全局设置?",
},
HideContext: {
Title: "隐藏预设对话",
SubTitle: "隐藏后预设对话不会出现在聊天界面",
},
Share: {
Title: "分享此面具",
SubTitle: "生成此面具的直达链接",
Action: "复制链接",
},
},
},
NewChat: {
Return: "返回",
Skip: "直接开始",
NotShow: "不再展示",
ConfirmNoShow: "确认禁用?禁用后可以随时在设置中重新启用。",
Title: "挑选一个面具",
SubTitle: "现在开始,与面具背后的灵魂思维碰撞",
More: "查看全部",
},
URLCommand: {
Code: "检测到链接中已经包含访问码,是否自动填入?",
Settings: "检测到链接中包含了预制设置,是否自动填入?",
},
UI: {
Confirm: "确认",
Cancel: "取消",
Close: "关闭",
Create: "新建",
Edit: "编辑",
Export: "导出",
Import: "导入",
Sync: "同步",
Config: "配置",
},
Exporter: {
Description: {
Title: "只有清除上下文之后的消息会被展示",
},
Model: "模型",
Messages: "消息",
Topic: "主题",
Time: "时间",
},
};
type DeepPartial<T> = T extends object
? {
[P in keyof T]?: DeepPartial<T[P]>;
}
: T;
export type LocaleType = typeof cn;
export type PartialLocaleType = DeepPartial<typeof cn>;
export default cn;