mirror of
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
synced 2025-02-17 17:50:19 +08:00
feat: language support traditional chinese
This commit is contained in:
parent
e93ea0fa97
commit
307be405ac
@ -220,6 +220,10 @@ export function Settings(props: { closeSettings: () => void }) {
|
||||
<option value="cn" key="cn">
|
||||
{Locale.Settings.Lang.Options.cn}
|
||||
</option>
|
||||
|
||||
<option value="tw" key="tw">
|
||||
{Locale.Settings.Lang.Options.tw}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</SettingItem>
|
||||
|
@ -45,8 +45,9 @@ const cn = {
|
||||
Lang: {
|
||||
Name: "Language",
|
||||
Options: {
|
||||
cn: "中文",
|
||||
cn: "简体中文",
|
||||
en: "English",
|
||||
tw: "繁體中文",
|
||||
},
|
||||
},
|
||||
Avatar: "头像",
|
||||
|
@ -49,8 +49,9 @@ const en: LocaleType = {
|
||||
Lang: {
|
||||
Name: "语言",
|
||||
Options: {
|
||||
cn: "中文",
|
||||
cn: "简体中文",
|
||||
en: "English",
|
||||
tw: "繁體中文",
|
||||
},
|
||||
},
|
||||
Avatar: "Avatar",
|
||||
|
@ -1,9 +1,10 @@
|
||||
import CN from './cn'
|
||||
import EN from './en'
|
||||
import TW from './tw'
|
||||
|
||||
export type { LocaleType } from './cn'
|
||||
|
||||
type Lang = 'en' | 'cn'
|
||||
type Lang = 'en' | 'cn' | 'tw'
|
||||
|
||||
const LANG_KEY = 'lang'
|
||||
|
||||
@ -32,7 +33,7 @@ function getLanguage() {
|
||||
export function getLang(): Lang {
|
||||
const savedLang = getItem(LANG_KEY)
|
||||
|
||||
if (['en', 'cn'].includes(savedLang ?? '')) {
|
||||
if (['en', 'cn', 'tw'].includes(savedLang ?? '')) {
|
||||
return savedLang as Lang
|
||||
}
|
||||
|
||||
@ -40,6 +41,8 @@ export function getLang(): Lang {
|
||||
|
||||
if (lang.includes('zh') || lang.includes('cn')) {
|
||||
return 'cn'
|
||||
} else if (lang.includes('tw')) {
|
||||
return 'tw'
|
||||
} else {
|
||||
return 'en'
|
||||
}
|
||||
@ -50,4 +53,4 @@ export function changeLang(lang: Lang) {
|
||||
location.reload()
|
||||
}
|
||||
|
||||
export default { en: EN, cn: CN }[getLang()]
|
||||
export default { en: EN, cn: CN, tw: TW }[getLang()]
|
120
app/locales/tw.ts
Normal file
120
app/locales/tw.ts
Normal file
@ -0,0 +1,120 @@
|
||||
import type { LocaleType } from "./index";
|
||||
|
||||
const tw: LocaleType = {
|
||||
WIP: "該功能仍在開發中……",
|
||||
Error: {
|
||||
Unauthorized: "現在是未授權狀態,請在設置頁填寫授權碼。",
|
||||
},
|
||||
ChatItem: {
|
||||
ChatItemCount: (count: number) => `${count} 條對話`,
|
||||
},
|
||||
Chat: {
|
||||
SubTitle: (count: number) => `與 ChatGPT 的 ${count} 條對話`,
|
||||
Actions: {
|
||||
ChatList: "查看消息列表",
|
||||
CompressedHistory: "查看壓縮後的歷史 Prompt",
|
||||
Export: "導出聊天記錄",
|
||||
Copy: "複製",
|
||||
Stop: "停止",
|
||||
Retry: "重試",
|
||||
},
|
||||
Typing: "正在輸入…",
|
||||
Input: (submitKey: string) => `輸入消息,${submitKey} 發送`,
|
||||
Send: "發送",
|
||||
},
|
||||
Export: {
|
||||
Title: "導出聊天記錄為 Markdown",
|
||||
Copy: "全部複製",
|
||||
Download: "下載文件",
|
||||
},
|
||||
Memory: {
|
||||
Title: "上下文記憶 Prompt",
|
||||
EmptyContent: "尚未記憶",
|
||||
Copy: "全部複製",
|
||||
},
|
||||
Home: {
|
||||
NewChat: "新的聊天",
|
||||
DeleteChat: "確認刪除選中的對話?",
|
||||
},
|
||||
Settings: {
|
||||
Title: "設置",
|
||||
SubTitle: "設置選項",
|
||||
Actions: {
|
||||
ClearAll: "清除所有數據",
|
||||
ResetAll: "重置所有選項",
|
||||
Close: "關閉",
|
||||
},
|
||||
Lang: {
|
||||
Name: "語言",
|
||||
Options: {
|
||||
cn: "简体中文",
|
||||
en: "English",
|
||||
tw: "繁體中文",
|
||||
},
|
||||
},
|
||||
Avatar: "頭像",
|
||||
Update: {
|
||||
Version: (x: string) => `當前版本:${x}`,
|
||||
IsLatest: "已是最新版本",
|
||||
CheckUpdate: "檢查更新",
|
||||
IsChecking: "正在檢查更新...",
|
||||
FoundUpdate: (x: string) => `發現新版本:${x}`,
|
||||
GoToUpdate: "前往更新",
|
||||
},
|
||||
SendKey: "發送鍵",
|
||||
Theme: "主題",
|
||||
TightBorder: "緊湊邊框",
|
||||
HistoryCount: {
|
||||
Title: "附帶歷史消息數",
|
||||
SubTitle: "每次請求攜帶的歷史消息數",
|
||||
},
|
||||
CompressThreshold: {
|
||||
Title: "歷史消息長度壓縮閾值",
|
||||
SubTitle: "當未壓縮的歷史消息超過該值時,將進行壓縮",
|
||||
},
|
||||
Token: {
|
||||
Title: "API Key",
|
||||
SubTitle: "使用自己的 Key 可繞過受控訪問限制",
|
||||
Placeholder: "OpenAI API Key",
|
||||
},
|
||||
AccessCode: {
|
||||
Title: "訪問碼",
|
||||
SubTitle: "現在是受控訪問狀態",
|
||||
Placeholder: "請輸入訪問碼",
|
||||
},
|
||||
Model: "模型 (model)",
|
||||
Temperature: {
|
||||
Title: "隨機性 (temperature)",
|
||||
SubTitle: "值越大,回復越隨機",
|
||||
},
|
||||
MaxTokens: {
|
||||
Title: "單次回復限制 (max_tokens)",
|
||||
SubTitle: "單次交互所用的最大 Token 數",
|
||||
},
|
||||
PresencePenlty: {
|
||||
Title: "話題新鮮度 (presence_penalty)",
|
||||
SubTitle: "值越大,越有可能擴展到新話題",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "新的聊天",
|
||||
BotHello: "有什麼可以幫你的嗎",
|
||||
Error: "出錯了,稍後重試吧",
|
||||
Prompt: {
|
||||
History: (content: string) =>
|
||||
"這是 ai 和用戶的歷史聊天總結作為前情提要:" + content,
|
||||
Topic:
|
||||
"直接返回這句話的簡要主題,不要解釋,如果沒有主題,請直接返回「閒聊」",
|
||||
Summarize:
|
||||
"簡要總結一下你和用戶的對話,用作後續的上下文提示 prompt,控制在 50 字以內",
|
||||
},
|
||||
ConfirmClearAll: "確認清除所有聊天、設置數據?",
|
||||
},
|
||||
Copy: {
|
||||
Success: "已寫入剪切板",
|
||||
Failed: "複製失敗,請賦予剪切板權限",
|
||||
},
|
||||
};
|
||||
|
||||
export default tw;
|
||||
|
Loading…
Reference in New Issue
Block a user