This commit is contained in:
Petr Branberger
2023-05-10 15:12:31 +02:00
86 changed files with 5342 additions and 1618 deletions

View File

@@ -1,9 +1,10 @@
import { SubmitKey } from "../store/app";
import { SubmitKey } from "../store/config";
const cn = {
WIP: "该功能仍在开发中……",
Error: {
Unauthorized: "现在是未授权状态,请点击左下角设置按钮输入访问密码。",
Unauthorized:
"访问密码不正确或为空,请前往[设置](/#/settings)页输入正确的访问密码,或者填入你自己的 OpenAI API Key。",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} 条对话`,
@@ -29,6 +30,10 @@ const cn = {
return inputHints + "/ 触发补全";
},
Send: "发送",
Config: {
Reset: "重置默认",
SaveAs: "另存为面具",
},
},
Export: {
Title: "导出聊天记录为 Markdown",
@@ -39,8 +44,8 @@ const cn = {
},
Memory: {
Title: "历史摘要",
EmptyContent: "尚未总结",
Send: "启用总结并发送摘要",
EmptyContent: "对话内容过短,无需总结",
Send: "自动压缩聊天记录并作为上下文发送",
Copy: "复制摘要",
Reset: "重置对话",
ResetConfirm: "重置后将清空当前对话记录以及历史摘要,确认重置?",
@@ -58,15 +63,12 @@ const cn = {
ClearAll: "清除所有数据",
ResetAll: "重置所有选项",
Close: "关闭",
ConfirmResetAll: {
Confirm: "确认清除所有配置",
},
ConfirmClearAll: {
Confirm: "确认清除所有聊天记录?",
},
ConfirmResetAll: "确认重置所有配置?",
ConfirmClearAll: "确认清除所有数据",
},
Lang: {
Name: "Language",
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "所有语言",
Options: {
cn: "简体中文",
en: "English",
@@ -76,7 +78,8 @@ const cn = {
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
cs: "Čeština",
vi: "Vietnamese",
ru: "Русский",
},
},
Avatar: "头像",
@@ -96,7 +99,14 @@ const cn = {
SendKey: "发送键",
Theme: "主题",
TightBorder: "无边框模式",
SendPreviewBubble: "发送预览气泡",
SendPreviewBubble: {
Title: "预览气泡",
SubTitle: "在预览气泡中预览 Markdown 内容",
},
Mask: {
Title: "面具启动页",
SubTitle: "新建聊天时,展示面具启动页",
},
Prompt: {
Disable: {
Title: "禁用提示词自动补全",
@@ -108,9 +118,12 @@ const cn = {
Edit: "编辑",
Modal: {
Title: "提示词列表",
Add: "增加一条",
Add: "新建",
Search: "搜索提示词",
},
EditModal: {
Title: "编辑提示词",
},
},
HistoryCount: {
Title: "附带历史消息数",
@@ -125,6 +138,7 @@ const cn = {
SubTitle: "使用自己的 Key 可绕过密码访问限制",
Placeholder: "OpenAI API Key",
},
Usage: {
Title: "余额查询",
SubTitle(used: any, total: any) {
@@ -136,13 +150,13 @@ const cn = {
},
AccessCode: {
Title: "访问密码",
SubTitle: "已开启加密访问",
SubTitle: "管理员已开启加密访问",
Placeholder: "请输入访问密码",
},
Model: "模型 (model)",
Temperature: {
Title: "随机性 (temperature)",
SubTitle: "值越大,回复越随机,大于 1 的值可能会导致乱码",
SubTitle: "值越大,回复越随机",
},
MaxTokens: {
Title: "单次回复限制 (max_tokens)",
@@ -165,7 +179,6 @@ const cn = {
Summarize:
"简要总结一下你和用户的对话,用作后续的上下文提示 prompt控制在 200 字以内",
},
ConfirmClearAll: "确认清除所有聊天、设置数据?",
},
Copy: {
Success: "已写入剪切板",
@@ -173,8 +186,55 @@ const cn = {
},
Context: {
Toast: (x: any) => `已设置 ${x} 条前置上下文`,
Edit: "前置上下文和历史记忆",
Add: "新增一条",
Edit: "当前对话设置",
Add: "新增预设对话",
},
Plugin: {
Name: "插件",
},
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: "角色名称",
},
},
NewChat: {
Return: "返回",
Skip: "直接开始",
NotShow: "不再展示",
ConfirmNoShow: "确认禁用?禁用后可以随时在设置中重新启用。",
Title: "挑选一个面具",
SubTitle: "现在开始,与面具背后的灵魂思维碰撞",
More: "查看全部",
},
UI: {
Confirm: "确认",
Cancel: "取消",
Close: "关闭",
Create: "新建",
Edit: "编辑",
},
};

View File

@@ -1,4 +1,4 @@
import { SubmitKey } from "../store/app";
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const de: LocaleType = {
@@ -31,6 +31,10 @@ const de: LocaleType = {
return inputHints + ", / zum Durchsuchen von Prompts";
},
Send: "Senden",
Config: {
Reset: "Reset to Default",
SaveAs: "Save as Mask",
},
},
Export: {
Title: "Alle Nachrichten",
@@ -61,15 +65,13 @@ const de: LocaleType = {
ClearAll: "Alle Daten löschen",
ResetAll: "Alle Einstellungen zurücksetzen",
Close: "Schließen",
ConfirmResetAll: {
Confirm: "Möchten Sie wirklich alle Konfigurationen zurücksetzen?",
},
ConfirmClearAll: {
Confirm: "Möchten Sie wirklich alle Chats zurücksetzen?",
},
ConfirmResetAll:
"Möchten Sie wirklich alle Konfigurationen zurücksetzen?",
ConfirmClearAll: "Möchten Sie wirklich alle Chats zurücksetzen?",
},
Lang: {
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "Alle Sprachen",
Options: {
cn: "简体中文",
en: "English",
@@ -79,7 +81,8 @@ const de: LocaleType = {
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
cs: "Čeština",
vi: "Vietnamese",
ru: "Русский",
},
},
Avatar: "Avatar",
@@ -98,7 +101,14 @@ const de: LocaleType = {
SendKey: "Senden-Taste",
Theme: "Erscheinungsbild",
TightBorder: "Enger Rahmen",
SendPreviewBubble: "Vorschau-Bubble senden",
SendPreviewBubble: {
Title: "Vorschau-Bubble senden",
SubTitle: "Preview markdown in bubble",
},
Mask: {
Title: "Mask Splash Screen",
SubTitle: "Show a mask splash screen before starting new chat",
},
Prompt: {
Disable: {
Title: "Autovervollständigung deaktivieren",
@@ -113,6 +123,9 @@ const de: LocaleType = {
Add: "Add One",
Search: "Search Prompts",
},
EditModal: {
Title: "Edit Prompt",
},
},
HistoryCount: {
Title: "Anzahl der angehängten Nachrichten",
@@ -172,8 +185,6 @@ const de: LocaleType = {
Summarize:
"Fassen Sie unsere Diskussion kurz in 200 Wörtern oder weniger zusammen, um sie als Pronpt für zukünftige Gespräche zu verwenden.",
},
ConfirmClearAll:
"Bestätigen Sie, um alle Chat- und Einstellungsdaten zu löschen?",
},
Copy: {
Success: "In die Zwischenablage kopiert",
@@ -185,6 +196,53 @@ const de: LocaleType = {
Edit: "Kontext- und Gedächtnis-Prompts",
Add: "Hinzufügen",
},
Plugin: {
Name: "Plugin",
},
Mask: {
Name: "Mask",
Page: {
Title: "Prompt Template",
SubTitle: (count: number) => `${count} prompt templates`,
Search: "Search Templates",
Create: "Create",
},
Item: {
Info: (count: number) => `${count} prompts`,
Chat: "Chat",
View: "View",
Edit: "Edit",
Delete: "Delete",
DeleteConfirm: "Confirm to delete?",
},
EditModal: {
Title: (readonly: boolean) =>
`Edit Prompt Template ${readonly ? "(readonly)" : ""}`,
Download: "Download",
Clone: "Clone",
},
Config: {
Avatar: "Bot Avatar",
Name: "Bot Name",
},
},
NewChat: {
Return: "Return",
Skip: "Skip",
Title: "Pick a Mask",
SubTitle: "Chat with the Soul behind the Mask",
More: "Find More",
NotShow: "Not Show Again",
ConfirmNoShow: "Confirm to disableYou can enable it in settings later.",
},
UI: {
Confirm: "Confirm",
Cancel: "Cancel",
Close: "Close",
Create: "Create",
Edit: "Edit",
},
};
export default de;

View File

@@ -1,8 +1,8 @@
import { SubmitKey } from "../store/app";
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const en: LocaleType = {
WIP: "WIP...",
WIP: "Coming Soon...",
Error: {
Unauthorized:
"Unauthorized access, please enter access code in settings page.",
@@ -31,6 +31,10 @@ const en: LocaleType = {
return inputHints + ", / to search prompts";
},
Send: "Send",
Config: {
Reset: "Reset to Default",
SaveAs: "Save as Mask",
},
},
Export: {
Title: "All Messages",
@@ -61,15 +65,12 @@ const en: LocaleType = {
ClearAll: "Clear All Data",
ResetAll: "Reset All Settings",
Close: "Close",
ConfirmResetAll: {
Confirm: "Are you sure you want to reset all configurations?",
},
ConfirmClearAll: {
Confirm: "Are you sure you want to reset all chat?",
},
ConfirmResetAll: "Are you sure you want to reset all configurations?",
ConfirmClearAll: "Are you sure you want to reset all data?",
},
Lang: {
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "All Languages",
Options: {
cn: "简体中文",
en: "English",
@@ -79,7 +80,8 @@ const en: LocaleType = {
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
cs: "Čeština",
vi: "Vietnamese",
ru: "Русский",
},
},
Avatar: "Avatar",
@@ -98,7 +100,14 @@ const en: LocaleType = {
SendKey: "Send Key",
Theme: "Theme",
TightBorder: "Tight Border",
SendPreviewBubble: "Send Preview Bubble",
SendPreviewBubble: {
Title: "Send Preview Bubble",
SubTitle: "Preview markdown in bubble",
},
Mask: {
Title: "Mask Splash Screen",
SubTitle: "Show a mask splash screen before starting new chat",
},
Prompt: {
Disable: {
Title: "Disable auto-completion",
@@ -113,6 +122,9 @@ const en: LocaleType = {
Add: "Add One",
Search: "Search Prompts",
},
EditModal: {
Title: "Edit Prompt",
},
},
HistoryCount: {
Title: "Attached Messages Count",
@@ -170,7 +182,6 @@ const en: LocaleType = {
Summarize:
"Summarize our discussion briefly in 200 words or less to use as a prompt for future context.",
},
ConfirmClearAll: "Confirm to clear all chat and setting data?",
},
Copy: {
Success: "Copied to clipboard",
@@ -179,7 +190,54 @@ const en: LocaleType = {
Context: {
Toast: (x: any) => `With ${x} contextual prompts`,
Edit: "Contextual and Memory Prompts",
Add: "Add One",
Add: "Add a Prompt",
},
Plugin: {
Name: "Plugin",
},
Mask: {
Name: "Mask",
Page: {
Title: "Prompt Template",
SubTitle: (count: number) => `${count} prompt templates`,
Search: "Search Templates",
Create: "Create",
},
Item: {
Info: (count: number) => `${count} prompts`,
Chat: "Chat",
View: "View",
Edit: "Edit",
Delete: "Delete",
DeleteConfirm: "Confirm to delete?",
},
EditModal: {
Title: (readonly: boolean) =>
`Edit Prompt Template ${readonly ? "(readonly)" : ""}`,
Download: "Download",
Clone: "Clone",
},
Config: {
Avatar: "Bot Avatar",
Name: "Bot Name",
},
},
NewChat: {
Return: "Return",
Skip: "Skip",
Title: "Pick a Mask",
SubTitle: "Chat with the Soul behind the Mask",
More: "Find More",
NotShow: "Not Show Again",
ConfirmNoShow: "Confirm to disableYou can enable it in settings later.",
},
UI: {
Confirm: "Confirm",
Cancel: "Cancel",
Close: "Close",
Create: "Create",
Edit: "Edit",
},
};

View File

@@ -1,4 +1,4 @@
import { SubmitKey } from "../store/app";
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const es: LocaleType = {
@@ -31,6 +31,10 @@ const es: LocaleType = {
return inputHints;
},
Send: "Enviar",
Config: {
Reset: "Reset to Default",
SaveAs: "Save as Mask",
},
},
Export: {
Title: "Todos los mensajes",
@@ -61,25 +65,23 @@ const es: LocaleType = {
ClearAll: "Borrar todos los datos",
ResetAll: "Restablecer todas las configuraciones",
Close: "Cerrar",
ConfirmResetAll: {
Confirm: "Are you sure you want to reset all configurations?",
},
ConfirmClearAll: {
Confirm: "Are you sure you want to reset all chat?",
},
ConfirmResetAll: "Are you sure you want to reset all configurations?",
ConfirmClearAll: "Are you sure you want to reset all chat?",
},
Lang: {
Name: "Language",
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "Todos los idiomas",
Options: {
cn: "简体中文",
en: "Inglés",
en: "English",
tw: "繁體中文",
es: "Español",
it: "Italiano",
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
cs: "Čeština",
vi: "Vietnamese",
ru: "Русский",
},
},
Avatar: "Avatar",
@@ -98,7 +100,14 @@ const es: LocaleType = {
SendKey: "Tecla de envío",
Theme: "Tema",
TightBorder: "Borde ajustado",
SendPreviewBubble: "Enviar burbuja de vista previa",
SendPreviewBubble: {
Title: "Enviar burbuja de vista previa",
SubTitle: "Preview markdown in bubble",
},
Mask: {
Title: "Mask Splash Screen",
SubTitle: "Show a mask splash screen before starting new chat",
},
Prompt: {
Disable: {
Title: "Desactivar autocompletado",
@@ -113,6 +122,9 @@ const es: LocaleType = {
Add: "Add One",
Search: "Search Prompts",
},
EditModal: {
Title: "Edit Prompt",
},
},
HistoryCount: {
Title: "Cantidad de mensajes adjuntos",
@@ -170,8 +182,6 @@ const es: LocaleType = {
Summarize:
"Resuma nuestra discusión brevemente en 200 caracteres o menos para usarlo como un recordatorio para futuros contextos.",
},
ConfirmClearAll:
"¿Confirmar para borrar todos los datos de chat y configuración?",
},
Copy: {
Success: "Copiado al portapapeles",
@@ -183,6 +193,53 @@ const es: LocaleType = {
Edit: "Contextual and Memory Prompts",
Add: "Add One",
},
Plugin: {
Name: "Plugin",
},
Mask: {
Name: "Mask",
Page: {
Title: "Prompt Template",
SubTitle: (count: number) => `${count} prompt templates`,
Search: "Search Templates",
Create: "Create",
},
Item: {
Info: (count: number) => `${count} prompts`,
Chat: "Chat",
View: "View",
Edit: "Edit",
Delete: "Delete",
DeleteConfirm: "Confirm to delete?",
},
EditModal: {
Title: (readonly: boolean) =>
`Edit Prompt Template ${readonly ? "(readonly)" : ""}`,
Download: "Download",
Clone: "Clone",
},
Config: {
Avatar: "Bot Avatar",
Name: "Bot Name",
},
},
NewChat: {
Return: "Return",
Skip: "Skip",
Title: "Pick a Mask",
SubTitle: "Chat with the Soul behind the Mask",
More: "Find More",
NotShow: "Not Show Again",
ConfirmNoShow: "Confirm to disableYou can enable it in settings later.",
},
UI: {
Confirm: "Confirm",
Cancel: "Cancel",
Close: "Close",
Create: "Create",
Edit: "Edit",
},
};
export default es;

View File

@@ -6,7 +6,8 @@ import IT from "./it";
import TR from "./tr";
import JP from "./jp";
import DE from "./de";
import CS from "./cs";
import VI from "./vi";
import RU from "./ru";
export type { LocaleType } from "./cn";
@@ -19,11 +20,13 @@ export const AllLangs = [
"tr",
"jp",
"de",
"cs",
"vi",
"ru",
] as const;
type Lang = (typeof AllLangs)[number];
export type Lang = (typeof AllLangs)[number];
const LANG_KEY = "lang";
const DEFAULT_LANG = "en";
function getItem(key: string) {
try {
@@ -43,7 +46,8 @@ function getLanguage() {
try {
return navigator.language.toLowerCase();
} catch {
return "cn";
console.log("[Lang] failed to detect user lang.");
return DEFAULT_LANG;
}
}
@@ -62,7 +66,7 @@ export function getLang(): Lang {
}
}
return "en";
return DEFAULT_LANG;
}
export function changeLang(lang: Lang) {
@@ -79,5 +83,6 @@ export default {
tr: TR,
jp: JP,
de: DE,
cs: CS,
vi: VI,
ru: RU,
}[getLang()] as typeof CN;

View File

@@ -1,4 +1,4 @@
import { SubmitKey } from "../store/app";
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const it: LocaleType = {
@@ -31,6 +31,10 @@ const it: LocaleType = {
return inputHints;
},
Send: "Invia",
Config: {
Reset: "Reset to Default",
SaveAs: "Save as Mask",
},
},
Export: {
Title: "Tutti i messaggi",
@@ -61,15 +65,12 @@ const it: LocaleType = {
ClearAll: "Cancella tutti i dati",
ResetAll: "Resetta tutte le impostazioni",
Close: "Chiudi",
ConfirmResetAll: {
Confirm: "Sei sicuro vuoi cancellare tutte le impostazioni?",
},
ConfirmClearAll: {
Confirm: "Sei sicuro vuoi cancellare tutte le chat?",
},
ConfirmResetAll: "Sei sicuro vuoi cancellare tutte le impostazioni?",
ConfirmClearAll: "Sei sicuro vuoi cancellare tutte le chat?",
},
Lang: {
Name: "Lingue",
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "Tutte le lingue",
Options: {
cn: "简体中文",
en: "English",
@@ -79,7 +80,8 @@ const it: LocaleType = {
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
cs: "Čeština",
vi: "Vietnamese",
ru: "Русский",
},
},
Avatar: "Avatar",
@@ -98,7 +100,14 @@ const it: LocaleType = {
SendKey: "Tasto invia",
Theme: "Tema",
TightBorder: "Schermo intero",
SendPreviewBubble: "Anteprima di digitazione",
SendPreviewBubble: {
Title: "Anteprima di digitazione",
SubTitle: "Preview markdown in bubble",
},
Mask: {
Title: "Mask Splash Screen",
SubTitle: "Show a mask splash screen before starting new chat",
},
Prompt: {
Disable: {
Title: "Disabilita l'auto completamento",
@@ -113,6 +122,9 @@ const it: LocaleType = {
Add: "Add One",
Search: "Search Prompts",
},
EditModal: {
Title: "Edit Prompt",
},
},
HistoryCount: {
Title: "Conteggio dei messaggi allegati",
@@ -171,8 +183,6 @@ const it: LocaleType = {
Summarize:
"Riassumi brevemente la nostra discussione in 200 caratteri o meno per usarla come spunto per una futura conversazione.",
},
ConfirmClearAll:
"Confermi la cancellazione di tutti i dati della chat e delle impostazioni?",
},
Copy: {
Success: "Copiato sugli appunti",
@@ -184,6 +194,53 @@ const it: LocaleType = {
Edit: "Prompt contestuali e di memoria",
Add: "Aggiungi altro",
},
Plugin: {
Name: "Plugin",
},
Mask: {
Name: "Mask",
Page: {
Title: "Prompt Template",
SubTitle: (count: number) => `${count} prompt templates`,
Search: "Search Templates",
Create: "Create",
},
Item: {
Info: (count: number) => `${count} prompts`,
Chat: "Chat",
View: "View",
Edit: "Edit",
Delete: "Delete",
DeleteConfirm: "Confirm to delete?",
},
EditModal: {
Title: (readonly: boolean) =>
`Edit Prompt Template ${readonly ? "(readonly)" : ""}`,
Download: "Download",
Clone: "Clone",
},
Config: {
Avatar: "Bot Avatar",
Name: "Bot Name",
},
},
NewChat: {
Return: "Return",
Skip: "Skip",
Title: "Pick a Mask",
SubTitle: "Chat with the Soul behind the Mask",
More: "Find More",
NotShow: "Not Show Again",
ConfirmNoShow: "Confirm to disableYou can enable it in settings later.",
},
UI: {
Confirm: "Confirm",
Cancel: "Cancel",
Close: "Close",
Create: "Create",
Edit: "Edit",
},
};
export default it;

View File

@@ -1,6 +1,7 @@
import { SubmitKey } from "../store/app";
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const jp = {
const jp: LocaleType = {
WIP: "この機能は開発中です……",
Error: {
Unauthorized:
@@ -30,6 +31,10 @@ const jp = {
return inputHints + "/ で自動補完をトリガー";
},
Send: "送信",
Config: {
Reset: "重置默认",
SaveAs: "另存为面具",
},
},
Export: {
Title: "チャット履歴をMarkdown形式でエクスポート",
@@ -60,15 +65,12 @@ const jp = {
ClearAll: "すべてのデータをクリア",
ResetAll: "すべてのオプションをリセット",
Close: "閉じる",
ConfirmResetAll: {
Confirm: "すべての設定をリセットしてもよろしいですか?",
},
ConfirmClearAll: {
Confirm: "すべてのチャットをリセットしてもよろしいですか?",
},
ConfirmResetAll: "すべての設定をリセットしてもよろしいですか?",
ConfirmClearAll: "すべてのチャットをリセットしてもよろしいですか?",
},
Lang: {
Name: "Language",
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "所有语言",
Options: {
cn: "简体中文",
en: "English",
@@ -78,7 +80,8 @@ const jp = {
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
cs: "Čeština",
vi: "Vietnamese",
ru: "Русский",
},
},
Avatar: "アバター",
@@ -98,7 +101,14 @@ const jp = {
SendKey: "送信キー",
Theme: "テーマ",
TightBorder: "ボーダーレスモード",
SendPreviewBubble: "プレビューバブルの送信",
SendPreviewBubble: {
Title: "プレビューバブルの送信",
SubTitle: "在预览气泡中预览 Markdown 内容",
},
Mask: {
Title: "面具启动页",
SubTitle: "新建聊天时,展示面具启动页",
},
Prompt: {
Disable: {
Title: "プロンプトの自動補完を無効にする",
@@ -114,6 +124,9 @@ const jp = {
Add: "新規追加",
Search: "プロンプトワード検索",
},
EditModal: {
Title: "编辑提示词",
},
},
HistoryCount: {
Title: "履歴メッセージ数を添付",
@@ -171,8 +184,6 @@ const jp = {
Summarize:
"あなたとユーザの会話を簡潔にまとめて、後続のコンテキストプロンプトとして使ってください。200字以内に抑えてください。",
},
ConfirmClearAll:
"すべてのチャット、設定データをクリアしてもよろしいですか?",
},
Copy: {
Success: "クリップボードに書き込みました",
@@ -183,6 +194,51 @@ const jp = {
Edit: "前置コンテキストと履歴メモリ",
Add: "新規追加",
},
Plugin: { Name: "插件" },
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: "角色名称",
},
},
NewChat: {
Return: "返回",
Skip: "跳过",
Title: "挑选一个面具",
SubTitle: "现在开始,与面具背后的灵魂思维碰撞",
More: "搜索更多",
NotShow: "不再展示",
ConfirmNoShow: "确认禁用?禁用后可以随时在设置中重新启用。",
},
UI: {
Confirm: "确认",
Cancel: "取消",
Close: "关闭",
Create: "新建",
Edit: "编辑",
},
};
export default jp;

244
app/locales/ru.ts Normal file
View File

@@ -0,0 +1,244 @@
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const ru: LocaleType = {
WIP: "Скоро...",
Error: {
Unauthorized:
"Несанкционированный доступ. Пожалуйста, введите код доступа на странице настроек.",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} сообщений`,
},
Chat: {
SubTitle: (count: number) => `${count} сообщений с ChatGPT`,
Actions: {
ChatList: "Перейти к списку чатов",
CompressedHistory: "Сжатая история памяти",
Export: "Экспортировать все сообщения в формате Markdown",
Copy: "Копировать",
Stop: "Остановить",
Retry: "Повторить",
Delete: "Удалить",
},
Rename: "Переименовать чат",
Typing: "Печатает…",
Input: (submitKey: string) => {
var inputHints = `${submitKey} для отправки сообщения`;
if (submitKey === String(SubmitKey.Enter)) {
inputHints += ", Shift + Enter для переноса строки";
}
return inputHints + ", / для поиска подсказок";
},
Send: "Отправить",
Config: {
Reset: "Сбросить настройки",
SaveAs: "Сохранить как маску",
},
},
Export: {
Title: "Все сообщения",
Copy: "Копировать все",
Download: "Скачать",
MessageFromYou: "Сообщение от вас",
MessageFromChatGPT: "Сообщение от ChatGPT",
},
Memory: {
Title: "Память",
EmptyContent: "Пусто.",
Send: "Отправить память",
Copy: "Копировать память",
Reset: "Сбросить сессию",
ResetConfirm:
"При сбросе текущая история переписки и историческая память будут удалены. Вы уверены, что хотите сбросить?",
},
Home: {
NewChat: "Новый чат",
DeleteChat: "Вы действительно хотите удалить выбранный разговор?",
DeleteToast: "Чат удален",
Revert: "Отмена",
},
Settings: {
Title: "Настройки",
SubTitle: "Все настройки",
Actions: {
ClearAll: "Очистить все данные",
ResetAll: "Сбросить все настройки",
Close: "Закрыть",
ConfirmResetAll: "Вы уверены, что хотите сбросить все настройки?",
ConfirmClearAll: "Вы уверены, что хотите очистить все данные?",
},
Lang: {
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "Все языки",
Options: {
cn: "简体中文",
en: "English",
tw: "繁體中文",
es: "Español",
it: "Italiano",
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
vi: "Vietnamese",
ru: "Русский",
},
},
Avatar: "Аватар",
FontSize: {
Title: "Размер шрифта",
SubTitle: "Настроить размер шрифта контента чата",
},
Update: {
Version: (x: string) => `Версия: ${x}`,
IsLatest: "Последняя версия",
CheckUpdate: "Проверить обновление",
IsChecking: "Проверка обновления...",
FoundUpdate: (x: string) => `Найдена новая версия: ${x}`,
GoToUpdate: "Обновить",
},
SendKey: "Клавиша отправки",
Theme: "Тема",
TightBorder: "Узкая граница",
SendPreviewBubble: {
Title: "Отправить предпросмотр",
SubTitle: "Предварительный просмотр markdown в пузыре",
},
Mask: {
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:
"Будет сжимать, если длина несжатых сообщений превышает указанное значение",
},
Token: {
Title: "API ключ",
SubTitle: "Используйте свой ключ, чтобы игнорировать лимит доступа",
Placeholder: "API ключ OpenAI",
},
Usage: {
Title: "Баланс аккаунта",
SubTitle(used: any, total: any) {
return `Использовано в этом месяце $${used}, подписка $${total}`;
},
IsChecking: "Проверка...",
Check: "Проверить",
NoAccess: "Введите API ключ, чтобы проверить баланс",
},
AccessCode: {
Title: "Код доступа",
SubTitle: "Контроль доступа включен",
Placeholder: "Требуется код доступа",
},
Model: "Модель",
Temperature: {
Title: "Температура",
SubTitle: "Чем выше значение, тем более случайный вывод",
},
MaxTokens: {
Title: "Максимальное количество токенов",
SubTitle: "Максимальная длина вводных и генерируемых токенов",
},
PresencePenlty: {
Title: "Штраф за повторения",
SubTitle:
"Чем выше значение, тем больше вероятность общения на новые темы",
},
},
Store: {
DefaultTopic: "Новый разговор",
BotHello: "Здравствуйте! Как я могу вам помочь сегодня?",
Error: "Что-то пошло не так. Пожалуйста, попробуйте еще раз позже.",
Prompt: {
History: (content: string) =>
"Это краткое содержание истории чата между ИИ и пользователем: " +
content,
Topic:
"Пожалуйста, создайте заголовок из четырех или пяти слов, который кратко описывает нашу беседу, без введения, знаков пунктуации, кавычек, точек, символов или дополнительного текста. Удалите кавычки.",
Summarize:
"Кратко изложите нашу дискуссию в 200 словах или менее для использования в будущем контексте.",
},
},
Copy: {
Success: "Скопировано в буфер обмена",
Failed: "Не удалось скопировать, пожалуйста, предоставьте разрешение на доступ к буферу обмена",
},
Context: {
Toast: (x: any) => `С ${x} контекстными подсказками`,
Edit: "Контекстные и памятные подсказки",
Add: "Добавить подсказку",
},
Plugin: {
Name: "Плагин",
},
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: "Имя бота",
},
},
NewChat: {
Return: "Вернуться",
Skip: "Пропустить",
Title: "Выберите маску",
SubTitle: "Общайтесь с душой за маской",
More: "Найти еще",
NotShow: "Не показывать снова",
ConfirmNoShow: "Подтвердите отключение? Вы можете включить это позже в настройках.",
},
UI: {
Confirm: "Подтвердить",
Cancel: "Отмена",
Close: "Закрыть",
Create: "Создать",
Edit: "Редактировать",
},
};
export default ru;

