mirror of
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
synced 2025-11-15 05:23:42 +08:00
Merge remote-tracking branch 'upstream/main'
This commit is contained in:
@@ -27,6 +27,19 @@ const cn = {
|
||||
Retry: "重试",
|
||||
Delete: "删除",
|
||||
},
|
||||
InputActions: {
|
||||
Stop: "停止响应",
|
||||
ToBottom: "滚到最新",
|
||||
Theme: {
|
||||
auto: "自动主题",
|
||||
light: "亮色模式",
|
||||
dark: "深色模式",
|
||||
},
|
||||
Prompt: "快捷指令",
|
||||
Masks: "所有面具",
|
||||
Clear: "清除聊天",
|
||||
Settings: "对话设置",
|
||||
},
|
||||
Rename: "重命名对话",
|
||||
Typing: "正在输入…",
|
||||
Input: (submitKey: string) => {
|
||||
@@ -102,6 +115,11 @@ const cn = {
|
||||
SubTitle: "聊天内容的字体大小",
|
||||
},
|
||||
|
||||
InputTemplate: {
|
||||
Title: "用户输入预处理",
|
||||
SubTitle: "用户最新的一条消息会填充到此模板",
|
||||
},
|
||||
|
||||
Update: {
|
||||
Version: (x: string) => `当前版本:${x}`,
|
||||
IsLatest: "已是最新版本",
|
||||
@@ -167,6 +185,10 @@ const cn = {
|
||||
SubTitle: "管理员已开启加密访问",
|
||||
Placeholder: "请输入访问密码",
|
||||
},
|
||||
Endpoint: {
|
||||
Title: "接口地址",
|
||||
SubTitle: "除默认地址外,必须包含 http(s)://",
|
||||
},
|
||||
Model: "模型 (model)",
|
||||
Temperature: {
|
||||
Title: "随机性 (temperature)",
|
||||
@@ -180,6 +202,10 @@ const cn = {
|
||||
Title: "话题新鲜度 (presence_penalty)",
|
||||
SubTitle: "值越大,越有可能扩展到新话题",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "频率惩罚度 (frequency_penalty)",
|
||||
SubTitle: "值越大,越有可能降低重复字词",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "新的聊天",
|
||||
@@ -260,6 +286,12 @@ const cn = {
|
||||
Create: "新建",
|
||||
Edit: "编辑",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "模型",
|
||||
Messages: "消息",
|
||||
Topic: "主题",
|
||||
Time: "时间",
|
||||
},
|
||||
};
|
||||
|
||||
type DeepPartial<T> = T extends object
|
||||
@@ -267,7 +299,8 @@ 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 type LocaleType = typeof cn;
|
||||
export type PartialLocaleType = DeepPartial<typeof cn>;
|
||||
|
||||
export default cn;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const cs: LocaleType = {
|
||||
const cs: PartialLocaleType = {
|
||||
WIP: "V přípravě...",
|
||||
Error: {
|
||||
Unauthorized:
|
||||
@@ -155,6 +155,11 @@ const cs: LocaleType = {
|
||||
Title: "Přítomnostní korekce",
|
||||
SubTitle: "Větší hodnota zvyšuje pravděpodobnost nových témat.",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "Frekvenční penalizace",
|
||||
SubTitle:
|
||||
"Větší hodnota snižující pravděpodobnost opakování stejného řádku",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "Nová konverzace",
|
||||
@@ -226,6 +231,12 @@ const cs: LocaleType = {
|
||||
Create: "Vytvořit",
|
||||
Edit: "Upravit",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "Model",
|
||||
Messages: "Zprávy",
|
||||
Topic: "Téma",
|
||||
Time: "Čas",
|
||||
},
|
||||
};
|
||||
|
||||
export default cs;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const de: LocaleType = {
|
||||
const de: PartialLocaleType = {
|
||||
WIP: "In Bearbeitung...",
|
||||
Error: {
|
||||
Unauthorized:
|
||||
@@ -158,6 +158,11 @@ const de: LocaleType = {
|
||||
SubTitle:
|
||||
"Ein größerer Wert erhöht die Wahrscheinlichkeit, dass über neue Themen gesprochen wird",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "Frequency Penalty", // HäufigkeitStrafe
|
||||
SubTitle:
|
||||
"Ein größerer Wert, der die Wahrscheinlichkeit verringert, dass dieselbe Zeile wiederholt wird",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "Neues Gespräch",
|
||||
@@ -231,6 +236,12 @@ const de: LocaleType = {
|
||||
Create: "Create",
|
||||
Edit: "Edit",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "Modell",
|
||||
Messages: "Nachrichten",
|
||||
Topic: "Thema",
|
||||
Time: "Zeit",
|
||||
},
|
||||
};
|
||||
|
||||
export default de;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import { RequiredLocaleType } from "./index";
|
||||
import { LocaleType } from "./index";
|
||||
|
||||
const en: RequiredLocaleType = {
|
||||
const en: LocaleType = {
|
||||
WIP: "Coming Soon...",
|
||||
Error: {
|
||||
Unauthorized:
|
||||
@@ -28,6 +28,19 @@ const en: RequiredLocaleType = {
|
||||
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) => {
|
||||
@@ -103,6 +116,12 @@ const en: RequiredLocaleType = {
|
||||
Title: "Font Size",
|
||||
SubTitle: "Adjust font size of chat content",
|
||||
},
|
||||
|
||||
InputTemplate: {
|
||||
Title: "Input Template",
|
||||
SubTitle: "Newest message will be filled to this template",
|
||||
},
|
||||
|
||||
Update: {
|
||||
Version: (x: string) => `Version: ${x}`,
|
||||
IsLatest: "Latest version",
|
||||
@@ -168,6 +187,10 @@ const en: RequiredLocaleType = {
|
||||
SubTitle: "Access control enabled",
|
||||
Placeholder: "Need Access Code",
|
||||
},
|
||||
Endpoint: {
|
||||
Title: "Endpoint",
|
||||
SubTitle: "Custom endpoint must start with http(s)://",
|
||||
},
|
||||
Model: "Model",
|
||||
Temperature: {
|
||||
Title: "Temperature",
|
||||
@@ -182,6 +205,11 @@ const en: RequiredLocaleType = {
|
||||
SubTitle:
|
||||
"A larger value increases the likelihood to talk about new topics",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "Frequency Penalty",
|
||||
SubTitle:
|
||||
"A larger value decreasing the likelihood to repeat the same line",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "New Conversation",
|
||||
@@ -263,6 +291,12 @@ const en: RequiredLocaleType = {
|
||||
Create: "Create",
|
||||
Edit: "Edit",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "Model",
|
||||
Messages: "Messages",
|
||||
Topic: "Topic",
|
||||
Time: "Time",
|
||||
},
|
||||
};
|
||||
|
||||
export default en;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const es: LocaleType = {
|
||||
const es: PartialLocaleType = {
|
||||
WIP: "En construcción...",
|
||||
Error: {
|
||||
Unauthorized:
|
||||
@@ -156,6 +156,11 @@ const es: LocaleType = {
|
||||
SubTitle:
|
||||
"Un valor mayor aumenta la probabilidad de hablar sobre nuevos temas",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "Penalización de frecuencia",
|
||||
SubTitle:
|
||||
"Un valor mayor que disminuye la probabilidad de repetir la misma línea",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "Nueva conversación",
|
||||
@@ -228,6 +233,12 @@ const es: LocaleType = {
|
||||
Create: "Create",
|
||||
Edit: "Edit",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "Modelo",
|
||||
Messages: "Mensajes",
|
||||
Topic: "Tema",
|
||||
Time: "Time",
|
||||
},
|
||||
};
|
||||
|
||||
export default es;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const fr: LocaleType = {
|
||||
const fr: PartialLocaleType = {
|
||||
WIP: "Prochainement...",
|
||||
Error: {
|
||||
Unauthorized:
|
||||
@@ -159,6 +159,11 @@ const fr: LocaleType = {
|
||||
SubTitle:
|
||||
"Une valeur plus élevée augmentera la probabilité d'introduire de nouveaux sujets",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "Pénalité de fréquence",
|
||||
SubTitle:
|
||||
"Une valeur plus élevée diminuant la probabilité de répéter la même ligne",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "Nouvelle conversation",
|
||||
@@ -232,6 +237,12 @@ const fr: LocaleType = {
|
||||
Create: "Créer",
|
||||
Edit: "Éditer",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "Modèle",
|
||||
Messages: "Messages",
|
||||
Topic: "Sujet",
|
||||
Time: "Temps",
|
||||
},
|
||||
};
|
||||
|
||||
export default fr;
|
||||
|
||||
@@ -1,56 +1,71 @@
|
||||
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";
|
||||
import JP from "./jp";
|
||||
import DE from "./de";
|
||||
import VI from "./vi";
|
||||
import RU from "./ru";
|
||||
import CS from "./cs";
|
||||
import KO from "./ko";
|
||||
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";
|
||||
import jp from "./jp";
|
||||
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, RequiredLocaleType } from "./cn";
|
||||
import type { LocaleType } from "./cn";
|
||||
export type { LocaleType, PartialLocaleType } from "./cn";
|
||||
|
||||
export const AllLangs = [
|
||||
"en",
|
||||
"cn",
|
||||
"tw",
|
||||
"fr",
|
||||
"es",
|
||||
"it",
|
||||
"tr",
|
||||
"jp",
|
||||
"de",
|
||||
"vi",
|
||||
"ru",
|
||||
"cs",
|
||||
"ko",
|
||||
] as const;
|
||||
export type Lang = (typeof AllLangs)[number];
|
||||
const ALL_LANGS = {
|
||||
cn,
|
||||
en,
|
||||
tw,
|
||||
jp,
|
||||
ko,
|
||||
fr,
|
||||
es,
|
||||
it,
|
||||
tr,
|
||||
de,
|
||||
vi,
|
||||
ru,
|
||||
cs,
|
||||
no,
|
||||
};
|
||||
|
||||
export type Lang = keyof typeof ALL_LANGS;
|
||||
|
||||
export const AllLangs = Object.keys(ALL_LANGS) as Lang[];
|
||||
|
||||
export const ALL_LANG_OPTIONS: Record<Lang, string> = {
|
||||
cn: "简体中文",
|
||||
en: "English",
|
||||
tw: "繁體中文",
|
||||
jp: "日本語",
|
||||
ko: "한국어",
|
||||
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: "한국어",
|
||||
no: "Nynorsk",
|
||||
};
|
||||
|
||||
const LANG_KEY = "lang";
|
||||
const DEFAULT_LANG = "en";
|
||||
|
||||
const fallbackLang = en;
|
||||
const targetLang = ALL_LANGS[getLang()] as LocaleType;
|
||||
|
||||
// if target lang missing some fields, it will use fallback lang string
|
||||
merge(fallbackLang, targetLang);
|
||||
|
||||
export default fallbackLang as LocaleType;
|
||||
|
||||
function getItem(key: string) {
|
||||
try {
|
||||
return localStorage.getItem(key);
|
||||
@@ -69,7 +84,6 @@ function getLanguage() {
|
||||
try {
|
||||
return navigator.language.toLowerCase();
|
||||
} catch {
|
||||
console.log("[Lang] failed to detect user lang.");
|
||||
return DEFAULT_LANG;
|
||||
}
|
||||
}
|
||||
@@ -96,25 +110,3 @@ export function changeLang(lang: Lang) {
|
||||
setItem(LANG_KEY, lang);
|
||||
location.reload();
|
||||
}
|
||||
|
||||
const fallbackLang = EN;
|
||||
const targetLang = {
|
||||
en: EN,
|
||||
cn: CN,
|
||||
tw: TW,
|
||||
fr: FR,
|
||||
es: ES,
|
||||
it: IT,
|
||||
tr: TR,
|
||||
jp: JP,
|
||||
de: DE,
|
||||
vi: VI,
|
||||
ru: RU,
|
||||
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;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const it: LocaleType = {
|
||||
const it: PartialLocaleType = {
|
||||
WIP: "Work in progress...",
|
||||
Error: {
|
||||
Unauthorized:
|
||||
@@ -157,6 +157,11 @@ const it: LocaleType = {
|
||||
SubTitle:
|
||||
"Un valore maggiore aumenta la probabilità di parlare di nuovi argomenti",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "Penalità di frequenza",
|
||||
SubTitle:
|
||||
"Un valore maggiore che diminuisce la probabilità di ripetere la stessa riga",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "Nuova conversazione",
|
||||
@@ -229,6 +234,12 @@ const it: LocaleType = {
|
||||
Create: "Create",
|
||||
Edit: "Edit",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "Modello",
|
||||
Messages: "Messaggi",
|
||||
Topic: "Argomento",
|
||||
Time: "Tempo",
|
||||
},
|
||||
};
|
||||
|
||||
export default it;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const jp: LocaleType = {
|
||||
WIP: "この機能は開発中です……",
|
||||
const jp: PartialLocaleType = {
|
||||
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,7 +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: "所有语言",
|
||||
All: "全ての言語",
|
||||
},
|
||||
Avatar: "アバター",
|
||||
FontSize: {
|
||||
@@ -91,11 +91,11 @@ const jp: LocaleType = {
|
||||
TightBorder: "ボーダーレスモード",
|
||||
SendPreviewBubble: {
|
||||
Title: "プレビューバブルの送信",
|
||||
SubTitle: "在预览气泡中预览 Markdown 内容",
|
||||
SubTitle: "プレビューバブルでマークダウンコンテンツをプレビュー",
|
||||
},
|
||||
Mask: {
|
||||
Title: "面具启动页",
|
||||
SubTitle: "新建聊天时,展示面具启动页",
|
||||
Title: "キャラクターページ",
|
||||
SubTitle: "新規チャット作成時にキャラクターページを表示する",
|
||||
},
|
||||
Prompt: {
|
||||
Disable: {
|
||||
@@ -113,7 +113,7 @@ const jp: LocaleType = {
|
||||
Search: "プロンプトワード検索",
|
||||
},
|
||||
EditModal: {
|
||||
Title: "编辑提示词",
|
||||
Title: "編集",
|
||||
},
|
||||
},
|
||||
HistoryCount: {
|
||||
@@ -158,6 +158,10 @@ const jp: LocaleType = {
|
||||
Title: "トピックの新鮮度 (presence_penalty)",
|
||||
SubTitle: "値が大きいほど、新しいトピックへの展開が可能になります。",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "話題の頻度 (frequency_penalty)",
|
||||
SubTitle: "値が大きいほど、重複語を低減する可能性が高くなります",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "新しいチャット",
|
||||
@@ -178,54 +182,70 @@ 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: "編集",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "モデル",
|
||||
Messages: "メッセージ",
|
||||
Topic: "トピック",
|
||||
Time: "時間",
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const ko: LocaleType = {
|
||||
const ko: PartialLocaleType = {
|
||||
WIP: "곧 출시 예정...",
|
||||
Error: {
|
||||
Unauthorized: "권한이 없습니다. 설정 페이지에서 액세스 코드를 입력하세요.",
|
||||
@@ -154,6 +154,10 @@ const ko: LocaleType = {
|
||||
Title: "존재 페널티 (presence_penalty)",
|
||||
SubTitle: "값이 클수록 새로운 주제에 대해 대화할 가능성이 높아집니다.",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "빈도 페널티(frequency penalty)",
|
||||
SubTitle: "값이 클수록 같은 줄이 반복될 가능성이 줄어듭니다.",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "새 대화",
|
||||
@@ -225,6 +229,12 @@ const ko: LocaleType = {
|
||||
Create: "생성",
|
||||
Edit: "편집",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "모델",
|
||||
Messages: "메시지",
|
||||
Topic: "주제",
|
||||
Time: "시간",
|
||||
},
|
||||
};
|
||||
|
||||
export default ko;
|
||||
|
||||
168
app/locales/no.ts
Normal file
168
app/locales/no.ts
Normal file
@@ -0,0 +1,168 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const no: PartialLocaleType = {
|
||||
WIP: "Arbeid pågår ...",
|
||||
Error: {
|
||||
Unauthorized: "Du har ikke tilgang. Vennlig oppgi tildelt adgangskode.",
|
||||
},
|
||||
ChatItem: {
|
||||
ChatItemCount: (count: number) => `${count} meldinger`,
|
||||
},
|
||||
Chat: {
|
||||
SubTitle: (count: number) => `${count} meldinger med ChatGPT`,
|
||||
Actions: {
|
||||
ChatList: "Gå til chatlisten",
|
||||
CompressedHistory: "Komprimert historikk for instrukser",
|
||||
Export: "Eksporter alle meldinger i markdown-format",
|
||||
Copy: "Kopier",
|
||||
Stop: "Stopp",
|
||||
Retry: "Prøv igjen",
|
||||
Delete: "Slett",
|
||||
},
|
||||
Rename: "Gi nytt navn",
|
||||
Typing: "Skriver …",
|
||||
Input: (submitKey: string) => {
|
||||
var inputHints = `${submitKey} for å sende`;
|
||||
if (submitKey === String(SubmitKey.Enter)) {
|
||||
inputHints += ", Shift + Enter for å omgi";
|
||||
}
|
||||
return inputHints + ", / for å søke instrukser";
|
||||
},
|
||||
Send: "Send",
|
||||
},
|
||||
Export: {
|
||||
Title: "Alle meldinger",
|
||||
Copy: "Kopiere alle",
|
||||
Download: "Last ned",
|
||||
MessageFromYou: "Melding fra deg",
|
||||
MessageFromChatGPT: "Melding fra ChatGPT",
|
||||
},
|
||||
Memory: {
|
||||
Title: "Minneinstruks",
|
||||
EmptyContent: "Ingen sålant.",
|
||||
Send: "Send minne",
|
||||
Copy: "Kopiere minne",
|
||||
Reset: "Nulstill sesjon",
|
||||
ResetConfirm:
|
||||
"Om du nillstiller vil du slette hele historikken. Er du sikker på at du vil nullstille?",
|
||||
},
|
||||
Home: {
|
||||
NewChat: "Ny chat",
|
||||
DeleteChat: "Bekreft for å slette det valgte dialogen",
|
||||
DeleteToast: "Samtale slettet",
|
||||
Revert: "Tilbakestill",
|
||||
},
|
||||
Settings: {
|
||||
Title: "Innstillinger",
|
||||
SubTitle: "Alle innstillinger",
|
||||
Actions: {
|
||||
ClearAll: "Fjern alle data",
|
||||
ResetAll: "Nullstill innstillinger",
|
||||
Close: "Lukk",
|
||||
},
|
||||
Lang: {
|
||||
Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
|
||||
},
|
||||
Avatar: "Avatar",
|
||||
FontSize: {
|
||||
Title: "Fontstørrelsen",
|
||||
SubTitle: "Juster fontstørrelsen for samtaleinnholdet.",
|
||||
},
|
||||
Update: {
|
||||
Version: (x: string) => `Versjon: ${x}`,
|
||||
IsLatest: "Siste versjon",
|
||||
CheckUpdate: "Se etter oppdatering",
|
||||
IsChecking: "Ser etter oppdatering ...",
|
||||
FoundUpdate: (x: string) => `Fant ny versjon: ${x}`,
|
||||
GoToUpdate: "Oppdater",
|
||||
},
|
||||
SendKey: "Send nøkkel",
|
||||
Theme: "Tema",
|
||||
TightBorder: "Stram innramming",
|
||||
Prompt: {
|
||||
Disable: {
|
||||
Title: "Skru av autofullfør",
|
||||
SubTitle: "Skriv / for å trigge autofullfør",
|
||||
},
|
||||
List: "Instruksliste",
|
||||
ListCount: (builtin: number, custom: number) =>
|
||||
`${builtin} innebygde, ${custom} brukerdefinerte`,
|
||||
Edit: "Endre",
|
||||
Modal: {
|
||||
Title: "Instruksliste",
|
||||
Add: "Legg til",
|
||||
Search: "Søk instrukser",
|
||||
},
|
||||
},
|
||||
HistoryCount: {
|
||||
Title: "Tall på tilhørende meldinger",
|
||||
SubTitle: "Antall sendte meldinger tilknyttet hver spørring",
|
||||
},
|
||||
CompressThreshold: {
|
||||
Title: "Terskeverdi for komprimering av historikk",
|
||||
SubTitle:
|
||||
"Komprimer dersom ikke-komprimert lengde på meldinger overskrider denne verdien",
|
||||
},
|
||||
Token: {
|
||||
Title: "API Key",
|
||||
SubTitle:
|
||||
"Bruk din egen API-nøkkel for å ignorere tilgangskoden begrensning",
|
||||
Placeholder: "OpenAI API-nøkkel",
|
||||
},
|
||||
Usage: {
|
||||
Title: "Saldo for konto",
|
||||
SubTitle(used: any, total: any) {
|
||||
return `Brukt denne måneden $${used}, abonnement $${total}`;
|
||||
},
|
||||
IsChecking: "Sjekker ...",
|
||||
Check: "Sjekk",
|
||||
NoAccess: "Skriv inn API-nøkkelen for å sjekke saldo",
|
||||
},
|
||||
AccessCode: {
|
||||
Title: "Tilgangskode",
|
||||
SubTitle: "Tilgangskontroll på",
|
||||
Placeholder: "Trenger tilgangskode",
|
||||
},
|
||||
Model: "Model",
|
||||
Temperature: {
|
||||
Title: "Temperatur",
|
||||
SubTitle: "Høyere verdi gir mer kreative svar",
|
||||
},
|
||||
MaxTokens: {
|
||||
Title: "Maks tokens",
|
||||
SubTitle: "Maksimum lengde på tokens for instrukser og svar",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "Ny samtale",
|
||||
BotHello: "Hei! Hva kan jeg hjelpe deg med i dag?",
|
||||
Error: "Noe gikk galt, vennligst prøv igjen senere.",
|
||||
Prompt: {
|
||||
History: (content: string) =>
|
||||
"Dette er et sammendrag av chatthistorikken mellom AI-en og brukeren som en oppsummering: " +
|
||||
content,
|
||||
Topic:
|
||||
"Vennligst lag en fire til fem ords tittel som oppsummerer samtalen vår uten innledning, punktsetting, anførselstegn, punktum, symboler eller tillegg tekst. Fjern innrammende anførselstegn.",
|
||||
Summarize:
|
||||
"Oppsummer diskusjonen vår kort i 200 ord eller mindre for å bruke som en oppfordring til fremtidig sammenheng.",
|
||||
},
|
||||
},
|
||||
Copy: {
|
||||
Success: "Kopiert til utklippstavle",
|
||||
Failed: "Kopiering feilet. Vennligst gi tilgang til utklippstavlen.",
|
||||
},
|
||||
Context: {
|
||||
Toast: (x: any) => `Med ${x} kontekstuelle instrukser`,
|
||||
Edit: "Kontekstuelle -og minneinstrukser",
|
||||
Add: "Legg til",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "Model",
|
||||
Messages: "Meldingar",
|
||||
Topic: "Emne",
|
||||
Time: "Tid",
|
||||
},
|
||||
};
|
||||
|
||||
export default no;
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const ru: LocaleType = {
|
||||
const ru: PartialLocaleType = {
|
||||
WIP: "Скоро...",
|
||||
Error: {
|
||||
Unauthorized:
|
||||
@@ -157,6 +157,11 @@ const ru: LocaleType = {
|
||||
SubTitle:
|
||||
"Чем выше значение, тем больше вероятность общения на новые темы",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "Штраф за частоту",
|
||||
SubTitle:
|
||||
"Большее значение снижает вероятность повторения одной и той же строки",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "Новый разговор",
|
||||
@@ -232,6 +237,12 @@ const ru: LocaleType = {
|
||||
Create: "Создать",
|
||||
Edit: "Редактировать",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "Модель",
|
||||
Messages: "Сообщения",
|
||||
Topic: "Тема",
|
||||
Time: "Время",
|
||||
},
|
||||
};
|
||||
|
||||
export default ru;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const tr: LocaleType = {
|
||||
const tr: PartialLocaleType = {
|
||||
WIP: "Çalışma devam ediyor...",
|
||||
Error: {
|
||||
Unauthorized:
|
||||
@@ -158,6 +158,11 @@ const tr: LocaleType = {
|
||||
SubTitle:
|
||||
"Daha büyük bir değer, yeni konular hakkında konuşma olasılığını artırır",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "Frekans Cezası",
|
||||
SubTitle:
|
||||
"Aynı satırı tekrar etme olasılığını azaltan daha büyük bir değer",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "Yeni Konuşma",
|
||||
@@ -229,6 +234,12 @@ const tr: LocaleType = {
|
||||
Create: "Create",
|
||||
Edit: "Edit",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "Model",
|
||||
Messages: "Mesajlar",
|
||||
Topic: "Konu",
|
||||
Time: "Zaman",
|
||||
},
|
||||
};
|
||||
|
||||
export default tr;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const tw: LocaleType = {
|
||||
const tw: PartialLocaleType = {
|
||||
WIP: "該功能仍在開發中……",
|
||||
Error: {
|
||||
Unauthorized: "目前您的狀態是未授權,請前往設定頁面輸入授權碼。",
|
||||
@@ -152,6 +152,10 @@ const tw: LocaleType = {
|
||||
Title: "話題新穎度 (presence_penalty)",
|
||||
SubTitle: "值越大,越有可能擴展到新話題",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "頻率懲罰度 (frequency_penalty)",
|
||||
SubTitle: "值越大,越有可能降低重複字詞",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "新的對話",
|
||||
@@ -219,6 +223,12 @@ const tw: LocaleType = {
|
||||
Create: "新建",
|
||||
Edit: "编辑",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "模型",
|
||||
Messages: "消息",
|
||||
Topic: "主題",
|
||||
Time: "時間",
|
||||
},
|
||||
};
|
||||
|
||||
export default tw;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { SubmitKey } from "../store/config";
|
||||
import type { LocaleType } from "./index";
|
||||
import type { PartialLocaleType } from "./index";
|
||||
|
||||
const vi: LocaleType = {
|
||||
const vi: PartialLocaleType = {
|
||||
WIP: "Sắp ra mắt...",
|
||||
Error: {
|
||||
Unauthorized:
|
||||
@@ -154,6 +154,10 @@ const vi: LocaleType = {
|
||||
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",
|
||||
},
|
||||
FrequencyPenalty: {
|
||||
Title: "Hình phạt tần suất",
|
||||
SubTitle: "Giá trị lớn hơn làm giảm khả năng lặp lại cùng một dòng",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "Cuộc trò chuyện mới",
|
||||
@@ -225,6 +229,12 @@ const vi: LocaleType = {
|
||||
Create: "Tạo",
|
||||
Edit: "Chỉnh sửa",
|
||||
},
|
||||
Exporter: {
|
||||
Model: "Mô hình",
|
||||
Messages: "Thông điệp",
|
||||
Topic: "Chủ đề",
|
||||
Time: "Thời gian",
|
||||
},
|
||||
};
|
||||
|
||||
export default vi;
|
||||
|
||||
Reference in New Issue
Block a user