diff --git a/src/lang/en.ts b/src/lang/en.ts
index 0e1c7a42..af62cebc 100644
--- a/src/lang/en.ts
+++ b/src/lang/en.ts
@@ -161,6 +161,7 @@ export const languageEnglish = {
,
strictJsonSchema: "If enabled, it will strictly follow the Provided Schema for JSON on some models. if it is disabled, it may ignore the JSON Schema.",
extractJson: "If it is not blank, it will extract specific JSON data from the response. for example, if you want to extract `response.text[0]` in response `{\"response\": {\"text\": [\"hello\"]}}`, you can put `response.text.0`.",
+ translatorNote: "Here, you can add a unique translation prompt for each character. This option only applies when using the Ax. model for translation. To apply it, include `{{slot::tnote}}` in the language settings. It doesn't work in group chats.",
},
setup: {
chooseProvider: "Choose AI Provider",
@@ -741,4 +742,5 @@ export const languageEnglish = {
leadingDoubleQuote: "Leading Double Quote",
trailingSingleQuote: "Trailing Single Quote",
trailingDoubleQuote: "Trailing Double Quote",
+ translatorNote: "Translator's Note",
}
\ No newline at end of file
diff --git a/src/lang/ko.ts b/src/lang/ko.ts
index 7ce33eee..6b279eae 100644
--- a/src/lang/ko.ts
+++ b/src/lang/ko.ts
@@ -95,7 +95,8 @@ export const languageKorean = {
"emotionPrompt": "이 옵션은 감정을 감지하는 데 사용되는 프롬프트를 설정하는 데 사용됩니다. 비어 있으면 기본 프롬프트를 사용합니다.",
"removePunctuationHypa": "활성화되면 HypaMemory를 실행하기 전에 구두점을 제거합니다.",
"defaultVariables": "여기에서는 기본 변수를 정의할 수 있습니다. `<변수 이름>=<변수 값>` 형식으로 작성하고 개행으로 구분합니다. 예를 들어, `name=RisuAI`는 트리거 스크립트 및 변수 CBS와 함께 `{{getvar::A}}`, `{{setvar::A::B}}` 또는 `{{? $A + 1}}`과 같이 사용할 수 있습니다. 프롬프트 템플릿의 기본 변수와 캐릭터의 기본 변수가 동일한 이름을 가진 경우 캐릭터의 기본 변수가 사용됩니다.",
- "combineTranslation": "활성화된 경우, 한 문장이지만 HTML 태그로 분리된 텍스트를 모두 합쳐서 번역한 후, 번역된 결과에 다시 디스플레이 수정 스크립트를 적용합니다.\n이를 통해 번역기가 올바른 번역을 하도록 도와줍니다.\n이 옵션을 활성화하고 UI가 이상해지면 옵션을 끄고 제보해 주세요."
+ "combineTranslation": "활성화된 경우, 한 문장이지만 HTML 태그로 분리된 텍스트를 모두 합쳐서 번역한 후, 번역된 결과에 다시 디스플레이 수정 스크립트를 적용합니다.\n이를 통해 번역기가 올바른 번역을 하도록 도와줍니다.\n이 옵션을 활성화하고 UI가 이상해지면 옵션을 끄고 제보해 주세요.",
+ "translatorNote": "여기에서 캐릭터마다 별도의 번역 프롬프트를 넣을 수 있습니다. 해당 옵션은 Ax. model 번역을 사용할 때만 적용됩니다. 언어 설정에서 `{{slot::tnote}}`를 넣으세요. 그룹챗에서는 작동하지 않습니다.",
},
"setup": {
"chooseProvider": "AI 제공자를 선택해 주세요",
@@ -587,5 +588,6 @@ export const languageKorean = {
"supaDesc": "수파메모리는 요약을 사용하는 장기기억 시스템입니다.",
"hanuraiDesc": "하느라이메모리는 벡터 검색을 사용하는 장기기억 시스템입니다.",
"v2Warning": "주의: V2 카드는 더 이상 지원되지 않습니다. 일부 데이터가 누락될 수 있습니다.",
-
+ "translatorNote": "번역가의 노트",
+
}
\ No newline at end of file
diff --git a/src/lib/SideBars/CharConfig.svelte b/src/lib/SideBars/CharConfig.svelte
index b9c744a4..e5b5fae9 100644
--- a/src/lib/SideBars/CharConfig.svelte
+++ b/src/lib/SideBars/CharConfig.svelte
@@ -921,6 +921,9 @@
{language.defaultVariables}
+ {language.translatorNote}
+
+
{language.creator}
diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts
index 550f69ef..24f1c364 100644
--- a/src/ts/storage/database.ts
+++ b/src/ts/storage/database.ts
@@ -901,6 +901,7 @@ export interface character{
lowLevelAccess?:boolean
hideChatIcon?:boolean
lastInteraction?:number
+ translatorNote?:string
}
diff --git a/src/ts/translator/translator.ts b/src/ts/translator/translator.ts
index e7c99a2e..b0b13b20 100644
--- a/src/ts/translator/translator.ts
+++ b/src/ts/translator/translator.ts
@@ -456,14 +456,23 @@ async function translateLLM(text:string, arg:{to:string}){
})
const db = get(DataBase)
+ const charIndex = get(selectedCharID)
+ const currentChar = db.characters[charIndex]
+ let translatorNote
+ if (currentChar.type === "character") {
+ translatorNote = currentChar.translatorNote ?? ""
+ } else {
+ translatorNote = ""
+ }
+
let formated:OpenAIChat[] = []
let prompt = db.translatorPrompt || `You are a translator. translate the following html or text into {{slot}}. do not output anything other than the translation.`
- let parsedPrompt = parseChatML(prompt.replaceAll('{{slot}}', arg.to).replaceAll('{{solt::content}}', text))
+ let parsedPrompt = parseChatML(prompt.replaceAll('{{slot}}', arg.to).replaceAll('{{solt::content}}', text).replaceAll('{{slot::tnote}}', translatorNote))
if(parsedPrompt){
formated = parsedPrompt
}
else{
- prompt = prompt.replaceAll('{{slot}}', arg.to)
+ prompt = prompt.replaceAll('{{slot}}', arg.to).replaceAll('{{slot::tnote}}', translatorNote)
formated = [
{
'role': 'system',