View File

@@ -1,4 +1,4 @@
import { SubmitKey } from "../store/app";
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const tr: LocaleType = {
@@ -31,6 +31,10 @@ const tr: LocaleType = {
return inputHints + ", komutları aramak için / (eğik çizgi)";
},
Send: "Gönder",
Config: {
Reset: "Reset to Default",
SaveAs: "Save as Mask",
},
},
Export: {
Title: "Tüm Mesajlar",
@@ -61,15 +65,12 @@ const tr: LocaleType = {
ClearAll: "Tüm Verileri Temizle",
ResetAll: "Tüm Ayarları Sıfırla",
Close: "Kapat",
ConfirmResetAll: {
Confirm: "Tüm ayarları sıfırlamak istediğinizden emin misiniz?",
},
ConfirmClearAll: {
Confirm: "Tüm sohbeti sıfırlamak istediğinizden emin misiniz?",
},
ConfirmResetAll: "Tüm ayarları sıfırlamak istediğinizden emin misiniz?",
ConfirmClearAll: "Tüm sohbeti sıfırlamak istediğinizden emin misiniz?",
},
Lang: {
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "Tüm Diller",
Options: {
cn: "简体中文",
en: "English",
@@ -79,7 +80,8 @@ const tr: LocaleType = {
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
cs: "Čeština",
vi: "Vietnamese",
ru: "Русский",
},
},
Avatar: "Avatar",
@@ -98,7 +100,14 @@ const tr: LocaleType = {
SendKey: "Gönder Tuşu",
Theme: "Tema",
TightBorder: "Tam Ekran",
SendPreviewBubble: "Mesaj Önizleme Balonu",
SendPreviewBubble: {
Title: "Mesaj Önizleme Balonu",
SubTitle: "Preview markdown in bubble",
},
Mask: {
Title: "Mask Splash Screen",
SubTitle: "Show a mask splash screen before starting new chat",
},
Prompt: {
Disable: {
Title: "Otomatik tamamlamayı devre dışı bırak",
@@ -113,6 +122,9 @@ const tr: LocaleType = {
Add: "Add One",
Search: "Search Prompts",
},
EditModal: {
Title: "Edit Prompt",
},
},
HistoryCount: {
Title: "Ekli Mesaj Sayısı",
@@ -172,8 +184,6 @@ const tr: LocaleType = {
Summarize:
"Gelecekteki bağlam için bir bilgi istemi olarak kullanmak üzere tartışmamızı en fazla 200 kelimeyle özetleyin.",
},
ConfirmClearAll:
"Tüm sohbet ve ayar verilerini temizlemeyi onaylıyor musunuz?",
},
Copy: {
Success: "Panoya kopyalandı",
@@ -184,6 +194,53 @@ const tr: LocaleType = {
Edit: "Bağlamsal ve Bellek Komutları",
Add: "Yeni Ekle",
},
Plugin: {
Name: "Plugin",
},
Mask: {
Name: "Mask",
Page: {
Title: "Prompt Template",
SubTitle: (count: number) => `${count} prompt templates`,
Search: "Search Templates",
Create: "Create",
},
Item: {
Info: (count: number) => `${count} prompts`,
Chat: "Chat",
View: "View",
Edit: "Edit",
Delete: "Delete",
DeleteConfirm: "Confirm to delete?",
},
EditModal: {
Title: (readonly: boolean) =>
`Edit Prompt Template ${readonly ? "(readonly)" : ""}`,
Download: "Download",
Clone: "Clone",
},
Config: {
Avatar: "Bot Avatar",
Name: "Bot Name",
},
},
NewChat: {
Return: "Return",
Skip: "Skip",
Title: "Pick a Mask",
SubTitle: "Chat with the Soul behind the Mask",
More: "Find More",
NotShow: "Not Show Again",
ConfirmNoShow: "Confirm to disableYou can enable it in settings later.",
},
UI: {
Confirm: "Confirm",
Cancel: "Cancel",
Close: "Close",
Create: "Create",
Edit: "Edit",
},
};
export default tr;

View File

@@ -1,4 +1,4 @@
import { SubmitKey } from "../store/app";
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const tw: LocaleType = {
@@ -12,7 +12,7 @@ const tw: LocaleType = {
Chat: {
SubTitle: (count: number) => `您已經與 ChatGPT 進行了 ${count} 條對話`,
Actions: {
ChatList: "查看息列表",
ChatList: "查看息列表",
CompressedHistory: "查看壓縮後的歷史 Prompt",
Export: "匯出聊天紀錄",
Copy: "複製",
@@ -30,12 +30,16 @@ const tw: LocaleType = {
return inputHints;
},
Send: "發送",
Config: {
Reset: "重置默认",
SaveAs: "另存为面具",
},
},
Export: {
Title: "匯出聊天記錄為 Markdown",
Title: "聊天記錄匯出為 Markdown",
Copy: "複製全部",
Download: "下載檔案",
MessageFromYou: "來自的訊息",
MessageFromYou: "來自的訊息",
MessageFromChatGPT: "來自 ChatGPT 的訊息",
},
Memory: {
@@ -43,8 +47,8 @@ const tw: LocaleType = {
EmptyContent: "尚未記憶",
Copy: "複製全部",
Send: "發送記憶",
Reset: "重對話",
ResetConfirm: "重後將清空當前對話記錄以及歷史記憶,確認重",
Reset: "重對話",
ResetConfirm: "重後將清除目前對話記錄以及歷史記憶,確認重",
},
Home: {
NewChat: "新的對話",
@@ -56,18 +60,15 @@ const tw: LocaleType = {
Title: "設定",
SubTitle: "設定選項",
Actions: {
ClearAll: "清除所有數據",
ResetAll: "重所有設定",
ClearAll: "清除所有資料",
ResetAll: "重所有設定",
Close: "關閉",
ConfirmResetAll: {
Confirm: "Are you sure you want to reset all configurations?",
},
ConfirmClearAll: {
Confirm: "Are you sure you want to reset all chat?",
},
ConfirmResetAll: "您確定要重設所有設定嗎?",
ConfirmClearAll: "您確定要清除所有数据嗎?",
},
Lang: {
Name: "Language",
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "所有语言",
Options: {
cn: "简体中文",
en: "English",
@@ -77,7 +78,8 @@ const tw: LocaleType = {
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
cs: "Čeština",
vi: "Vietnamese",
ru: "Русский",
},
},
Avatar: "大頭貼",
@@ -96,21 +98,31 @@ const tw: LocaleType = {
SendKey: "發送鍵",
Theme: "主題",
TightBorder: "緊湊邊框",
SendPreviewBubble: "發送預覽氣泡",
SendPreviewBubble: {
Title: "預覽氣泡",
SubTitle: "在预览气泡中预览 Markdown 内容",
},
Mask: {
Title: "面具启动页",
SubTitle: "新建聊天时,展示面具启动页",
},
Prompt: {
Disable: {
Title: "停用提示詞自動補",
SubTitle: "在輸入框開頭輸入 / 即可觸發自動補",
Title: "停用提示詞自動補",
SubTitle: "在輸入框開頭輸入 / 即可觸發自動補",
},
List: "自定義提示詞列表",
ListCount: (builtin: number, custom: number) =>
` ${builtin} 條,用戶定義 ${custom}`,
` ${builtin} 條,用戶定義 ${custom}`,
Edit: "編輯",
Modal: {
Title: "提示詞列表",
Add: "增一條",
Add: "增一條",
Search: "搜尋提示詞",
},
EditModal: {
Title: "编辑提示词",
},
},
HistoryCount: {
Title: "附帶歷史訊息數",
@@ -122,13 +134,13 @@ const tw: LocaleType = {
},
Token: {
Title: "API Key",
SubTitle: "使用自己的 Key 可規避授權訪問限制",
SubTitle: "使用自己的 Key 可規避授權存取限制",
Placeholder: "OpenAI API Key",
},
Usage: {
Title: "帳戶餘額",
SubTitle(used: any, total: any) {
return `本月已使用 $${used}订阅总额 $${total}`;
return `本月已使用 $${used}訂閱總額 $${total}`;
},
IsChecking: "正在檢查…",
Check: "重新檢查",
@@ -136,17 +148,17 @@ const tw: LocaleType = {
},
AccessCode: {
Title: "授權碼",
SubTitle: "現在是未授權訪問狀態",
SubTitle: "目前是未授權存取狀態",
Placeholder: "請輸入授權碼",
},
Model: "模型 (model)",
Temperature: {
Title: "隨機性 (temperature)",
SubTitle: "值越大,回越隨機",
SubTitle: "值越大,回越隨機",
},
MaxTokens: {
Title: "單次回限制 (max_tokens)",
SubTitle: "單次互所用的最大 Token 數",
Title: "單次回限制 (max_tokens)",
SubTitle: "單次互所用的最大 Token 數",
},
PresencePenlty: {
Title: "話題新穎度 (presence_penalty)",
@@ -165,16 +177,59 @@ const tw: LocaleType = {
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.",
},
ConfirmClearAll: "確認清除所有對話、設定數據?",
},
Copy: {
Success: "已複製到剪貼簿中",
Failed: "複製失敗,請賦予剪貼簿權限",
},
Context: {
Toast: (x: any) => `已設 ${x} 條前置上下文`,
Toast: (x: any) => `已設 ${x} 條前置上下文`,
Edit: "前置上下文和歷史記憶",
Add: "新增條",
Add: "新增條",
},
Plugin: { Name: "插件" },
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: "角色名称",
},
},
NewChat: {
Return: "返回",
Skip: "跳过",
Title: "挑选一个面具",
SubTitle: "现在开始,与面具背后的灵魂思维碰撞",
More: "搜索更多",
NotShow: "不再展示",
ConfirmNoShow: "确认禁用?禁用后可以随时在设置中重新启用。",
},
UI: {
Confirm: "确认",
Cancel: "取消",
Close: "关闭",
Create: "新建",
Edit: "编辑",
},
};

242
app/locales/vi.ts Normal file
View File

@@ -0,0 +1,242 @@
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const vi: LocaleType = {
WIP: "Coming Soon...",
Error: {
Unauthorized:
"Truy cập chưa xác thực, vui lòng nhập mã truy cập trong trang cài đặt.",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} tin nhắn`,
},
Chat: {
SubTitle: (count: number) => `${count} tin nhắn với ChatGPT`,
Actions: {
ChatList: "Xem danh sách chat",
CompressedHistory: "Nén tin nhắn trong quá khứ",
Export: "Xuất tất cả tin nhắn dưới dạng Markdown",
Copy: "Sao chép",
Stop: "Dừng",
Retry: "Thử lại",
Delete: "Xóa",
},
Rename: "Đổi tên",
Typing: "Đang nhập…",
Input: (submitKey: string) => {
var inputHints = `${submitKey} để gửi`;
if (submitKey === String(SubmitKey.Enter)) {
inputHints += ", Shift + Enter để xuống dòng";
}
return inputHints + ", / để tìm kiếm mẫu gợi ý";
},
Send: "Gửi",
Config: {
Reset: "Khôi phục cài đặt gốc",
SaveAs: "Lưu dưới dạng Mẫu",
},
},
Export: {
Title: "Tất cả tin nhắn",
Copy: "Sao chép tất cả",
Download: "Tải xuống",
MessageFromYou: "Tin nhắn của bạn",
MessageFromChatGPT: "Tin nhắn từ ChatGPT",
},
Memory: {
Title: "Lịch sử tin nhắn",
EmptyContent: "Chưa có tin nhắn",
Send: "Gửi tin nhắn trong quá khứ",
Copy: "Sao chép tin nhắn trong quá khứ",
Reset: "Đặt lại phiên",
ResetConfirm:
"Đặt lại sẽ xóa toàn bộ lịch sử trò chuyện hiện tại và bộ nhớ. Bạn có chắc chắn muốn đặt lại không?",
},
Home: {
NewChat: "Cuộc trò chuyện mới",
DeleteChat: "Xác nhận xóa các cuộc trò chuyện đã chọn?",
DeleteToast: "Đã xóa cuộc trò chuyện",
Revert: "Khôi phục",
},
Settings: {
Title: "Cài đặt",
SubTitle: "Tất cả cài đặt",
Actions: {
ClearAll: "Xóa toàn bộ dữ liệu",
ResetAll: "Khôi phục cài đặt gốc",
Close: "Đóng",
ConfirmResetAll: "Bạn chắc chắn muốn thiết lập lại tất cả cài đặt?",
ConfirmClearAll: "Bạn chắc chắn muốn thiết lập lại tất cả dữ liệu?",
},
Lang: {
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "Tất cả ngôn ngữ",
Options: {
cn: "简体中文",
en: "English",
tw: "繁體中文",
es: "Español",
it: "Italiano",
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
vi: "Vietnamese",
ru: "Русский",
},
},
Avatar: "Ảnh đại diện",
FontSize: {
Title: "Font chữ",
SubTitle: "Thay đổi font chữ của nội dung trò chuyện",
},
Update: {
Version: (x: string) => `Phiên bản: ${x}`,
IsLatest: "Phiên bản mới nhất",
CheckUpdate: "Kiểm tra bản cập nhật",
IsChecking: "Kiểm tra bản cập nhật...",
FoundUpdate: (x: string) => `Phát hiện phiên bản mới: ${x}`,
GoToUpdate: "Cập nhật",
},
SendKey: "Phím gửi",
Theme: "Theme",
TightBorder: "Chế độ không viền",
SendPreviewBubble: {
Title: "Gửi bong bóng xem trước",
SubTitle: "Xem trước nội dung markdown bằng bong bóng",
},
Mask: {
Title: "Mask Splash Screen",
SubTitle: "Chớp màn hình khi bắt đầu cuộc trò chuyện mới",
},
Prompt: {
Disable: {
Title: "Vô hiệu hóa chức năng tự động hoàn thành",
SubTitle: "Nhập / để kích hoạt chức năng tự động hoàn thành",
},
List: "Danh sách mẫu gợi ý",
ListCount: (builtin: number, custom: number) =>
`${builtin} có sẵn, ${custom} do người dùng xác định`,
Edit: "Chỉnh sửa",
Modal: {
Title: "Danh sách mẫu gợi ý",
Add: "Thêm",
Search: "Tìm kiếm mẫu",
},
EditModal: {
Title: "Chỉnh sửa mẫu",
},
},
HistoryCount: {
Title: "Số lượng tin nhắn đính kèm",
SubTitle: "Số lượng tin nhắn trong quá khứ được gửi kèm theo mỗi yêu cầu",
},
CompressThreshold: {
Title: "Ngưỡng nén lịch sử tin nhắn",
SubTitle: "Thực hiện nén nếu số lượng tin nhắn chưa nén vượt quá ngưỡng",
},
Token: {
Title: "API Key",
SubTitle: "Sử dụng khóa của bạn để bỏ qua giới hạn mã truy cập",
Placeholder: "OpenAI API Key",
},
Usage: {
Title: "Hạn mức tài khoản",
SubTitle(used: any, total: any) {
return `Đã sử dụng $${used} trong tháng này, hạn mức $${total}`;
},
IsChecking: "Đang kiểm tra...",
Check: "Kiểm tra",
NoAccess: "Nhập API Key để kiểm tra hạn mức",
},
AccessCode: {
Title: "Mã truy cập",
SubTitle: "Đã bật kiểm soát truy cập",
Placeholder: "Nhập mã truy cập",
},
Model: "Mô hình",
Temperature: {
Title: "Tính ngẫu nhiên (temperature)",
SubTitle: "Giá trị càng lớn, câu trả lời càng ngẫu nhiên",
},
MaxTokens: {
Title: "Giới hạn số lượng token (max_tokens)",
SubTitle: "Số lượng token tối đa được sử dụng trong mỗi lần tương tác",
},
PresencePenlty: {
Title: "Chủ đề mới (presence_penalty)",
SubTitle: "Giá trị càng lớn tăng khả năng mở rộng sang các chủ đề mới",
},
},
Store: {
DefaultTopic: "Cuộc trò chuyện mới",
BotHello: "Xin chào! Mình có thể giúp gì cho bạn?",
Error: "Có lỗi xảy ra, vui lòng thử lại sau.",
Prompt: {
History: (content: string) =>
"Tóm tắt ngắn gọn cuộc trò chuyện giữa người dùng và AI: " + content,
Topic:
"Sử dụng 4 đến 5 từ tóm tắt cuộc trò chuyện này mà không có phần mở đầu, dấu chấm câu, dấu ngoặc kép, dấu chấm, ký hiệu hoặc văn bản bổ sung nào. Loại bỏ các dấu ngoặc kép kèm theo.",
Summarize:
"Tóm tắt cuộc trò chuyện này một cách ngắn gọn trong 200 từ hoặc ít hơn để sử dụng làm gợi ý cho ngữ cảnh tiếp theo.",
},
},
Copy: {
Success: "Sao chép vào bộ nhớ tạm",
Failed:
"Sao chép không thành công, vui lòng cấp quyền truy cập vào bộ nhớ tạm",
},
Context: {
Toast: (x: any) => `Sử dụng ${x} tin nhắn chứa ngữ cảnh`,
Edit: "Thiết lập ngữ cảnh và bộ nhớ",
Add: "Thêm tin nhắn",
},
Plugin: {
Name: "Plugin",
},
Mask: {
Name: "Mẫu",
Page: {
Title: "Mẫu trò chuyện",
SubTitle: (count: number) => `${count} mẫu`,
Search: "Tìm kiếm mẫu",
Create: "Tạo",
},
Item: {
Info: (count: number) => `${count} tin nhắn`,
Chat: "Chat",
View: "Xem trước",
Edit: "Chỉnh sửa",
Delete: "Xóa",
DeleteConfirm: "Xác nhận xóa?",
},
EditModal: {
Title: (readonly: boolean) =>
`Chỉnh sửa mẫu ${readonly ? "(chỉ xem)" : ""}`,
Download: "Tải xuống",
Clone: "Tạo bản sao",
},
Config: {
Avatar: "Ảnh đại diện bot",
Name: "Tên bot",
},
},
NewChat: {
Return: "Quay lại",
Skip: "Bỏ qua",
Title: "Chọn 1 biểu tượng",
SubTitle: "Bắt đầu trò chuyện ẩn sau lớp mặt nạ",
More: "Tìm thêm",
NotShow: "Không hiển thị lại",
ConfirmNoShow: "Xác nhận tắt? Bạn có thể bật lại trong phần cài đặt.",
},
UI: {
Confirm: "Xác nhận",
Cancel: "Hủy",
Close: "Đóng",
Create: "Tạo",
Edit: "Chỉnh sửa",
},
};
export default vi;