Merge branch 'main' into norwegian-translation

This commit is contained in:
Xavier Barbosa
2023-06-16 16:00:17 +01:00
136 changed files with 9952 additions and 1724 deletions

View File

@@ -4,7 +4,14 @@ const cn = {
WIP: "该功能仍在开发中……",
Error: {
Unauthorized:
"访问密码不正确或为空,请前往[设置](/#/settings)页输入正确的访问密码,或者填入你自己的 OpenAI API Key。",
"访问密码不正确或为空,请前往[登录](/#/auth)页输入正确的访问密码,或者在[设置](/#/settings)页填入你自己的 OpenAI API Key。",
},
Auth: {
Title: "需要密码",
Tips: "管理员开启了密码验证,请在下方填入访问码",
Input: "在此处填写访问码",
Confirm: "确认",
Later: "稍后再说",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} 条对话`,
@@ -20,6 +27,19 @@ const cn = {
Retry: "重试",
Delete: "删除",
},
InputActions: {
Stop: "停止响应",
ToBottom: "滚到最新",
Theme: {
auto: "自动主题",
light: "亮色模式",
dark: "深色模式",
},
Prompt: "快捷指令",
Masks: "所有面具",
Clear: "清除聊天",
Settings: "对话设置",
},
Rename: "重命名对话",
Typing: "正在输入…",
Input: (submitKey: string) => {
@@ -31,24 +51,43 @@ const cn = {
},
Send: "发送",
Config: {
Reset: "重置默认",
SaveAs: "存为面具",
Reset: "清除记忆",
SaveAs: "存为面具",
},
},
Export: {
Title: "导出聊天记录为 Markdown",
Title: "分享聊天记录",
Copy: "全部复制",
Download: "下载文件",
Share: "分享到 ShareGPT",
MessageFromYou: "来自你的消息",
MessageFromChatGPT: "来自 ChatGPT 的消息",
Format: {
Title: "导出格式",
SubTitle: "可以导出 Markdown 文本或者 PNG 图片",
},
IncludeContext: {
Title: "包含面具上下文",
SubTitle: "是否在消息中展示面具上下文",
},
Steps: {
Select: "选取",
Preview: "预览",
},
},
Select: {
Search: "搜索消息",
All: "选取全部",
Latest: "最近几条",
Clear: "清除选中",
},
Memory: {
Title: "历史摘要",
EmptyContent: "对话内容过短,无需总结",
Send: "自动压缩聊天记录并作为上下文发送",
Copy: "复制摘要",
Reset: "重置对话",
ResetConfirm: "重置后将清空当前对话记录以及历史摘要,确认重置",
Reset: "[unused]",
ResetConfirm: "确认清空历史摘要",
},
Home: {
NewChat: "新的聊天",
@@ -69,19 +108,6 @@ const cn = {
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: "Русский",
no: "Norsk",
},
},
Avatar: "头像",
FontSize: {
@@ -154,6 +180,10 @@ const cn = {
SubTitle: "管理员已开启加密访问",
Placeholder: "请输入访问密码",
},
Endpoint: {
Title: "接口地址",
SubTitle: "除默认地址外,必须包含 http(s)://",
},
Model: "模型 (model)",
Temperature: {
Title: "随机性 (temperature)",
@@ -163,7 +193,7 @@ const cn = {
Title: "单次回复限制 (max_tokens)",
SubTitle: "单次交互所用的最大 Token 数",
},
PresencePenlty: {
PresencePenalty: {
Title: "话题新鲜度 (presence_penalty)",
SubTitle: "值越大,越有可能扩展到新话题",
},
@@ -173,12 +203,11 @@ const cn = {
BotHello: "有什么可以帮你的吗",
Error: "出错了,稍后重试吧",
Prompt: {
History: (content: string) =>
"这是 ai 和用户的历史聊天总结作为前情提要:" + content,
History: (content: string) => "这是历史聊天总结作为前情提要:" + content,
Topic:
"使用四到五个字直接返回这句话的简要主题,不要解释、不要标点、不要语气词、不要多余文本,如果没有主题,请直接返回“闲聊”",
Summarize:
"简要总结一下你和用户的对话,用作后续的上下文提示 prompt控制在 200 字以内",
"简要总结一下对话内容,用作后续的上下文提示 prompt控制在 200 字以内",
},
},
Copy: {
@@ -186,9 +215,11 @@ const cn = {
Failed: "复制失败,请赋予剪切板权限",
},
Context: {
Toast: (x: any) => `已设置 ${x}前置上下文`,
Toast: (x: any) => `包含 ${x}预设提示词`,
Edit: "当前对话设置",
Add: "新增预设对话",
Clear: "上下文已清除",
Revert: "恢复上下文",
},
Plugin: {
Name: "插件",
@@ -218,6 +249,15 @@ const cn = {
Config: {
Avatar: "角色头像",
Name: "角色名称",
Sync: {
Title: "使用全局设置",
SubTitle: "当前对话是否使用全局模型设置",
Confirm: "当前对话的自定义设置将会被自动覆盖,确认启用全局设置?",
},
HideContext: {
Title: "隐藏预设对话",
SubTitle: "隐藏后预设对话不会出现在聊天界面",
},
},
},
NewChat: {
@@ -239,6 +279,12 @@ const cn = {
},
};
export type LocaleType = typeof cn;
type DeepPartial<T> = T extends object
? {
[P in keyof T]?: DeepPartial<T[P]>;
}
: T;
export type LocaleType = DeepPartial<typeof cn>;
export type RequiredLocaleType = typeof cn;
export default cn;

231
app/locales/cs.ts Normal file
View File

@@ -0,0 +1,231 @@
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const cs: LocaleType = {
WIP: "V přípravě...",
Error: {
Unauthorized:
"Neoprávněný přístup, zadejte přístupový kód na stránce nastavení.",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} zpráv`,
},
Chat: {
SubTitle: (count: number) => `${count} zpráv s ChatGPT`,
Actions: {
ChatList: "Přejít na seznam chatů",
CompressedHistory: "Pokyn z komprimované paměti historie",
Export: "Exportovat všechny zprávy jako Markdown",
Copy: "Kopírovat",
Stop: "Zastavit",
Retry: "Zopakovat",
Delete: "Smazat",
},
Rename: "Přejmenovat chat",
Typing: "Píše...",
Input: (submitKey: string) => {
var inputHints = `${submitKey} pro odeslání`;
if (submitKey === String(SubmitKey.Enter)) {
inputHints += ", Shift + Enter pro řádkování";
}
return inputHints + ", / pro vyhledávání pokynů";
},
Send: "Odeslat",
Config: {
Reset: "Obnovit výchozí",
SaveAs: "Uložit jako Masku",
},
},
Export: {
Title: "Všechny zprávy",
Copy: "Kopírovat vše",
Download: "Stáhnout",
MessageFromYou: "Zpráva od vás",
MessageFromChatGPT: "Zpráva z ChatGPT",
},
Memory: {
Title: "Pokyn z paměti",
EmptyContent: "Zatím nic.",
Send: "Odeslat paměť",
Copy: "Kopírovat paměť",
Reset: "Obnovit relaci",
ResetConfirm:
"Resetováním se vymaže historie aktuálních konverzací i paměť historie pokynů. Opravdu chcete provést obnovu?",
},
Home: {
NewChat: "Nový chat",
DeleteChat: "Potvrzujete smazání vybrané konverzace?",
DeleteToast: "Chat smazán",
Revert: "Zvrátit",
},
Settings: {
Title: "Nastavení",
SubTitle: "Všechna nastavení",
Actions: {
ClearAll: "Vymazat všechna data",
ResetAll: "Obnovit veškeré nastavení",
Close: "Zavřít",
ConfirmResetAll: "Jste si jisti, že chcete obnovit všechna nastavení?",
ConfirmClearAll: "Jste si jisti, že chcete smazat všechna data?",
},
Lang: {
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
All: "Všechny jazyky",
},
Avatar: "Avatar",
FontSize: {
Title: "Velikost písma",
SubTitle: "Nastavení velikosti písma obsahu chatu",
},
Update: {
Version: (x: string) => `Verze: ${x}`,
IsLatest: "Aktuální verze",
CheckUpdate: "Zkontrolovat aktualizace",
IsChecking: "Kontrola aktualizace...",
FoundUpdate: (x: string) => `Nalezena nová verze: ${x}`,
GoToUpdate: "Aktualizovat",
},
SendKey: "Odeslat klíč",
Theme: "Téma",
TightBorder: "Těsné ohraničení",
SendPreviewBubble: {
Title: "Odesílat chatovací bublinu s náhledem",
SubTitle: "Zobrazit v náhledu bubliny",
},
Mask: {
Title: "Úvodní obrazovka Masek",
SubTitle: "Před zahájením nového chatu zobrazte úvodní obrazovku Masek",
},
Prompt: {
Disable: {
Title: "Deaktivovat automatické dokončování",
SubTitle: "Zadejte / pro spuštění automatického dokončování",
},
List: "Seznam pokynů",
ListCount: (builtin: number, custom: number) =>
`${builtin} vestavěných, ${custom} uživatelských`,
Edit: "Upravit",
Modal: {
Title: "Seznam pokynů",
Add: "Přidat pokyn",
Search: "Hledat pokyny",
},
EditModal: {
Title: "Editovat pokyn",
},
},
HistoryCount: {
Title: "Počet připojených zpráv",
SubTitle: "Počet odeslaných připojených zpráv na žádost",
},
CompressThreshold: {
Title: "Práh pro kompresi historie",
SubTitle:
"Komprese proběhne, pokud délka nekomprimovaných zpráv přesáhne tuto hodnotu",
},
Token: {
Title: "API klíč",
SubTitle: "Použitím klíče ignorujete omezení přístupového kódu",
Placeholder: "Klíč API OpenAI",
},
Usage: {
Title: "Stav účtu",
SubTitle(used: any, total: any) {
return `Použito tento měsíc $${used}, předplaceno $${total}`;
},
IsChecking: "Kontroluji...",
Check: "Zkontrolovat",
NoAccess: "Pro kontrolu zůstatku zadejte klíč API",
},
AccessCode: {
Title: "Přístupový kód",
SubTitle: "Kontrola přístupu povolena",
Placeholder: "Potřebujete přístupový kód",
},
Model: "Model",
Temperature: {
Title: "Teplota",
SubTitle: "Větší hodnota činí výstup náhodnějším",
},
MaxTokens: {
Title: "Max. počet tokenů",
SubTitle: "Maximální délka vstupního tokenu a generovaných tokenů",
},
PresencePenalty: {
Title: "Přítomnostní korekce",
SubTitle: "Větší hodnota zvyšuje pravděpodobnost nových témat.",
},
},
Store: {
DefaultTopic: "Nová konverzace",
BotHello: "Ahoj! Jak mohu dnes pomoci?",
Error: "Něco se pokazilo, zkuste to prosím později.",
Prompt: {
History: (content: string) =>
"Toto je shrnutí historie chatu mezi umělou inteligencí a uživatelem v podobě rekapitulace: " +
content,
Topic:
"Vytvořte prosím název o čtyřech až pěti slovech vystihující průběh našeho rozhovoru bez jakýchkoli úvodních slov, interpunkčních znamének, uvozovek, teček, symbolů nebo dalšího textu. Odstraňte uvozovky.",
Summarize:
"Krátce shrň naši diskusi v rozsahu do 200 slov a použij ji jako podnět pro budoucí kontext.",
},
},
Copy: {
Success: "Zkopírováno do schránky",
Failed: "Kopírování selhalo, prosím, povolte přístup ke schránce",
},
Context: {
Toast: (x: any) => `Použití ${x} kontextových pokynů`,
Edit: "Kontextové a paměťové pokyny",
Add: "Přidat pokyn",
},
Plugin: {
Name: "Plugin",
},
Mask: {
Name: "Maska",
Page: {
Title: "Šablona pokynu",
SubTitle: (count: number) => `${count} šablon pokynů`,
Search: "Hledat v šablonách",
Create: "Vytvořit",
},
Item: {
Info: (count: number) => `${count} pokynů`,
Chat: "Chat",
View: "Zobrazit",
Edit: "Upravit",
Delete: "Smazat",
DeleteConfirm: "Potvrdit smazání?",
},
EditModal: {
Title: (readonly: boolean) =>
`Editovat šablonu pokynu ${readonly ? "(pouze ke čtení)" : ""}`,
Download: "Stáhnout",
Clone: "Duplikovat",
},
Config: {
Avatar: "Avatar Bota",
Name: "Jméno Bota",
},
},
NewChat: {
Return: "Zpět",
Skip: "Přeskočit",
Title: "Vyberte Masku",
SubTitle: "Chatovat s duší za Maskou",
More: "Najít více",
NotShow: "Nezobrazovat znovu",
ConfirmNoShow: "Potvrdit zakázáníMůžete jej povolit později v nastavení.",
},
UI: {
Confirm: "Potvrdit",
Cancel: "Zrušit",
Close: "Zavřít",
Create: "Vytvořit",
Edit: "Upravit",
},
};
export default cs;

