ChatGPT-Next-Web/app/locales/tw.ts
2025-03-16 21:01:08 +08:00

543 lines
16 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";
import { SAAS_CHAT_UTM_URL } from "@/app/constant";
const isApp = !!getClientConfig()?.isApp;
const tw = {
WIP: "此功能仍在開發中……",
Error: {
Unauthorized: isApp
? `你正在使用公有部署版本,點擊[這裡](/#/auth)輸入訪問密碼或自己秘鑰 🔑。`
: `你正在使用公有部署版本,點擊[這裡](/#/auth)輸入訪問密碼或自己秘鑰 🔑。`,
},
Auth: {
Title: "需要密碼",
Tips: "管理員開啟了密碼驗證,請在下方填入存取密碼",
SubTips: "或者輸入你的 OpenAI 或 Google API 金鑰",
Input: "在此處填寫存取密碼",
Confirm: "確認",
Later: "稍候再說",
Return: "返回",
SaasTips: "使",
TopTips:
"🥳 NextChat AI OpenAI o1, GPT-4o, Claude-3.5 ",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} 則對話`,
},
Chat: {
SubTitle: (count: number) => `您已經與 ChatGPT 進行了 ${count} 則對話`,
EditMessage: {
Title: "",
Topic: {
Title: "",
SubTitle: "",
},
},
Actions: {
ChatList: "",
CompressedHistory: " Prompt",
Export: "",
Copy: "",
Stop: "",
Retry: "",
Pin: "",
PinToastContent: " 1 ",
PinToastAction: "",
Delete: "",
Edit: "",
RefreshTitle: "",
RefreshToast: "",
},
Commands: {
new: "",
newm: "",
next: "",
prev: "",
clear: "",
del: "",
},
InputActions: {
Stop: "",
ToBottom: "",
Theme: {
auto: "",
light: "",
dark: "",
},
Prompt: "",
Masks: "",
Clear: "",
Settings: "",
UploadImage: "",
},
Rename: "",
Typing: "",
Input: (submitKey: string) => {
var inputHints = `輸入訊息後,按下 ${submitKey} 鍵即可傳送`;
if (submitKey === String(SubmitKey.Enter)) {
inputHints += "Shift + Enter ";
}
return inputHints;
},
Send: "",
Config: {
Reset: "",
SaveAs: "",
},
IsContext: "",
ShortcutKey: {
Title: "",
newChat: "",
focusInput: "",
copyLastMessage: "",
copyLastCode: "",
showShortcutKey: "",
clearContext: "",
},
},
Export: {
Title: " Markdown",
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: " Prompt",
EmptyContent: "",
Copy: "",
Send: "",
Reset: "",
ResetConfirm: "",
},
Home: {
NewChat: "",
DeleteChat: "",
DeleteToast: "",
Revert: "",
},
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: "",
},
FontFamily: {
Title: "",
SubTitle: "",
Placeholder: "",
},
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: {
SaasStart: {
Title: "使 NextChat AI",
Label: "()",
SubTitle:
" NextChat OpenAI o1GPT-4oClaude-3.5 ",
ChatNow: "",
},
AccessCode: {
Title: "",
SubTitle: "",
Placeholder: "",
},
CustomEndpoint: {
Title: " API (Endpoint)",
SubTitle: "使 Azure OpenAI ",
},
Provider: {
Title: "",
SubTitle: "",
},
OpenAI: {
ApiKey: {
Title: "API Key",
SubTitle: "使 OpenAI Key ",
Placeholder: "OpenAI API Key",
},
Endpoint: {
Title: "API (Endpoint) ",
SubTitle: " http(s)://",
},
},
Azure: {
ApiKey: {
Title: "API 金鑰",
SubTitle: "使用自訂 Azure Key 繞過密碼存取限制",
Placeholder: "Azure API Key",
},
Endpoint: {
Title: "API 端點 (Endpoint) 位址",
SubTitle: "範例:",
},
ApiVerion: {
Title: "API 版本 (azure api version)",
SubTitle: "指定一個特定的 API 版本",
},
},
Anthropic: {
ApiKey: {
Title: "API 金鑰",
SubTitle: "從 Anthropic AI 取得您的 API 金鑰",
Placeholder: "Anthropic API Key",
},
Endpoint: {
Title: "端點位址",
SubTitle: "範例:",
},
ApiVerion: {
Title: "API 版本 (claude api version)",
SubTitle: "指定一個特定的 API 版本",
},
},
Google: {
ApiKey: {
Title: "API 金鑰",
SubTitle: "從 Google AI 取得您的 API 金鑰",
Placeholder: "輸入您的 Google AI Studio API 金鑰",
},
Endpoint: {
Title: "端點位址",
SubTitle: "範例:",
},
ApiVersion: {
Title: "API 版本(僅適用於 gemini-pro",
SubTitle: "選擇一個特定的 API 版本",
},
},
CustomModel: {
Title: "自訂模型名稱",
SubTitle: "增加自訂模型可選擇項目,使用英文逗號隔開",
},
},
Model: "模型 (model)",
CompressModel: {
Title: "壓縮模型",
SubTitle: "用於壓縮歷史記錄的模型",
},
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: "值越大,越有可能降低重複字詞",
},
},
Store: {
DefaultTopic: "新的對話",
BotHello: "請問需要我的協助嗎?",
Error: "出錯了,請稍後再嘗試",
Prompt: {
History: (content: string) =>
"這是 AI 與使用者的歷史聊天總結,作為前情提要:" + content,
Topic:
"Use the language used by the user (e.g. en for english conversation, zh-hant for chinese conversation, etc.) to generate a title (at most 6 words) summarizing our conversation without any lead-in, quotation marks, preamble like 'Title:', direct text copies, single-word replies, quotation marks, translations, or brackets. Remove enclosing quotation marks. The title should make third-party grasp the essence of the conversation in first sight.",
Summarize:
"Use the language used by the user (e.g. en-us for english conversation, zh-hant for chinese conversation, etc.) to summarise the conversation in at most 200 words. The summary will be used as prompt for you to continue the conversation in the future.",
},
},
Copy: {
Success: "已複製到剪貼簿中",
Failed: "複製失敗,請賦予剪貼簿權限",
},
Download: {
Success: "內容已下載到您的目錄。",
Failed: "下載失敗。",
},
Context: {
Toast: (x: any) => `已設定 ${x} 條前置上下文`,
Edit: "前置上下文和歷史記憶",
Add: "新增一則",
Clear: "上下文已清除",
Revert: "恢復上下文",
},
Plugin: { Name: "外掛" },
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: "複製連結",
},
},
},
SearchChat: {
Name: "搜尋聊天記錄",
Page: {
Title: "搜尋聊天記錄",
Search: "輸入搜尋關鍵詞",
NoResult: "沒有找到結果",
NoData: "沒有資料",
Loading: "載入中",
SubTitle: (count: number) => `找到 ${count} 條結果`,
},
Item: {
View: "檢視",
},
},
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 tw;
export type PartialLocaleType = DeepPartial<typeof tw>;
export default tw;
// Translated by @chunkiuuu, feel free the submit new pr if there are typo/incorrect translations :D