From 8dc24403d8892d5b0f84c31b57405c1a93bba1c1 Mon Sep 17 00:00:00 2001 From: river Date: Wed, 18 Sep 2024 22:05:51 +0800 Subject: [PATCH 01/49] chore: Update Chinese translation for API key placeholder --- app/locales/cn.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 0017e8e4243..2dee1351566 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -360,7 +360,7 @@ const cn = { ApiKey: { Title: "API 密钥", SubTitle: "从 Google AI 获取您的 API 密钥", - Placeholder: "输入您的 Google AI Studio API 密钥", + Placeholder: "Google AI API KEY", }, Endpoint: { From 2f0d94a46b6fbee2621bed9c1ba0670490b470d5 Mon Sep 17 00:00:00 2001 From: river Date: Thu, 19 Sep 2024 00:05:06 +0800 Subject: [PATCH 02/49] chore: add auth tip --- app/components/auth.module.scss | 4 ++++ app/components/auth.tsx | 10 +++++----- app/constant.ts | 2 ++ app/locales/cn.ts | 1 + 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/components/auth.module.scss b/app/components/auth.module.scss index 6630c0613c7..c9c66f1a562 100644 --- a/app/components/auth.module.scss +++ b/app/components/auth.module.scss @@ -24,6 +24,10 @@ margin: 3vh 0; } + .auth-input-second { + margin: 0 0 3vh 0; + } + .auth-actions { display: flex; justify-content: center; diff --git a/app/components/auth.tsx b/app/components/auth.tsx index 57118349bac..9d10ae475e6 100644 --- a/app/components/auth.tsx +++ b/app/components/auth.tsx @@ -2,7 +2,7 @@ import styles from "./auth.module.scss"; import { IconButton } from "./button"; import { useNavigate } from "react-router-dom"; -import { Path } from "../constant"; +import { Path, SAAS_CHAT_URL } from "../constant"; import { useAccessStore } from "../store"; import Locale from "../locales"; @@ -16,6 +16,7 @@ export function AuthPage() { const goHome = () => navigate(Path.Home); const goChat = () => navigate(Path.Chat); + const goSaas = () => window.open(SAAS_CHAT_URL); const resetAccessCode = () => { accessStore.update((access) => { access.openaiApiKey = ""; @@ -65,7 +66,7 @@ export function AuthPage() { }} /> { - resetAccessCode(); - goHome(); + goSaas(); }} /> diff --git a/app/constant.ts b/app/constant.ts index acb744cad48..d97f3b209b6 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -501,3 +501,5 @@ export const PLUGINS = [ { name: "Stable Diffusion", path: Path.Sd }, { name: "Search Chat", path: Path.SearchChat }, ]; + +export const SAAS_CHAT_URL = "https://nextchat.dev/chat"; diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 2dee1351566..8bf2cf3a375 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -17,6 +17,7 @@ const cn = { Input: "在此处填写访问码", Confirm: "确认", Later: "稍后再说", + SaasTips: "配置太麻烦,想要立即使用", }, ChatItem: { ChatItemCount: (count: number) => `${count} 条对话`, From e4fda6cacfbaf863dcd54dcbabcb0d93088019f7 Mon Sep 17 00:00:00 2001 From: river Date: Thu, 19 Sep 2024 08:41:09 +0800 Subject: [PATCH 03/49] feat: add auth tip --- app/components/auth.module.scss | 13 ++++++++++++- app/components/auth.tsx | 12 +++++++++++- app/constant.ts | 2 +- app/locales/cn.ts | 3 ++- app/locales/en.ts | 2 ++ 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/app/components/auth.module.scss b/app/components/auth.module.scss index c9c66f1a562..02c1f4292a7 100644 --- a/app/components/auth.module.scss +++ b/app/components/auth.module.scss @@ -1,12 +1,22 @@ .auth-page { display: flex; - justify-content: center; + justify-content: flex-start; align-items: center; height: 100%; width: 100%; flex-direction: column; + .auth-header { + display: flex; + justify-content: space-between; + width: 100%; + padding: 10px; + box-sizing: border-box; + animation: slide-in-from-top ease 0.3s; + } + .auth-logo { + margin-top: 10vh; transform: scale(1.4); } @@ -14,6 +24,7 @@ font-size: 24px; font-weight: bold; line-height: 2; + margin-bottom: 1vh; } .auth-tips { diff --git a/app/components/auth.tsx b/app/components/auth.tsx index 9d10ae475e6..c044fb0ac4d 100644 --- a/app/components/auth.tsx +++ b/app/components/auth.tsx @@ -9,6 +9,7 @@ import Locale from "../locales"; import BotIcon from "../icons/bot.svg"; import { useEffect } from "react"; import { getClientConfig } from "../config/client"; +import LeftIcon from "@/app/icons/left.svg"; export function AuthPage() { const navigate = useNavigate(); @@ -16,7 +17,9 @@ export function AuthPage() { const goHome = () => navigate(Path.Home); const goChat = () => navigate(Path.Chat); - const goSaas = () => window.open(SAAS_CHAT_URL); + const goSaas = () => { + window.location.href = SAAS_CHAT_URL; + }; const resetAccessCode = () => { accessStore.update((access) => { access.openaiApiKey = ""; @@ -33,6 +36,13 @@ export function AuthPage() { return (
+
+ } + text={Locale.Auth.Return} + onClick={() => navigate(Path.Home)} + > +
diff --git a/app/constant.ts b/app/constant.ts index d97f3b209b6..1ba3f94c23e 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -502,4 +502,4 @@ export const PLUGINS = [ { name: "Search Chat", path: Path.SearchChat }, ]; -export const SAAS_CHAT_URL = "https://nextchat.dev/chat"; +export const SAAS_CHAT_URL = "https://nextchat.dev"; diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 8bf2cf3a375..ae45cbf801b 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -11,9 +11,10 @@ const cn = { : "访问密码不正确或为空,请前往[登录](/#/auth)页输入正确的访问密码,或者在[设置](/#/settings)页填入你自己的 OpenAI API Key。", }, Auth: { + Return: "返回", Title: "需要密码", Tips: "管理员开启了密码验证,请在下方填入访问码", - SubTips: "或者输入你的 OpenAI 或 Google API 密钥", + SubTips: "或者输入你的 OpenAI 或 Google AI 密钥", Input: "在此处填写访问码", Confirm: "确认", Later: "稍后再说", diff --git a/app/locales/en.ts b/app/locales/en.ts index 63e244b9a81..ba94f5825b1 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -13,12 +13,14 @@ const en: LocaleType = { : "Unauthorized access, please enter access code in [auth](/#/auth) page, or enter your OpenAI API Key.", }, Auth: { + Return: "Return", Title: "Need Access Code", Tips: "Please enter access code below", SubTips: "Or enter your OpenAI or Google API Key", Input: "access code", Confirm: "Confirm", Later: "Later", + SaasTips: "Too Complex, Use Immediately Now", }, ChatItem: { ChatItemCount: (count: number) => `${count} messages`, From 065f015f7b87b65f522c913f95958c4f3392b97d Mon Sep 17 00:00:00 2001 From: river Date: Thu, 19 Sep 2024 09:53:00 +0800 Subject: [PATCH 04/49] feat: add error tip --- app/locales/cn.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/locales/cn.ts b/app/locales/cn.ts index ae45cbf801b..2c3eb7c27d2 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -1,5 +1,6 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; @@ -7,8 +8,14 @@ const cn = { WIP: "该功能仍在开发中……", Error: { Unauthorized: isApp - ? "检测到无效 API Key,请前往[设置](/#/settings)页检查 API Key 是否配置正确。" - : "访问密码不正确或为空,请前往[登录](/#/auth)页输入正确的访问密码,或者在[设置](/#/settings)页填入你自己的 OpenAI API Key。", + ? `😆 对话遇到了一些问题,不用慌,立刻带你排查: + \\ 1️⃣ 如果你是小白,想要开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️` + : `😆 对话遇到了一些问题,不用慌,立刻带你排查: + \ 1️⃣ 如果你是小白,想要开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ 如果你在使用私有部署的版本,点击[这里](/#/auth)输入访问秘钥 🔑 + \ 3️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️ + `, }, Auth: { Return: "返回", From 775794e0e4d770ff745f342744dd5d85e2bd2e25 Mon Sep 17 00:00:00 2001 From: river Date: Thu, 19 Sep 2024 12:38:46 +0800 Subject: [PATCH 05/49] chore: add setting --- app/components/settings.tsx | 25 +++++++++++++++++++++++++ app/icons/fire.svg | 1 + app/locales/cn.ts | 15 +++++++++++---- app/locales/en.ts | 21 +++++++++++++++++---- 4 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 app/icons/fire.svg diff --git a/app/components/settings.tsx b/app/components/settings.tsx index 33bf8b2e74e..8fbeb66054c 100644 --- a/app/components/settings.tsx +++ b/app/components/settings.tsx @@ -9,6 +9,7 @@ import CopyIcon from "../icons/copy.svg"; import ClearIcon from "../icons/clear.svg"; import LoadingIcon from "../icons/three-dots.svg"; import EditIcon from "../icons/edit.svg"; +import FireIcon from "../icons/fire.svg"; import EyeIcon from "../icons/eye.svg"; import DownloadIcon from "../icons/download.svg"; import UploadIcon from "../icons/upload.svg"; @@ -69,6 +70,7 @@ import { UPDATE_URL, Stability, Iflytek, + SAAS_CHAT_URL, } from "../constant"; import { Prompt, SearchService, usePromptStore } from "../store/prompt"; import { ErrorBoundary } from "./error"; @@ -686,6 +688,28 @@ export function Settings() { ); + const saasStartComponent = ( + + } + text={Locale.Settings.Access.SaasStart.ChatNow} + onClick={() => { + window.location.href = SAAS_CHAT_URL; + }} + /> + + ); + const useCustomConfigComponent = // Conditionally render the following ListItem based on clientConfig.isApp !clientConfig?.isApp && ( // only show if isApp is false + {saasStartComponent} {accessCodeComponent} {!accessStore.hideUserApiKey && ( diff --git a/app/icons/fire.svg b/app/icons/fire.svg new file mode 100644 index 00000000000..446d532aaca --- /dev/null +++ b/app/icons/fire.svg @@ -0,0 +1 @@ + diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 2c3eb7c27d2..001ee1d8fc7 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -8,12 +8,12 @@ const cn = { WIP: "该功能仍在开发中……", Error: { Unauthorized: isApp - ? `😆 对话遇到了一些问题,不用慌,立刻带你排查: - \\ 1️⃣ 如果你是小白,想要开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) + ? `😆 对话遇到了一些问题,不用慌: + \\ 1️⃣ 如果你是小白,想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) \\ 2️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️` : `😆 对话遇到了一些问题,不用慌,立刻带你排查: - \ 1️⃣ 如果你是小白,想要开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) - \ 2️⃣ 如果你在使用私有部署的版本,点击[这里](/#/auth)输入访问秘钥 🔑 + \ 1️⃣ 如果你是小白,想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ 如果你正在使用私有部署版本,点击[这里](/#/auth)输入访问秘钥 🔑 \ 3️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️ `, }, @@ -306,6 +306,13 @@ const cn = { }, Access: { + SaasStart: { + Title: "使用 NextChat AI", + Label: "(性价比最高的方案)", + SubTitle: + "由 NextChat 官方维护, 零配置开箱即用,支持最新 GPT-4o、Gemini、Claude3 等最新大模型", + ChatNow: "立刻对话", + }, AccessCode: { Title: "访问密码", SubTitle: "管理员已开启加密访问", diff --git a/app/locales/en.ts b/app/locales/en.ts index ba94f5825b1..610a5bc09e4 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -1,7 +1,7 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; import { LocaleType } from "./index"; - +import { SAAS_CHAT_URL } from "@/app/constant"; // if you are adding a new translation, please use PartialLocaleType instead of LocaleType const isApp = !!getClientConfig()?.isApp; @@ -9,8 +9,14 @@ const en: LocaleType = { WIP: "Coming Soon...", Error: { Unauthorized: isApp - ? "Invalid API Key, please check it in [Settings](/#/settings) page." - : "Unauthorized access, please enter access code in [auth](/#/auth) page, or enter your OpenAI API Key.", + ? `😆 Oops, there's an issue. No worries: + \\ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Want to use your own OpenAI resources? [Click here](/#/settings) to change settings ⚙️` + : `😆 Oops, there's an issue. Let's fix it: + \ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Using a private setup? [Click here](/#/auth) to enter your key 🔑 + \ 3️⃣ Want to use your own OpenAI resources? [Click here](/#/settings) to change settings ⚙️ + `, }, Auth: { Return: "Return", @@ -303,6 +309,13 @@ const en: LocaleType = { NoAccess: "Enter API Key to check balance", }, Access: { + SaasStart: { + Title: "Use NextChat AI", + Label: " (Most Cost-Effective Option)", + SubTitle: + "Maintained by NextChat, zero setup needed, supports the latest models like GPT-4o, Gemini, Claude3, and more.", + ChatNow: "Start Now", + }, AccessCode: { Title: "Access Code", SubTitle: "Access control Enabled", @@ -463,7 +476,7 @@ const en: LocaleType = { ApiKey: { Title: "API Key", SubTitle: "Obtain your API Key from Google AI", - Placeholder: "Enter your Google AI Studio API Key", + Placeholder: "Google AI API Key", }, Endpoint: { From f4f3c6ad5a1be5ac86e712fafea537ede4cb4aaa Mon Sep 17 00:00:00 2001 From: river Date: Thu, 19 Sep 2024 12:47:09 +0800 Subject: [PATCH 06/49] chore: change placeholder --- app/locales/cn.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 001ee1d8fc7..3ef634bee6f 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -11,7 +11,7 @@ const cn = { ? `😆 对话遇到了一些问题,不用慌: \\ 1️⃣ 如果你是小白,想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) \\ 2️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️` - : `😆 对话遇到了一些问题,不用慌,立刻带你排查: + : `😆 对话遇到了一些问题,不用慌: \ 1️⃣ 如果你是小白,想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) \ 2️⃣ 如果你正在使用私有部署版本,点击[这里](/#/auth)输入访问秘钥 🔑 \ 3️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️ From 23793e834d0751ddae8f6513ff101e9274cfd388 Mon Sep 17 00:00:00 2001 From: river Date: Thu, 19 Sep 2024 12:53:43 +0800 Subject: [PATCH 07/49] chore: change placeholder --- app/locales/cn.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 3ef634bee6f..d7a20696184 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -9,10 +9,10 @@ const cn = { Error: { Unauthorized: isApp ? `😆 对话遇到了一些问题,不用慌: - \\ 1️⃣ 如果你是小白,想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ 想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) \\ 2️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️` : `😆 对话遇到了一些问题,不用慌: - \ 1️⃣ 如果你是小白,想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ 想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) \ 2️⃣ 如果你正在使用私有部署版本,点击[这里](/#/auth)输入访问秘钥 🔑 \ 3️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️ `, From 7dc0f81d3ffe462d97cc1990a1b127dd554ee556 Mon Sep 17 00:00:00 2001 From: river Date: Thu, 19 Sep 2024 13:48:59 +0800 Subject: [PATCH 08/49] chore: change placeholder --- app/components/settings.tsx | 1 + app/locales/cn.ts | 2 +- app/locales/en.ts | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/components/settings.tsx b/app/components/settings.tsx index 8fbeb66054c..7f8d0cb7170 100644 --- a/app/components/settings.tsx +++ b/app/components/settings.tsx @@ -702,6 +702,7 @@ export function Settings() { Locale.Settings.Access.SaasStart.ChatNow } icon={} + type={"primary"} text={Locale.Settings.Access.SaasStart.ChatNow} onClick={() => { window.location.href = SAAS_CHAT_URL; diff --git a/app/locales/cn.ts b/app/locales/cn.ts index d7a20696184..772feac4763 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -310,7 +310,7 @@ const cn = { Title: "使用 NextChat AI", Label: "(性价比最高的方案)", SubTitle: - "由 NextChat 官方维护, 零配置开箱即用,支持最新 GPT-4o、Gemini、Claude3 等最新大模型", + "由 NextChat 官方维护, 零配置开箱即用,支持 OpenAI o1, GPT-4o, Claude-3.5 等最新大模型", ChatNow: "立刻对话", }, AccessCode: { diff --git a/app/locales/en.ts b/app/locales/en.ts index 610a5bc09e4..61d1fc42811 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -313,7 +313,8 @@ const en: LocaleType = { Title: "Use NextChat AI", Label: " (Most Cost-Effective Option)", SubTitle: - "Maintained by NextChat, zero setup needed, supports the latest models like GPT-4o, Gemini, Claude3, and more.", + "Maintained by NextChat, zero setup needed, unlock OpenAI o1, GPT-4o," + + " Claude-3.5 and more", ChatNow: "Start Now", }, AccessCode: { From 62efab987bbf1b2e06d969243fe92b4a70335c8a Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Thu, 19 Sep 2024 16:58:51 +0800 Subject: [PATCH 09/49] add fanyi add top tip --- app/components/auth.module.scss | 37 ++++++++++++++++++ app/components/auth.tsx | 66 +++++++++++++++++++++++++++++++-- app/icons/arrow.svg | 1 + app/icons/logo.svg | 19 ++++++++++ app/icons/www-delete.svg | 1 + app/locales/ar.ts | 23 ++++++++++-- app/locales/bn.ts | 24 ++++++++++-- app/locales/cn.ts | 2 + app/locales/cs.ts | 24 ++++++++++-- app/locales/de.ts | 25 +++++++++++-- app/locales/es.ts | 25 +++++++++++-- app/locales/fr.ts | 25 +++++++++++-- app/locales/id.ts | 24 ++++++++++-- app/locales/it.ts | 25 +++++++++++-- app/locales/jp.ts | 24 ++++++++++-- app/locales/ko.ts | 24 ++++++++++-- app/locales/no.ts | 25 +++++++++++-- app/locales/pt.ts | 24 ++++++++++-- app/locales/ru.ts | 24 ++++++++++-- app/locales/sk.ts | 24 ++++++++++-- app/locales/tr.ts | 24 ++++++++++-- app/locales/tw.ts | 24 ++++++++++-- app/locales/vi.ts | 24 ++++++++++-- 23 files changed, 484 insertions(+), 54 deletions(-) create mode 100644 app/icons/arrow.svg create mode 100644 app/icons/logo.svg create mode 100644 app/icons/www-delete.svg diff --git a/app/components/auth.module.scss b/app/components/auth.module.scss index 02c1f4292a7..c26320b7d1a 100644 --- a/app/components/auth.module.scss +++ b/app/components/auth.module.scss @@ -5,6 +5,43 @@ height: 100%; width: 100%; flex-direction: column; + .top-banner { + position: relative; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + + padding: 12px 64px; + box-sizing: border-box; + background: var(--second); + .top-banner-inner { + display: flex; + justify-content: center; + align-items: center; + font-size: 14px; + line-height: 150%; + span { + display: inline-flex; + align-items: center; + gap: 8px; + a { + display: inline-flex; + align-items: center; + text-decoration: none; + margin-left: 8px; + color: var(--primary); + } + } + } + .top-banner-close { + cursor: pointer; + position: absolute; + top: 50%; + right: 48px; + transform: translateY(-50%); + } + } .auth-header { display: flex; diff --git a/app/components/auth.tsx b/app/components/auth.tsx index c044fb0ac4d..8b6e2260787 100644 --- a/app/components/auth.tsx +++ b/app/components/auth.tsx @@ -1,13 +1,14 @@ import styles from "./auth.module.scss"; import { IconButton } from "./button"; - +import { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { Path, SAAS_CHAT_URL } from "../constant"; import { useAccessStore } from "../store"; import Locale from "../locales"; - +import Delete from "../icons/www-delete.svg"; +import Arrow from "../icons/arrow.svg"; +import Logo from "../icons/logo.svg"; import BotIcon from "../icons/bot.svg"; -import { useEffect } from "react"; import { getClientConfig } from "../config/client"; import LeftIcon from "@/app/icons/left.svg"; @@ -20,6 +21,7 @@ export function AuthPage() { const goSaas = () => { window.location.href = SAAS_CHAT_URL; }; + const resetAccessCode = () => { accessStore.update((access) => { access.openaiApiKey = ""; @@ -36,6 +38,7 @@ export function AuthPage() { return (
+
} @@ -105,3 +108,60 @@ export function AuthPage() {
); } + +function TopBanner() { + const [isHovered, setIsHovered] = useState(false); + const [isVisible, setIsVisible] = useState(true); + + useEffect(() => { + // 检查 localStorage 中是否有标记 + const bannerDismissed = localStorage.getItem("bannerDismissed"); + + // 如果标记不存在,存储默认值并显示横幅 + if (!bannerDismissed) { + localStorage.setItem("bannerDismissed", "false"); + setIsVisible(true); // 显示横幅 + } else if (bannerDismissed === "true") { + // 如果标记为 "true",则隐藏横幅 + setIsVisible(false); + } + }, []); + + const handleMouseEnter = () => { + setIsHovered(true); + }; + + const handleMouseLeave = () => { + setIsHovered(false); + }; + + const handleClose = () => { + setIsVisible(false); + localStorage.setItem("bannerDismissed", "true"); + }; + + if (!isVisible) { + return null; + } + return ( +
+
+ + + {Locale.Auth.TopTips} + + {Locale.Settings.Access.SaasStart.ChatNow} + + + +
+ {isHovered && ( + + )} +
+ ); +} diff --git a/app/icons/arrow.svg b/app/icons/arrow.svg new file mode 100644 index 00000000000..ddd69e61472 --- /dev/null +++ b/app/icons/arrow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/icons/logo.svg b/app/icons/logo.svg new file mode 100644 index 00000000000..8f3c1de08c0 --- /dev/null +++ b/app/icons/logo.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/icons/www-delete.svg b/app/icons/www-delete.svg new file mode 100644 index 00000000000..17952c3b3ba --- /dev/null +++ b/app/icons/www-delete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/locales/ar.ts b/app/locales/ar.ts index 464519e2055..0399d7f7c48 100644 --- a/app/locales/ar.ts +++ b/app/locales/ar.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const ar: PartialLocaleType = { WIP: "قريبًا...", Error: { Unauthorized: isApp - ? "تم اكتشاف مفتاح API غير صالح، يرجى الذهاب إلى [الإعدادات](/#/settings) للتحقق من صحة مفتاح API." - : "كلمة المرور غير صحيحة أو فارغة، يرجى الذهاب إلى [تسجيل الدخول](/#/auth) لإدخال كلمة مرور صحيحة، أو أدخل مفتاح OpenAI API الخاص بك في [الإعدادات](/#/settings).", + ? `😆 واجهت المحادثة بعض المشكلات، لا داعي للقلق: + \\ 1️⃣ إذا كنت ترغب في تجربة دون إعداد، [انقر هنا لبدء المحادثة فورًا 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ إذا كنت تريد استخدام موارد OpenAI الخاصة بك، انقر [هنا](/#/settings) لتعديل الإعدادات ⚙️` + : `😆 واجهت المحادثة بعض المشكلات، لا داعي للقلق: + \ 1️⃣ إذا كنت ترغب في تجربة دون إعداد، [انقر هنا لبدء المحادثة فورًا 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ إذا كنت تستخدم إصدار النشر الخاص، انقر [هنا](/#/auth) لإدخال مفتاح الوصول 🔑 + \ 3️⃣ إذا كنت تريد استخدام موارد OpenAI الخاصة بك، انقر [هنا](/#/settings) لتعديل الإعدادات ⚙️ + `, }, Auth: { Title: "تحتاج إلى كلمة مرور", @@ -18,6 +24,10 @@ const ar: PartialLocaleType = { Input: "أدخل رمز الوصول هنا", Confirm: "تأكيد", Later: "في وقت لاحق", + Return: "عودة", + SaasTips: "الإعدادات معقدة، أريد استخدامه على الفور", + TopTips: + "🥳 عرض NextChat AI الأول، افتح الآن OpenAI o1, GPT-4o, Claude-3.5 وأحدث النماذج الكبيرة", }, ChatItem: { ChatItemCount: (count: number) => `${count} محادثة`, @@ -281,6 +291,13 @@ const ar: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "استخدام NextChat AI", + Label: "(أفضل حل من حيث التكلفة)", + SubTitle: + "مدعوم رسميًا من NextChat، جاهز للاستخدام بدون إعداد، يدعم أحدث النماذج الكبيرة مثل OpenAI o1 و GPT-4o و Claude-3.5", + ChatNow: "الدردشة الآن", + }, AccessCode: { Title: "كلمة المرور للوصول", SubTitle: "قام المشرف بتمكين الوصول المشفر", diff --git a/app/locales/bn.ts b/app/locales/bn.ts index 945c442df57..78c0f76f007 100644 --- a/app/locales/bn.ts +++ b/app/locales/bn.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const bn: PartialLocaleType = { WIP: "শীঘ্রই আসছে...", Error: { Unauthorized: isApp - ? "অবৈধ API কী সনাক্ত করা হয়েছে, অনুগ্রহ করে [সেটিংস](/#/settings) পৃষ্ঠায় যান এবং নিশ্চিত করুন যে API কী সঠিকভাবে কনফিগার করা হয়েছে।" - : "অ্যাক্সেস পাসওয়ার্ড সঠিক নয় বা খালি, অনুগ্রহ করে [লগইন](/#/auth) পৃষ্ঠায় যান এবং সঠিক অ্যাক্সেস পাসওয়ার্ড প্রবেশ করান, অথবা [সেটিংস](/#/settings) পৃষ্ঠায় আপনার OpenAI API কী প্রবেশ করান।", + ? `😆 কথোপকথনে কিছু সমস্যা হয়েছে, চিন্তার কিছু নেই: + \\ 1️⃣ যদি আপনি শূন্য কনফিগারেশনে শুরু করতে চান, তাহলে [এখানে ক্লিক করে অবিলম্বে কথোপকথন শুরু করুন 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ যদি আপনি আপনার নিজস্ব OpenAI সম্পদ ব্যবহার করতে চান, তাহলে [এখানে ক্লিক করুন](/#/settings) সেটিংস পরিবর্তন করতে ⚙️` + : `😆 কথোপকথনে কিছু সমস্যা হয়েছে, চিন্তার কিছু নেই: + \ 1️⃣ যদি আপনি শূন্য কনফিগারেশনে শুরু করতে চান, তাহলে [এখানে ক্লিক করে অবিলম্বে কথোপকথন শুরু করুন 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ যদি আপনি একটি প্রাইভেট ডেপ্লয়মেন্ট সংস্করণ ব্যবহার করেন, তাহলে [এখানে ক্লিক করুন](/#/auth) প্রবেশাধিকার কীগুলি প্রবেশ করতে 🔑 + \ 3️⃣ যদি আপনি আপনার নিজস্ব OpenAI সম্পদ ব্যবহার করতে চান, তাহলে [এখানে ক্লিক করুন](/#/settings) সেটিংস পরিবর্তন করতে ⚙️ + `, }, Auth: { Title: "পাসওয়ার্ড প্রয়োজন", @@ -18,6 +24,10 @@ const bn: PartialLocaleType = { Input: "এখানে অ্যাক্সেস কোড লিখুন", Confirm: "নিশ্চিত করুন", Later: "পরে বলুন", + Return: "ফিরে আসা", + SaasTips: "কনফিগারেশন খুব কঠিন, আমি অবিলম্বে ব্যবহার করতে চাই", + TopTips: + "🥳 NextChat AI প্রথম প্রকাশের অফার, এখনই OpenAI o1, GPT-4o, Claude-3.5 এবং সর্বশেষ বড় মডেলগুলি আনলক করুন", }, ChatItem: { ChatItemCount: (count: number) => `${count} টি চ্যাট`, @@ -284,6 +294,14 @@ const bn: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "NextChat AI ব্যবহার করুন", + Label: "(সেরা মূল্যসাশ্রয়ী সমাধান)", + SubTitle: + "NextChat কর্তৃক অফিসিয়াল রক্ষণাবেক্ষণ, শূন্য কনফিগারেশন ব্যবহার শুরু করুন, OpenAI o1, GPT-4o, Claude-3.5 সহ সর্বশেষ বড় মডেলগুলি সমর্থন করে", + ChatNow: "এখনই চ্যাট করুন", + }, + AccessCode: { Title: "অ্যাক্সেস পাসওয়ার্ড", SubTitle: "অ্যাডমিন এনক্রিপ্টেড অ্যাক্সেস সক্রিয় করেছেন", diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 772feac4763..3181d1703b6 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -26,6 +26,8 @@ const cn = { Confirm: "确认", Later: "稍后再说", SaasTips: "配置太麻烦,想要立即使用", + TopTips: + "🥳 NextChat AI 首发优惠,立刻解锁 OpenAI o1, GPT-4o, Claude-3.5 等最新大模型", }, ChatItem: { ChatItemCount: (count: number) => `${count} 条对话`, diff --git a/app/locales/cs.ts b/app/locales/cs.ts index 5a132b3ce6d..972c46edace 100644 --- a/app/locales/cs.ts +++ b/app/locales/cs.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const cs: PartialLocaleType = { WIP: "V přípravě...", Error: { Unauthorized: isApp - ? "Byl zjištěn neplatný API Key, prosím přejděte na stránku [Nastavení](/#/settings) a zkontrolujte, zda je API Key správně nakonfigurován." - : "Heslo je nesprávné nebo prázdné, prosím přejděte na stránku [Přihlášení](/#/auth) a zadejte správné heslo, nebo na stránku [Nastavení](/#/settings) a zadejte svůj vlastní OpenAI API Key.", + ? `😆 Rozhovor narazil na nějaké problémy, nebojte se: + \\ 1️⃣ Pokud chcete začít bez konfigurace, [klikněte sem pro okamžitý začátek chatu 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Pokud chcete využít své vlastní zdroje OpenAI, klikněte [sem](/#/settings) a upravte nastavení ⚙️` + : `😆 Rozhovor narazil na nějaké problémy, nebojte se: + \ 1️⃣ Pokud chcete začít bez konfigurace, [klikněte sem pro okamžitý začátek chatu 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Pokud používáte verzi soukromého nasazení, klikněte [sem](/#/auth) a zadejte přístupový klíč 🔑 + \ 3️⃣ Pokud chcete využít své vlastní zdroje OpenAI, klikněte [sem](/#/settings) a upravte nastavení ⚙️ + `, }, Auth: { Title: "Potřebné heslo", @@ -18,6 +24,10 @@ const cs: PartialLocaleType = { Input: "Zadejte přístupový kód zde", Confirm: "Potvrdit", Later: "Později", + Return: "Návrat", + SaasTips: "Konfigurace je příliš složitá, chci okamžitě začít používat", + TopTips: + "🥳 Uvítací nabídka NextChat AI, okamžitě odemkněte OpenAI o1, GPT-4o, Claude-3.5 a nejnovější velké modely", }, ChatItem: { ChatItemCount: (count: number) => `${count} konverzací`, @@ -284,6 +294,14 @@ const cs: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "Použití NextChat AI", + Label: "(Nejlepší nákladově efektivní řešení)", + SubTitle: + "Oficiálně udržováno NextChat, připraveno k použití bez konfigurace, podporuje nejnovější velké modely jako OpenAI o1, GPT-4o, Claude-3.5", + ChatNow: "Začněte chatovat nyní", + }, + AccessCode: { Title: "Přístupový kód", SubTitle: "Administrátor aktivoval šifrovaný přístup", diff --git a/app/locales/de.ts b/app/locales/de.ts index ebe7aff2d71..4b878b17067 100644 --- a/app/locales/de.ts +++ b/app/locales/de.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const de: PartialLocaleType = { WIP: "In Bearbeitung...", Error: { Unauthorized: isApp - ? "Ungültiger API-Schlüssel erkannt. Bitte gehen Sie zur [Einstellungen](/#/settings) Seite, um zu überprüfen, ob der API-Schlüssel korrekt konfiguriert ist." - : "Das Passwort ist falsch oder leer. Bitte gehen Sie zur [Login](/#/auth) Seite, um das richtige Passwort einzugeben, oder fügen Sie Ihren OpenAI API-Schlüssel auf der [Einstellungen](/#/settings) Seite hinzu.", + ? `😆 Das Gespräch hatte einige Probleme, keine Sorge: + \\ 1️⃣ Wenn du ohne Konfiguration sofort starten möchtest, [klicke hier, um sofort zu chatten 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Wenn du deine eigenen OpenAI-Ressourcen verwenden möchtest, klicke [hier](/#/settings), um die Einstellungen zu ändern ⚙️` + : `😆 Das Gespräch hatte einige Probleme, keine Sorge: + \ 1️⃣ Wenn du ohne Konfiguration sofort starten möchtest, [klicke hier, um sofort zu chatten 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Wenn du eine private Bereitstellung verwendest, klicke [hier](/#/auth), um den Zugriffsschlüssel einzugeben 🔑 + \ 3️⃣ Wenn du deine eigenen OpenAI-Ressourcen verwenden möchtest, klicke [hier](/#/settings), um die Einstellungen zu ändern ⚙️ + `, }, Auth: { Title: "Passwort erforderlich", @@ -18,6 +24,11 @@ const de: PartialLocaleType = { Input: "Geben Sie hier den Zugangscode ein", Confirm: "Bestätigen", Later: "Später", + Return: "Zurück", + SaasTips: + "Die Konfiguration ist zu kompliziert, ich möchte es sofort nutzen", + TopTips: + "🥳 NextChat AI Einführungsangebot, schalte jetzt OpenAI o1, GPT-4o, Claude-3.5 und die neuesten großen Modelle frei", }, ChatItem: { ChatItemCount: (count: number) => `${count} Gespräche`, @@ -291,6 +302,14 @@ const de: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "NextChat AI verwenden", + Label: "(Die kosteneffektivste Lösung)", + SubTitle: + "Offiziell von NextChat verwaltet, sofort einsatzbereit ohne Konfiguration, unterstützt die neuesten großen Modelle wie OpenAI o1, GPT-4o und Claude-3.5", + ChatNow: "Jetzt chatten", + }, + AccessCode: { Title: "Zugangscode", SubTitle: diff --git a/app/locales/es.ts b/app/locales/es.ts index c1caae2d385..3719e7e4c1f 100644 --- a/app/locales/es.ts +++ b/app/locales/es.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const es: PartialLocaleType = { WIP: "En construcción...", Error: { Unauthorized: isApp - ? "Se detectó una clave API inválida. Por favor, ve a la página de [Configuración](/#/settings) para verificar si la clave API está configurada correctamente." - : "La contraseña de acceso es incorrecta o está vacía. Por favor, ve a la página de [Iniciar sesión](/#/auth) para ingresar la contraseña correcta, o en la página de [Configuración](/#/settings) para introducir tu propia clave API de OpenAI.", + ? `😆 La conversación encontró algunos problemas, no te preocupes: + \\ 1️⃣ Si deseas comenzar sin configuración, [haz clic aquí para empezar a chatear inmediatamente 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Si deseas usar tus propios recursos de OpenAI, haz clic [aquí](/#/settings) para modificar la configuración ⚙️` + : `😆 La conversación encontró algunos problemas, no te preocupes: + \ 1️⃣ Si deseas comenzar sin configuración, [haz clic aquí para empezar a chatear inmediatamente 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Si estás utilizando una versión de implementación privada, haz clic [aquí](/#/auth) para ingresar la clave de acceso 🔑 + \ 3️⃣ Si deseas usar tus propios recursos de OpenAI, haz clic [aquí](/#/settings) para modificar la configuración ⚙️ + `, }, Auth: { Title: "Se requiere contraseña", @@ -18,6 +24,11 @@ const es: PartialLocaleType = { Input: "Introduce el código de acceso aquí", Confirm: "Confirmar", Later: "Más tarde", + Return: "Regresar", + SaasTips: + "La configuración es demasiado complicada, quiero usarlo de inmediato", + TopTips: + "🥳 Oferta de lanzamiento de NextChat AI, desbloquea OpenAI o1, GPT-4o, Claude-3.5 y los últimos grandes modelos", }, ChatItem: { ChatItemCount: (count: number) => `${count} conversaciones`, @@ -294,6 +305,14 @@ const es: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "Use NextChat AI", + Label: "(The most cost-effective solution)", + SubTitle: + "Officially maintained by NextChat, zero configuration ready to use, supports the latest large models like OpenAI o1, GPT-4o, and Claude-3.5", + ChatNow: "Chat Now", + }, + AccessCode: { Title: "Contraseña de acceso", SubTitle: "El administrador ha habilitado el acceso encriptado", diff --git a/app/locales/fr.ts b/app/locales/fr.ts index 97fb79e3238..dd611cbf994 100644 --- a/app/locales/fr.ts +++ b/app/locales/fr.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const fr: PartialLocaleType = { WIP: "Prochainement...", Error: { Unauthorized: isApp - ? "Clé API invalide détectée. Veuillez vérifier si la clé API est correctement configurée dans la page [Paramètres](/#/settings)." - : "Le mot de passe d'accès est incorrect ou manquant. Veuillez entrer le mot de passe d'accès correct sur la page [Connexion](/#/auth) ou entrer votre propre clé API OpenAI sur la page [Paramètres](/#/settings).", + ? `😆 La conversation a rencontré quelques problèmes, pas de panique : + \\ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Si vous souhaitez utiliser vos propres ressources OpenAI, cliquez [ici](/#/settings) pour modifier les paramètres ⚙️` + : `😆 La conversation a rencontré quelques problèmes, pas de panique : + \ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Si vous utilisez une version déployée privée, cliquez [ici](/#/auth) pour entrer la clé d'accès 🔑 + \ 3️⃣ Si vous souhaitez utiliser vos propres ressources OpenAI, cliquez [ici](/#/settings) pour modifier les paramètres ⚙️ + `, }, Auth: { Title: "Mot de passe requis", @@ -18,6 +24,11 @@ const fr: PartialLocaleType = { Input: "Entrez le code d'accès ici", Confirm: "Confirmer", Later: "Plus tard", + Return: "Retour", + SaasTips: + "La configuration est trop compliquée, je veux l'utiliser immédiatement", + TopTips: + "🥳 Offre de lancement NextChat AI, débloquez OpenAI o1, GPT-4o, Claude-3.5 et les derniers grands modèles", }, ChatItem: { ChatItemCount: (count: number) => `${count} conversations`, @@ -294,6 +305,14 @@ const fr: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "Utiliser NextChat AI", + Label: "(La solution la plus rentable)", + SubTitle: + "Officiellement maintenu par NextChat, prêt à l'emploi sans configuration, prend en charge les derniers grands modèles comme OpenAI o1, GPT-4o et Claude-3.5", + ChatNow: "Discuter maintenant", + }, + AccessCode: { Title: "Mot de passe d'accès", SubTitle: "L'administrateur a activé l'accès sécurisé", diff --git a/app/locales/id.ts b/app/locales/id.ts index 1eff667ed9e..c9c6428f192 100644 --- a/app/locales/id.ts +++ b/app/locales/id.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const id: PartialLocaleType = { WIP: "Coming Soon...", Error: { Unauthorized: isApp - ? "API Key tidak valid terdeteksi, silakan periksa apakah API Key telah dikonfigurasi dengan benar di halaman [Pengaturan](/#/settings)." - : "Kata sandi akses tidak benar atau kosong, silakan masukkan kata sandi akses yang benar di halaman [Masuk](/#/auth), atau masukkan OpenAI API Key Anda di halaman [Pengaturan](/#/settings).", + ? `😆 Percakapan mengalami beberapa masalah, tidak perlu khawatir: + \\ 1️⃣ Jika Anda ingin memulai tanpa konfigurasi, [klik di sini untuk mulai mengobrol segera 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Jika Anda ingin menggunakan sumber daya OpenAI Anda sendiri, klik [di sini](/#/settings) untuk mengubah pengaturan ⚙️` + : `😆 Percakapan mengalami beberapa masalah, tidak perlu khawatir: + \ 1️⃣ Jika Anda ingin memulai tanpa konfigurasi, [klik di sini untuk mulai mengobrol segera 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Jika Anda menggunakan versi penyebaran pribadi, klik [di sini](/#/auth) untuk memasukkan kunci akses 🔑 + \ 3️⃣ Jika Anda ingin menggunakan sumber daya OpenAI Anda sendiri, klik [di sini](/#/settings) untuk mengubah pengaturan ⚙️ +`, }, Auth: { Title: "Kebutuhan Kata Sandi", @@ -18,6 +24,10 @@ const id: PartialLocaleType = { Input: "Masukkan kode akses di sini", Confirm: "Konfirmasi", Later: "Nanti", + Return: "Kembali", + SaasTips: "Konfigurasi terlalu rumit, saya ingin menggunakannya segera", + TopTips: + "🥳 Penawaran Peluncuran NextChat AI, buka OpenAI o1, GPT-4o, Claude-3.5 dan model besar terbaru sekarang", }, ChatItem: { ChatItemCount: (count: number) => `${count} percakapan`, @@ -285,6 +295,14 @@ const id: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "Gunakan NextChat AI", + Label: "(Solusi paling hemat biaya)", + SubTitle: + "Dikelola secara resmi oleh NextChat, siap digunakan tanpa konfigurasi, mendukung model besar terbaru seperti OpenAI o1, GPT-4o, dan Claude-3.5", + ChatNow: "Chat Sekarang", + }, + AccessCode: { Title: "Kata Sandi Akses", SubTitle: "Administrator telah mengaktifkan akses terenkripsi", diff --git a/app/locales/it.ts b/app/locales/it.ts index 9b0d965d351..83b80a1b600 100644 --- a/app/locales/it.ts +++ b/app/locales/it.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const it: PartialLocaleType = { WIP: "Work in progress...", Error: { Unauthorized: isApp - ? "API Key non valido rilevato. Vai alla pagina [Impostazioni](/#/settings) per controllare se l'API Key è configurata correttamente." - : "La password di accesso è errata o mancante. Vai alla pagina [Login](/#/auth) per inserire la password corretta o inserisci la tua API Key OpenAI nella pagina [Impostazioni](/#/settings).", + ? `😆 La conversazione ha incontrato alcuni problemi, non preoccuparti: + \\ 1️⃣ Se vuoi iniziare senza configurazione, [clicca qui per iniziare a chattare immediatamente 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Se vuoi utilizzare le tue risorse OpenAI, clicca [qui](/#/settings) per modificare le impostazioni ⚙️` + : `😆 La conversazione ha incontrato alcuni problemi, non preoccuparti: + \ 1️⃣ Se vuoi iniziare senza configurazione, [clicca qui per iniziare a chattare immediatamente 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Se stai utilizzando una versione di distribuzione privata, clicca [qui](/#/auth) per inserire la chiave di accesso 🔑 + \ 3️⃣ Se vuoi utilizzare le tue risorse OpenAI, clicca [qui](/#/settings) per modificare le impostazioni ⚙️ + `, }, Auth: { Title: "Password richiesta", @@ -18,6 +24,11 @@ const it: PartialLocaleType = { Input: "Inserisci il codice di accesso qui", Confirm: "Conferma", Later: "Più tardi", + Return: "Ritorna", + SaasTips: + "La configurazione è troppo complicata, voglio usarlo immediatamente", + TopTips: + "🥳 Offerta di lancio NextChat AI, sblocca OpenAI o1, GPT-4o, Claude-3.5 e i più recenti modelli di grandi dimensioni", }, ChatItem: { ChatItemCount: (count: number) => `${count} conversazioni`, @@ -295,6 +306,14 @@ const it: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "Usa NextChat AI", + Label: "(La soluzione più conveniente)", + SubTitle: + "Mantenuto ufficialmente da NextChat, pronto all'uso senza configurazione, supporta i modelli più recenti come OpenAI o1, GPT-4o e Claude-3.5", + ChatNow: "Chatta ora", + }, + AccessCode: { Title: "Password di accesso", SubTitle: "L'amministratore ha abilitato l'accesso criptato", diff --git a/app/locales/jp.ts b/app/locales/jp.ts index 1511afc2c5f..a4f849c778c 100644 --- a/app/locales/jp.ts +++ b/app/locales/jp.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const jp: PartialLocaleType = { WIP: "この機能は開発中です", Error: { Unauthorized: isApp - ? "無効なAPIキーが検出されました。[設定](/#/settings)ページでAPIキーが正しく設定されているか確認してください。" - : "アクセスパスワードが正しくないか空です。[ログイン](/#/auth)ページで正しいアクセスパスワードを入力するか、[設定](/#/settings)ページで自分のOpenAI APIキーを入力してください。", + ? `😆 会話中に問題が発生しましたが、心配しないでください: + \\ 1️⃣ 設定なしで始めたい場合は、[ここをクリックしてすぐにチャットを開始 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ 自分のOpenAIリソースを使用したい場合は、[ここをクリックして](/#/settings)設定を変更してください ⚙️` + : `😆 会話中に問題が発生しましたが、心配しないでください: + \ 1️⃣ 設定なしで始めたい場合は、[ここをクリックしてすぐにチャットを開始 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ プライベートデプロイ版を使用している場合は、[ここをクリックして](/#/auth)アクセストークンを入力してください 🔑 + \ 3️⃣ 自分のOpenAIリソースを使用したい場合は、[ここをクリックして](/#/settings)設定を変更してください ⚙️ + `, }, Auth: { Title: "パスワードが必要です", @@ -18,6 +24,10 @@ const jp: PartialLocaleType = { Input: "ここにアクセスコードを入力", Confirm: "確認", Later: "後で", + Return: "戻る", + SaasTips: "設定が面倒すぎる、すぐに使いたい", + TopTips: + "🥳 NextChat AIの発売特典で、OpenAI o1、GPT-4o、Claude-3.5などの最新の大規模モデルを今すぐアンロック", }, ChatItem: { ChatItemCount: (count: number) => `${count}件の会話`, @@ -282,6 +292,14 @@ const jp: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "NextChat AIを使用する", + Label: "(コストパフォーマンスの最も高いソリューション)", + SubTitle: + "NextChatによって公式に管理されており、設定なしですぐに使用でき、OpenAI o1、GPT-4o、Claude-3.5などの最新の大規模モデルをサポートしています", + ChatNow: "今すぐチャット", + }, + AccessCode: { Title: "アクセスパスワード", SubTitle: "管理者が暗号化アクセスを有効にしました", diff --git a/app/locales/ko.ts b/app/locales/ko.ts index 11e6aa4eb29..32eb2be7352 100644 --- a/app/locales/ko.ts +++ b/app/locales/ko.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const ko: PartialLocaleType = { WIP: "곧 출시 예정...", Error: { Unauthorized: isApp - ? "유효하지 않은 API 키가 감지되었습니다. [설정](/#/settings) 페이지에서 API 키가 올바르게 구성되었는지 확인하십시오." - : "잘못된 접근 비밀번호이거나 비밀번호가 비어 있습니다. [로그인](/#/auth) 페이지에서 올바른 접근 비밀번호를 입력하거나 [설정](/#/settings) 페이지에서 OpenAI API 키를 입력하십시오.", + ? `😆 대화 중 문제가 발생했습니다, 걱정하지 마세요: + \\ 1️⃣ 제로 구성으로 시작하고 싶다면, [여기를 클릭하여 즉시 대화를 시작하세요 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ 자신의 OpenAI 리소스를 사용하고 싶다면, [여기를 클릭하여](/#/settings) 설정을 수정하세요 ⚙️` + : `😆 대화 중 문제가 발생했습니다, 걱정하지 마세요: + \ 1️⃣ 제로 구성으로 시작하고 싶다면, [여기를 클릭하여 즉시 대화를 시작하세요 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ 개인 배포 버전을 사용하고 있다면, [여기를 클릭하여](/#/auth) 접근 키를 입력하세요 🔑 + \ 3️⃣ 자신의 OpenAI 리소스를 사용하고 싶다면, [여기를 클릭하여](/#/settings) 설정을 수정하세요 ⚙️ + `, }, Auth: { Title: "비밀번호 필요", @@ -18,6 +24,10 @@ const ko: PartialLocaleType = { Input: "여기에 접근 코드를 입력하십시오.", Confirm: "확인", Later: "나중에 하기", + Return: "돌아가기", + SaasTips: "설정이 너무 복잡합니다. 즉시 사용하고 싶습니다.", + TopTips: + "🥳 NextChat AI 출시 기념 할인, 지금 OpenAI o1, GPT-4o, Claude-3.5 및 최신 대형 모델을 해제하세요", }, ChatItem: { ChatItemCount: (count: number) => `${count} 개의 대화`, @@ -281,6 +291,14 @@ const ko: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "NextChat AI 사용하기", + Label: "(가장 비용 효율적인 솔루션)", + SubTitle: + "NextChat에 의해 공식적으로 유지 관리되며, 제로 구성으로 즉시 사용할 수 있으며, OpenAI o1, GPT-4o, Claude-3.5와 같은 최신 대형 모델을 지원합니다", + ChatNow: "지금 채팅하기", + }, + AccessCode: { Title: "접근 비밀번호", SubTitle: "관리자가 암호화된 접근을 활성화했습니다.", diff --git a/app/locales/no.ts b/app/locales/no.ts index 6fc8e86c787..d02b5ce663c 100644 --- a/app/locales/no.ts +++ b/app/locales/no.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const no: PartialLocaleType = { WIP: "Arbeid pågår ...", Error: { Unauthorized: isApp - ? "Ugyldig API-nøkkel oppdaget. Gå til [innstillinger](/#/settings) for å sjekke om API-nøkkelen er riktig konfigurert." - : "Adgangskoden er feil eller tom. Gå til [innlogging](/#/auth) for å oppgi riktig adgangskode, eller fyll inn din egen OpenAI API-nøkkel på [innstillinger](/#/settings) siden.", + ? `😆 Samtalen har støtt på noen problemer, ikke bekymre deg: + \\ 1️⃣ Hvis du vil starte uten konfigurasjon, [klikk her for å begynne å chatte umiddelbart 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Hvis du vil bruke dine egne OpenAI-ressurser, klikk [her](/#/settings) for å endre innstillingene ⚙️` + : `😆 Samtalen har støtt på noen problemer, ikke bekymre deg: + \ 1️⃣ Hvis du vil starte uten konfigurasjon, [klikk her for å begynne å chatte umiddelbart 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Hvis du bruker en privat distribusjonsversjon, klikk [her](/#/auth) for å skrive inn tilgangsnøkkelen 🔑 + \ 3️⃣ Hvis du vil bruke dine egne OpenAI-ressurser, klikk [her](/#/settings) for å endre innstillingene ⚙️ + `, }, Auth: { Title: "Passord påkrevd", @@ -18,6 +24,11 @@ const no: PartialLocaleType = { Input: "Skriv tilgangskoden her", Confirm: "Bekreft", Later: "Kom tilbake senere", + Return: "Tilbake", + SaasTips: + "Konfigurasjonen er for komplisert, jeg vil bruke det med en gang", + TopTips: + "🥳 NextChat AI lanseringstilbud, lås opp OpenAI o1, GPT-4o, Claude-3.5 og de nyeste store modellene nå", }, ChatItem: { ChatItemCount: (count: number) => `${count} samtaler`, @@ -288,6 +299,14 @@ const no: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "Bruk NextChat AI", + Label: "(Den mest kostnadseffektive løsningen)", + SubTitle: + "Offisielt vedlikeholdt av NextChat, klar til bruk uten konfigurasjon, støtter de nyeste store modellene som OpenAI o1, GPT-4o og Claude-3.5", + ChatNow: "Chat nå", + }, + AccessCode: { Title: "Adgangskode", SubTitle: "Administrator har aktivert kryptert tilgang", diff --git a/app/locales/pt.ts b/app/locales/pt.ts index c04081a8b36..c1de67384b4 100644 --- a/app/locales/pt.ts +++ b/app/locales/pt.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import { PartialLocaleType } from "../locales/index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const pt: PartialLocaleType = { WIP: "Em breve...", Error: { Unauthorized: isApp - ? "Chave API inválida, por favor verifique em [Configurações](/#/settings)." - : "Acesso não autorizado, por favor insira o código de acesso em [auth](/#/auth) ou insira sua Chave API OpenAI.", + ? `😆 A conversa encontrou alguns problemas, não se preocupe: + \\ 1️⃣ Se você quiser começar sem configuração, [clique aqui para começar a conversar imediatamente 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Se você deseja usar seus próprios recursos OpenAI, clique [aqui](/#/settings) para modificar as configurações ⚙️` + : `😆 A conversa encontrou alguns problemas, não se preocupe: + \ 1️⃣ Se você quiser começar sem configuração, [clique aqui para começar a conversar imediatamente 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Se você estiver usando uma versão de implantação privada, clique [aqui](/#/auth) para inserir a chave de acesso 🔑 + \ 3️⃣ Se você deseja usar seus próprios recursos OpenAI, clique [aqui](/#/settings) para modificar as configurações ⚙️ +`, }, Auth: { Title: "Necessário Código de Acesso", @@ -18,6 +24,10 @@ const pt: PartialLocaleType = { Input: "código de acesso", Confirm: "Confirmar", Later: "Depois", + Return: "Voltar", + SaasTips: "A configuração é muito complicada, quero usá-la imediatamente", + TopTips: + "🥳 Oferta de Lançamento do NextChat AI, desbloqueie o OpenAI o1, GPT-4o, Claude-3.5 e os mais recentes grandes modelos agora", }, ChatItem: { ChatItemCount: (count: number) => `${count} mensagens`, @@ -281,6 +291,14 @@ const pt: PartialLocaleType = { NoAccess: "Insira a Chave API para verificar o saldo", }, Access: { + SaasStart: { + Title: "Usar NextChat AI", + Label: "(A solução mais econômica)", + SubTitle: + "Mantido oficialmente pelo NextChat, pronto para uso sem configuração, suporta os mais recentes grandes modelos como OpenAI o1, GPT-4o e Claude-3.5", + ChatNow: "Conversar agora", + }, + AccessCode: { Title: "Código de Acesso", SubTitle: "Controle de Acesso Habilitado", diff --git a/app/locales/ru.ts b/app/locales/ru.ts index 0fcf73a249f..2793ab7ec05 100644 --- a/app/locales/ru.ts +++ b/app/locales/ru.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import { PartialLocaleType } from "../locales/index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const ru: PartialLocaleType = { WIP: "Скоро...", Error: { Unauthorized: isApp - ? "Обнаружен недействительный API-ключ. Пожалуйста, перейдите на страницу [Настройки](/#/settings), чтобы проверить правильность конфигурации API-ключа." - : "Неверный или пустой пароль доступа. Пожалуйста, перейдите на страницу [Вход](/#/auth), чтобы ввести правильный пароль доступа, или на страницу [Настройки](/#/settings), чтобы ввести ваш собственный API-ключ OpenAI.", + ? `😆 В разговоре возникли некоторые проблемы, не переживайте: + \\ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Если вы хотите использовать свои ресурсы OpenAI, нажмите [здесь](/#/settings), чтобы изменить настройки ⚙️` + : `😆 В разговоре возникли некоторые проблемы, не переживайте: + \ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Если вы используете частную версию развертывания, нажмите [здесь](/#/auth), чтобы ввести ключ доступа 🔑 + \ 3️⃣ Если вы хотите использовать свои ресурсы OpenAI, нажмите [здесь](/#/settings), чтобы изменить настройки ⚙️ + `, }, Auth: { Title: "Требуется пароль", @@ -18,6 +24,10 @@ const ru: PartialLocaleType = { Input: "Введите код доступа здесь", Confirm: "Подтвердить", Later: "Позже", + Return: "Назад", + SaasTips: "Настройка слишком сложна, я хочу использовать это немедленно", + TopTips: + "🥳 Предложение по запуску NextChat AI: разблокируйте OpenAI o1, GPT-4o, Claude-3.5 и новейшие большие модели прямо сейчас", }, ChatItem: { ChatItemCount: (count: number) => `${count} бесед`, @@ -286,6 +296,14 @@ const ru: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "Используйте NextChat AI", + Label: "(Самое экономичное решение)", + SubTitle: + "Официально поддерживается NextChat, готов к использованию без настройки, поддерживает последние крупные модели, такие как OpenAI o1, GPT-4o и Claude-3.5", + ChatNow: "Начать чат", + }, + AccessCode: { Title: "Пароль доступа", SubTitle: "Администратор включил защиту паролем", diff --git a/app/locales/sk.ts b/app/locales/sk.ts index 3649b763bf5..62cfab0abb0 100644 --- a/app/locales/sk.ts +++ b/app/locales/sk.ts @@ -1,7 +1,7 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; - +import { SAAS_CHAT_URL } from "@/app/constant"; // if you are adding a new translation, please use PartialLocaleType instead of LocaleType const isApp = !!getClientConfig()?.isApp; @@ -9,8 +9,14 @@ const sk: PartialLocaleType = { WIP: "Už čoskoro...", Error: { Unauthorized: isApp - ? "Neplatný API kľúč, prosím skontrolujte ho na stránke [Nastavenia](/#/settings)." - : "Neoprávnený prístup, prosím zadajte prístupový kód na stránke [auth](/#/auth), alebo zadajte váš OpenAI API kľúč.", + ? `😆 Rozhovor narazil na nejaké problémy, nebojte sa: + \\ 1️⃣ Ak chcete začať bez konfigurácie, [kliknite sem, aby ste okamžite začali chatovať 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Ak chcete používať svoje vlastné zdroje OpenAI, kliknite [sem](/#/settings), aby ste upravili nastavenia ⚙️` + : `😆 Rozhovor narazil na nejaké problémy, nebojte sa: + \ 1️⃣ Ak chcete začať bez konfigurácie, [kliknite sem, aby ste okamžite začali chatovať 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Ak používate verziu súkromného nasadenia, kliknite [sem](/#/auth), aby ste zadali prístupový kľúč 🔑 + \ 3️⃣ Ak chcete používať svoje vlastné zdroje OpenAI, kliknite [sem](/#/settings), aby ste upravili nastavenia ⚙️ + `, }, Auth: { Title: "Potrebný prístupový kód", @@ -19,6 +25,10 @@ const sk: PartialLocaleType = { Input: "prístupový kód", Confirm: "Potvrdiť", Later: "Neskôr", + Return: "Návrat", + SaasTips: "Nastavenie je príliš zložité, chcem to okamžite použiť", + TopTips: + "🥳 Uvítacia ponuka NextChat AI, okamžite odomknite OpenAI o1, GPT-4o, Claude-3.5 a najnovšie veľké modely", }, ChatItem: { ChatItemCount: (count: number) => `${count} správ`, @@ -281,6 +291,14 @@ const sk: PartialLocaleType = { NoAccess: "Zadajte API kľúč na skontrolovanie zostatku", }, Access: { + SaasStart: { + Title: "Použite NextChat AI", + Label: "(Najvýhodnejšie riešenie)", + SubTitle: + "Oficiálne udržiavané NextChat, pripravené na použitie bez konfigurácie, podporuje najnovšie veľké modely ako OpenAI o1, GPT-4o a Claude-3.5", + ChatNow: "Chatovať teraz", + }, + AccessCode: { Title: "Prístupový kód", SubTitle: "Povolený prístupový kód", diff --git a/app/locales/tr.ts b/app/locales/tr.ts index b7f14104750..7fe6170ca76 100644 --- a/app/locales/tr.ts +++ b/app/locales/tr.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const tr: PartialLocaleType = { WIP: "Çalışma devam ediyor...", Error: { Unauthorized: isApp - ? "Geçersiz API Anahtarı tespit edildi, lütfen API Anahtarını doğru şekilde yapılandırmak için [Ayarlar](/#/settings) sayfasına gidin." - : "Erişim şifresi yanlış veya boş, lütfen doğru erişim şifresini girmek için [Giriş](/#/auth) sayfasına gidin veya kendi OpenAI API Anahtarınızı [Ayarlar](/#/settings) sayfasına girin.", + ? `😆 Sohbet bazı sorunlarla karşılaştı, endişelenmeyin: + \\ 1️⃣ Eğer sıfır yapılandırma ile başlamak istiyorsanız, [buraya tıklayarak hemen sohbete başlayın 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Kendi OpenAI kaynaklarınızı kullanmak istiyorsanız, [buraya tıklayarak](/#/settings) ayarları değiştirin ⚙️` + : `😆 Sohbet bazı sorunlarla karşılaştı, endişelenmeyin: + \ 1️⃣ Eğer sıfır yapılandırma ile başlamak istiyorsanız, [buraya tıklayarak hemen sohbete başlayın 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Eğer özel dağıtım sürümü kullanıyorsanız, [buraya tıklayarak](/#/auth) erişim anahtarını girin 🔑 + \ 3️⃣ Kendi OpenAI kaynaklarınızı kullanmak istiyorsanız, [buraya tıklayarak](/#/settings) ayarları değiştirin ⚙️ + `, }, Auth: { Title: "Şifre Gerekli", @@ -18,6 +24,10 @@ const tr: PartialLocaleType = { Input: "Erişim kodunu buraya girin", Confirm: "Onayla", Later: "Sonra", + Return: "Geri", + SaasTips: "Ayarlar çok karmaşık, hemen kullanmak istiyorum", + TopTips: + "🥳 NextChat AI lansman teklifi, OpenAI o1, GPT-4o, Claude-3.5 ve en son büyük modelleri şimdi açın", }, ChatItem: { ChatItemCount: (count: number) => `${count} konuşma`, @@ -286,6 +296,14 @@ const tr: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "NextChat AI kullanın", + Label: "(En maliyet etkin çözüm)", + SubTitle: + "NextChat tarafından resmi olarak yönetilmektedir, yapılandırma olmadan hemen kullanıma hazırdır, OpenAI o1, GPT-4o, Claude-3.5 gibi en son büyük modelleri destekler", + ChatNow: "Şimdi sohbet et", + }, + AccessCode: { Title: "Erişim Şifresi", SubTitle: "Yönetici şifreli erişimi etkinleştirdi", diff --git a/app/locales/tw.ts b/app/locales/tw.ts index b0602a08174..39e2bc96833 100644 --- a/app/locales/tw.ts +++ b/app/locales/tw.ts @@ -1,14 +1,20 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const tw = { WIP: "此功能仍在開發中……", Error: { Unauthorized: isApp - ? "偵測到無效的 API Key,請前往[設定](/#/settings)頁面檢查 API Key 是否設定正確。" - : "存取密碼不正確或尚未填寫,請前往[登入](/#/auth)頁面輸入正確的存取密碼,或者在[設定](/#/settings)頁面填入你自己的 OpenAI API Key。", + ? `😆 對話遇到了一些問題,不用慌: + \\ 1️⃣ 想要零配置開箱即用,[點擊這裡立刻開啟對話 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ 如果你想消耗自己的 OpenAI 資源,點擊[這裡](/#/settings)修改設定 ⚙️` + : `😆 對話遇到了一些問題,不用慌: + \ 1️⃣ 想要零配置開箱即用,[點擊這裡立刻開啟對話 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ 如果你正在使用私有部署版本,點擊[這裡](/#/auth)輸入訪問秘鑰 🔑 + \ 3️⃣ 如果你想消耗自己的 OpenAI 資源,點擊[這裡](/#/settings)修改設定 ⚙️ + `, }, Auth: { @@ -18,6 +24,10 @@ const tw = { Input: "在此處填寫存取密碼", Confirm: "確認", Later: "稍候再說", + Return: "返回", + SaasTips: "配置太麻煩,想要立即使用", + TopTips: + "🥳 NextChat AI 首發優惠,立刻解鎖 OpenAI o1, GPT-4o, Claude-3.5 等最新大模型", }, ChatItem: { ChatItemCount: (count: number) => `${count} 則對話`, @@ -287,6 +297,14 @@ const tw = { }, Access: { + SaasStart: { + Title: "使用 NextChat AI", + Label: "(性價比最高的方案)", + SubTitle: + "由 NextChat 官方維護,零配置開箱即用,支持 OpenAI o1、GPT-4o、Claude-3.5 等最新大模型", + ChatNow: "立刻對話", + }, + AccessCode: { Title: "存取密碼", SubTitle: "管理員已開啟加密存取", diff --git a/app/locales/vi.ts b/app/locales/vi.ts index 1f20e15a0b1..c4b6ffcd503 100644 --- a/app/locales/vi.ts +++ b/app/locales/vi.ts @@ -1,15 +1,21 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; - +import { SAAS_CHAT_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const vi: PartialLocaleType = { WIP: "Sắp ra mắt...", Error: { Unauthorized: isApp - ? "Phát hiện khóa API không hợp lệ, vui lòng truy cập trang [Cài đặt](/#/settings) để kiểm tra xem khóa API có được cấu hình chính xác không." - : "Mật khẩu truy cập không đúng hoặc để trống, vui lòng truy cập trang [Đăng nhập](/#/auth) để nhập mật khẩu truy cập chính xác, hoặc điền khóa API OpenAI của bạn vào trang [Cài đặt](/#/settings).", + ? `😆 Cuộc trò chuyện gặp một số vấn đề, đừng lo lắng: + \\ 1️⃣ Nếu bạn muốn bắt đầu mà không cần cấu hình, [nhấp vào đây để bắt đầu trò chuyện ngay lập tức 🚀](${SAAS_CHAT_URL}) + \\ 2️⃣ Nếu bạn muốn sử dụng tài nguyên OpenAI của riêng mình, hãy nhấp [vào đây](/#/settings) để thay đổi cài đặt ⚙️` + : `😆 Cuộc trò chuyện gặp một số vấn đề, đừng lo lắng: + \ 1️⃣ Nếu bạn muốn bắt đầu mà không cần cấu hình, [nhấp vào đây để bắt đầu trò chuyện ngay lập tức 🚀](${SAAS_CHAT_URL}) + \ 2️⃣ Nếu bạn đang sử dụng phiên bản triển khai riêng, hãy nhấp [vào đây](/#/auth) để nhập khóa truy cập 🔑 + \ 3️⃣ Nếu bạn muốn sử dụng tài nguyên OpenAI của riêng mình, hãy nhấp [vào đây](/#/settings) để thay đổi cài đặt ⚙️ + `, }, Auth: { Title: "Cần mật khẩu", @@ -18,6 +24,10 @@ const vi: PartialLocaleType = { Input: "Nhập mã truy cập tại đây", Confirm: "Xác nhận", Later: "Để sau", + Return: "Trở lại", + SaasTips: "Cấu hình quá phức tạp, tôi muốn sử dụng ngay lập tức", + TopTips: + "🥳 Ưu đãi ra mắt NextChat AI, mở khóa OpenAI o1, GPT-4o, Claude-3.5 và các mô hình lớn mới nhất ngay bây giờ", }, ChatItem: { ChatItemCount: (count: number) => `${count} cuộc trò chuyện`, @@ -283,6 +293,14 @@ const vi: PartialLocaleType = { }, Access: { + SaasStart: { + Title: "Sử dụng NextChat AI", + Label: "(Giải pháp tiết kiệm chi phí nhất)", + SubTitle: + "Được NextChat chính thức duy trì, sẵn sàng sử dụng mà không cần cấu hình, hỗ trợ các mô hình lớn mới nhất như OpenAI o1, GPT-4o và Claude-3.5", + ChatNow: "Chat ngay", + }, + AccessCode: { Title: "Mật khẩu truy cập", SubTitle: "Quản trị viên đã bật truy cập mã hóa", From 9858d1f9585b9d096c2e98cd424b5cc9e0d7bdc6 Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Thu, 19 Sep 2024 18:21:26 +0800 Subject: [PATCH 10/49] add top tip --- app/components/auth.tsx | 12 +++++++----- app/icons/logo.svg | 36 ++++++++++++++++++------------------ app/icons/www-delete.svg | 1 - 3 files changed, 25 insertions(+), 24 deletions(-) delete mode 100644 app/icons/www-delete.svg diff --git a/app/components/auth.tsx b/app/components/auth.tsx index 8b6e2260787..3bd28aa1b0e 100644 --- a/app/components/auth.tsx +++ b/app/components/auth.tsx @@ -5,12 +5,13 @@ import { useNavigate } from "react-router-dom"; import { Path, SAAS_CHAT_URL } from "../constant"; import { useAccessStore } from "../store"; import Locale from "../locales"; -import Delete from "../icons/www-delete.svg"; +import Delete from "../icons/close.svg"; import Arrow from "../icons/arrow.svg"; import Logo from "../icons/logo.svg"; import BotIcon from "../icons/bot.svg"; import { getClientConfig } from "../config/client"; import LeftIcon from "@/app/icons/left.svg"; +import { safeLocalStorage } from "@/app/utils"; export function AuthPage() { const navigate = useNavigate(); @@ -112,20 +113,21 @@ export function AuthPage() { function TopBanner() { const [isHovered, setIsHovered] = useState(false); const [isVisible, setIsVisible] = useState(true); + const storage = safeLocalStorage(); useEffect(() => { // 检查 localStorage 中是否有标记 - const bannerDismissed = localStorage.getItem("bannerDismissed"); + const bannerDismissed = storage.getItem("bannerDismissed"); // 如果标记不存在,存储默认值并显示横幅 if (!bannerDismissed) { - localStorage.setItem("bannerDismissed", "false"); + storage.setItem("bannerDismissed", "false"); setIsVisible(true); // 显示横幅 } else if (bannerDismissed === "true") { // 如果标记为 "true",则隐藏横幅 setIsVisible(false); } - }, []); + }, [storage]); const handleMouseEnter = () => { setIsHovered(true); @@ -137,7 +139,7 @@ function TopBanner() { const handleClose = () => { setIsVisible(false); - localStorage.setItem("bannerDismissed", "true"); + storage.setItem("bannerDismissed", "true"); }; if (!isVisible) { diff --git a/app/icons/logo.svg b/app/icons/logo.svg index 8f3c1de08c0..b80263b8638 100644 --- a/app/icons/logo.svg +++ b/app/icons/logo.svg @@ -1,19 +1,19 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/app/icons/www-delete.svg b/app/icons/www-delete.svg deleted file mode 100644 index 17952c3b3ba..00000000000 --- a/app/icons/www-delete.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 702f5bd3624b565519eeaa0d758bd632e0813e96 Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Fri, 20 Sep 2024 10:22:22 +0800 Subject: [PATCH 11/49] fex setCookie --- app/components/auth.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/components/auth.tsx b/app/components/auth.tsx index 3bd28aa1b0e..c89103a2eb3 100644 --- a/app/components/auth.tsx +++ b/app/components/auth.tsx @@ -13,10 +13,10 @@ import { getClientConfig } from "../config/client"; import LeftIcon from "@/app/icons/left.svg"; import { safeLocalStorage } from "@/app/utils"; +const storage = safeLocalStorage(); export function AuthPage() { const navigate = useNavigate(); const accessStore = useAccessStore(); - const goHome = () => navigate(Path.Home); const goChat = () => navigate(Path.Chat); const goSaas = () => { @@ -113,7 +113,6 @@ export function AuthPage() { function TopBanner() { const [isHovered, setIsHovered] = useState(false); const [isVisible, setIsVisible] = useState(true); - const storage = safeLocalStorage(); useEffect(() => { // 检查 localStorage 中是否有标记 @@ -127,7 +126,7 @@ function TopBanner() { // 如果标记为 "true",则隐藏横幅 setIsVisible(false); } - }, [storage]); + }, []); const handleMouseEnter = () => { setIsHovered(true); From 51f7b02b272f2cda70a7c16892f8d63342463c08 Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Mon, 23 Sep 2024 10:56:43 +0800 Subject: [PATCH 12/49] fex en --- app/locales/en.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/locales/en.ts b/app/locales/en.ts index 61d1fc42811..71d02d6b3a0 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -27,6 +27,8 @@ const en: LocaleType = { Confirm: "Confirm", Later: "Later", SaasTips: "Too Complex, Use Immediately Now", + TopTips: + "🥳 NextChat AI launch promotion: Instantly unlock the latest models like OpenAI o1, GPT-4o, Claude-3.5!", }, ChatItem: { ChatItemCount: (count: number) => `${count} messages`, From 518e0d90a5f337805db20876b0006bd3a5f63fe8 Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Mon, 23 Sep 2024 11:11:36 +0800 Subject: [PATCH 13/49] fex url --- app/constant.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/constant.ts b/app/constant.ts index 1ba3f94c23e..d97f3b209b6 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -502,4 +502,4 @@ export const PLUGINS = [ { name: "Search Chat", path: Path.SearchChat }, ]; -export const SAAS_CHAT_URL = "https://nextchat.dev"; +export const SAAS_CHAT_URL = "https://nextchat.dev/chat"; From c15c8526684e5606e16425f3fe9f5be1b809aebc Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Mon, 23 Sep 2024 15:12:45 +0800 Subject: [PATCH 14/49] fex media --- app/components/auth.module.scss | 17 ++++++++++++++--- app/components/auth.tsx | 18 +++++++++++++----- app/components/button.module.scss | 3 +-- app/components/ui-lib.module.scss | 5 +++-- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/app/components/auth.module.scss b/app/components/auth.module.scss index c26320b7d1a..fe143b4289b 100644 --- a/app/components/auth.module.scss +++ b/app/components/auth.module.scss @@ -11,7 +11,6 @@ display: flex; justify-content: center; align-items: center; - padding: 12px 64px; box-sizing: border-box; background: var(--second); @@ -22,8 +21,6 @@ font-size: 14px; line-height: 150%; span { - display: inline-flex; - align-items: center; gap: 8px; a { display: inline-flex; @@ -43,6 +40,20 @@ } } + @media (max-width: 600px) { + .top-banner { + padding: 12px 24px 12px 12px; + .top-banner-close { + right: 10px; + } + .top-banner-inner { + .top-banner-logo { + margin-right: 8px; + } + } + } + } + .auth-header { display: flex; justify-content: space-between; diff --git a/app/components/auth.tsx b/app/components/auth.tsx index c89103a2eb3..52fd860dd6d 100644 --- a/app/components/auth.tsx +++ b/app/components/auth.tsx @@ -113,11 +113,10 @@ export function AuthPage() { function TopBanner() { const [isHovered, setIsHovered] = useState(false); const [isVisible, setIsVisible] = useState(true); - + const [isMobile, setIsMobile] = useState(window.innerWidth < 600); useEffect(() => { // 检查 localStorage 中是否有标记 const bannerDismissed = storage.getItem("bannerDismissed"); - // 如果标记不存在,存储默认值并显示横幅 if (!bannerDismissed) { storage.setItem("bannerDismissed", "false"); @@ -128,6 +127,15 @@ function TopBanner() { } }, []); + useEffect(() => { + const handleResize = () => { + setIsMobile(window.innerWidth < 600); + }; + + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, []); + const handleMouseEnter = () => { setIsHovered(true); }; @@ -151,16 +159,16 @@ function TopBanner() { onMouseLeave={handleMouseLeave} > - {isHovered && ( + {(isHovered || isMobile) && ( )}
diff --git a/app/components/button.module.scss b/app/components/button.module.scss index e332df2d2c8..c65385cfcf6 100644 --- a/app/components/button.module.scss +++ b/app/components/button.module.scss @@ -5,10 +5,9 @@ align-items: center; justify-content: center; padding: 10px; - cursor: pointer; transition: all 0.3s ease; - overflow: hidden; + // overflow: hidden; user-select: none; outline: none; border: none; diff --git a/app/components/ui-lib.module.scss b/app/components/ui-lib.module.scss index 20bf62a188b..16ef106e1c3 100644 --- a/app/components/ui-lib.module.scss +++ b/app/components/ui-lib.module.scss @@ -250,8 +250,7 @@ .select-with-icon { position: relative; - max-width: fit-content; - + max-width: 60%; &.left-align-option { option { text-align: left; @@ -260,9 +259,11 @@ .select-with-icon-select { height: 100%; + max-width: 100%; border: var(--border-in-light); padding: 10px 35px 10px 10px; border-radius: 10px; + white-space: normal; appearance: none; cursor: pointer; background-color: var(--white); From ed20fd296292bf4787145086b9d23a5920ae237d Mon Sep 17 00:00:00 2001 From: lloydzhou Date: Mon, 23 Sep 2024 20:00:07 +0800 Subject: [PATCH 15/49] 1. add buildin plugin; 2. remove `usingProxy` --- app/components/plugin.tsx | 37 ++++------------------------ app/store/plugin.ts | 52 +++++++++++++++++++++++++++++++++++---- public/plugins.json | 17 +++++++++++++ 3 files changed, 69 insertions(+), 37 deletions(-) create mode 100644 public/plugins.json diff --git a/app/components/plugin.tsx b/app/components/plugin.tsx index cf4ae946ef6..73f0db64ebf 100644 --- a/app/components/plugin.tsx +++ b/app/components/plugin.tsx @@ -12,7 +12,6 @@ import EditIcon from "../icons/edit.svg"; import AddIcon from "../icons/add.svg"; import CloseIcon from "../icons/close.svg"; import DeleteIcon from "../icons/delete.svg"; -import EyeIcon from "../icons/eye.svg"; import ConfirmIcon from "../icons/confirm.svg"; import ReloadIcon from "../icons/reload.svg"; import GithubIcon from "../icons/github.svg"; @@ -29,7 +28,6 @@ import { import Locale from "../locales"; import { useNavigate } from "react-router-dom"; import { useState } from "react"; -import { getClientConfig } from "../config/client"; export function PluginPage() { const navigate = useNavigate(); @@ -209,19 +207,11 @@ export function PluginPage() {
- {m.builtin ? ( - } - text={Locale.Plugin.Item.View} - onClick={() => setEditingPluginId(m.id)} - /> - ) : ( - } - text={Locale.Plugin.Item.Edit} - onClick={() => setEditingPluginId(m.id)} - /> - )} + } + text={Locale.Plugin.Item.Edit} + onClick={() => setEditingPluginId(m.id)} + /> {!m.builtin && ( } @@ -325,23 +315,6 @@ export function PluginPage() { > )} - {!getClientConfig()?.isApp && ( - - { - pluginStore.updatePlugin(editingPlugin.id, (plugin) => { - plugin.usingProxy = e.currentTarget.checked; - }); - }} - > - - )} diff --git a/app/store/plugin.ts b/app/store/plugin.ts index 44679cbdc25..48930384dbc 100644 --- a/app/store/plugin.ts +++ b/app/store/plugin.ts @@ -2,8 +2,12 @@ import OpenAPIClientAxios from "openapi-client-axios"; import { StoreKey } from "../constant"; import { nanoid } from "nanoid"; import { createPersistStore } from "../utils/store"; +import { getClientConfig } from "../config/client"; import yaml from "js-yaml"; import { adapter } from "../utils"; +import { useAccessStore } from "./access"; + +const isApp = getClientConfig()?.buildMode === "export"; export type Plugin = { id: string; @@ -16,7 +20,6 @@ export type Plugin = { authLocation?: string; authHeader?: string; authToken?: string; - usingProxy?: boolean; }; export type FunctionToolItem = { @@ -46,17 +49,24 @@ export const FunctionToolService = { plugin?.authType == "basic" ? `Basic ${plugin?.authToken}` : plugin?.authType == "bearer" - ? ` Bearer ${plugin?.authToken}` + ? `Bearer ${plugin?.authToken}` : plugin?.authToken; const authLocation = plugin?.authLocation || "header"; const definition = yaml.load(plugin.content) as any; const serverURL = definition?.servers?.[0]?.url; - const baseURL = !!plugin?.usingProxy ? "/api/proxy" : serverURL; + const baseURL = !isApp ? "/api/proxy" : serverURL; const headers: Record = { - "X-Base-URL": !!plugin?.usingProxy ? serverURL : undefined, + "X-Base-URL": !isApp ? serverURL : undefined, }; if (authLocation == "header") { headers[headerName] = tokenValue; + // try using openaiApiKey for Dalle3 Plugin. + if (!tokenValue && plugin.id === "dalle3") { + const openaiApiKey = useAccessStore.getState().openaiApiKey; + if (openaiApiKey) { + headers[headerName] = `Bearer ${openaiApiKey}`; + } + } } const api = new OpenAPIClientAxios({ definition: yaml.load(plugin.content) as any, @@ -165,7 +175,7 @@ export const usePluginStore = createPersistStore( (set, get) => ({ create(plugin?: Partial) { const plugins = get().plugins; - const id = nanoid(); + const id = plugin?.id || nanoid(); plugins[id] = { ...createEmptyPlugin(), ...plugin, @@ -220,5 +230,37 @@ export const usePluginStore = createPersistStore( { name: StoreKey.Plugin, version: 1, + onRehydrateStorage(state) { + console.log("onRehydrateStorage", state); + // Skip store rehydration on server side + if (typeof window === "undefined") { + return; + } + + fetch("./plugins.json") + .then((res) => res.json()) + .then((res) => { + Promise.all( + res.map((item: any) => + fetch(item.schema) + .then((res) => res.text()) + .then((content) => ({ + ...item, + content, + })), + ), + ).then((builtinPlugins: any) => { + builtinPlugins.forEach((item: any) => { + const plugin = state.create(item); + state.updatePlugin(plugin.id, (plugin) => { + const tool = FunctionToolService.add(plugin, true); + plugin.title = tool.api.definition.info.title; + plugin.version = tool.api.definition.info.version; + plugin.builtin = true; + }); + }); + }); + }); + }, }, ); diff --git a/public/plugins.json b/public/plugins.json new file mode 100644 index 00000000000..c4d7ec46a05 --- /dev/null +++ b/public/plugins.json @@ -0,0 +1,17 @@ +[ + { + "id": "dalle3", + "name": "Dalle3", + "schema": "https://ghp.ci/https://raw.githubusercontent.com/ChatGPTNextWeb/NextChat-Awesome-Plugins/main/plugins/dalle/openapi.json" + }, + { + "id": "arxivsearch", + "name": "ArxivSearch", + "schema": "https://ghp.ci/https://raw.githubusercontent.com/ChatGPTNextWeb/NextChat-Awesome-Plugins/main/plugins/arxivsearch/openapi.json" + }, + { + "id": "duckduckgolite", + "name": "DuckDuckGoLiteSearch", + "schema": "https://ghp.ci/https://raw.githubusercontent.com/ChatGPTNextWeb/NextChat-Awesome-Plugins/main/plugins/duckduckgolite/openapi.json" + } +] From 90e7b5aecf7bb4e85cd848bb9f24ffa2688874fb Mon Sep 17 00:00:00 2001 From: lloydzhou Date: Mon, 23 Sep 2024 20:20:15 +0800 Subject: [PATCH 16/49] try using openai api key for dalle-3 plugin --- app/store/plugin.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/store/plugin.ts b/app/store/plugin.ts index 48930384dbc..ae31dde4e20 100644 --- a/app/store/plugin.ts +++ b/app/store/plugin.ts @@ -60,12 +60,12 @@ export const FunctionToolService = { }; if (authLocation == "header") { headers[headerName] = tokenValue; - // try using openaiApiKey for Dalle3 Plugin. - if (!tokenValue && plugin.id === "dalle3") { - const openaiApiKey = useAccessStore.getState().openaiApiKey; - if (openaiApiKey) { - headers[headerName] = `Bearer ${openaiApiKey}`; - } + } + // try using openaiApiKey for Dalle3 Plugin. + if (!tokenValue && plugin.id === "dalle3") { + const openaiApiKey = useAccessStore.getState().openaiApiKey; + if (openaiApiKey) { + headers[headerName] = `Bearer ${openaiApiKey}`; } } const api = new OpenAPIClientAxios({ From 6d5bf490ab1042f216adffaac8b176a108c52058 Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Tue, 24 Sep 2024 11:36:26 +0800 Subject: [PATCH 17/49] fix media --- app/components/auth.tsx | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/app/components/auth.tsx b/app/components/auth.tsx index 52fd860dd6d..39af2566196 100644 --- a/app/components/auth.tsx +++ b/app/components/auth.tsx @@ -8,12 +8,14 @@ import Locale from "../locales"; import Delete from "../icons/close.svg"; import Arrow from "../icons/arrow.svg"; import Logo from "../icons/logo.svg"; +import { useMobileScreen } from "@/app/utils"; import BotIcon from "../icons/bot.svg"; import { getClientConfig } from "../config/client"; import LeftIcon from "@/app/icons/left.svg"; import { safeLocalStorage } from "@/app/utils"; const storage = safeLocalStorage(); + export function AuthPage() { const navigate = useNavigate(); const accessStore = useAccessStore(); @@ -113,7 +115,7 @@ export function AuthPage() { function TopBanner() { const [isHovered, setIsHovered] = useState(false); const [isVisible, setIsVisible] = useState(true); - const [isMobile, setIsMobile] = useState(window.innerWidth < 600); + const isMobile = useMobileScreen(); useEffect(() => { // 检查 localStorage 中是否有标记 const bannerDismissed = storage.getItem("bannerDismissed"); @@ -127,15 +129,6 @@ function TopBanner() { } }, []); - useEffect(() => { - const handleResize = () => { - setIsMobile(window.innerWidth < 600); - }; - - window.addEventListener("resize", handleResize); - return () => window.removeEventListener("resize", handleResize); - }, []); - const handleMouseEnter = () => { setIsHovered(true); }; From f9f99639db6a759ad108d27a7fb18641673e55d9 Mon Sep 17 00:00:00 2001 From: lloydzhou Date: Tue, 24 Sep 2024 12:59:21 +0800 Subject: [PATCH 18/49] update --- app/store/plugin.ts | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/app/store/plugin.ts b/app/store/plugin.ts index ae31dde4e20..84ae0816e41 100644 --- a/app/store/plugin.ts +++ b/app/store/plugin.ts @@ -7,7 +7,7 @@ import yaml from "js-yaml"; import { adapter } from "../utils"; import { useAccessStore } from "./access"; -const isApp = getClientConfig()?.buildMode === "export"; +const isApp = getClientConfig()?.isApp; export type Plugin = { id: string; @@ -231,7 +231,6 @@ export const usePluginStore = createPersistStore( name: StoreKey.Plugin, version: 1, onRehydrateStorage(state) { - console.log("onRehydrateStorage", state); // Skip store rehydration on server side if (typeof window === "undefined") { return; @@ -242,23 +241,29 @@ export const usePluginStore = createPersistStore( .then((res) => { Promise.all( res.map((item: any) => - fetch(item.schema) - .then((res) => res.text()) - .then((content) => ({ - ...item, - content, - })), + // skip get schema + state.get(item.id) + ? item + : fetch(item.schema) + .then((res) => res.text()) + .then((content) => ({ + ...item, + content, + })) + .catch((e) => item), ), ).then((builtinPlugins: any) => { - builtinPlugins.forEach((item: any) => { - const plugin = state.create(item); - state.updatePlugin(plugin.id, (plugin) => { - const tool = FunctionToolService.add(plugin, true); - plugin.title = tool.api.definition.info.title; - plugin.version = tool.api.definition.info.version; - plugin.builtin = true; + builtinPlugins + .filter((item: any) => item?.content) + .forEach((item: any) => { + const plugin = state.create(item); + state.updatePlugin(plugin.id, (plugin) => { + const tool = FunctionToolService.add(plugin, true); + plugin.title = tool.api.definition.info.title; + plugin.version = tool.api.definition.info.version; + plugin.builtin = true; + }); }); - }); }); }); }, From 6c8143b7de54724ce8e7e3d1d40bd2052cce25e3 Mon Sep 17 00:00:00 2001 From: DDMeaqua Date: Tue, 24 Sep 2024 15:15:08 +0800 Subject: [PATCH 19/49] =?UTF-8?q?feat:=20=E5=85=A8=E5=B1=80=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=98=AF=E5=90=A6=E5=90=AF=E7=94=A8artifacts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/markdown.tsx | 5 ++++- app/components/mask.tsx | 32 +++++++++++++++++--------------- app/components/settings.tsx | 14 ++++++++++++++ app/store/config.ts | 2 ++ 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index 4f1b0ed24ea..c0833caf72b 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -21,6 +21,7 @@ import { } from "./artifacts"; import { useChatStore } from "../store"; import { IconButton } from "./button"; +import { useAppConfig } from "../store/config"; export function Mermaid(props: { code: string }) { const ref = useRef(null); @@ -92,7 +93,9 @@ export function PreCode(props: { children: any }) { } }, 600); - const enableArtifacts = session.mask?.enableArtifacts !== false; + const config = useAppConfig(); + const enableArtifacts = + session.mask?.enableArtifacts !== false && config.enableArtifacts; //Wrap the paragraph for plain-text useEffect(() => { diff --git a/app/components/mask.tsx b/app/components/mask.tsx index e4dd90826c7..c60e7a528fe 100644 --- a/app/components/mask.tsx +++ b/app/components/mask.tsx @@ -166,21 +166,23 @@ export function MaskConfig(props: { > - - { - props.updateMask((mask) => { - mask.enableArtifacts = e.currentTarget.checked; - }); - }} - > - + {globalConfig.enableArtifacts && ( + + { + props.updateMask((mask) => { + mask.enableArtifacts = e.currentTarget.checked; + }); + }} + > + + )} {!props.shouldSyncFromGlobal ? ( + + + + updateConfig( + (config) => + (config.enableArtifacts = e.currentTarget.checked), + ) + } + > + diff --git a/app/store/config.ts b/app/store/config.ts index 615cc8e82a3..3dcd4d86b80 100644 --- a/app/store/config.ts +++ b/app/store/config.ts @@ -50,6 +50,8 @@ export const DEFAULT_CONFIG = { enableAutoGenerateTitle: true, sidebarWidth: DEFAULT_SIDEBAR_WIDTH, + enableArtifacts: true, // show artifacts config + disablePromptHint: false, dontShowMaskSplashScreen: false, // dont show splash screen when create chat From 269d064e0a7b7b3690cc9aa0f3204960f1bee912 Mon Sep 17 00:00:00 2001 From: DDMeaqua Date: Tue, 24 Sep 2024 15:21:27 +0800 Subject: [PATCH 20/49] fix: #5450 --- app/components/settings.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/components/settings.tsx b/app/components/settings.tsx index 8f90c4c36a4..fcb106385da 100644 --- a/app/components/settings.tsx +++ b/app/components/settings.tsx @@ -1466,9 +1466,12 @@ export function Settings() { > - + From 6c37d04591d0fdfef130425346f69bd5d7ce3843 Mon Sep 17 00:00:00 2001 From: lloydzhou Date: Tue, 24 Sep 2024 18:45:20 +0800 Subject: [PATCH 21/49] auto play video/audio --- app/components/markdown.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index 4f1b0ed24ea..d6765f263be 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -279,6 +279,20 @@ function _MarkDownContent(props: { content: string }) { p: (pProps) =>

, a: (aProps) => { const href = aProps.href || ""; + if (/\.(aac|mp3|opus|wav)$/.test(href)) { + return ( +

+ +
+ ); + } + if (/\.(3gp|3g2|webm|ogv|mpeg|mp4|avi)$/.test(href)) { + return ( + + ); + } const isInternal = /^\/#/i.test(href); const target = isInternal ? "_self" : aProps.target ?? "_blank"; return ; From dbabb2c4030a96bb01aee5da35decef6f3328d6b Mon Sep 17 00:00:00 2001 From: lloydzhou Date: Tue, 24 Sep 2024 18:48:55 +0800 Subject: [PATCH 22/49] auto play video/audio --- app/components/markdown.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index d6765f263be..6c73d9ade51 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -288,7 +288,7 @@ function _MarkDownContent(props: { content: string }) { } if (/\.(3gp|3g2|webm|ogv|mpeg|mp4|avi)$/.test(href)) { return ( -
{ diff --git a/app/components/ui-lib.module.scss b/app/components/ui-lib.module.scss index 8c23142acdf..56aeac311ae 100644 --- a/app/components/ui-lib.module.scss +++ b/app/components/ui-lib.module.scss @@ -260,11 +260,9 @@ .select-with-icon-select { height: 100%; - max-width: 100%; border: var(--border-in-light); padding: 10px 35px 10px 10px; border-radius: 10px; - white-space: normal; appearance: none; cursor: pointer; background-color: var(--white); diff --git a/app/components/ui-lib.tsx b/app/components/ui-lib.tsx index ff317cc750f..10c91b989b0 100644 --- a/app/components/ui-lib.tsx +++ b/app/components/ui-lib.tsx @@ -294,19 +294,32 @@ export function Select( props: React.DetailedHTMLProps< React.SelectHTMLAttributes & { align?: "left" | "center"; + withiconstyle?: CSSProperties; + iconselectstyles?: CSSProperties; }, HTMLSelectElement >, ) { - const { className, children, align, style, ...otherProps } = props; + const { + className, + children, + align, + withiconstyle, + iconselectstyles, + ...otherProps + } = props; return (
- {children} From 10d472e79e2069046a3066db72785f99a127e047 Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Wed, 25 Sep 2024 14:41:41 +0800 Subject: [PATCH 29/49] fix --- app/components/model-config.module.scss | 7 +++++++ app/components/model-config.tsx | 4 ++-- app/components/ui-lib.tsx | 18 ++---------------- 3 files changed, 11 insertions(+), 18 deletions(-) create mode 100644 app/components/model-config.module.scss diff --git a/app/components/model-config.module.scss b/app/components/model-config.module.scss new file mode 100644 index 00000000000..40ba03f8657 --- /dev/null +++ b/app/components/model-config.module.scss @@ -0,0 +1,7 @@ +.select-compress-model { + width: 60%; + select { + max-width: 100%; + white-space: normal; + } +} diff --git a/app/components/model-config.tsx b/app/components/model-config.tsx index 008dda6d472..f2297e10b49 100644 --- a/app/components/model-config.tsx +++ b/app/components/model-config.tsx @@ -6,6 +6,7 @@ import { InputRange } from "./input-range"; import { ListItem, Select } from "./ui-lib"; import { useAllModels } from "../utils/hooks"; import { groupBy } from "lodash-es"; +import styles from "./model-config.module.scss"; export function ModelConfigList(props: { modelConfig: ModelConfig; @@ -242,8 +243,7 @@ export function ModelConfigList(props: { subTitle={Locale.Settings.CompressModel.SubTitle} > + From e83f61e74dfc036608eea8a6b9af8d8bb5259191 Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Wed, 25 Sep 2024 15:21:17 +0800 Subject: [PATCH 30/49] fix --- app/components/markdown.tsx | 10 +--------- app/locales/cn.ts | 5 +++-- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index 86adb49289f..9e1d17a3056 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -21,8 +21,6 @@ import { } from "./artifacts"; import { useChatStore } from "../store"; import { IconButton } from "./button"; -import { SAAS_CHAT_URL } from "@/app/constant"; -import { trackConversationGuideToCPaymentClick } from "../utils/auth-settings-events"; export function Mermaid(props: { code: string }) { const ref = useRef(null); const [hasError, setHasError] = useState(false); @@ -281,13 +279,7 @@ function _MarkDownContent(props: { content: string }) { const href = aProps.href || ""; const isInternal = /^\/#/i.test(href); const target = isInternal ? "_self" : aProps.target ?? "_blank"; - const handleClick = () => { - if (href === SAAS_CHAT_URL) { - trackConversationGuideToCPaymentClick(); - } - }; - - return ; + return ; }, }} > diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 3181d1703b6..727f784b49a 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -2,6 +2,7 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=title`; const isApp = !!getClientConfig()?.isApp; const cn = { @@ -9,10 +10,10 @@ const cn = { Error: { Unauthorized: isApp ? `😆 对话遇到了一些问题,不用慌: - \\ 1️⃣ 想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ 想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️` : `😆 对话遇到了一些问题,不用慌: - \ 1️⃣ 想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ 想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ 如果你正在使用私有部署版本,点击[这里](/#/auth)输入访问秘钥 🔑 \ 3️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️ `, From 68702bfb1f57c51e2d7498809797930c1bfa2798 Mon Sep 17 00:00:00 2001 From: lloydzhou Date: Wed, 25 Sep 2024 15:49:20 +0800 Subject: [PATCH 31/49] update version --- src-tauri/tauri.conf.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 2a19c933205..eb0d411cba6 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -9,7 +9,7 @@ }, "package": { "productName": "NextChat", - "version": "2.15.2" + "version": "2.15.3" }, "tauri": { "allowlist": { From 1d2f44fba861e16ea5cd2c3fc25752795ae8dc75 Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Wed, 25 Sep 2024 16:00:48 +0800 Subject: [PATCH 32/49] fix url --- app/locales/ar.ts | 5 +++-- app/locales/bn.ts | 5 +++-- app/locales/cn.ts | 2 +- app/locales/cs.ts | 5 +++-- app/locales/de.ts | 5 +++-- app/locales/en.ts | 5 +++-- app/locales/es.ts | 5 +++-- app/locales/fr.ts | 5 +++-- app/locales/id.ts | 5 +++-- app/locales/it.ts | 5 +++-- app/locales/jp.ts | 5 +++-- app/locales/ko.ts | 5 +++-- app/locales/no.ts | 5 +++-- app/locales/pt.ts | 5 +++-- app/locales/ru.ts | 5 +++-- app/locales/sk.ts | 5 +++-- app/locales/tr.ts | 5 +++-- app/locales/tw.ts | 5 +++-- app/locales/vi.ts | 5 +++-- 19 files changed, 55 insertions(+), 37 deletions(-) diff --git a/app/locales/ar.ts b/app/locales/ar.ts index 0399d7f7c48..fb575700163 100644 --- a/app/locales/ar.ts +++ b/app/locales/ar.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const ar: PartialLocaleType = { @@ -9,10 +10,10 @@ const ar: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 واجهت المحادثة بعض المشكلات، لا داعي للقلق: - \\ 1️⃣ إذا كنت ترغب في تجربة دون إعداد، [انقر هنا لبدء المحادثة فورًا 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ إذا كنت ترغب في تجربة دون إعداد، [انقر هنا لبدء المحادثة فورًا 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ إذا كنت تريد استخدام موارد OpenAI الخاصة بك، انقر [هنا](/#/settings) لتعديل الإعدادات ⚙️` : `😆 واجهت المحادثة بعض المشكلات، لا داعي للقلق: - \ 1️⃣ إذا كنت ترغب في تجربة دون إعداد، [انقر هنا لبدء المحادثة فورًا 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ إذا كنت ترغب في تجربة دون إعداد، [انقر هنا لبدء المحادثة فورًا 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ إذا كنت تستخدم إصدار النشر الخاص، انقر [هنا](/#/auth) لإدخال مفتاح الوصول 🔑 \ 3️⃣ إذا كنت تريد استخدام موارد OpenAI الخاصة بك، انقر [هنا](/#/settings) لتعديل الإعدادات ⚙️ `, diff --git a/app/locales/bn.ts b/app/locales/bn.ts index 78c0f76f007..94729525b54 100644 --- a/app/locales/bn.ts +++ b/app/locales/bn.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const bn: PartialLocaleType = { @@ -9,10 +10,10 @@ const bn: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 কথোপকথনে কিছু সমস্যা হয়েছে, চিন্তার কিছু নেই: - \\ 1️⃣ যদি আপনি শূন্য কনফিগারেশনে শুরু করতে চান, তাহলে [এখানে ক্লিক করে অবিলম্বে কথোপকথন শুরু করুন 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ যদি আপনি শূন্য কনফিগারেশনে শুরু করতে চান, তাহলে [এখানে ক্লিক করে অবিলম্বে কথোপকথন শুরু করুন 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ যদি আপনি আপনার নিজস্ব OpenAI সম্পদ ব্যবহার করতে চান, তাহলে [এখানে ক্লিক করুন](/#/settings) সেটিংস পরিবর্তন করতে ⚙️` : `😆 কথোপকথনে কিছু সমস্যা হয়েছে, চিন্তার কিছু নেই: - \ 1️⃣ যদি আপনি শূন্য কনফিগারেশনে শুরু করতে চান, তাহলে [এখানে ক্লিক করে অবিলম্বে কথোপকথন শুরু করুন 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ যদি আপনি শূন্য কনফিগারেশনে শুরু করতে চান, তাহলে [এখানে ক্লিক করে অবিলম্বে কথোপকথন শুরু করুন 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ যদি আপনি একটি প্রাইভেট ডেপ্লয়মেন্ট সংস্করণ ব্যবহার করেন, তাহলে [এখানে ক্লিক করুন](/#/auth) প্রবেশাধিকার কীগুলি প্রবেশ করতে 🔑 \ 3️⃣ যদি আপনি আপনার নিজস্ব OpenAI সম্পদ ব্যবহার করতে চান, তাহলে [এখানে ক্লিক করুন](/#/settings) সেটিংস পরিবর্তন করতে ⚙️ `, diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 727f784b49a..d5fd6d413df 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -2,7 +2,7 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=title`; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const cn = { diff --git a/app/locales/cs.ts b/app/locales/cs.ts index 972c46edace..33406284325 100644 --- a/app/locales/cs.ts +++ b/app/locales/cs.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const cs: PartialLocaleType = { @@ -9,10 +10,10 @@ const cs: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Rozhovor narazil na nějaké problémy, nebojte se: - \\ 1️⃣ Pokud chcete začít bez konfigurace, [klikněte sem pro okamžitý začátek chatu 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Pokud chcete začít bez konfigurace, [klikněte sem pro okamžitý začátek chatu 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Pokud chcete využít své vlastní zdroje OpenAI, klikněte [sem](/#/settings) a upravte nastavení ⚙️` : `😆 Rozhovor narazil na nějaké problémy, nebojte se: - \ 1️⃣ Pokud chcete začít bez konfigurace, [klikněte sem pro okamžitý začátek chatu 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Pokud chcete začít bez konfigurace, [klikněte sem pro okamžitý začátek chatu 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Pokud používáte verzi soukromého nasazení, klikněte [sem](/#/auth) a zadejte přístupový klíč 🔑 \ 3️⃣ Pokud chcete využít své vlastní zdroje OpenAI, klikněte [sem](/#/settings) a upravte nastavení ⚙️ `, diff --git a/app/locales/de.ts b/app/locales/de.ts index 4b878b17067..ac151956e72 100644 --- a/app/locales/de.ts +++ b/app/locales/de.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const de: PartialLocaleType = { @@ -9,10 +10,10 @@ const de: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Das Gespräch hatte einige Probleme, keine Sorge: - \\ 1️⃣ Wenn du ohne Konfiguration sofort starten möchtest, [klicke hier, um sofort zu chatten 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Wenn du ohne Konfiguration sofort starten möchtest, [klicke hier, um sofort zu chatten 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Wenn du deine eigenen OpenAI-Ressourcen verwenden möchtest, klicke [hier](/#/settings), um die Einstellungen zu ändern ⚙️` : `😆 Das Gespräch hatte einige Probleme, keine Sorge: - \ 1️⃣ Wenn du ohne Konfiguration sofort starten möchtest, [klicke hier, um sofort zu chatten 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Wenn du ohne Konfiguration sofort starten möchtest, [klicke hier, um sofort zu chatten 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Wenn du eine private Bereitstellung verwendest, klicke [hier](/#/auth), um den Zugriffsschlüssel einzugeben 🔑 \ 3️⃣ Wenn du deine eigenen OpenAI-Ressourcen verwenden möchtest, klicke [hier](/#/settings), um die Einstellungen zu ändern ⚙️ `, diff --git a/app/locales/en.ts b/app/locales/en.ts index 71d02d6b3a0..a291e7712a0 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -2,6 +2,7 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; import { LocaleType } from "./index"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; // if you are adding a new translation, please use PartialLocaleType instead of LocaleType const isApp = !!getClientConfig()?.isApp; @@ -10,10 +11,10 @@ const en: LocaleType = { Error: { Unauthorized: isApp ? `😆 Oops, there's an issue. No worries: - \\ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Want to use your own OpenAI resources? [Click here](/#/settings) to change settings ⚙️` : `😆 Oops, there's an issue. Let's fix it: - \ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Using a private setup? [Click here](/#/auth) to enter your key 🔑 \ 3️⃣ Want to use your own OpenAI resources? [Click here](/#/settings) to change settings ⚙️ `, diff --git a/app/locales/es.ts b/app/locales/es.ts index 3719e7e4c1f..186a7230a3b 100644 --- a/app/locales/es.ts +++ b/app/locales/es.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const es: PartialLocaleType = { @@ -9,10 +10,10 @@ const es: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 La conversación encontró algunos problemas, no te preocupes: - \\ 1️⃣ Si deseas comenzar sin configuración, [haz clic aquí para empezar a chatear inmediatamente 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Si deseas comenzar sin configuración, [haz clic aquí para empezar a chatear inmediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Si deseas usar tus propios recursos de OpenAI, haz clic [aquí](/#/settings) para modificar la configuración ⚙️` : `😆 La conversación encontró algunos problemas, no te preocupes: - \ 1️⃣ Si deseas comenzar sin configuración, [haz clic aquí para empezar a chatear inmediatamente 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Si deseas comenzar sin configuración, [haz clic aquí para empezar a chatear inmediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Si estás utilizando una versión de implementación privada, haz clic [aquí](/#/auth) para ingresar la clave de acceso 🔑 \ 3️⃣ Si deseas usar tus propios recursos de OpenAI, haz clic [aquí](/#/settings) para modificar la configuración ⚙️ `, diff --git a/app/locales/fr.ts b/app/locales/fr.ts index dd611cbf994..1e222566cf2 100644 --- a/app/locales/fr.ts +++ b/app/locales/fr.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const fr: PartialLocaleType = { @@ -9,10 +10,10 @@ const fr: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 La conversation a rencontré quelques problèmes, pas de panique : - \\ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Si vous souhaitez utiliser vos propres ressources OpenAI, cliquez [ici](/#/settings) pour modifier les paramètres ⚙️` : `😆 La conversation a rencontré quelques problèmes, pas de panique : - \ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Si vous utilisez une version déployée privée, cliquez [ici](/#/auth) pour entrer la clé d'accès 🔑 \ 3️⃣ Si vous souhaitez utiliser vos propres ressources OpenAI, cliquez [ici](/#/settings) pour modifier les paramètres ⚙️ `, diff --git a/app/locales/id.ts b/app/locales/id.ts index c9c6428f192..d5e1e76ae07 100644 --- a/app/locales/id.ts +++ b/app/locales/id.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const id: PartialLocaleType = { @@ -9,10 +10,10 @@ const id: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Percakapan mengalami beberapa masalah, tidak perlu khawatir: - \\ 1️⃣ Jika Anda ingin memulai tanpa konfigurasi, [klik di sini untuk mulai mengobrol segera 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Jika Anda ingin memulai tanpa konfigurasi, [klik di sini untuk mulai mengobrol segera 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Jika Anda ingin menggunakan sumber daya OpenAI Anda sendiri, klik [di sini](/#/settings) untuk mengubah pengaturan ⚙️` : `😆 Percakapan mengalami beberapa masalah, tidak perlu khawatir: - \ 1️⃣ Jika Anda ingin memulai tanpa konfigurasi, [klik di sini untuk mulai mengobrol segera 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Jika Anda ingin memulai tanpa konfigurasi, [klik di sini untuk mulai mengobrol segera 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Jika Anda menggunakan versi penyebaran pribadi, klik [di sini](/#/auth) untuk memasukkan kunci akses 🔑 \ 3️⃣ Jika Anda ingin menggunakan sumber daya OpenAI Anda sendiri, klik [di sini](/#/settings) untuk mengubah pengaturan ⚙️ `, diff --git a/app/locales/it.ts b/app/locales/it.ts index 83b80a1b600..12666039474 100644 --- a/app/locales/it.ts +++ b/app/locales/it.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const it: PartialLocaleType = { @@ -9,10 +10,10 @@ const it: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 La conversazione ha incontrato alcuni problemi, non preoccuparti: - \\ 1️⃣ Se vuoi iniziare senza configurazione, [clicca qui per iniziare a chattare immediatamente 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Se vuoi iniziare senza configurazione, [clicca qui per iniziare a chattare immediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Se vuoi utilizzare le tue risorse OpenAI, clicca [qui](/#/settings) per modificare le impostazioni ⚙️` : `😆 La conversazione ha incontrato alcuni problemi, non preoccuparti: - \ 1️⃣ Se vuoi iniziare senza configurazione, [clicca qui per iniziare a chattare immediatamente 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Se vuoi iniziare senza configurazione, [clicca qui per iniziare a chattare immediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Se stai utilizzando una versione di distribuzione privata, clicca [qui](/#/auth) per inserire la chiave di accesso 🔑 \ 3️⃣ Se vuoi utilizzare le tue risorse OpenAI, clicca [qui](/#/settings) per modificare le impostazioni ⚙️ `, diff --git a/app/locales/jp.ts b/app/locales/jp.ts index a4f849c778c..c20a8b3a271 100644 --- a/app/locales/jp.ts +++ b/app/locales/jp.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const jp: PartialLocaleType = { @@ -9,10 +10,10 @@ const jp: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 会話中に問題が発生しましたが、心配しないでください: - \\ 1️⃣ 設定なしで始めたい場合は、[ここをクリックしてすぐにチャットを開始 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ 設定なしで始めたい場合は、[ここをクリックしてすぐにチャットを開始 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ 自分のOpenAIリソースを使用したい場合は、[ここをクリックして](/#/settings)設定を変更してください ⚙️` : `😆 会話中に問題が発生しましたが、心配しないでください: - \ 1️⃣ 設定なしで始めたい場合は、[ここをクリックしてすぐにチャットを開始 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ 設定なしで始めたい場合は、[ここをクリックしてすぐにチャットを開始 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ プライベートデプロイ版を使用している場合は、[ここをクリックして](/#/auth)アクセストークンを入力してください 🔑 \ 3️⃣ 自分のOpenAIリソースを使用したい場合は、[ここをクリックして](/#/settings)設定を変更してください ⚙️ `, diff --git a/app/locales/ko.ts b/app/locales/ko.ts index 32eb2be7352..b34863b5101 100644 --- a/app/locales/ko.ts +++ b/app/locales/ko.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const ko: PartialLocaleType = { @@ -9,10 +10,10 @@ const ko: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 대화 중 문제가 발생했습니다, 걱정하지 마세요: - \\ 1️⃣ 제로 구성으로 시작하고 싶다면, [여기를 클릭하여 즉시 대화를 시작하세요 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ 제로 구성으로 시작하고 싶다면, [여기를 클릭하여 즉시 대화를 시작하세요 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ 자신의 OpenAI 리소스를 사용하고 싶다면, [여기를 클릭하여](/#/settings) 설정을 수정하세요 ⚙️` : `😆 대화 중 문제가 발생했습니다, 걱정하지 마세요: - \ 1️⃣ 제로 구성으로 시작하고 싶다면, [여기를 클릭하여 즉시 대화를 시작하세요 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ 제로 구성으로 시작하고 싶다면, [여기를 클릭하여 즉시 대화를 시작하세요 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ 개인 배포 버전을 사용하고 있다면, [여기를 클릭하여](/#/auth) 접근 키를 입력하세요 🔑 \ 3️⃣ 자신의 OpenAI 리소스를 사용하고 싶다면, [여기를 클릭하여](/#/settings) 설정을 수정하세요 ⚙️ `, diff --git a/app/locales/no.ts b/app/locales/no.ts index d02b5ce663c..0c3561ec0c1 100644 --- a/app/locales/no.ts +++ b/app/locales/no.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const no: PartialLocaleType = { @@ -9,10 +10,10 @@ const no: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Samtalen har støtt på noen problemer, ikke bekymre deg: - \\ 1️⃣ Hvis du vil starte uten konfigurasjon, [klikk her for å begynne å chatte umiddelbart 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Hvis du vil starte uten konfigurasjon, [klikk her for å begynne å chatte umiddelbart 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Hvis du vil bruke dine egne OpenAI-ressurser, klikk [her](/#/settings) for å endre innstillingene ⚙️` : `😆 Samtalen har støtt på noen problemer, ikke bekymre deg: - \ 1️⃣ Hvis du vil starte uten konfigurasjon, [klikk her for å begynne å chatte umiddelbart 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Hvis du vil starte uten konfigurasjon, [klikk her for å begynne å chatte umiddelbart 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Hvis du bruker en privat distribusjonsversjon, klikk [her](/#/auth) for å skrive inn tilgangsnøkkelen 🔑 \ 3️⃣ Hvis du vil bruke dine egne OpenAI-ressurser, klikk [her](/#/settings) for å endre innstillingene ⚙️ `, diff --git a/app/locales/pt.ts b/app/locales/pt.ts index c1de67384b4..b6de1d330e4 100644 --- a/app/locales/pt.ts +++ b/app/locales/pt.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import { PartialLocaleType } from "../locales/index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const pt: PartialLocaleType = { @@ -9,10 +10,10 @@ const pt: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 A conversa encontrou alguns problemas, não se preocupe: - \\ 1️⃣ Se você quiser começar sem configuração, [clique aqui para começar a conversar imediatamente 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Se você quiser começar sem configuração, [clique aqui para começar a conversar imediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Se você deseja usar seus próprios recursos OpenAI, clique [aqui](/#/settings) para modificar as configurações ⚙️` : `😆 A conversa encontrou alguns problemas, não se preocupe: - \ 1️⃣ Se você quiser começar sem configuração, [clique aqui para começar a conversar imediatamente 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Se você quiser começar sem configuração, [clique aqui para começar a conversar imediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Se você estiver usando uma versão de implantação privada, clique [aqui](/#/auth) para inserir a chave de acesso 🔑 \ 3️⃣ Se você deseja usar seus próprios recursos OpenAI, clique [aqui](/#/settings) para modificar as configurações ⚙️ `, diff --git a/app/locales/ru.ts b/app/locales/ru.ts index 2793ab7ec05..2410e089435 100644 --- a/app/locales/ru.ts +++ b/app/locales/ru.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import { PartialLocaleType } from "../locales/index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const ru: PartialLocaleType = { @@ -9,10 +10,10 @@ const ru: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 В разговоре возникли некоторые проблемы, не переживайте: - \\ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Если вы хотите использовать свои ресурсы OpenAI, нажмите [здесь](/#/settings), чтобы изменить настройки ⚙️` : `😆 В разговоре возникли некоторые проблемы, не переживайте: - \ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Если вы используете частную версию развертывания, нажмите [здесь](/#/auth), чтобы ввести ключ доступа 🔑 \ 3️⃣ Если вы хотите использовать свои ресурсы OpenAI, нажмите [здесь](/#/settings), чтобы изменить настройки ⚙️ `, diff --git a/app/locales/sk.ts b/app/locales/sk.ts index 62cfab0abb0..3edd6532f8b 100644 --- a/app/locales/sk.ts +++ b/app/locales/sk.ts @@ -2,6 +2,7 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; // if you are adding a new translation, please use PartialLocaleType instead of LocaleType const isApp = !!getClientConfig()?.isApp; @@ -10,10 +11,10 @@ const sk: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Rozhovor narazil na nejaké problémy, nebojte sa: - \\ 1️⃣ Ak chcete začať bez konfigurácie, [kliknite sem, aby ste okamžite začali chatovať 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Ak chcete začať bez konfigurácie, [kliknite sem, aby ste okamžite začali chatovať 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Ak chcete používať svoje vlastné zdroje OpenAI, kliknite [sem](/#/settings), aby ste upravili nastavenia ⚙️` : `😆 Rozhovor narazil na nejaké problémy, nebojte sa: - \ 1️⃣ Ak chcete začať bez konfigurácie, [kliknite sem, aby ste okamžite začali chatovať 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Ak chcete začať bez konfigurácie, [kliknite sem, aby ste okamžite začali chatovať 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Ak používate verziu súkromného nasadenia, kliknite [sem](/#/auth), aby ste zadali prístupový kľúč 🔑 \ 3️⃣ Ak chcete používať svoje vlastné zdroje OpenAI, kliknite [sem](/#/settings), aby ste upravili nastavenia ⚙️ `, diff --git a/app/locales/tr.ts b/app/locales/tr.ts index 7fe6170ca76..9f8682e8434 100644 --- a/app/locales/tr.ts +++ b/app/locales/tr.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const tr: PartialLocaleType = { @@ -9,10 +10,10 @@ const tr: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Sohbet bazı sorunlarla karşılaştı, endişelenmeyin: - \\ 1️⃣ Eğer sıfır yapılandırma ile başlamak istiyorsanız, [buraya tıklayarak hemen sohbete başlayın 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Eğer sıfır yapılandırma ile başlamak istiyorsanız, [buraya tıklayarak hemen sohbete başlayın 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Kendi OpenAI kaynaklarınızı kullanmak istiyorsanız, [buraya tıklayarak](/#/settings) ayarları değiştirin ⚙️` : `😆 Sohbet bazı sorunlarla karşılaştı, endişelenmeyin: - \ 1️⃣ Eğer sıfır yapılandırma ile başlamak istiyorsanız, [buraya tıklayarak hemen sohbete başlayın 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Eğer sıfır yapılandırma ile başlamak istiyorsanız, [buraya tıklayarak hemen sohbete başlayın 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Eğer özel dağıtım sürümü kullanıyorsanız, [buraya tıklayarak](/#/auth) erişim anahtarını girin 🔑 \ 3️⃣ Kendi OpenAI kaynaklarınızı kullanmak istiyorsanız, [buraya tıklayarak](/#/settings) ayarları değiştirin ⚙️ `, diff --git a/app/locales/tw.ts b/app/locales/tw.ts index 39e2bc96833..ce5c7874f85 100644 --- a/app/locales/tw.ts +++ b/app/locales/tw.ts @@ -1,6 +1,7 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const tw = { @@ -8,10 +9,10 @@ const tw = { Error: { Unauthorized: isApp ? `😆 對話遇到了一些問題,不用慌: - \\ 1️⃣ 想要零配置開箱即用,[點擊這裡立刻開啟對話 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ 想要零配置開箱即用,[點擊這裡立刻開啟對話 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ 如果你想消耗自己的 OpenAI 資源,點擊[這裡](/#/settings)修改設定 ⚙️` : `😆 對話遇到了一些問題,不用慌: - \ 1️⃣ 想要零配置開箱即用,[點擊這裡立刻開啟對話 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ 想要零配置開箱即用,[點擊這裡立刻開啟對話 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ 如果你正在使用私有部署版本,點擊[這裡](/#/auth)輸入訪問秘鑰 🔑 \ 3️⃣ 如果你想消耗自己的 OpenAI 資源,點擊[這裡](/#/settings)修改設定 ⚙️ `, diff --git a/app/locales/vi.ts b/app/locales/vi.ts index c4b6ffcd503..bdee2db15f8 100644 --- a/app/locales/vi.ts +++ b/app/locales/vi.ts @@ -2,6 +2,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; import { SAAS_CHAT_URL } from "@/app/constant"; +const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const vi: PartialLocaleType = { @@ -9,10 +10,10 @@ const vi: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Cuộc trò chuyện gặp một số vấn đề, đừng lo lắng: - \\ 1️⃣ Nếu bạn muốn bắt đầu mà không cần cấu hình, [nhấp vào đây để bắt đầu trò chuyện ngay lập tức 🚀](${SAAS_CHAT_URL}) + \\ 1️⃣ Nếu bạn muốn bắt đầu mà không cần cấu hình, [nhấp vào đây để bắt đầu trò chuyện ngay lập tức 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \\ 2️⃣ Nếu bạn muốn sử dụng tài nguyên OpenAI của riêng mình, hãy nhấp [vào đây](/#/settings) để thay đổi cài đặt ⚙️` : `😆 Cuộc trò chuyện gặp một số vấn đề, đừng lo lắng: - \ 1️⃣ Nếu bạn muốn bắt đầu mà không cần cấu hình, [nhấp vào đây để bắt đầu trò chuyện ngay lập tức 🚀](${SAAS_CHAT_URL}) + \ 1️⃣ Nếu bạn muốn bắt đầu mà không cần cấu hình, [nhấp vào đây để bắt đầu trò chuyện ngay lập tức 🚀](${SAAS_CHAT_URL_WITH_PARAM}) \ 2️⃣ Nếu bạn đang sử dụng phiên bản triển khai riêng, hãy nhấp [vào đây](/#/auth) để nhập khóa truy cập 🔑 \ 3️⃣ Nếu bạn muốn sử dụng tài nguyên OpenAI của riêng mình, hãy nhấp [vào đây](/#/settings) để thay đổi cài đặt ⚙️ `, From 13c68bd81053bde55081a811e0a4bedd7eb429fc Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Wed, 25 Sep 2024 16:11:57 +0800 Subject: [PATCH 33/49] fix url utm --- app/constant.ts | 1 + app/locales/ar.ts | 7 +++---- app/locales/bn.ts | 7 +++---- app/locales/cn.ts | 7 +++---- app/locales/cs.ts | 7 +++---- app/locales/de.ts | 7 +++---- app/locales/en.ts | 7 +++---- app/locales/es.ts | 7 +++---- app/locales/fr.ts | 7 +++---- app/locales/id.ts | 7 +++---- app/locales/it.ts | 7 +++---- app/locales/jp.ts | 7 +++---- app/locales/ko.ts | 7 +++---- app/locales/no.ts | 7 +++---- app/locales/pt.ts | 7 +++---- app/locales/ru.ts | 7 +++---- app/locales/sk.ts | 7 +++---- app/locales/tr.ts | 7 +++---- app/locales/tw.ts | 7 +++---- app/locales/vi.ts | 7 +++---- 20 files changed, 58 insertions(+), 76 deletions(-) diff --git a/app/constant.ts b/app/constant.ts index d97f3b209b6..a54a973daa6 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -503,3 +503,4 @@ export const PLUGINS = [ ]; export const SAAS_CHAT_URL = "https://nextchat.dev/chat"; +export const SAAS_CHAT_UTM_URL = "https://nextchat.dev/chat?utm=github"; diff --git a/app/locales/ar.ts b/app/locales/ar.ts index fb575700163..e2fad3494c3 100644 --- a/app/locales/ar.ts +++ b/app/locales/ar.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const ar: PartialLocaleType = { @@ -10,10 +9,10 @@ const ar: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 واجهت المحادثة بعض المشكلات، لا داعي للقلق: - \\ 1️⃣ إذا كنت ترغب في تجربة دون إعداد، [انقر هنا لبدء المحادثة فورًا 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ إذا كنت ترغب في تجربة دون إعداد، [انقر هنا لبدء المحادثة فورًا 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ إذا كنت تريد استخدام موارد OpenAI الخاصة بك، انقر [هنا](/#/settings) لتعديل الإعدادات ⚙️` : `😆 واجهت المحادثة بعض المشكلات، لا داعي للقلق: - \ 1️⃣ إذا كنت ترغب في تجربة دون إعداد، [انقر هنا لبدء المحادثة فورًا 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ إذا كنت ترغب في تجربة دون إعداد، [انقر هنا لبدء المحادثة فورًا 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ إذا كنت تستخدم إصدار النشر الخاص، انقر [هنا](/#/auth) لإدخال مفتاح الوصول 🔑 \ 3️⃣ إذا كنت تريد استخدام موارد OpenAI الخاصة بك، انقر [هنا](/#/settings) لتعديل الإعدادات ⚙️ `, diff --git a/app/locales/bn.ts b/app/locales/bn.ts index 94729525b54..f52f101ce35 100644 --- a/app/locales/bn.ts +++ b/app/locales/bn.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const bn: PartialLocaleType = { @@ -10,10 +9,10 @@ const bn: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 কথোপকথনে কিছু সমস্যা হয়েছে, চিন্তার কিছু নেই: - \\ 1️⃣ যদি আপনি শূন্য কনফিগারেশনে শুরু করতে চান, তাহলে [এখানে ক্লিক করে অবিলম্বে কথোপকথন শুরু করুন 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ যদি আপনি শূন্য কনফিগারেশনে শুরু করতে চান, তাহলে [এখানে ক্লিক করে অবিলম্বে কথোপকথন শুরু করুন 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ যদি আপনি আপনার নিজস্ব OpenAI সম্পদ ব্যবহার করতে চান, তাহলে [এখানে ক্লিক করুন](/#/settings) সেটিংস পরিবর্তন করতে ⚙️` : `😆 কথোপকথনে কিছু সমস্যা হয়েছে, চিন্তার কিছু নেই: - \ 1️⃣ যদি আপনি শূন্য কনফিগারেশনে শুরু করতে চান, তাহলে [এখানে ক্লিক করে অবিলম্বে কথোপকথন শুরু করুন 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ যদি আপনি শূন্য কনফিগারেশনে শুরু করতে চান, তাহলে [এখানে ক্লিক করে অবিলম্বে কথোপকথন শুরু করুন 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ যদি আপনি একটি প্রাইভেট ডেপ্লয়মেন্ট সংস্করণ ব্যবহার করেন, তাহলে [এখানে ক্লিক করুন](/#/auth) প্রবেশাধিকার কীগুলি প্রবেশ করতে 🔑 \ 3️⃣ যদি আপনি আপনার নিজস্ব OpenAI সম্পদ ব্যবহার করতে চান, তাহলে [এখানে ক্লিক করুন](/#/settings) সেটিংস পরিবর্তন করতে ⚙️ `, diff --git a/app/locales/cn.ts b/app/locales/cn.ts index d5fd6d413df..e5bcca0edbb 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -1,8 +1,7 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; -import { SAAS_CHAT_URL } from "@/app/constant"; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; const isApp = !!getClientConfig()?.isApp; const cn = { @@ -10,10 +9,10 @@ const cn = { Error: { Unauthorized: isApp ? `😆 对话遇到了一些问题,不用慌: - \\ 1️⃣ 想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ 想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️` : `😆 对话遇到了一些问题,不用慌: - \ 1️⃣ 想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ 想要零配置开箱即用,[点击这里立刻开启对话 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ 如果你正在使用私有部署版本,点击[这里](/#/auth)输入访问秘钥 🔑 \ 3️⃣ 如果你想消耗自己的 OpenAI 资源,点击[这里](/#/settings)修改设置 ⚙️ `, diff --git a/app/locales/cs.ts b/app/locales/cs.ts index 33406284325..d62a2036710 100644 --- a/app/locales/cs.ts +++ b/app/locales/cs.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const cs: PartialLocaleType = { @@ -10,10 +9,10 @@ const cs: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Rozhovor narazil na nějaké problémy, nebojte se: - \\ 1️⃣ Pokud chcete začít bez konfigurace, [klikněte sem pro okamžitý začátek chatu 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Pokud chcete začít bez konfigurace, [klikněte sem pro okamžitý začátek chatu 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Pokud chcete využít své vlastní zdroje OpenAI, klikněte [sem](/#/settings) a upravte nastavení ⚙️` : `😆 Rozhovor narazil na nějaké problémy, nebojte se: - \ 1️⃣ Pokud chcete začít bez konfigurace, [klikněte sem pro okamžitý začátek chatu 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Pokud chcete začít bez konfigurace, [klikněte sem pro okamžitý začátek chatu 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Pokud používáte verzi soukromého nasazení, klikněte [sem](/#/auth) a zadejte přístupový klíč 🔑 \ 3️⃣ Pokud chcete využít své vlastní zdroje OpenAI, klikněte [sem](/#/settings) a upravte nastavení ⚙️ `, diff --git a/app/locales/de.ts b/app/locales/de.ts index ac151956e72..3490190a80a 100644 --- a/app/locales/de.ts +++ b/app/locales/de.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const de: PartialLocaleType = { @@ -10,10 +9,10 @@ const de: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Das Gespräch hatte einige Probleme, keine Sorge: - \\ 1️⃣ Wenn du ohne Konfiguration sofort starten möchtest, [klicke hier, um sofort zu chatten 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Wenn du ohne Konfiguration sofort starten möchtest, [klicke hier, um sofort zu chatten 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Wenn du deine eigenen OpenAI-Ressourcen verwenden möchtest, klicke [hier](/#/settings), um die Einstellungen zu ändern ⚙️` : `😆 Das Gespräch hatte einige Probleme, keine Sorge: - \ 1️⃣ Wenn du ohne Konfiguration sofort starten möchtest, [klicke hier, um sofort zu chatten 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Wenn du ohne Konfiguration sofort starten möchtest, [klicke hier, um sofort zu chatten 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Wenn du eine private Bereitstellung verwendest, klicke [hier](/#/auth), um den Zugriffsschlüssel einzugeben 🔑 \ 3️⃣ Wenn du deine eigenen OpenAI-Ressourcen verwenden möchtest, klicke [hier](/#/settings), um die Einstellungen zu ändern ⚙️ `, diff --git a/app/locales/en.ts b/app/locales/en.ts index a291e7712a0..1204575224a 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -1,8 +1,7 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; import { LocaleType } from "./index"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; // if you are adding a new translation, please use PartialLocaleType instead of LocaleType const isApp = !!getClientConfig()?.isApp; @@ -11,10 +10,10 @@ const en: LocaleType = { Error: { Unauthorized: isApp ? `😆 Oops, there's an issue. No worries: - \\ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Want to use your own OpenAI resources? [Click here](/#/settings) to change settings ⚙️` : `😆 Oops, there's an issue. Let's fix it: - \ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ New here? [Click to start chatting now 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Using a private setup? [Click here](/#/auth) to enter your key 🔑 \ 3️⃣ Want to use your own OpenAI resources? [Click here](/#/settings) to change settings ⚙️ `, diff --git a/app/locales/es.ts b/app/locales/es.ts index 186a7230a3b..03af9b439ad 100644 --- a/app/locales/es.ts +++ b/app/locales/es.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const es: PartialLocaleType = { @@ -10,10 +9,10 @@ const es: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 La conversación encontró algunos problemas, no te preocupes: - \\ 1️⃣ Si deseas comenzar sin configuración, [haz clic aquí para empezar a chatear inmediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Si deseas comenzar sin configuración, [haz clic aquí para empezar a chatear inmediatamente 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Si deseas usar tus propios recursos de OpenAI, haz clic [aquí](/#/settings) para modificar la configuración ⚙️` : `😆 La conversación encontró algunos problemas, no te preocupes: - \ 1️⃣ Si deseas comenzar sin configuración, [haz clic aquí para empezar a chatear inmediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Si deseas comenzar sin configuración, [haz clic aquí para empezar a chatear inmediatamente 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Si estás utilizando una versión de implementación privada, haz clic [aquí](/#/auth) para ingresar la clave de acceso 🔑 \ 3️⃣ Si deseas usar tus propios recursos de OpenAI, haz clic [aquí](/#/settings) para modificar la configuración ⚙️ `, diff --git a/app/locales/fr.ts b/app/locales/fr.ts index 1e222566cf2..d25c60eb6c8 100644 --- a/app/locales/fr.ts +++ b/app/locales/fr.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const fr: PartialLocaleType = { @@ -10,10 +9,10 @@ const fr: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 La conversation a rencontré quelques problèmes, pas de panique : - \\ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Si vous souhaitez utiliser vos propres ressources OpenAI, cliquez [ici](/#/settings) pour modifier les paramètres ⚙️` : `😆 La conversation a rencontré quelques problèmes, pas de panique : - \ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Si vous utilisez une version déployée privée, cliquez [ici](/#/auth) pour entrer la clé d'accès 🔑 \ 3️⃣ Si vous souhaitez utiliser vos propres ressources OpenAI, cliquez [ici](/#/settings) pour modifier les paramètres ⚙️ `, diff --git a/app/locales/id.ts b/app/locales/id.ts index d5e1e76ae07..af96fd2725c 100644 --- a/app/locales/id.ts +++ b/app/locales/id.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const id: PartialLocaleType = { @@ -10,10 +9,10 @@ const id: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Percakapan mengalami beberapa masalah, tidak perlu khawatir: - \\ 1️⃣ Jika Anda ingin memulai tanpa konfigurasi, [klik di sini untuk mulai mengobrol segera 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Jika Anda ingin memulai tanpa konfigurasi, [klik di sini untuk mulai mengobrol segera 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Jika Anda ingin menggunakan sumber daya OpenAI Anda sendiri, klik [di sini](/#/settings) untuk mengubah pengaturan ⚙️` : `😆 Percakapan mengalami beberapa masalah, tidak perlu khawatir: - \ 1️⃣ Jika Anda ingin memulai tanpa konfigurasi, [klik di sini untuk mulai mengobrol segera 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Jika Anda ingin memulai tanpa konfigurasi, [klik di sini untuk mulai mengobrol segera 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Jika Anda menggunakan versi penyebaran pribadi, klik [di sini](/#/auth) untuk memasukkan kunci akses 🔑 \ 3️⃣ Jika Anda ingin menggunakan sumber daya OpenAI Anda sendiri, klik [di sini](/#/settings) untuk mengubah pengaturan ⚙️ `, diff --git a/app/locales/it.ts b/app/locales/it.ts index 12666039474..59bc1eb1594 100644 --- a/app/locales/it.ts +++ b/app/locales/it.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const it: PartialLocaleType = { @@ -10,10 +9,10 @@ const it: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 La conversazione ha incontrato alcuni problemi, non preoccuparti: - \\ 1️⃣ Se vuoi iniziare senza configurazione, [clicca qui per iniziare a chattare immediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Se vuoi iniziare senza configurazione, [clicca qui per iniziare a chattare immediatamente 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Se vuoi utilizzare le tue risorse OpenAI, clicca [qui](/#/settings) per modificare le impostazioni ⚙️` : `😆 La conversazione ha incontrato alcuni problemi, non preoccuparti: - \ 1️⃣ Se vuoi iniziare senza configurazione, [clicca qui per iniziare a chattare immediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Se vuoi iniziare senza configurazione, [clicca qui per iniziare a chattare immediatamente 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Se stai utilizzando una versione di distribuzione privata, clicca [qui](/#/auth) per inserire la chiave di accesso 🔑 \ 3️⃣ Se vuoi utilizzare le tue risorse OpenAI, clicca [qui](/#/settings) per modificare le impostazioni ⚙️ `, diff --git a/app/locales/jp.ts b/app/locales/jp.ts index c20a8b3a271..e7c81e186bd 100644 --- a/app/locales/jp.ts +++ b/app/locales/jp.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const jp: PartialLocaleType = { @@ -10,10 +9,10 @@ const jp: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 会話中に問題が発生しましたが、心配しないでください: - \\ 1️⃣ 設定なしで始めたい場合は、[ここをクリックしてすぐにチャットを開始 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ 設定なしで始めたい場合は、[ここをクリックしてすぐにチャットを開始 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ 自分のOpenAIリソースを使用したい場合は、[ここをクリックして](/#/settings)設定を変更してください ⚙️` : `😆 会話中に問題が発生しましたが、心配しないでください: - \ 1️⃣ 設定なしで始めたい場合は、[ここをクリックしてすぐにチャットを開始 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ 設定なしで始めたい場合は、[ここをクリックしてすぐにチャットを開始 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ プライベートデプロイ版を使用している場合は、[ここをクリックして](/#/auth)アクセストークンを入力してください 🔑 \ 3️⃣ 自分のOpenAIリソースを使用したい場合は、[ここをクリックして](/#/settings)設定を変更してください ⚙️ `, diff --git a/app/locales/ko.ts b/app/locales/ko.ts index b34863b5101..f2c433b766f 100644 --- a/app/locales/ko.ts +++ b/app/locales/ko.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const ko: PartialLocaleType = { @@ -10,10 +9,10 @@ const ko: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 대화 중 문제가 발생했습니다, 걱정하지 마세요: - \\ 1️⃣ 제로 구성으로 시작하고 싶다면, [여기를 클릭하여 즉시 대화를 시작하세요 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ 제로 구성으로 시작하고 싶다면, [여기를 클릭하여 즉시 대화를 시작하세요 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ 자신의 OpenAI 리소스를 사용하고 싶다면, [여기를 클릭하여](/#/settings) 설정을 수정하세요 ⚙️` : `😆 대화 중 문제가 발생했습니다, 걱정하지 마세요: - \ 1️⃣ 제로 구성으로 시작하고 싶다면, [여기를 클릭하여 즉시 대화를 시작하세요 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ 제로 구성으로 시작하고 싶다면, [여기를 클릭하여 즉시 대화를 시작하세요 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ 개인 배포 버전을 사용하고 있다면, [여기를 클릭하여](/#/auth) 접근 키를 입력하세요 🔑 \ 3️⃣ 자신의 OpenAI 리소스를 사용하고 싶다면, [여기를 클릭하여](/#/settings) 설정을 수정하세요 ⚙️ `, diff --git a/app/locales/no.ts b/app/locales/no.ts index 0c3561ec0c1..f056ef12fb3 100644 --- a/app/locales/no.ts +++ b/app/locales/no.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const no: PartialLocaleType = { @@ -10,10 +9,10 @@ const no: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Samtalen har støtt på noen problemer, ikke bekymre deg: - \\ 1️⃣ Hvis du vil starte uten konfigurasjon, [klikk her for å begynne å chatte umiddelbart 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Hvis du vil starte uten konfigurasjon, [klikk her for å begynne å chatte umiddelbart 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Hvis du vil bruke dine egne OpenAI-ressurser, klikk [her](/#/settings) for å endre innstillingene ⚙️` : `😆 Samtalen har støtt på noen problemer, ikke bekymre deg: - \ 1️⃣ Hvis du vil starte uten konfigurasjon, [klikk her for å begynne å chatte umiddelbart 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Hvis du vil starte uten konfigurasjon, [klikk her for å begynne å chatte umiddelbart 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Hvis du bruker en privat distribusjonsversjon, klikk [her](/#/auth) for å skrive inn tilgangsnøkkelen 🔑 \ 3️⃣ Hvis du vil bruke dine egne OpenAI-ressurser, klikk [her](/#/settings) for å endre innstillingene ⚙️ `, diff --git a/app/locales/pt.ts b/app/locales/pt.ts index b6de1d330e4..152f502284c 100644 --- a/app/locales/pt.ts +++ b/app/locales/pt.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import { PartialLocaleType } from "../locales/index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const pt: PartialLocaleType = { @@ -10,10 +9,10 @@ const pt: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 A conversa encontrou alguns problemas, não se preocupe: - \\ 1️⃣ Se você quiser começar sem configuração, [clique aqui para começar a conversar imediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Se você quiser começar sem configuração, [clique aqui para começar a conversar imediatamente 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Se você deseja usar seus próprios recursos OpenAI, clique [aqui](/#/settings) para modificar as configurações ⚙️` : `😆 A conversa encontrou alguns problemas, não se preocupe: - \ 1️⃣ Se você quiser começar sem configuração, [clique aqui para começar a conversar imediatamente 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Se você quiser começar sem configuração, [clique aqui para começar a conversar imediatamente 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Se você estiver usando uma versão de implantação privada, clique [aqui](/#/auth) para inserir a chave de acesso 🔑 \ 3️⃣ Se você deseja usar seus próprios recursos OpenAI, clique [aqui](/#/settings) para modificar as configurações ⚙️ `, diff --git a/app/locales/ru.ts b/app/locales/ru.ts index 2410e089435..4294a3b341b 100644 --- a/app/locales/ru.ts +++ b/app/locales/ru.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import { PartialLocaleType } from "../locales/index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const ru: PartialLocaleType = { @@ -10,10 +9,10 @@ const ru: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 В разговоре возникли некоторые проблемы, не переживайте: - \\ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Если вы хотите использовать свои ресурсы OpenAI, нажмите [здесь](/#/settings), чтобы изменить настройки ⚙️` : `😆 В разговоре возникли некоторые проблемы, не переживайте: - \ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Если вы используете частную версию развертывания, нажмите [здесь](/#/auth), чтобы ввести ключ доступа 🔑 \ 3️⃣ Если вы хотите использовать свои ресурсы OpenAI, нажмите [здесь](/#/settings), чтобы изменить настройки ⚙️ `, diff --git a/app/locales/sk.ts b/app/locales/sk.ts index 3edd6532f8b..36454de752a 100644 --- a/app/locales/sk.ts +++ b/app/locales/sk.ts @@ -1,8 +1,7 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; // if you are adding a new translation, please use PartialLocaleType instead of LocaleType const isApp = !!getClientConfig()?.isApp; @@ -11,10 +10,10 @@ const sk: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Rozhovor narazil na nejaké problémy, nebojte sa: - \\ 1️⃣ Ak chcete začať bez konfigurácie, [kliknite sem, aby ste okamžite začali chatovať 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Ak chcete začať bez konfigurácie, [kliknite sem, aby ste okamžite začali chatovať 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Ak chcete používať svoje vlastné zdroje OpenAI, kliknite [sem](/#/settings), aby ste upravili nastavenia ⚙️` : `😆 Rozhovor narazil na nejaké problémy, nebojte sa: - \ 1️⃣ Ak chcete začať bez konfigurácie, [kliknite sem, aby ste okamžite začali chatovať 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Ak chcete začať bez konfigurácie, [kliknite sem, aby ste okamžite začali chatovať 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Ak používate verziu súkromného nasadenia, kliknite [sem](/#/auth), aby ste zadali prístupový kľúč 🔑 \ 3️⃣ Ak chcete používať svoje vlastné zdroje OpenAI, kliknite [sem](/#/settings), aby ste upravili nastavenia ⚙️ `, diff --git a/app/locales/tr.ts b/app/locales/tr.ts index 9f8682e8434..2082488a51c 100644 --- a/app/locales/tr.ts +++ b/app/locales/tr.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const tr: PartialLocaleType = { @@ -10,10 +9,10 @@ const tr: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Sohbet bazı sorunlarla karşılaştı, endişelenmeyin: - \\ 1️⃣ Eğer sıfır yapılandırma ile başlamak istiyorsanız, [buraya tıklayarak hemen sohbete başlayın 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Eğer sıfır yapılandırma ile başlamak istiyorsanız, [buraya tıklayarak hemen sohbete başlayın 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Kendi OpenAI kaynaklarınızı kullanmak istiyorsanız, [buraya tıklayarak](/#/settings) ayarları değiştirin ⚙️` : `😆 Sohbet bazı sorunlarla karşılaştı, endişelenmeyin: - \ 1️⃣ Eğer sıfır yapılandırma ile başlamak istiyorsanız, [buraya tıklayarak hemen sohbete başlayın 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Eğer sıfır yapılandırma ile başlamak istiyorsanız, [buraya tıklayarak hemen sohbete başlayın 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Eğer özel dağıtım sürümü kullanıyorsanız, [buraya tıklayarak](/#/auth) erişim anahtarını girin 🔑 \ 3️⃣ Kendi OpenAI kaynaklarınızı kullanmak istiyorsanız, [buraya tıklayarak](/#/settings) ayarları değiştirin ⚙️ `, diff --git a/app/locales/tw.ts b/app/locales/tw.ts index ce5c7874f85..7cb84670894 100644 --- a/app/locales/tw.ts +++ b/app/locales/tw.ts @@ -1,7 +1,6 @@ import { getClientConfig } from "../config/client"; import { SubmitKey } from "../store/config"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const tw = { @@ -9,10 +8,10 @@ const tw = { Error: { Unauthorized: isApp ? `😆 對話遇到了一些問題,不用慌: - \\ 1️⃣ 想要零配置開箱即用,[點擊這裡立刻開啟對話 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ 想要零配置開箱即用,[點擊這裡立刻開啟對話 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ 如果你想消耗自己的 OpenAI 資源,點擊[這裡](/#/settings)修改設定 ⚙️` : `😆 對話遇到了一些問題,不用慌: - \ 1️⃣ 想要零配置開箱即用,[點擊這裡立刻開啟對話 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ 想要零配置開箱即用,[點擊這裡立刻開啟對話 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ 如果你正在使用私有部署版本,點擊[這裡](/#/auth)輸入訪問秘鑰 🔑 \ 3️⃣ 如果你想消耗自己的 OpenAI 資源,點擊[這裡](/#/settings)修改設定 ⚙️ `, diff --git a/app/locales/vi.ts b/app/locales/vi.ts index bdee2db15f8..c53baf35d16 100644 --- a/app/locales/vi.ts +++ b/app/locales/vi.ts @@ -1,8 +1,7 @@ import { SubmitKey } from "../store/config"; import type { PartialLocaleType } from "./index"; import { getClientConfig } from "../config/client"; -import { SAAS_CHAT_URL } from "@/app/constant"; -const SAAS_CHAT_URL_WITH_PARAM = `${SAAS_CHAT_URL}?data=chat`; +import { SAAS_CHAT_UTM_URL } from "@/app/constant"; const isApp = !!getClientConfig()?.isApp; const vi: PartialLocaleType = { @@ -10,10 +9,10 @@ const vi: PartialLocaleType = { Error: { Unauthorized: isApp ? `😆 Cuộc trò chuyện gặp một số vấn đề, đừng lo lắng: - \\ 1️⃣ Nếu bạn muốn bắt đầu mà không cần cấu hình, [nhấp vào đây để bắt đầu trò chuyện ngay lập tức 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \\ 1️⃣ Nếu bạn muốn bắt đầu mà không cần cấu hình, [nhấp vào đây để bắt đầu trò chuyện ngay lập tức 🚀](${SAAS_CHAT_UTM_URL}) \\ 2️⃣ Nếu bạn muốn sử dụng tài nguyên OpenAI của riêng mình, hãy nhấp [vào đây](/#/settings) để thay đổi cài đặt ⚙️` : `😆 Cuộc trò chuyện gặp một số vấn đề, đừng lo lắng: - \ 1️⃣ Nếu bạn muốn bắt đầu mà không cần cấu hình, [nhấp vào đây để bắt đầu trò chuyện ngay lập tức 🚀](${SAAS_CHAT_URL_WITH_PARAM}) + \ 1️⃣ Nếu bạn muốn bắt đầu mà không cần cấu hình, [nhấp vào đây để bắt đầu trò chuyện ngay lập tức 🚀](${SAAS_CHAT_UTM_URL}) \ 2️⃣ Nếu bạn đang sử dụng phiên bản triển khai riêng, hãy nhấp [vào đây](/#/auth) để nhập khóa truy cập 🔑 \ 3️⃣ Nếu bạn muốn sử dụng tài nguyên OpenAI của riêng mình, hãy nhấp [vào đây](/#/settings) để thay đổi cài đặt ⚙️ `, From 6655c64e5502d3ad845758e35c028f8c1df5bc25 Mon Sep 17 00:00:00 2001 From: river Date: Wed, 25 Sep 2024 16:29:59 +0800 Subject: [PATCH 34/49] chore: cn --- README_CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_CN.md b/README_CN.md index 7831e2ee981..c5d02477c2c 100644 --- a/README_CN.md +++ b/README_CN.md @@ -8,7 +8,7 @@ 一键免费部署你的私人 ChatGPT 网页应用,支持 GPT3, GPT4 & Gemini Pro 模型。 -[企业版](#%E4%BC%81%E4%B8%9A%E7%89%88) /[演示 Demo](https://chat-gpt-next-web.vercel.app/) / [反馈 Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [加入 Discord](https://discord.gg/zrhvHCr79N) +[NextChatAI](https://nextchat.dev/chat) / [企业版](#%E4%BC%81%E4%B8%9A%E7%89%88) / [演示 Demo](https://chat-gpt-next-web.vercel.app/) / [反馈 Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [加入 Discord](https://discord.gg/zrhvHCr79N) [Deploy on Zeabur](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FChatGPTNextWeb%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=nextchat&repository-name=NextChat) [Deploy on Zeabur](https://zeabur.com/templates/ZBUEFA) [Open in Gitpod](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) From 13777786c45b37eb2b2081bebaa3a406e55d1959 Mon Sep 17 00:00:00 2001 From: river Date: Wed, 25 Sep 2024 16:30:26 +0800 Subject: [PATCH 35/49] chore: ja --- README_JA.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_JA.md b/README_JA.md index 1716089af45..2b0a3ab782c 100644 --- a/README_JA.md +++ b/README_JA.md @@ -5,7 +5,7 @@ ワンクリックで無料であなた専用の ChatGPT ウェブアプリをデプロイ。GPT3、GPT4 & Gemini Pro モデルをサポート。 -[企業版](#企業版) / [デモ](https://chat-gpt-next-web.vercel.app/) / [フィードバック](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Discordに参加](https://discord.gg/zrhvHCr79N) +[NextChatAI](https://nextchat.dev/chat) / [企業版](#企業版) / [デモ](https://chat-gpt-next-web.vercel.app/) / [フィードバック](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Discordに参加](https://discord.gg/zrhvHCr79N) [Zeaburでデプロイ](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FChatGPTNextWeb%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=nextchat&repository-name=NextChat) [Zeaburでデプロイ](https://zeabur.com/templates/ZBUEFA) [Gitpodで開く](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) From 702e17c96b2c533cdb9e0589d19601d57e9abb8b Mon Sep 17 00:00:00 2001 From: lloydzhou Date: Thu, 26 Sep 2024 23:21:42 +0800 Subject: [PATCH 36/49] google api using `x-google-api-key` header --- app/api/google.ts | 5 ++++- app/client/api.ts | 15 +++++++++++---- app/client/platforms/google.ts | 4 ---- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app/api/google.ts b/app/api/google.ts index e6ab472568b..396237eea9d 100644 --- a/app/api/google.ts +++ b/app/api/google.ts @@ -91,7 +91,7 @@ async function request(req: NextRequest, apiKey: string) { }, 10 * 60 * 1000, ); - const fetchUrl = `${baseUrl}${path}?key=${apiKey}${ + const fetchUrl = `${baseUrl}${path}${ req?.nextUrl?.searchParams?.get("alt") === "sse" ? "&alt=sse" : "" }`; @@ -100,6 +100,9 @@ async function request(req: NextRequest, apiKey: string) { headers: { "Content-Type": "application/json", "Cache-Control": "no-store", + "x-google-api-key": + req.headers.get("x-google-api-key") || + (req.headers.get("Authorization") ?? "").replace("Bearer "), }, method: req.method, body: req.body, diff --git a/app/client/api.ts b/app/client/api.ts index 8285b4d9f94..48bbde6bc81 100644 --- a/app/client/api.ts +++ b/app/client/api.ts @@ -272,7 +272,13 @@ export function getHeaders(ignoreHeaders: boolean = false) { } function getAuthHeader(): string { - return isAzure ? "api-key" : isAnthropic ? "x-api-key" : "Authorization"; + return isAzure + ? "api-key" + : isAnthropic + ? "x-api-key" + : isGoogle + ? "x-goog-api-key" + : "Authorization"; } const { @@ -283,14 +289,15 @@ export function getHeaders(ignoreHeaders: boolean = false) { apiKey, isEnabledAccessControl, } = getConfig(); - // when using google api in app, not set auth header - if (isGoogle && clientConfig?.isApp) return headers; // when using baidu api in app, not set auth header if (isBaidu && clientConfig?.isApp) return headers; const authHeader = getAuthHeader(); - const bearerToken = getBearerToken(apiKey, isAzure || isAnthropic); + const bearerToken = getBearerToken( + apiKey, + isAzure || isAnthropic || isGoogle, + ); if (bearerToken) { headers[authHeader] = bearerToken; diff --git a/app/client/platforms/google.ts b/app/client/platforms/google.ts index ecb5ce44b57..3c2607271bf 100644 --- a/app/client/platforms/google.ts +++ b/app/client/platforms/google.ts @@ -48,10 +48,6 @@ export class GeminiProApi implements LLMApi { let chatPath = [baseUrl, path].join("/"); chatPath += chatPath.includes("?") ? "&alt=sse" : "?alt=sse"; - // if chatPath.startsWith('http') then add key in query string - if (chatPath.startsWith("http") && accessStore.googleApiKey) { - chatPath += `&key=${accessStore.googleApiKey}`; - } return chatPath; } extractMessage(res: any) { From 3fb389551ba5284be77734be47b7595c9c425967 Mon Sep 17 00:00:00 2001 From: Dogtiti <499960698@qq.com> Date: Fri, 27 Sep 2024 11:42:16 +0800 Subject: [PATCH 37/49] fix: build error --- app/api/google.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/api/google.ts b/app/api/google.ts index 396237eea9d..7d3f08be4d9 100644 --- a/app/api/google.ts +++ b/app/api/google.ts @@ -102,7 +102,7 @@ async function request(req: NextRequest, apiKey: string) { "Cache-Control": "no-store", "x-google-api-key": req.headers.get("x-google-api-key") || - (req.headers.get("Authorization") ?? "").replace("Bearer "), + (req.headers.get("Authorization") ?? "").replace("Bearer ", ""), }, method: req.method, body: req.body, From 07d089a2bd41ea74ea9edcd7e1395e6d21e14645 Mon Sep 17 00:00:00 2001 From: lloydzhou Date: Fri, 27 Sep 2024 13:31:07 +0800 Subject: [PATCH 38/49] try using method and path when operationId is undefined #5525 --- app/store/plugin.ts | 11 ++++++----- app/utils.ts | 12 ++++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/store/plugin.ts b/app/store/plugin.ts index 84ae0816e41..a79a1ae4b91 100644 --- a/app/store/plugin.ts +++ b/app/store/plugin.ts @@ -4,7 +4,7 @@ import { nanoid } from "nanoid"; import { createPersistStore } from "../utils/store"; import { getClientConfig } from "../config/client"; import yaml from "js-yaml"; -import { adapter } from "../utils"; +import { adapter, getOperationId } from "../utils"; import { useAccessStore } from "./access"; const isApp = getClientConfig()?.isApp; @@ -116,7 +116,7 @@ export const FunctionToolService = { return { type: "function", function: { - name: o.operationId, + name: getOperationId(o), description: o.description || o.summary, parameters: parameters, }, @@ -124,7 +124,7 @@ export const FunctionToolService = { }), funcs: operations.reduce((s, o) => { // @ts-ignore - s[o.operationId] = function (args) { + s[getOperationId(o)] = function (args) { const parameters: Record = {}; if (o.parameters instanceof Array) { o.parameters.forEach((p) => { @@ -139,8 +139,8 @@ export const FunctionToolService = { } else if (authLocation == "body") { args[headerName] = tokenValue; } - // @ts-ignore - return api.client[o.operationId]( + // @ts-ignore if o.operationId is null, then using o.path and o.method + return api.client.paths[o.path][o.method]( parameters, args, api.axiosConfigDefaults, @@ -253,6 +253,7 @@ export const usePluginStore = createPersistStore( .catch((e) => item), ), ).then((builtinPlugins: any) => { + return; builtinPlugins .filter((item: any) => item?.content) .forEach((item: any) => { diff --git a/app/utils.ts b/app/utils.ts index 9a8bebf38c7..6b2f65952c7 100644 --- a/app/utils.ts +++ b/app/utils.ts @@ -377,3 +377,15 @@ export function safeLocalStorage(): { }, }; } + +export function getOperationId(operation: { + operationId?: string; + method: string; + path: string; +}) { + // pattern '^[a-zA-Z0-9_-]+$' + return ( + operation?.operationId || + `${operation.method.toUpperCase()}${operation.path.replaceAll("/", "_")}` + ); +} From 22aa1698b407322c2cb980aed971ad3d06e6f87c Mon Sep 17 00:00:00 2001 From: lloydzhou Date: Fri, 27 Sep 2024 13:31:49 +0800 Subject: [PATCH 39/49] try using method and path when operationId is undefined #5525 --- app/store/plugin.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/app/store/plugin.ts b/app/store/plugin.ts index a79a1ae4b91..40abdc8d9f4 100644 --- a/app/store/plugin.ts +++ b/app/store/plugin.ts @@ -253,7 +253,6 @@ export const usePluginStore = createPersistStore( .catch((e) => item), ), ).then((builtinPlugins: any) => { - return; builtinPlugins .filter((item: any) => item?.content) .forEach((item: any) => { From 19c4ed4463288fbf3066656197088d88fd35c6ef Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 27 Sep 2024 16:43:50 +0800 Subject: [PATCH 40/49] docs links updated sync.yml https://github.com/Yidadaa/ChatGPT-Next-Web is renamed to https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/ --- .github/workflows/sync.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index e04e30adbd6..68f5fabec12 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -35,6 +35,6 @@ jobs: - name: Sync check if: failure() run: | - echo "[Error] 由于上游仓库的 workflow 文件变更,导致 GitHub 自动暂停了本次自动更新,你需要手动 Sync Fork 一次,详细教程请查看:https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/README_CN.md#%E6%89%93%E5%BC%80%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0" - echo "[Error] Due to a change in the workflow file of the upstream repository, GitHub has automatically suspended the scheduled automatic update. You need to manually sync your fork. Please refer to the detailed tutorial for instructions: https://github.com/Yidadaa/ChatGPT-Next-Web#enable-automatic-updates" + echo "[Error] 由于上游仓库的 workflow 文件变更,导致 GitHub 自动暂停了本次自动更新,你需要手动 Sync Fork 一次,详细教程请查看:https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/blob/main/README_CN.md#%E6%89%93%E5%BC%80%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0" + echo "[Error] Due to a change in the workflow file of the upstream repository, GitHub has automatically suspended the scheduled automatic update. You need to manually sync your fork. Please refer to the detailed tutorial for instructions: https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web#enable-automatic-updates" exit 1 From b35895b551d49cd7448f4311ebb799c0158abcc7 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 27 Sep 2024 16:49:08 +0800 Subject: [PATCH 41/49] Update correct links to manualy code update section --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c72c791b264..be5e91d65c7 100644 --- a/README.md +++ b/README.md @@ -175,7 +175,7 @@ We recommend that you follow the steps below to re-deploy: ### Enable Automatic Updates -> If you encounter a failure of Upstream Sync execution, please manually sync fork once. +> If you encounter a failure of Upstream Sync execution, please [manually update code](./README.md#manually-updating-code). After forking the project, due to the limitations imposed by GitHub, you need to manually enable Workflows and Upstream Sync Action on the Actions page of the forked project. Once enabled, automatic updates will be scheduled every hour: From 2333a47c55f7c840b3f6eacd425deac94d5aceb7 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 27 Sep 2024 16:50:51 +0800 Subject: [PATCH 42/49] Update links in doc to manual code update section (CN) --- README_CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_CN.md b/README_CN.md index c5d02477c2c..640fe39331c 100644 --- a/README_CN.md +++ b/README_CN.md @@ -54,7 +54,7 @@ ### 打开自动更新 -> 如果你遇到了 Upstream Sync 执行错误,请手动 Sync Fork 一次! +> 如果你遇到了 Upstream Sync 执行错误,请[手动 Sync Fork 一次](./README_CN.md#手动更新代码)! 当你 fork 项目之后,由于 Github 的限制,需要手动去你 fork 后的项目的 Actions 页面启用 Workflows,并启用 Upstream Sync Action,启用之后即可开启每小时定时自动更新: From c6ebd6e73cbc58bbd752eeab22a3b029985d2e57 Mon Sep 17 00:00:00 2001 From: Dogtiti <499960698@qq.com> Date: Fri, 27 Sep 2024 17:00:24 +0800 Subject: [PATCH 43/49] fix: default model --- app/store/access.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/store/access.ts b/app/store/access.ts index d74cb9d0249..9fcd227e7c0 100644 --- a/app/store/access.ts +++ b/app/store/access.ts @@ -211,10 +211,13 @@ export const useAccessStore = createPersistStore( }) .then((res) => res.json()) .then((res) => { - // Set default model from env request - let defaultModel = res.defaultModel ?? ""; - if (defaultModel !== "") - DEFAULT_CONFIG.modelConfig.model = defaultModel; + const defaultModel = res.defaultModel ?? ""; + if (defaultModel !== "") { + const [model, providerName] = defaultModel.split("@"); + DEFAULT_CONFIG.modelConfig.model = model; + DEFAULT_CONFIG.modelConfig.providerName = providerName; + } + return res; }) .then((res: DangerConfig) => { From 2f3457e73d879be322a0ac6cd7d2aa0b44c6542f Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 27 Sep 2024 17:33:02 +0800 Subject: [PATCH 44/49] Update correct links to manualy code update section (JP) --- README_JA.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_JA.md b/README_JA.md index 2b0a3ab782c..ba3c514dcd7 100644 --- a/README_JA.md +++ b/README_JA.md @@ -54,7 +54,7 @@ ### 自動更新を開く -> Upstream Sync の実行エラーが発生した場合は、手動で Sync Fork してください! +> Upstream Sync の実行エラーが発生した場合は、[手動で Sync Fork](./README_JA.md#手動でコードを更新する) してください! プロジェクトを fork した後、GitHub の制限により、fork 後のプロジェクトの Actions ページで Workflows を手動で有効にし、Upstream Sync Action を有効にする必要があります。有効化後、毎時の定期自動更新が可能になります: From 8fb019b2e2a6395ecda0f6d1dd1f2bf47d8ec505 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 27 Sep 2024 17:34:38 +0800 Subject: [PATCH 45/49] revert, leave sync.yml untouched revert commit 19c4ed4463288fbf3066656197088d88fd35c6ef --- .github/workflows/sync.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 68f5fabec12..e04e30adbd6 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -35,6 +35,6 @@ jobs: - name: Sync check if: failure() run: | - echo "[Error] 由于上游仓库的 workflow 文件变更,导致 GitHub 自动暂停了本次自动更新,你需要手动 Sync Fork 一次,详细教程请查看:https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/blob/main/README_CN.md#%E6%89%93%E5%BC%80%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0" - echo "[Error] Due to a change in the workflow file of the upstream repository, GitHub has automatically suspended the scheduled automatic update. You need to manually sync your fork. Please refer to the detailed tutorial for instructions: https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web#enable-automatic-updates" + echo "[Error] 由于上游仓库的 workflow 文件变更,导致 GitHub 自动暂停了本次自动更新,你需要手动 Sync Fork 一次,详细教程请查看:https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/README_CN.md#%E6%89%93%E5%BC%80%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0" + echo "[Error] Due to a change in the workflow file of the upstream repository, GitHub has automatically suspended the scheduled automatic update. You need to manually sync your fork. Please refer to the detailed tutorial for instructions: https://github.com/Yidadaa/ChatGPT-Next-Web#enable-automatic-updates" exit 1 From 5bdf41139917f815143de11a9e04b261666c7707 Mon Sep 17 00:00:00 2001 From: lloydzhou Date: Sun, 29 Sep 2024 15:51:28 +0800 Subject: [PATCH 46/49] hotfix for `x-goog-api-key` --- app/api/google.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/api/google.ts b/app/api/google.ts index 7d3f08be4d9..707892c33d0 100644 --- a/app/api/google.ts +++ b/app/api/google.ts @@ -23,7 +23,8 @@ export async function handle( }); } - const bearToken = req.headers.get("Authorization") ?? ""; + const bearToken = + req.headers.get("x-goog-api-key") || req.headers.get("Authorization") || ""; const token = bearToken.trim().replaceAll("Bearer ", "").trim(); const apiKey = token ? token : serverConfig.googleApiKey; @@ -92,7 +93,7 @@ async function request(req: NextRequest, apiKey: string) { 10 * 60 * 1000, ); const fetchUrl = `${baseUrl}${path}${ - req?.nextUrl?.searchParams?.get("alt") === "sse" ? "&alt=sse" : "" + req?.nextUrl?.searchParams?.get("alt") === "sse" ? "?alt=sse" : "" }`; console.log("[Fetch Url] ", fetchUrl); @@ -100,8 +101,8 @@ async function request(req: NextRequest, apiKey: string) { headers: { "Content-Type": "application/json", "Cache-Control": "no-store", - "x-google-api-key": - req.headers.get("x-google-api-key") || + "x-goog-api-key": + req.headers.get("x-goog-api-key") || (req.headers.get("Authorization") ?? "").replace("Bearer ", ""), }, method: req.method, From f5ad51a35e5b21122ca40b7dd6723bff33d51edb Mon Sep 17 00:00:00 2001 From: code-october <148516338+code-october@users.noreply.github.com> Date: Sun, 29 Sep 2024 14:29:42 +0000 Subject: [PATCH 47/49] fix quoteEnd extract regex --- app/components/markdown.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index 6e340d065bc..7d27f1d60fa 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -252,7 +252,7 @@ function tryWrapHtmlCode(text: string) { }, ) .replace( - /(<\/body>)([\r\n\s]*?)(<\/html>)([\n\r]*?)([`]*?)([\n\r]*?)/g, + /(<\/body>)([\r\n\s]*?)(<\/html>)([\n\r]*)([`]*)([\n\r]*?)/g, (match, bodyEnd, space, htmlEnd, newLine, quoteEnd) => { return !quoteEnd ? bodyEnd + space + htmlEnd + "\n```\n" : match; }, From deb215ccd1adaf14bb55d1f26de4ef4713fd4780 Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Mon, 30 Sep 2024 13:23:24 +0800 Subject: [PATCH 48/49] fix readme --- README.md | 21 +++++++++++++-------- README_CN.md | 2 +- README_JA.md | 2 +- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index be5e91d65c7..e10d3bce863 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,11 @@ One-Click to get a well-designed cross-platform ChatGPT web UI, with GPT3, GPT4 [![MacOS][MacOS-image]][download-url] [![Linux][Linux-image]][download-url] -[NextChatAI](https://nextchat.dev/chat) / [Web App](https://app.nextchat.dev) / [Desktop App](https://github.com/Yidadaa/ChatGPT-Next-Web/releases) / [Discord](https://discord.gg/YCkeafCafC) / [Enterprise Edition](#enterprise-edition) / [Twitter](https://twitter.com/NextChatDev) +[NextChatAI](https://nextchat.dev/chat?utm_source=readme) / [Web App](https://app.nextchat.dev) / [Desktop App](https://github.com/Yidadaa/ChatGPT-Next-Web/releases) / [Discord](https://discord.gg/YCkeafCafC) / [Enterprise Edition](#enterprise-edition) / [Twitter](https://twitter.com/NextChatDev) [NextChatAI](https://nextchat.dev/chat) / [网页版](https://app.nextchat.dev) / [客户端](https://github.com/Yidadaa/ChatGPT-Next-Web/releases) / [企业版](#%E4%BC%81%E4%B8%9A%E7%89%88) / [反馈](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) -[saas-url]: https://nextchat.dev/chat +[saas-url]: https://nextchat.dev/chat?utm_source=readme [saas-image]: https://img.shields.io/badge/NextChat-Saas-green?logo=microsoftedge [web-url]: https://app.nextchat.dev/ [download-url]: https://github.com/Yidadaa/ChatGPT-Next-Web/releases @@ -31,7 +31,7 @@ One-Click to get a well-designed cross-platform ChatGPT web UI, with GPT3, GPT4 [MacOS-image]: https://img.shields.io/badge/-MacOS-black?logo=apple [Linux-image]: https://img.shields.io/badge/-Linux-333?logo=ubuntu -[Deploy on Zeabur](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FChatGPTNextWeb%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=nextchat&repository-name=NextChat) [Deploy on Zeabur](https://zeabur.com/templates/ZBUEFA) [Open in Gitpod](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) +[Deploy on Zeabur](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FChatGPTNextWeb%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=nextchat&repository-name=NextChat) [Deploy on Zeabur](https://zeabur.com/templates/ZBUEFA) [Open in Gitpod](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) [](https://monica.im/?utm=nxcrp) @@ -40,6 +40,7 @@ One-Click to get a well-designed cross-platform ChatGPT web UI, with GPT3, GPT4 ## Enterprise Edition Meeting Your Company's Privatization and Customization Deployment Requirements: + - **Brand Customization**: Tailored VI/UI to seamlessly align with your corporate brand image. - **Resource Integration**: Unified configuration and management of dozens of AI resources by company administrators, ready for use by team members. - **Permission Control**: Clearly defined member permissions, resource permissions, and knowledge base permissions, all controlled via a corporate-grade Admin Panel. @@ -53,6 +54,7 @@ For enterprise inquiries, please contact: **business@nextchat.dev** ## 企业版 满足企业用户私有化部署和个性化定制需求: + - **品牌定制**:企业量身定制 VI/UI,与企业品牌形象无缝契合 - **资源集成**:由企业管理人员统一配置和管理数十种 AI 资源,团队成员开箱即用 - **权限管理**:成员权限、资源权限、知识库权限层级分明,企业级 Admin Panel 统一控制 @@ -101,7 +103,7 @@ For enterprise inquiries, please contact: **business@nextchat.dev** ## What's New - 🚀 v2.15.0 Now supports Plugins! Read this: [NextChat-Awesome-Plugins](https://github.com/ChatGPTNextWeb/NextChat-Awesome-Plugins) -- 🚀 v2.14.0 Now supports Artifacts & SD +- 🚀 v2.14.0 Now supports Artifacts & SD - 🚀 v2.10.1 support Google Gemini Pro model. - 🚀 v2.9.11 you can use azure endpoint now. - 🚀 v2.8 now we have a client that runs across all platforms! @@ -132,8 +134,8 @@ For enterprise inquiries, please contact: **business@nextchat.dev** - [x] 支持自部署的大语言模型:开箱即用 [RWKV-Runner](https://github.com/josStorer/RWKV-Runner) ,服务端部署 [LocalAI 项目](https://github.com/go-skynet/LocalAI) llama / gpt4all / rwkv / vicuna / koala / gpt4all-j / cerebras / falcon / dolly 等等,或者使用 [api-for-open-llm](https://github.com/xusenlinzy/api-for-open-llm) - [x] Artifacts: 通过独立窗口,轻松预览、复制和分享生成的内容/可交互网页 [#5092](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/pull/5092) - [x] 插件机制,支持`联网搜索`、`计算器`、调用其他平台 api [#165](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/165) [#5353](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/issues/5353) - - [x] 支持联网搜索、计算器、调用其他平台 api [#165](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/165) [#5353](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/issues/5353) - - [ ] 本地知识库 + - [x] 支持联网搜索、计算器、调用其他平台 api [#165](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/165) [#5353](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/issues/5353) +- [ ] 本地知识库 ## 最新动态 @@ -333,10 +335,12 @@ To control custom models, use `+` to add a custom model, use `-` to hide a model User `-all` to disable all default models, `+all` to enable all default models. For Azure: use `modelName@azure=deploymentName` to customize model name and deployment name. + > Example: `+gpt-3.5-turbo@azure=gpt35` will show option `gpt35(Azure)` in model list. > If you only can use Azure model, `-all,+gpt-3.5-turbo@azure=gpt35` will `gpt35(Azure)` the only option in model list. For ByteDance: use `modelName@bytedance=deploymentName` to customize model name and deployment name. + > Example: `+Doubao-lite-4k@bytedance=ep-xxxxx-xxx` will show option `Doubao-lite-4k(ByteDance)` in model list. ### `DEFAULT_MODEL` (optional) @@ -346,8 +350,9 @@ Change default model ### `WHITE_WEBDAV_ENDPOINTS` (optional) You can use this option if you want to increase the number of webdav service addresses you are allowed to access, as required by the format: -- Each address must be a complete endpoint -> `https://xxxx/yyy` + +- Each address must be a complete endpoint + > `https://xxxx/yyy` - Multiple addresses are connected by ', ' ### `DEFAULT_INPUT_TEMPLATE` (optional) diff --git a/README_CN.md b/README_CN.md index 640fe39331c..73fbc3f51c4 100644 --- a/README_CN.md +++ b/README_CN.md @@ -8,7 +8,7 @@ 一键免费部署你的私人 ChatGPT 网页应用,支持 GPT3, GPT4 & Gemini Pro 模型。 -[NextChatAI](https://nextchat.dev/chat) / [企业版](#%E4%BC%81%E4%B8%9A%E7%89%88) / [演示 Demo](https://chat-gpt-next-web.vercel.app/) / [反馈 Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [加入 Discord](https://discord.gg/zrhvHCr79N) +[NextChatAI](https://nextchat.dev/chat?utm_source=readme) / [企业版](#%E4%BC%81%E4%B8%9A%E7%89%88) / [演示 Demo](https://chat-gpt-next-web.vercel.app/) / [反馈 Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [加入 Discord](https://discord.gg/zrhvHCr79N) [Deploy on Zeabur](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FChatGPTNextWeb%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=nextchat&repository-name=NextChat) [Deploy on Zeabur](https://zeabur.com/templates/ZBUEFA) [Open in Gitpod](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) diff --git a/README_JA.md b/README_JA.md index ba3c514dcd7..416928c2647 100644 --- a/README_JA.md +++ b/README_JA.md @@ -5,7 +5,7 @@ ワンクリックで無料であなた専用の ChatGPT ウェブアプリをデプロイ。GPT3、GPT4 & Gemini Pro モデルをサポート。 -[NextChatAI](https://nextchat.dev/chat) / [企業版](#企業版) / [デモ](https://chat-gpt-next-web.vercel.app/) / [フィードバック](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Discordに参加](https://discord.gg/zrhvHCr79N) +[NextChatAI](https://nextchat.dev/chat?utm_source=readme) / [企業版](#企業版) / [デモ](https://chat-gpt-next-web.vercel.app/) / [フィードバック](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Discordに参加](https://discord.gg/zrhvHCr79N) [Zeaburでデプロイ](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FChatGPTNextWeb%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=nextchat&repository-name=NextChat) [Zeaburでデプロイ](https://zeabur.com/templates/ZBUEFA) [Gitpodで開く](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) From d2984db6e7deb0fc51ea76abde2b6748067baa28 Mon Sep 17 00:00:00 2001 From: lyf <1910527151@qq.com> Date: Mon, 30 Sep 2024 13:28:14 +0800 Subject: [PATCH 49/49] fix readme --- README.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e10d3bce863..bf7c3059413 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ One-Click to get a well-designed cross-platform ChatGPT web UI, with GPT3, GPT4 [MacOS-image]: https://img.shields.io/badge/-MacOS-black?logo=apple [Linux-image]: https://img.shields.io/badge/-Linux-333?logo=ubuntu -[Deploy on Zeabur](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FChatGPTNextWeb%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=nextchat&repository-name=NextChat) [Deploy on Zeabur](https://zeabur.com/templates/ZBUEFA) [Open in Gitpod](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) +[Deploy on Zeabur](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FChatGPTNextWeb%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=nextchat&repository-name=NextChat) [Deploy on Zeabur](https://zeabur.com/templates/ZBUEFA) [Open in Gitpod](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) [](https://monica.im/?utm=nxcrp) @@ -40,7 +40,6 @@ One-Click to get a well-designed cross-platform ChatGPT web UI, with GPT3, GPT4 ## Enterprise Edition Meeting Your Company's Privatization and Customization Deployment Requirements: - - **Brand Customization**: Tailored VI/UI to seamlessly align with your corporate brand image. - **Resource Integration**: Unified configuration and management of dozens of AI resources by company administrators, ready for use by team members. - **Permission Control**: Clearly defined member permissions, resource permissions, and knowledge base permissions, all controlled via a corporate-grade Admin Panel. @@ -54,7 +53,6 @@ For enterprise inquiries, please contact: **business@nextchat.dev** ## 企业版 满足企业用户私有化部署和个性化定制需求: - - **品牌定制**:企业量身定制 VI/UI,与企业品牌形象无缝契合 - **资源集成**:由企业管理人员统一配置和管理数十种 AI 资源,团队成员开箱即用 - **权限管理**:成员权限、资源权限、知识库权限层级分明,企业级 Admin Panel 统一控制 @@ -103,7 +101,7 @@ For enterprise inquiries, please contact: **business@nextchat.dev** ## What's New - 🚀 v2.15.0 Now supports Plugins! Read this: [NextChat-Awesome-Plugins](https://github.com/ChatGPTNextWeb/NextChat-Awesome-Plugins) -- 🚀 v2.14.0 Now supports Artifacts & SD +- 🚀 v2.14.0 Now supports Artifacts & SD - 🚀 v2.10.1 support Google Gemini Pro model. - 🚀 v2.9.11 you can use azure endpoint now. - 🚀 v2.8 now we have a client that runs across all platforms! @@ -134,8 +132,8 @@ For enterprise inquiries, please contact: **business@nextchat.dev** - [x] 支持自部署的大语言模型:开箱即用 [RWKV-Runner](https://github.com/josStorer/RWKV-Runner) ,服务端部署 [LocalAI 项目](https://github.com/go-skynet/LocalAI) llama / gpt4all / rwkv / vicuna / koala / gpt4all-j / cerebras / falcon / dolly 等等,或者使用 [api-for-open-llm](https://github.com/xusenlinzy/api-for-open-llm) - [x] Artifacts: 通过独立窗口,轻松预览、复制和分享生成的内容/可交互网页 [#5092](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/pull/5092) - [x] 插件机制,支持`联网搜索`、`计算器`、调用其他平台 api [#165](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/165) [#5353](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/issues/5353) - - [x] 支持联网搜索、计算器、调用其他平台 api [#165](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/165) [#5353](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/issues/5353) -- [ ] 本地知识库 + - [x] 支持联网搜索、计算器、调用其他平台 api [#165](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/165) [#5353](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/issues/5353) + - [ ] 本地知识库 ## 最新动态 @@ -335,12 +333,10 @@ To control custom models, use `+` to add a custom model, use `-` to hide a model User `-all` to disable all default models, `+all` to enable all default models. For Azure: use `modelName@azure=deploymentName` to customize model name and deployment name. - > Example: `+gpt-3.5-turbo@azure=gpt35` will show option `gpt35(Azure)` in model list. > If you only can use Azure model, `-all,+gpt-3.5-turbo@azure=gpt35` will `gpt35(Azure)` the only option in model list. For ByteDance: use `modelName@bytedance=deploymentName` to customize model name and deployment name. - > Example: `+Doubao-lite-4k@bytedance=ep-xxxxx-xxx` will show option `Doubao-lite-4k(ByteDance)` in model list. ### `DEFAULT_MODEL` (optional) @@ -350,9 +346,8 @@ Change default model ### `WHITE_WEBDAV_ENDPOINTS` (optional) You can use this option if you want to increase the number of webdav service addresses you are allowed to access, as required by the format: - -- Each address must be a complete endpoint - > `https://xxxx/yyy` +- Each address must be a complete endpoint +> `https://xxxx/yyy` - Multiple addresses are connected by ', ' ### `DEFAULT_INPUT_TEMPLATE` (optional)