From 694b521b2ea3cff71d14003abdd80027918663cc Mon Sep 17 00:00:00 2001 From: sub-hub Date: Tue, 7 May 2024 11:09:48 +0900 Subject: [PATCH 1/4] Fix: handling strong, em in getNodetextToSentence --- src/ts/util.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/ts/util.ts b/src/ts/util.ts index ca3dd7f0..3f470a7a 100644 --- a/src/ts/util.ts +++ b/src/ts/util.ts @@ -554,9 +554,25 @@ export function getNodetextToSentence(node: Node): string { } else if (child.nodeType === Node.ELEMENT_NODE) { if (child.nodeName === 'BR') { result += '\n'; - } else if (child.nodeName === 'DEL') { + continue; + } + + // If a child has a style it's not for a markdown formatting + const childStyle = (child as HTMLElement)?.style; + if (childStyle?.cssText!== '') { + result += getNodetextToSentence(child); + continue; + } + + // convert HTML elements to markdown format + if (child.nodeName === 'DEL') { result += '~' + getNodetextToSentence(child) + '~'; - } else { + } else if (child.nodeName === 'STRONG' || child.nodeName === 'B') { + result += '**' + getNodetextToSentence(child) + '**'; + } else if (child.nodeName === 'EM' || child.nodeName === 'I') { + result += '*' + getNodetextToSentence(child) + '*'; + } + else { result += getNodetextToSentence(child); } } From c0e7fdf4317688c55ab2dc2f84be9daf69c23fd1 Mon Sep 17 00:00:00 2001 From: sub-hub Date: Wed, 8 May 2024 21:58:18 +0900 Subject: [PATCH 2/4] feat: Add support for Vietnamese language in WelcomeRisu component --- src/lib/Others/WelcomeRisu.svelte | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lib/Others/WelcomeRisu.svelte b/src/lib/Others/WelcomeRisu.svelte index eb97217a..ac8a6701 100644 --- a/src/lib/Others/WelcomeRisu.svelte +++ b/src/lib/Others/WelcomeRisu.svelte @@ -120,6 +120,11 @@ $DataBase.language='cn' step = 1 }}>• 中文 + {:else} From bae5d06a6858a268aeb200180c9c80e63a544d3b Mon Sep 17 00:00:00 2001 From: sub-hub Date: Wed, 8 May 2024 22:02:03 +0900 Subject: [PATCH 3/4] Add Traditional Chinese language (translated by HionaKotka) --- src/lang/index.ts | 4 + src/lang/zh-Hant.ts | 570 ++++++++++++++++++ src/lib/Others/WelcomeRisu.svelte | 7 +- src/lib/Setting/Pages/LanguageSettings.svelte | 7 +- 4 files changed, 586 insertions(+), 2 deletions(-) create mode 100644 src/lang/zh-Hant.ts diff --git a/src/lang/index.ts b/src/lang/index.ts index 69894642..dd730472 100644 --- a/src/lang/index.ts +++ b/src/lang/index.ts @@ -4,6 +4,7 @@ import { languageGerman } from "./de"; import { languageEnglish } from "./en"; import { languageKorean } from "./ko"; import { LanguageVietnamese } from "./vi"; +import { languageChineseTraditional } from "./zh-Hant"; export let language:typeof languageEnglish = languageEnglish @@ -21,6 +22,9 @@ export function changeLanguage(lang:string){ else if(lang === 'vi'){ language = merge(structuredClone(languageEnglish), LanguageVietnamese) } + else if(lang === 'zh-Hant'){ + language = merge(structuredClone(languageEnglish), languageChineseTraditional) + } else{ language = languageEnglish } diff --git a/src/lang/zh-Hant.ts b/src/lang/zh-Hant.ts new file mode 100644 index 00000000..607d5944 --- /dev/null +++ b/src/lang/zh-Hant.ts @@ -0,0 +1,570 @@ +export const languageChineseTraditional = { + "formating": { + "main": "主提示詞", + "jailbreak": "越獄提示詞", + "chats": "過去的聊天", + "lorebook": "Lorebook", + "globalNote": "全域註釋", + "authorNote": "作者註釋", + "lastChat": "最後的聊天", + "description": "角色描述", + "personaPrompt": "人物提示詞", + "plain": "基礎提示", + "memory": "Supa/HypaMemory", + "postEverything": "End-Injected Prompts" + }, + "errors": { + "toomuchtoken": "錯誤:所需的最低token數超過了最大上下文大小", + "unknownModel": "錯誤:選擇了未知的模型", + "httpError": "錯誤:請求中出現錯誤:", + "noData": "檔案中沒有資料,或者檔案已損壞", + "onlyOneChat": "至少必須有一條聊天記錄", + "alreadyCharInGroup": "在該群組中已經有一個同名的角色了", + "noUserIcon": "你必須先設定你的頭貼", + "emptyText": "文字為空", + "wrongPassword": "密碼錯誤", + "networkFetch": "這發生在網路不穩定或伺服器當機時", + "networkFetchWeb": "這可能是一個CORS錯誤。這只在使用網頁版本時發生,因為瀏覽器的限制。嘗試使用桌面本地版本,或其他版本的RisuAI。", + "networkFetchPlain": "這可以是一個普通的抓取錯誤。嘗試在設定中禁用強制普通抓取選項。", + "requestLogRemoved": "這個請求日誌被移除", + "requestLogRemovedDesc": "這個請求日誌在使用者端重新整理或重新載入時移除·" + }, + "showHelp": "顯示幫助", + "help": { + "model": "模型選項是聊天中使用的主要模型。", + "submodel": "輔助模型是用於分析情緒圖像,自動建議等的模型。推薦使用gpt3.5。", + "oaiapikey": "OpenAI的API金鑰。你可以在https://platform.openai.com/account/api-keys處取得。", + "mainprompt": "主提示詞選項設定了預設模型的行為。", + "jailbreak": "當角色中啟動NSFW(成人模式)/越獄開關時,NSFW(成人模式)/越獄提示詞選項將被啟動。", + "globalNote": "強烈影響模型行為的全域註釋,也被稱為UJB。在所有角色中都起作用。", + "autoSuggest": "用於產生自動建議使用者回應時的提示詞。", + "formatOrder": "提示詞的格式化順序。位置越靠下的模組對模型的影響更大。", + "forceUrl": "如果不為空,請求將會被傳送到你輸入的URL。", + "tempature": "較低的值能夠讓角色緊密地遵循提示詞,但它更可能像機器一樣回應。\n較高的值將使回復更具創造性,但角色的回應可能更容易崩潰。", + "frequencyPenalty": "較高的值能夠防止在回應中使用重復的單詞,但角色的回應可能更容易崩潰。", + "presensePenalty": "較高的值能夠防止在所有上下文中使用重復的單詞,但角色的回應可能更容易崩潰。", + "sdProvider": "圖像產生的提供商。", + "msgSound": "角色回應時播放*叮*的聲音", + "charDesc": "角色的簡要描述。這會影響角色的回應。", + "charFirstMessage": "角色的第一條資訊。這會極大地影響角色的回應。", + "charNote": "強烈影響模型行為的角色註釋。嵌入到當前角色中。也被稱為記憶或UJB。", + "toggleNsfw": "啟用NSFW(成人模式)/越獄", + "lorebook": "lorebook是使用者製作的AI詞典。只有當上下文中有啟動關鍵字時,AI才會看到它。", + "loreName": "lorebook的名稱。它不會影響AI。", + "loreActivationKey": "如果上下文中存在其中啟動關鍵字,lorebook就會被啟動,提示詞才會介入。用逗號分隔。", + "loreorder": "lore插入順序更高,它會更多地影響模型,而當啟動的lorebook較多時,它會被縮減的更少。", + "bias": "偏差是一種修改字元串出現機率的鍵值資料。\n它可以從-100到100,更高的值會更可能出現,更低的值則不太可能出現\n警告:如果分詞器出錯,它可能無法正常工作。", + "emotion": "啟動情緒圖像功能會使系統根據角色的情緒顯示圖像,該情緒是通過分析角色的回應得出的。你必須輸入情緒名稱作為單詞 *(如 joy,happy,fear 等)*。如果存在,以**neutral**命名的情緒將成為預設情緒。必須有3個以上的圖像才能正常工作。", + "imggen": "圖像產生功能會從外部程式產生並顯示圖像。該圖像是通過分析當前聊天產生的圖像提示詞產生的。\n\n圖像產生功能是基於鍵值參數進行分析的,這些參數可以在下面設定。\n\n**'always'** 鍵總是應用,並且不會改變。**'negative'** 鍵對於圖像產生始終應用負值。\n\n其他鍵的值將根據隨著聊天的進行而改變。\n\n如果一個鍵的名字前面有特殊字元,它就有特殊的效果。\n- 如果鍵以 **|** 開始,鍵的值將不會改變。\n- 如果鍵以 **$** 開始,鍵的值更有可能改變。\n\n當圖像首次產生時,你只能通過修改下面的'當前圖像產生資料'來改變它。", + "regexScript": "正規表示式指令碼是一個自訂指令碼,它將比對到的IN字元串替換為OUT。\n\n有四種類型的選項。\n\n- **修改輸入**修改使用者的輸入。\n\n- **修改輸出**修改字元的輸出。\n\n- **更改請求資料**在傳送時修改當前聊天資料。\n\n- **修改顯示**只在顯示時修改文字,而不修改聊天資料。\n\nIN必須是一個沒有標記且開始和結束時沒有斜槓的正規表示式。\n\nOUT是一個可以包含替換模式的字元串。這些是模式:\n\n- $$\n\n - 插入$\n\n- $&\n\n - 插入比對的子字元串。\n\n- $`\n\n - 插入比對子字元串之前的字元串部分。\n\n- $1\n\n - 插入第一個比對的組。與其他數字如2,3等一起工作...\n\n- $(name)\n\n - 插入命名的組\n\n如果OUT以 **@@** 開始,它不會替換字元串,而是在找到比對字元串時產生特殊效果。\n\n- @@emo (情緒名稱)\n\n - 如果角色處於情緒圖像模式,將(情緒名稱)設定為情緒,並阻止預設設定。", + "experimental": "這是一個不穩定的實驗性功能。", + "oogaboogaURL": "如果你的WebUI支援舊版本的api,你的url應該像*https:.../run/textgen*\n\n如果你的WebUI支援新版api,你的url應該像*https://.../api/v1/generate* 使用api伺服器作為主機,並將--api添加到參數中。", + "exampleMessage": "影響角色輸出的範例對話。它不會永久性地使用token。\n\n對話的範例格式:\n\n```\n\n{{user}}: 嗨\n{{char}}: 你好\n\n: 嗨\nHaruhi: 你好\n```\n\n`````` 標記新對話的開始。", + "creatorQuotes": "注意本欄中的內容會在第一條訊息的上方出現。用於告知使用者有關該角色的資訊。它不會進入提示詞中。", + "systemPrompt": "如果不為空,將替換設定中的主要提示詞。", + "chatNote": "強烈影響模型行為的聊天註釋。嵌入到當前聊天中。也被稱為記憶或ujb。", + "personality": "關於角色個性的簡短描述。\n\n**不建議使用此選項。改為在角色描述中進行描述。**", + "scenario": "關於角色情境的簡短描述。\n\n**不建議使用此選項。改為在角色描述中進行描述。**", + "utilityBot": "啟用後,它將忽略主要提示詞、越獄和其他提示詞。用於實用程式機器人,而不是用於角色扮演。", + "loreSelective": "如果切換選擇性的,則啟動鍵和次要鍵都應有比對項才能啟動lorebook。", + "loreRandomActivation": "如果啟用了機率條件,那麼當lorebook的其他條件都已滿足時,每次傳送聊天時lorebook將以“機率”設定的機率被啟動。", + "additionalAssets": "在你的聊天中顯示的額外資源。\n\n - 使用`{{raw::}}`作為路徑\n - 使用`{{img::}}`作為圖片\n - 使用`{{video::}}`作為視訊\n - 使用`{{audio::}}` 作為音訊\n - 建議放在背景 HTML中", + "superMemory": "超級記憶通過給 AI 提供總結資料使你的角色記憶更多資訊\n\n超級記憶模型是一個總結文字的模型。推薦使用Davinci,除非是具有超過2000個token數的高度總結能力的未經過濾模型,否則不推薦使用輔助模型。\n\n超級記憶提示決定了應傳送什麼提示詞進行總結。如果你留空,它將使用預設提示詞。建議留空。\n\n在所有設定都完成後,你可以在角色的設定中啟用它。", + "replaceGlobalNote": "如果不為空,則將當前全域註釋替換為此。", + "backgroundHTML": "將被注入聊天螢幕背景的Markdown/HTML資料。\n\n你也可以使用其他資源。例如,你可以使用`{{audio::}}`: 將背景注入資源", + "additionalText": "當AI認為需要時,將添加到角色描述中的文字,因此你可以在這裡放置長文字。用雙換行符分隔。", + "charjs": "角色JS是一個會與角色一起執行的Javascript代碼。例如,你可以檢視`https://github.com/kwaroran/RisuAI/blob/main/src/etc/example-char.js` 目前不建議使用,因為安全原因。匯出將不包括此項。", + "romanizer": "Romanizer是一個外掛程式,將非羅馬字母字元轉換為羅馬字母以減少在請求資料時使用非羅馬字母字元的token。這可能導致與原始模型不同的輸出。當在聊天中使用羅馬字母時,不建議使用此外掛程式。", + "oaiRandomUser": "如果啟用,將隨機uuid放在使用者參數上請求,並在重新整理時更改。這可以用來防止AI辨識使用者。", + "inlayImages": "如果啟用,圖像可以嵌入到聊天中,如果AI支援,它們可以看到它。", + "metrica": "公制系統化器是一個外掛程式,將公制轉換為英制單位進行請求,並在輸出時反向轉換,以在使用英制效能時向使用者顯示公制系統。當在聊天中使用英制單位時,不建議使用這個外掛程式。", + "lorePlus": "LoreBook+是一個實驗性功能,使用vectordb而不僅僅是字元串比對來提供更好的機器人製作體驗和更好的比對效能。", + "topP": "Top P是一個核心抽樣機率門檻值。模型考慮擁有top_p機率品質的結果。", + "openAIFixer": "OpenAI Fixer是一個外掛程式,修復了OpenAI的一些問題。", + "sayNothing": "如果啟用,當沒有字元串輸入時將輸入'say nothing'。", + "showUnrecommended": "如果啟用,將顯示不推薦、已過時的設定。強烈建議不要使用這些設定。", + "imageCompression": "如果啟用,將在匯出角色時壓縮圖像。如果動畫圖像不起作用,請嘗試禁用此選項。", + "useExperimental": "如果啟用,將顯示一些實驗性功能。", + "forceProxyAsOpenAI": "如果啟用,將在使用反向代理時強制使用OpenAI格式。", + "forcePlainFetch": "如果啟用,將使用瀏覽器fetch api代替原生http請求。這可能導致CORS錯誤。", + "autoFillRequestURL": "如果啟用,將自動填充請求url以比對當前模型。", + "chainOfThought": "如果啟用,將添加思維鏈提示詞到提示詞中。", + "gptVisionQuality": "此選項用於設定圖像檢測模型的品質。品質越高,檢測越準確,但使用的token也越多。", + "genTimes": "此選項用於設定在支援模型上產生響應的次數。除了第一個響應外,其他響應將作為快取重新產生。這可以降低模型的成本,但如果你在沒有重新產生的情況下使用它,也可以增加成本。", + "requestretrys": "此選項用於設定請求失敗時的重試次數。", + "emotionPrompt": "此選項用於設定用於檢測情緒的提示詞。如果它是空的,將使用預設提示詞。", + "removePunctuationHypa": "如果啟用,將在執行HypaMemory前移除標點符號。", + "additionalParams": "將添加到請求體的其他參數。如果你想排除一些參數,你可以將`{{none}}`放在值中。如果你想添加檔頭而不是體,你可以將`header::`放在鍵的前面,如`header::Authorization`。如果你想將值作為json,你可以將`json::`放在值的前面,如`json::{\"key\":\"value\"}`。否則,值的類型將自動確定。", + "antiClaudeOverload": "如果Claude過載發生,RisuAI會嘗試通過繼續使用相同的提示詞來防止它。只適用於流式響應。這可能不適用於非官方api端點。", + "triggerScript": "觸發指令碼是一個在條件滿足時執行的自訂指令碼。它可以用來修改聊天資料、執行指令、更改變數等。其類型取決於它何時被觸發。它還可以通過按鈕執行,這可以與`{{button::Display::TriggerName}}`,或具有`risu-trigger=\"\"`屬性的HTML按鈕一起使用。", + "autoContinueChat": "如果啟用,將嘗試繼續聊天,如果它沒有以標點符號結束。不要與不使用標點符號的語言一起使用。", + "combineTranslation": "如果啟用,一個句子但由HTML標籤分隔的文字將被組合在一起並翻譯,然後將重新應用修改顯示指令碼來翻譯輸出。\n這有助於翻譯者進行正確的翻譯。\n如果在你啟用此選項時UI變得奇怪,請關閉此選項並報告。" + }, + "setup": { + "chooseProvider": "選擇AI提供商", + "openaikey": "使用API金鑰的OpenAI(推薦)", + "openaiProxy": "OpenAI反向代理", + "setupmodelself": "其他/我將自行設定", + "inputApiKey": "在此輸入API金鑰", + "apiKeyhelp": "你可以從以下位址取得API KEY:", + "setupSelfHelp": "歡迎界面結束後在設定中自行設定", + "theme": "選擇你的主題", + "themeDescWifulike": "不適合行動裝置", + "themeDescWifuCut": "適合行動裝置", + "themeDescClassic": "適合所有裝置", + "texttheme": "選擇你的文字顏色", + "inputName": "最後,輸入你的暱稱。", + "welcome": "歡迎來到RisuAI! 在這裡,我將指導你進行設定。首先,我該如何稱呼你?", + "welcome2": "你好{username}! 在我們開始之前,我會問你一些問題。你可以稍後在設定中更改這些設定。\n\n首先選擇AI提供商。", + "openAIProvider": "OpenAI GPT是一個高品質AI模型,但它是付費的並且被過濾。", + "openrouterProvider": "Openrouter擁有很多模型,其中一些未經過濾,有些是免費的,但它不如OpenAI。", + "hordeProvider": "Horde是一個免費提供商,但響應時間長,品質低。", + "setProviderLater": "還有其他提供商,但你可以稍後在設定中設定。如果你想稍後設定,請選擇此選項。", + "setupOpenAI": "要使用OpenAI,你需要獲得一個API金鑰。\n1. 前往 https://beta.openai.com/ \n2. 使用你的帳號登入 \n3. 前往 https://beta.openai.com/account/api-keys \n4. 點擊'建立新的API金鑰'並命名你的金鑰 \n5. 在網站中複製金鑰。\n6. 傳回RisuAI\n7. 貼上它,並點擊傳送按鈕。", + "setupOpenrouter": "要使用Openrouter,你需要獲得一個API金鑰。\n1. 前往 https://openrouter.ai/keys\n2. 點擊'建立金鑰'\n3. 設定金鑰名稱無論你喜歡。\n4. 在網站中複製金鑰\n5. 傳回RisuAI\n6. 貼上它,並點擊傳送按鈕。", + "allDone": "全部完成!請稍候片刻。" + }, + "confirm": "確認", + "goback": "傳回", + "botSettings": "機器人設定", + "model": "模型", + "apiKey": "API金鑰", + "providerURL": "請求URL", + "providerJSON": "請求體JSON", + "mainPrompt": "主要提示", + "jailbreakPrompt": "越獄提示", + "globalNote": "全域註釋", + "autoSuggest": "自動建議", + "tokens": "tokens", + "maxContextSize": "最大上下文大小", + "maxResponseSize": "最大響應大小", + "temperature": "溫度", + "frequencyPenalty": "頻率懲罰", + "presensePenalty": "存在懲罰", + "advancedSettings": "進階設定", + "advancedSettingsWarn": "警告:如果你不知道該選項的作用,請不要更改它!", + "formatingOrder": "格式化順序", + "authorNote": "作者註釋", + "firstMessage": "第一條訊息", + "description": "描述", + "jailbreakToggle": "啟用越獄", + "charIcon": "角色頭貼", + "characterDisplay": "角色展示", + "viewScreen": "額外角色螢幕", + "none": "無", + "emotionImage": "情緒圖像", + "noImages": "沒有圖像", + "noBias": "無偏差", + "image": "圖像", + "name": "名稱", + "emotion": "情緒名稱", + "value": "值", + "reroll": "重新產生", + "chatList": "聊天列表", + "removeChat": "刪除這條訊息?", + "loreBook": "Lorebook", + "character": "角色", + "Chat": "聊天", + "globalLoreInfo": "角色Lorebook適用於該角色的所有聊天。", + "group": "群組", + "groupLoreInfo": "群組Lorebook適用於該群組的所有聊天。", + "localLoreInfo": "聊天Lorebook僅適用於當前聊天。", + "removeConfirm": "你真的要刪除: ", + "removeConfirm2": "你真的要刪除: ", + "exportConfirm": "你想要匯出這個嗎?", + "insertOrder": "插入順序", + "activationKeys": "啟動鍵", + "activationKeysInfo": "用逗號分隔", + "prompt": "提示", + "loreBookDepth": "Lorebook搜尋深度", + "loreBookToken": "Lorebook最大token數", + "removeCharacter": "刪除角色", + "removeGroup": "刪除群組", + "exportCharacter": "匯出角色", + "userSetting": "使用者設定", + "username": "你的姓名", + "userIcon": "你的頭貼", + "successExport": "成功匯出並下載到你的下載目錄中", + "successImport": "成功匯入", + "importedCharacter": "已匯入的角色", + "alwaysActive": "始終啟動", + "additionalPrompt": "附加提示", + "descriptionPrefix": "描述字首", + "forceReplaceUrl": "反向代理", + "emotionWarn": "輔助模型正在使用中。", + "plugin": "外掛程式", + "language": "語言", + "UiLanguage": "UI語言", + "createfromScratch": "從頭建立", + "importCharacter": "匯入角色", + "translator": "翻譯器", + "disabled": "已禁用", + "noPluginSelected": "已將模型設定為外掛程式,但未選擇任何外掛程式。", + "text": "文字", + "UISize": "聊天文字大小", + "newVersion": "發現更新,是否要安裝?", + "display": "顯示&音訊", + "useCustomBackground": "自訂背景", + "translateInput": "翻譯輸入", + "autoTranslation": "自動翻譯", + "fullscreen": "全螢幕", + "playMessage": "播放訊息音訊", + "iconSize": "頭貼大小", + "createGroup": "建立群組", + "groupIcon": "群組頭貼", + "single": "單個", + "multiple": "多個", + "useCharLorebook": "在角色中使用Lorebook", + "selectChar": "選擇角色", + "askLoadFirstMsg": "是否載入第一條訊息?", + "theme": "主題", + "editOrder": "編輯順序", + "autoMode": "自動模式", + "submodel": "輔助模型", + "timeOutinSec": "逾時(秒)", + "emotionPrompt": "情緒提示詞", + "singleView": "單角色視圖", + "SpacedView": "多角色視圖", + "emphasizedView": "雙角色視圖", + "pluginWarn": "外掛程式在隔離的環境中執行,但安裝惡意外掛程式可能會導致問題。", + "createGroupImg": "產生群組頭貼", + "waifuWidth": "虛擬伴侶聊天寬度", + "savebackup": "將備份保存到Google", + "loadbackup": "從Google載入備份", + "files": "檔案", + "backupConfirm": "你真的想要保存備份嗎?", + "backupLoadConfirm": "你真的想要載入備份嗎?所有資料將遺失!", + "backupLoadConfirm2": "你真的,真的想要載入備份嗎?所有資料將遺失!", + "pasteAuthCode": "請從彈出視窗中複製授權代碼並貼上到此處:", + "others": "其他", + "presets": "預設", + "imageGeneration": "圖像產生", + "provider": "提供商", + "key": "金鑰", + "noData": "無資料", + "currentImageGeneration": "當前圖像產生資料", + "promptPreprocess": "使用提示詞預處理", + "SwipeRegenerate": "使用滑動箭頭重新產生訊息", + "instantRemove": "在刪除訊息時刪除後續訊息", + "instantRemoveConfirm": "你是否想只刪除一條訊息?如果你選擇否,那麼它下面的訊息也將被刪除。", + "textColor": "文字顏色", + "classicRisu": "經典Risu", + "highcontrast": "高對比度", + "quickPreset": "你可以通過 Ctrl +(預設的索引)快速更改預設", + "requestretrys": "請求失敗時重試", + "utilityBot": "實用機器人", + "ShowLog": "顯示請求日誌", + "waifuWidth2": "虛擬伴侶大小", + "sayNothing": "當沒有字元串輸入時自動傳送'say nothing'", + "regexScript": "正規表示式", + "type": "類型", + "editInput": "修改輸入", + "editOutput": "修改輸出", + "editProcess": "修改請求資料", + "loadLatest": "載入最新的備份", + "loadOthers": "載入其他備份", + "exampleMessage": "範例訊息", + "creatorNotes": "角色創作者的評論", + "systemPrompt": "系統提示詞", + "characterNotes": "角色備註", + "personality": "個性", + "scenario": "情境", + "alternateGreetings": "備用問候語", + "unrecommended": "不推薦", + "chatNotes": "聊天筆記", + "showUnrecommended": "顯示不推薦的設定", + "altGreet": "備選問候語", + "scripts": "指令碼", + "settings": "設定", + "selective": "選擇性的", + "SecondaryKeys": "次要鍵", + "useGlobalSettings": "使用全域設定", + "recursiveScanning": "遞迴掃描", + "creator": "創作者", + "CharVersion": "角色版本", + "Speech": "語音", + "ToggleSuperMemory": "啟用超級記憶", + "SuperMemory": "超級記憶", + "useExperimental": "啟用實驗性功能", + "showMemoryLimit": "顯示記憶限制", + "roundIcons": "圓形頭貼", + "streaming": "流式傳輸", + "chatBot": "聊天機器人", + "otherBots": "其他機器人", + "user": "使用者", + "additionalAssets": "額外資源", + "editDisplay": "修改顯示", + "community": "社群", + "textBackgrounds": "自訂文字螢幕顏色", + "textBorder": "文字輪廓", + "textScreenRound": "圓角文字螢幕", + "textScreenBorder": "文字螢幕邊框", + "ttsReadOnlyQuoted": "TTS僅閱讀引號內的文字", + "ttsStop": "停止TTS(文字轉語音)", + "askRemoval": "刪除訊息時詢問", + "replaceGlobalNote": "替換全域註釋", + "charLoreBook": "角色LoreBook", + "globalLoreBook": "全域LoreBook", + "globalRegexScript": "全域正規表示式", + "accessibility": "輔助功能", + "sendWithEnter": "用Enter鍵傳送", + "clickToEdit": "點擊文字以編輯", + "setNodePassword": "設定你的密碼以確保安全", + "inputNodePassword": "輸入你的密碼。如果你不記得,請刪除伺服器檔案中的save/__password.txt並重新啟動伺服器。", + "simple": "簡易", + "advanced": "進階", + "askReRollAutoSuggestions": "重新產生自動建議", + "creatingSuggestions": "產生建議中...", + "orderByOrder": "按順序交談", + "removeFromGroup": "你真的想從群組中刪除{{char}}嗎?", + "talkness": "健談程度", + "active": "活躍", + "loreRandomActivation": "使用機率條件", + "activationProbability": "機率", + "shareCloud": "分享到RisuRealm", + "hub": "RisuRealm", + "tags": "標籤", + "backgroundHTML": "背景嵌入", + "copied": "已複製", + "useChatCopy": "使用聊天複製", + "useChatSticker": "使用聊天貼紙", + "useAdditionalAssetsPreview": "使用額外資源預覽", + "autoTranslateInput": "自動翻譯輸入", + "enterMessageForTranslateToEnglish": "輸入要翻譯成英語的訊息", + "recent": "最新", + "downloads": "下載量", + "trending": "最流行", + "imageCompression": "圖像壓縮", + "notLoggedIn": "未登入到Risu帳戶", + "googleDriveInfo": "連線到Google Drive以同步你的資料。", + "googleDriveConnection": "Google Drive連線", + "googleDriveConnected": "Google Drive已連線", + "SaveDataInAccount": "在帳戶中保存資料", + "dataSavingInAccount": "在帳戶中保存資料", + "logout": "登出", + "loadDataFromAccount": "從帳戶載入資料", + "saveCurrentDataToAccount": "將當前資料保存到帳戶", + "chatAssumed": "", + "proxyAPIKey": "API金鑰", + "proxyRequestModel": "代理請求模型", + "officialWiki": "官方Wiki", + "officialWikiDesc": "RisuAI的官方Wiki,隨意檢視。", + "officialDiscord": "官方Discord", + "officialDiscordDesc": "用於討論RisuAI的官方Discord伺服器", + "confirmRecommendedPreset": "該模型有一個推薦設定。你想將設定更改為該推薦設定嗎?(你可以在輔助功能設定中關閉詢問)", + "toggleConfirmRecommendedPreset": "更改模型時詢問是否使用推薦設定", + "recommendedPreset": "設定為推薦設定", + "persona": "使用者資訊", + "icon": "頭貼", + "account": "帳號", + "remove": "刪除", + "creationSuccess": "建立成功", + "noweb": "此功能無法在Web版本上使用。", + "createBotInternet": "使用AI從網路建立機器人", + "createBotInternetAlert": "請提供角色的名稱和相應的系列/遊戲。", + "able": "能夠", + "assetWidth": "資源圖像最大寬度", + "animationSpeed": "動畫速度", + "screenshot": "截圖", + "screenshotSaved": "截圖已保存", + "inputBotGenerationPrompt": "輸入機器人產生提示", + "createBotAI": "使用AI建立OC機器人", + "createBotwithAI": "使用AI建立機器人", + "changeFolderName": "輸入新資料夾名稱(留空以取消)", + "cancel": "取消", + "renameFolder": "重新命名資料夾", + "changeFolderColor": "更改資料夾顏色", + "fullWordMatching": "完整單詞比對", + "botSettingAtStart": "啟動時的機器人選單", + "triggerStart": "在聊天傳送時觸發", + "triggerInput": "在使用者輸出時觸發", + "triggerOutput": "在角色輸出時觸發", + "triggerManual": "僅手動觸發", + "triggerCondVar": "如果變數", + "triggerCondExists": "如果聊天中存在文字", + "triggerScript": "觸發指令碼", + "triggerMatchRegex": "與正規表示式比對", + "triggerMatchLoose": "寬松比對", + "triggerMatchStrict": "嚴格比對", + "searchDepth": "搜尋深度", + "equal": "等於", + "notEqual": "不等於", + "greater": "大於", + "less": "小於", + "greaterEqual": "大於或等於", + "lessEqual": "小於或等於", + "triggerEffSysPrompt": "添加系統提示", + "triggerEffSetVar": "修改變數", + "triggerEffImperson": "傳送聊天", + "triggerEffCommand": "Run Command", + "triggerEffRunTrigger": "Run Trigger", + "triggerEffStop": "Stop Sending Prompt", + "triggerEffCall": "Call Trigger", + "varableName": "變數名", + "role": "角色", + "location": "位置", + "promptstart": "提示開始", + "promptend": "提示結束", + "historyend": "歷史結束", + "always": "總是", + "noEffect": "無效果", + "invaildTriggerEffect": "此效果不適用於此觸發器類型。", + "operator": "運算子", + "TriggerSetToVar": "設定為變數", + "TriggerAddToVar": "添加到變數", + "TriggerSubToVar": "從變數中減去", + "TriggerMulToVar": "乘以變數", + "TriggerDivToVar": "除以變數", + "isNull": "未設定", + "ifChatIndex": "如果聊天索引", + "ifRandom": "如果隨機", + "ifValue": "If Value", + "hideRealm": "隱藏RisuRealm", + "popularityLevel": "{} 流行度", + "colorScheme": "配色方案", + "rangeStart": "範圍開始", + "rangeEnd": "範圍結束", + "untilChatEnd": "直到聊天結束", + "usePromptTemplate": "使用提示模板", + "specialType": "特殊類型", + "noSpecialType": "無特殊類型", + "forceProxyAsOpenAI": "強制代理格式為OpenAI", + "promptTemplate": "提示模板", + "customInnerFormat": "自訂內部格式", + "innerFormat": "內部格式", + "HypaMemory": "HypaMemory", + "ToggleHypaMemory": "啟用HypaMemory", + "resetPromptTemplateConfirm": "你確定要重設提示詞模板嗎?", + "emotionMethod": "情緒方法", + "continueResponse": "繼續響應", + "showMenuChatList": "顯示聊天列表", + "translatorLanguage": "翻譯語言", + "translatorType": "翻譯類型", + "deeplKey": "deepl API金鑰", + "deeplFreeKey": "deepl免費API金鑰", + "deeplXUrl": "deepLX URL", + "deeplXToken": "deepLX Token", + "exportPersona": "匯出角色", + "importPersona": "匯入角色", + "export": "匯出", + "import": "匯入", + "supporterThanks": "支援者感謝", + "supporterThanksDesc": "感謝你的支援!", + "donatorPatreonDesc": "預設情況下,不會在列表中顯示,以保護隱私。如果你想顯示你的暱稱,請前往RisuAI的Patreon頁面並按下連結按鈕。", + "useNamePrefix": "使用名稱字首", + "textAdventureNAI": "以NAI模式執行", + "appendNameNAI": "在NAI上附加名稱", + "customStopWords": "自訂停用詞", + "defaultPrompt": "預設提示", + "additionalText": "附加描述", + "seed": "Seed", + "charjs": "CharacterJS", + "depthPrompt": "深度提示", + "largePortrait": "大肖像", + "lorePlus": "LoreBook+", + "reverseProxyOobaMode": "Ooba模式", + "joinMultiUserRoom": "加入多使用者房間", + "exactTokens": "精確Token", + "fixedTokens": "大約Token", + "inlayViewScreen": "嵌入螢幕", + "imgGenPrompt": "圖像產生提示", + "imgGenNegatives": "圖像產生負面提示", + "imgGenInstructions": "圖像產生指令", + "usePlainFetchWarn": "請在使用NovelAI時禁用此選項,因為它可能導致CORS錯誤。", + "translationPrompt": "翻譯提示", + "webdeeplwarn": "此選項不推薦在網頁版本中使用,因為它可能導致CORS錯誤。", + "saveBackupLocal": "本地保存備份", + "loadBackupLocal": "本地載入備份", + "topP": "Top P", + "genTimes": "產生選擇", + "cot": "思維鏈", + "forcePlainFetch": "強制Plain Fetch", + "autoFillRequestURL": "自動填充請求URL", + "newOAIHandle": "新OpenAI處理", + "oaiRandomUser": "放置OAI隨機使用者", + "inlayImage": "嵌入圖像功能", + "nativeAutomark": "實驗性原生自動標記", + "assistantPrefill": "助理預填", + "postEndInnerFormat": "貼文結束", + "sendChatAsSystem": "以系統傳送聊天", + "sendName": "在非群組聊天中傳送名稱", + "utilOverride": "實用重寫", + "template": "模板", + "chatAsOriginalOnSystem": "作為原始角色傳送", + "exportAsDataset": "將保存匯出為資料集", + "editTranslationDisplay": "編輯翻譯顯示", + "selectModel": "選擇模型", + "autoRemoveThoughtTag": "移除思維標籤", + "customChainOfThought": "自訂思維鏈", + "maxThoughtTagDepth": "最大思維標籤深度", + "openrouterFallback": "Openrouter備用", + "openrouterMiddleOut": "Openrouter中間輸出", + "geminiApiKey": "Gemini API金鑰", + "removePunctuationHypa": "移除記憶標點", + "memoryLimitThickness": "記憶限制厚度", + "inputCardPassword": "輸入卡片密碼", + "ccv2Desc": "Character Card V2是聊天機器人程式廣泛使用的一種格式。", + "rccDesc": "Risu Refined Character Card是一種具有額外功能的格式,如密碼、完整性檢查等。", + "password": "密碼", + "license": "許可證", + "licenseDesc": "你可以為下載者選擇許可證以限制你的卡片提示的使用。", + "passwordDesc": "你可以設定一個密碼來保護你的卡片免受未經授權的存取。", + "largePersonaPortrait": "個人肖像", + "module": "模組", + "modules": "模組", + "noModules": "沒有安裝任何模組。", + "createModule": "建立模組", + "basicInfo": "基本資訊", + "moduleContent": "模組內容", + "confirmRemoveModuleFeature": "你真的想要移除這個功能嗎?這個操作不能復原。", + "editModule": "編輯模組", + "importModule": "匯入模組", + "download": "下載", + "edit": "編輯", + "enableGlobal": "全域啟用", + "chatModulesInfo": "你可以為這個聊天啟用或禁用模組。", + "sideMenuRerollButton": "側選單重新產生按鈕", + "persistentStorage": "持久儲存", + "persistentStorageSuccess": "儲存成功持久化", + "persistentStorageFail": "儲存未持久化。你是否拒絕了請求?或者瀏覽器不支援?", + "persistentStorageRecommended": "推薦持久儲存", + "persistentStorageDesc": "你的瀏覽器支援持久儲存。這被推薦用於更好的效能和使用者體驗。", + "enable": "啟用", + "postFile": "公開檔案", + "requestInfoInsideChat": "在聊天中顯示請求資訊", + "inputTokens": "輸入Token", + "outputTokens": "輸出Token", + "tokenWarning": "Token計算可能不準確。建議將其用作參考。", + "log": "日誌", + "popularityLevelDesc": "人氣隨著下載等的增加而增加,估計3.7的人氣大約是1次下載。", + "additionalParams": "額外參數", + "heightMode": "高度模式", + "useAdvancedEditor": "使用進階編輯器", + "noWaitForTranslate": "不等待翻譯", + "updateRealm": "更新到RisuRealm", + "updateRealmDesc": "你正試圖將你的角色更新為RisuRealm。這將會將你的角色更新為RisuRealm,且無法恢復。", + "antiClaudeOverload": "Anti-Claude Overload (反Claude超載)", + "activeTabChange": "其他標籤頁已啟用,當前標籤頁已停用。若要啟用此標籤頁,請點擊「確定」。", + "maxSupaChunkSize": "最大 SupaMemory 塊大小", + "addCharacter": "新增角色", + "importFromRealm": "從 RisuRealm 選擇", + "importFromRealmDesc": "從 RisuRealm 選擇超過1000個角色", + "random": "隨機", + "metaData": "Meta Data(元資料)", + "autoContinueMinTokens": "目標Token數(自動繼續)", + "autoContinueChat": "反不完整回應(自動繼續)", + "removeIncompleteResponse": "移除不完整句子", + "tokenizer": "Tokenizer(分詞器)", + "chatFormating": "聊天格式", + "useInstructPrompt": "使用指令提示", + "hanuraiMemory": "HanuraiMemory", + "playground": "試驗場", + "textAreaSize": "輸入區大小", + "textAreaTextSize": "輸入區文字大小", + "sideBarSize": "側邊欄大小", + "embedding": "嵌入", + "syntax": "Syntax(語法)", + "run": "執行", + "noMessage": "輸入一些文字開始聊天。", + "combineTranslation": "合併翻譯" + } \ No newline at end of file diff --git a/src/lib/Others/WelcomeRisu.svelte b/src/lib/Others/WelcomeRisu.svelte index ac8a6701..89e09b19 100644 --- a/src/lib/Others/WelcomeRisu.svelte +++ b/src/lib/Others/WelcomeRisu.svelte @@ -14,7 +14,7 @@ if(step === 0){ const browserLang = navigator.language const browserLangShort = browserLang.split('-')[0] - const usableLangs = ['de', 'en', 'ko', 'cn', 'vi'] + const usableLangs = ['de', 'en', 'ko', 'cn', 'vi', 'zh-Hant'] if(usableLangs.includes(browserLangShort)){ changeLanguage(browserLangShort) $DataBase.language = browserLangShort @@ -120,6 +120,11 @@ $DataBase.language='cn' step = 1 }}>• 中文 +