View File

@@ -72,19 +72,6 @@ const de: LocaleType = {
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",
tw: "繁體中文",
es: "Español",
it: "Italiano",
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
vi: "Vietnamese",
ru: "Русский",
no: "Norsk",
},
},
Avatar: "Avatar",
FontSize: {
@@ -166,7 +153,7 @@ const de: LocaleType = {
Title: "Max Tokens", //Maximale Token
SubTitle: "Maximale Anzahl der Anfrage- plus Antwort-Token",
},
PresencePenlty: {
PresencePenalty: {
Title: "Presence Penalty", //Anwesenheitsstrafe
SubTitle:
"Ein größerer Wert erhöht die Wahrscheinlichkeit, dass über neue Themen gesprochen wird",

View File

@@ -1,11 +1,18 @@
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
import { RequiredLocaleType } from "./index";
const en: LocaleType = {
const en: RequiredLocaleType = {
WIP: "Coming Soon...",
Error: {
Unauthorized:
"Unauthorized access, please enter access code in settings page.",
"Unauthorized access, please enter access code in [auth](/#/auth) page.",
},
Auth: {
Title: "Need Access Code",
Tips: "Please enter access code below",
Input: "access code",
Confirm: "Confirm",
Later: "Later",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} messages`,
@@ -21,6 +28,19 @@ const en: LocaleType = {
Retry: "Retry",
Delete: "Delete",
},
InputActions: {
Stop: "Stop",
ToBottom: "To Latest",
Theme: {
auto: "Auto",
light: "Light Theme",
dark: "Dark Theme",
},
Prompt: "Prompts",
Masks: "Masks",
Clear: "Clear Context",
Settings: "Settings",
},
Rename: "Rename Chat",
Typing: "Typing…",
Input: (submitKey: string) => {
@@ -37,11 +57,30 @@ const en: LocaleType = {
},
},
Export: {
Title: "All Messages",
Title: "Export Messages",
Copy: "Copy All",
Download: "Download",
MessageFromYou: "Message From You",
MessageFromChatGPT: "Message From ChatGPT",
Share: "Share to ShareGPT",
Format: {
Title: "Export Format",
SubTitle: "Markdown or PNG Image",
},
IncludeContext: {
Title: "Including Context",
SubTitle: "Export context prompts in mask or not",
},
Steps: {
Select: "Select",
Preview: "Preview",
},
},
Select: {
Search: "Search",
All: "Select All",
Latest: "Select Latest",
Clear: "Clear",
},
Memory: {
Title: "Memory Prompt",
@@ -71,19 +110,6 @@ const en: LocaleType = {
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",
tw: "繁體中文",
es: "Español",
it: "Italiano",
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
vi: "Vietnamese",
ru: "Русский",
no: "Norsk",
},
},
Avatar: "Avatar",
FontSize: {
@@ -155,6 +181,10 @@ const en: LocaleType = {
SubTitle: "Access control enabled",
Placeholder: "Need Access Code",
},
Endpoint: {
Title: "Endpoint",
SubTitle: "Custom endpoint must start with http(s)://",
},
Model: "Model",
Temperature: {
Title: "Temperature",
@@ -164,7 +194,7 @@ const en: LocaleType = {
Title: "Max Tokens",
SubTitle: "Maximum length of input tokens and generated tokens",
},
PresencePenlty: {
PresencePenalty: {
Title: "Presence Penalty",
SubTitle:
"A larger value increases the likelihood to talk about new topics",
@@ -176,12 +206,11 @@ const en: LocaleType = {
Error: "Something went wrong, please try again later.",
Prompt: {
History: (content: string) =>
"This is a summary of the chat history between the AI and the user as a recap: " +
content,
"This is a summary of the chat history as a recap: " + content,
Topic:
"Please generate a four to five word title summarizing our conversation without any lead-in, punctuation, quotation marks, periods, symbols, or additional text. Remove enclosing quotation marks.",
Summarize:
"Summarize our discussion briefly in 200 words or less to use as a prompt for future context.",
"Summarize the discussion briefly in 200 words or less to use as a prompt for future context.",
},
},
Copy: {
@@ -192,6 +221,8 @@ const en: LocaleType = {
Toast: (x: any) => `With ${x} contextual prompts`,
Edit: "Contextual and Memory Prompts",
Add: "Add a Prompt",
Clear: "Context Cleared",
Revert: "Revert",
},
Plugin: {
Name: "Plugin",
@@ -221,15 +252,24 @@ const en: LocaleType = {
Config: {
Avatar: "Bot Avatar",
Name: "Bot Name",
Sync: {
Title: "Use Global Config",
SubTitle: "Use global config in this chat",
Confirm: "Confirm to override custom config with global config?",
},
HideContext: {
Title: "Hide Context Prompts",
SubTitle: "Do not show in-context prompts in chat",
},
},
},
NewChat: {
Return: "Return",
Skip: "Skip",
Skip: "Just Start",
Title: "Pick a Mask",
SubTitle: "Chat with the Soul behind the Mask",
More: "Find More",
NotShow: "Not Show Again",
NotShow: "Never Show Again",
ConfirmNoShow: "Confirm to disableYou can enable it in settings later.",
},

View File

@@ -71,19 +71,6 @@ const es: LocaleType = {
Lang: {
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: "English",
tw: "繁體中文",
es: "Español",
it: "Italiano",
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
vi: "Vietnamese",
ru: "Русский",
no: "Norsk",
},
},
Avatar: "Avatar",
FontSize: {
@@ -164,7 +151,7 @@ const es: LocaleType = {
Title: "Máximo de tokens",
SubTitle: "Longitud máxima de tokens de entrada y tokens generados",
},
PresencePenlty: {
PresencePenalty: {
Title: "Penalización de presencia",
SubTitle:
"Un valor mayor aumenta la probabilidad de hablar sobre nuevos temas",

237
app/locales/fr.ts Normal file
View File

@@ -0,0 +1,237 @@
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const fr: LocaleType = {
WIP: "Prochainement...",
Error: {
Unauthorized:
"Accès non autorisé, veuillez saisir le code d'accès dans la page des paramètres.",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} messages en total`,
},
Chat: {
SubTitle: (count: number) => `${count} messages échangés avec ChatGPT`,
Actions: {
ChatList: "Aller à la liste de discussion",
CompressedHistory: "Mémoire d'historique compressée Prompt",
Export: "Exporter tous les messages en tant que Markdown",
Copy: "Copier",
Stop: "Arrêter",
Retry: "Réessayer",
Delete: "Supprimer",
},
Rename: "Renommer la conversation",
Typing: "En train d'écrire…",
Input: (submitKey: string) => {
var inputHints = `Appuyez sur ${submitKey} pour envoyer`;
if (submitKey === String(SubmitKey.Enter)) {
inputHints += ", Shift + Enter pour insérer un saut de ligne";
}
return inputHints + ", / pour rechercher des prompts";
},
Send: "Envoyer",
Config: {
Reset: "Restaurer les paramètres par défaut",
SaveAs: "Enregistrer en tant que masque",
},
},
Export: {
Title: "Tous les messages",
Copy: "Tout sélectionner",
Download: "Télécharger",
MessageFromYou: "Message de votre part",
MessageFromChatGPT: "Message de ChatGPT",
},
Memory: {
Title: "Prompt mémoire",
EmptyContent: "Rien encore.",
Send: "Envoyer la mémoire",
Copy: "Copier la mémoire",
Reset: "Réinitialiser la session",
ResetConfirm:
"La réinitialisation supprimera l'historique de la conversation actuelle ainsi que la mémoire de l'historique. Êtes-vous sûr de vouloir procéder à la réinitialisation?",
},
Home: {
NewChat: "Nouvelle discussion",
DeleteChat: "Confirmer la suppression de la conversation sélectionnée ?",
DeleteToast: "Conversation supprimée",
Revert: "Revenir en arrière",
},
Settings: {
Title: "Paramètres",
SubTitle: "Toutes les configurations",
Actions: {
ClearAll: "Effacer toutes les données",
ResetAll: "Réinitialiser les configurations",
Close: "Fermer",
ConfirmResetAll:
"Êtes-vous sûr de vouloir réinitialiser toutes les configurations?",
ConfirmClearAll: "Êtes-vous sûr de vouloir supprimer toutes les données?",
},
Lang: {
Name: "Language", // ATTENTION : si vous souhaitez ajouter une nouvelle traduction, ne traduisez pas cette valeur, laissez-la sous forme de `Language`
All: "Toutes les langues",
},
Avatar: "Avatar",
FontSize: {
Title: "Taille des polices",
SubTitle: "Ajuste la taille de police du contenu de la conversation",
},
Update: {
Version: (x: string) => `Version : ${x}`,
IsLatest: "Dernière version",
CheckUpdate: "Vérifier la mise à jour",
IsChecking: "Vérification de la mise à jour...",
FoundUpdate: (x: string) => `Nouvelle version disponible : ${x}`,
GoToUpdate: "Mise à jour",
},
SendKey: "Clé d'envoi",
Theme: "Thème",
TightBorder: "Bordure serrée",
SendPreviewBubble: {
Title: "Aperçu de l'envoi dans une bulle",
SubTitle: "Aperçu du Markdown dans une bulle",
},
Mask: {
Title: "Écran de masque",
SubTitle:
"Afficher un écran de masque avant de démarrer une nouvelle discussion",
},
Prompt: {
Disable: {
Title: "Désactiver la saisie semi-automatique",
SubTitle: "Appuyez sur / pour activer la saisie semi-automatique",
},
List: "Liste de prompts",
ListCount: (builtin: number, custom: number) =>
`${builtin} intégré, ${custom} personnalisé`,
Edit: "Modifier",
Modal: {
Title: "Liste de prompts",
Add: "Ajouter un élément",
Search: "Rechercher des prompts",
},
EditModal: {
Title: "Modifier le prompt",
},
},
HistoryCount: {
Title: "Nombre de messages joints",
SubTitle: "Nombre de messages envoyés attachés par demande",
},
CompressThreshold: {
Title: "Seuil de compression de l'historique",
SubTitle:
"Comprimera si la longueur des messages non compressés dépasse cette valeur",
},
Token: {
Title: "Clé API",
SubTitle: "Utilisez votre clé pour ignorer la limite du code d'accès",
Placeholder: "Clé OpenAI API",
},
Usage: {
Title: "Solde du compte",
SubTitle(used: any, total: any) {
return `Épuisé ce mois-ci $${used}, abonnement $${total}`;
},
IsChecking: "Vérification...",
Check: "Vérifier",
NoAccess: "Entrez la clé API pour vérifier le solde",
},
AccessCode: {
Title: "Code d'accès",
SubTitle: "Contrôle d'accès activé",
Placeholder: "Code d'accès requis",
},
Model: "Modèle",
Temperature: {
Title: "Température",
SubTitle: "Une valeur plus élevée rendra les réponses plus aléatoires",
},
MaxTokens: {
Title: "Max Tokens",
SubTitle: "Longueur maximale des tokens d'entrée et des tokens générés",
},
PresencePenalty: {
Title: "Pénalité de présence",
SubTitle:
"Une valeur plus élevée augmentera la probabilité d'introduire de nouveaux sujets",
},
},
Store: {
DefaultTopic: "Nouvelle conversation",
BotHello: "Bonjour ! Comment puis-je vous aider aujourd'hui ?",
Error: "Quelque chose s'est mal passé, veuillez réessayer plus tard.",
Prompt: {
History: (content: string) =>
"Ceci est un résumé de l'historique des discussions entre l'IA et l'utilisateur : " +
content,
Topic:
"Veuillez générer un titre de quatre à cinq mots résumant notre conversation sans introduction, ponctuation, guillemets, points, symboles ou texte supplémentaire. Supprimez les guillemets inclus.",
Summarize:
"Résumez brièvement nos discussions en 200 mots ou moins pour les utiliser comme prompt de contexte futur.",
},
},
Copy: {
Success: "Copié dans le presse-papiers",
Failed:
"La copie a échoué, veuillez accorder l'autorisation d'accès au presse-papiers",
},
Context: {
Toast: (x: any) => `Avec ${x} contextes de prompts`,
Edit: "Contextes et mémoires de prompts",
Add: "Ajouter un prompt",
},
Plugin: {
Name: "Extension",
},
Mask: {
Name: "Masque",
Page: {
Title: "Modèle de prompt",
SubTitle: (count: number) => `${count} modèles de prompts`,
Search: "Rechercher des modèles",
Create: "Créer",
},
Item: {
Info: (count: number) => `${count} prompts`,
Chat: "Discussion",
View: "Vue",
Edit: "Modifier",
Delete: "Supprimer",
DeleteConfirm: "Confirmer la suppression?",
},
EditModal: {
Title: (readonly: boolean) =>
`Modifier le modèle de prompt ${readonly ? "(en lecture seule)" : ""}`,
Download: "Télécharger",
Clone: "Dupliquer",
},
Config: {
Avatar: "Avatar du bot",
Name: "Nom du bot",
},
},
NewChat: {
Return: "Retour",
Skip: "Passer",
Title: "Choisir un masque",
SubTitle: "Discutez avec l'âme derrière le masque",
More: "En savoir plus",
NotShow: "Ne pas afficher à nouveau",
ConfirmNoShow:
"Confirmez-vous vouloir désactiver cela? Vous pouvez le réactiver plus tard dans les paramètres.",
},
UI: {
Confirm: "Confirmer",
Cancel: "Annuler",
Close: "Fermer",
Create: "Créer",
Edit: "Éditer",
},
};
export default fr;

View File

@@ -1,6 +1,7 @@
import CN from "./cn";
import EN from "./en";
import TW from "./tw";
import FR from "./fr";
import ES from "./es";
import IT from "./it";
import TR from "./tr";
@@ -9,13 +10,17 @@ import DE from "./de";
import VI from "./vi";
import RU from "./ru";
import NO from "./no";
import CS from "./cs";
import KO from "./ko";
import { merge } from "../utils/merge";
export type { LocaleType } from "./cn";
export type { LocaleType, RequiredLocaleType } from "./cn";
export const AllLangs = [
"en",
"cn",
"tw",
"fr",
"es",
"it",
"tr",
@@ -23,10 +28,27 @@ export const AllLangs = [
"de",
"vi",
"ru",
"no",
"cs",
"ko",
] as const;
export type Lang = (typeof AllLangs)[number];
export const ALL_LANG_OPTIONS: Record<Lang, string> = {
cn: "简体中文",
en: "English",
tw: "繁體中文",
fr: "Français",
es: "Español",
it: "Italiano",
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
vi: "Tiếng Việt",
ru: "Русский",
cs: "Čeština",
ko: "한국어",
};
const LANG_KEY = "lang";
const DEFAULT_LANG = "en";
@@ -48,7 +70,6 @@ function getLanguage() {
try {
return navigator.language.toLowerCase();
} catch {
console.log("[Lang] failed to detect user lang.");
return DEFAULT_LANG;
}
}
@@ -76,10 +97,12 @@ export function changeLang(lang: Lang) {
location.reload();
}
export default {
const fallbackLang = EN;
const targetLang = {
en: EN,
cn: CN,
tw: TW,
fr: FR,
es: ES,
it: IT,
tr: TR,
@@ -88,4 +111,11 @@ export default {
vi: VI,
ru: RU,
no: NO,
cs: CS,
ko: KO,
}[getLang()] as typeof CN;
// if target lang missing some fields, it will use fallback lang string
merge(fallbackLang, targetLang);
export default fallbackLang as typeof CN;

View File

@@ -71,19 +71,6 @@ const it: LocaleType = {
Lang: {
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",
tw: "繁體中文",
es: "Español",
it: "Italiano",
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
vi: "Vietnamese",
ru: "Русский",
no: "Norsk",
},
},
Avatar: "Avatar",
FontSize: {
@@ -165,7 +152,7 @@ const it: LocaleType = {
Title: "Token massimi",
SubTitle: "Lunghezza massima dei token in ingresso e dei token generati",
},
PresencePenlty: {
PresencePenalty: {
Title: "Penalità di presenza",
SubTitle:
"Un valore maggiore aumenta la probabilità di parlare di nuovi argomenti",

View File

@@ -2,10 +2,10 @@ import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const jp: LocaleType = {
WIP: "この機能は開発中です……",
WIP: "この機能は開発中です",
Error: {
Unauthorized:
"現在は未承認状態です。左下の設定ボタンをクリックし、アクセスパスワードを入力してください。",
"現在は未承認状態です。左下の設定ボタンをクリックし、アクセスパスワードかOpenAIのAPIキーを入力してください。",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} 通のチャット`,
@@ -19,7 +19,7 @@ const jp: LocaleType = {
Copy: "コピー",
Stop: "停止",
Retry: "リトライ",
Delete: "Delete",
Delete: "削除",
},
Rename: "チャットの名前を変更",
Typing: "入力中…",
@@ -32,7 +32,7 @@ const jp: LocaleType = {
},
Send: "送信",
Config: {
Reset: "重置默认",
Reset: "リセット",
SaveAs: "另存为面具",
},
},
@@ -70,20 +70,7 @@ const jp: LocaleType = {
},
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: "Русский",
no: "Norsk",
},
All: "全ての言語",
},
Avatar: "アバター",
FontSize: {
@@ -104,11 +91,11 @@ const jp: LocaleType = {
TightBorder: "ボーダーレスモード",
SendPreviewBubble: {
Title: "プレビューバブルの送信",
SubTitle: "在预览气泡中预览 Markdown 内容",
SubTitle: "プレビューバブルでマークダウンコンテンツをプレビュー",
},
Mask: {
Title: "面具启动页",
SubTitle: "新建聊天时,展示面具启动页",
Title: "キャラクターページ",
SubTitle: "新規チャット作成時にキャラクターページを表示する",
},
Prompt: {
Disable: {
@@ -126,7 +113,7 @@ const jp: LocaleType = {
Search: "プロンプトワード検索",
},
EditModal: {
Title: "编辑提示词",
Title: "編集",
},
},
HistoryCount: {
@@ -167,7 +154,7 @@ const jp: LocaleType = {
Title: "シングルレスポンス制限 (max_tokens)",
SubTitle: "1回のインタラクションで使用される最大トークン数",
},
PresencePenlty: {
PresencePenalty: {
Title: "トピックの新鮮度 (presence_penalty)",
SubTitle: "値が大きいほど、新しいトピックへの展開が可能になります。",
},
@@ -191,54 +178,64 @@ const jp: LocaleType = {
Failed: "コピーに失敗しました。クリップボード許可を与えてください。",
},
Context: {
Toast: (x: any) => `前置コンテキスト${x} 件設定されました`,
Edit: "前置コンテキストと履歴メモリ",
Add: "新規追加",
Toast: (x: any) => `キャラクター${x} 件設定されました`,
Edit: "キャラクタープリセットとモデル設定",
Add: "追加",
},
Plugin: { Name: "插件" },
Plugin: { Name: "プラグイン" },
Mask: {
Name: "面具",
Name: "キャラクタープリセット",
Page: {
Title: "预设角色面具",
SubTitle: (count: number) => `${count} 个预设角色定义`,
Search: "搜索角色面具",
Create: "新",
Title: "キャラクタープリセット",
SubTitle: (count: number) => `${count} 件見つかりました。`,
Search: "検索",
Create: "新",
},
Item: {
Info: (count: number) => `包含 ${count} 条预设对话`,
Chat: "对话",
View: "查看",
Edit: "编辑",
Delete: "除",
DeleteConfirm: "确认删除",
Chat: "会話",
View: "詳細",
Edit: "編集",
Delete: "除",
DeleteConfirm: "本当に削除しますか",
},
EditModal: {
Title: (readonly: boolean) =>
`编辑预设面具 ${readonly ? "只读" : ""}`,
Download: "下载预设",
Clone: "克隆预设",
`キャラクタープリセットを編集 ${readonly ? "読み取り専用" : ""}`,
Download: "ダウンロード",
Clone: "複製",
},
Config: {
Avatar: "角色头像",
Name: "角色名称",
Avatar: "キャラクターのアイコン",
Name: "キャラクターの名前",
Sync: {
Title: "グローバル設定を利用する",
SubTitle: "このチャットでグローバル設定を利用します。",
Confirm:
"カスタム設定を上書きしてグローバル設定を使用します、よろしいですか?",
},
HideContext: {
Title: "キャラクター設定を表示しない",
SubTitle: "チャット画面でのキャラクター設定を非表示にします。",
},
},
},
NewChat: {
Return: "返回",
Skip: "跳过",
Title: "挑选一个面具",
SubTitle: "现在开始,与面具背后的灵魂思维碰撞",
More: "搜索更多",
NotShow: "不再展示",
ConfirmNoShow: "确认禁用?禁用后可以随时在设置中重新启用。",
Return: "戻る",
Skip: "スキップ",
Title: "キャラクター",
SubTitle: "さあ、AIにキャラクターを設定して会話を始めてみましょう",
More: "もっと探す",
NotShow: "今後は表示しない",
ConfirmNoShow: "いつでも設定から有効化できます。",
},
UI: {
Confirm: "确认",
Cancel: "取消",
Close: "关闭",
Create: "新",
Edit: "编辑",
Confirm: "確認",
Cancel: "キャンセル",
Close: "閉じる",
Create: "新",
Edit: "編集",
},
};

230
app/locales/ko.ts Normal file
View File

@@ -0,0 +1,230 @@
import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const ko: LocaleType = {
WIP: "곧 출시 예정...",
Error: {
Unauthorized: "권한이 없습니다. 설정 페이지에서 액세스 코드를 입력하세요.",
},
ChatItem: {
ChatItemCount: (count: number) => `${count}개의 메시지`,
},
Chat: {
SubTitle: (count: number) => `ChatGPT와의 ${count}개의 메시지`,
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: "All Languages",
},
Avatar: "아바타",
FontSize: {
Title: "글꼴 크기",
SubTitle: "채팅 내용의 글꼴 크기 조정",
},
Update: {
Version: (x: string) => `버전: ${x}`,
IsLatest: "최신 버전",
CheckUpdate: "업데이트 확인",
IsChecking: "업데이트 확인 중...",
FoundUpdate: (x: string) => `새 버전 발견: ${x}`,
GoToUpdate: "업데이트",
},
SendKey: "전송 키",
Theme: "테마",
TightBorder: "조밀한 테두리",
SendPreviewBubble: {
Title: "미리 보기 버블 전송",
SubTitle: "버블에서 마크다운 미리 보기",
},
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: "OpenAI API 키",
},
Usage: {
Title: "계정 잔액",
SubTitle(used: any, total: any) {
return `이번 달 사용액 ${used}, 구독액 ${total}`;
},
IsChecking: "확인 중...",
Check: "확인",
NoAccess: "잔액 확인을 위해 API 키를 입력하세요.",
},
AccessCode: {
Title: "액세스 코드",
SubTitle: "액세스 제어가 활성화됨",
Placeholder: "액세스 코드 입력",
},
Model: "모델",
Temperature: {
Title: "온도 (temperature)",
SubTitle: "값이 클수록 더 무작위한 출력이 생성됩니다.",
},
MaxTokens: {
Title: "최대 토큰 수 (max_tokens)",
SubTitle: "입력 토큰과 생성된 토큰의 최대 길이",
},
PresencePenalty: {
Title: "존재 페널티 (presence_penalty)",
SubTitle: "값이 클수록 새로운 주제에 대해 대화할 가능성이 높아집니다.",
},
},
Store: {
DefaultTopic: "새 대화",
BotHello: "안녕하세요! 오늘 도움이 필요하신가요?",
Error: "문제가 발생했습니다. 나중에 다시 시도해주세요.",
Prompt: {
History: (content: string) =>
"이것은 AI와 사용자 간의 대화 기록을 요약한 내용입니다: " + content,
Topic:
"다음과 같이 대화 내용을 요약하는 4~5단어 제목을 생성해주세요. 따옴표, 구두점, 인용부호, 기호 또는 추가 텍스트를 제거하십시오. 따옴표로 감싸진 부분을 제거하십시오.",
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 ko;

View File

@@ -4,8 +4,7 @@ import type { LocaleType } from "./index";
const no: LocaleType = {
WIP: "Arbeid pågår ...",
Error: {
Unauthorized:
"Du har ikke tilgang. Vennlig oppgi tildelt adgangskode.",
Unauthorized: "Du har ikke tilgang. Vennlig oppgi tildelt adgangskode.",
},
ChatItem: {
ChatItemCount: (count: number) => `${count} meldinger`,
@@ -125,7 +124,8 @@ const no: LocaleType = {
},
Token: {
Title: "API Key",
SubTitle: "Bruk din egen API-nøkkel for å ignorere tilgangskoden begrensning",
SubTitle:
"Bruk din egen API-nøkkel for å ignorere tilgangskoden begrensning",
Placeholder: "OpenAI API-nøkkel",
},
Usage: {
@@ -153,8 +153,7 @@ const no: LocaleType = {
},
PresencePenlty: {
Title: "Straff for tilstedeværelse",
SubTitle:
"Høyere verdi øker sjansen for ny tematikk",
SubTitle: "Høyere verdi øker sjansen for ny tematikk",
},
},
Store: {
@@ -183,4 +182,4 @@ const no: LocaleType = {
},
};
export default no;
export default no;

View File

@@ -71,64 +71,53 @@ const ru: LocaleType = {
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: "Редактировать подсказку",
},
},
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: "Количество отправляемых сообщений, прикрепляемых к каждому запросу",
HistoryCount: {
Title: "Количество прикрепляемых сообщений",
SubTitle:
"Количество отправляемых сообщений, прикрепляемых к каждому запросу",
},
CompressThreshold: {
Title: "Порог сжатия истории",
@@ -163,7 +152,7 @@ const ru: LocaleType = {
Title: "Максимальное количество токенов",
SubTitle: "Максимальная длина вводных и генерируемых токенов",
},
PresencePenlty: {
PresencePenalty: {
Title: "Штраф за повторения",
SubTitle:
"Чем выше значение, тем больше вероятность общения на новые темы",
@@ -185,7 +174,8 @@ const ru: LocaleType = {
},
Copy: {
Success: "Скопировано в буфер обмена",
Failed: "Не удалось скопировать, пожалуйста, предоставьте разрешение на доступ к буферу обмена",
Failed:
"Не удалось скопировать, пожалуйста, предоставьте разрешение на доступ к буферу обмена",
},
Context: {
Toast: (x: any) => `С ${x} контекстными подсказками`,
@@ -213,7 +203,9 @@ const ru: LocaleType = {
},
EditModal: {
Title: (readonly: boolean) =>
`Редактирование шаблона подсказки ${readonly ? "(только для чтения)" : ""}`,
`Редактирование шаблона подсказки ${
readonly ? "(только для чтения)" : ""
}`,
Download: "Скачать",
Clone: "Клонировать",
},
@@ -229,7 +221,8 @@ const ru: LocaleType = {
SubTitle: "Общайтесь с душой за маской",
More: "Найти еще",
NotShow: "Не показывать снова",
ConfirmNoShow: "Подтвердите отключение? Вы можете включить это позже в настройках.",
ConfirmNoShow:
"Подтвердите отключение? Вы можете включить это позже в настройках.",
},
UI: {

View File

@@ -71,19 +71,6 @@ const tr: LocaleType = {
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",
tw: "繁體中文",
es: "Español",
it: "Italiano",
tr: "Türkçe",
jp: "日本語",
de: "Deutsch",
vi: "Vietnamese",
ru: "Русский",
no: "Norsk",
},
},
Avatar: "Avatar",
FontSize: {
@@ -166,7 +153,7 @@ const tr: LocaleType = {
SubTitle:
"Girdi belirteçlerinin ve oluşturulan belirteçlerin maksimum uzunluğu",
},
PresencePenlty: {
PresencePenalty: {
Title: "Varlık Cezası",
SubTitle:
"Daha büyük bir değer, yeni konular hakkında konuşma olasılığını artırır",

View File

@@ -69,19 +69,6 @@ const tw: LocaleType = {
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: "Русский",
no: "Norsk",
},
},
Avatar: "大頭貼",
FontSize: {
@@ -161,7 +148,7 @@ const tw: LocaleType = {
Title: "單次回應限制 (max_tokens)",
SubTitle: "單次互動所用的最大 Token 數",
},
PresencePenlty: {
PresencePenalty: {
Title: "話題新穎度 (presence_penalty)",
SubTitle: "值越大,越有可能擴展到新話題",
},

View File

@@ -2,7 +2,7 @@ import { SubmitKey } from "../store/config";
import type { LocaleType } from "./index";
const vi: LocaleType = {
WIP: "Coming Soon...",
WIP: "Sắp ra mắt...",
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.",
@@ -71,18 +71,6 @@ const vi: LocaleType = {
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: {
@@ -162,7 +150,7 @@ const vi: LocaleType = {
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: {
PresencePenalty: {
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",
},