mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-14 12:56:01 +08:00
Feat/install process refinement (#3982)
This commit is contained in:
parent
1d432728ac
commit
c5e2659771
@ -25,7 +25,6 @@ import Link from 'next/link'
|
|||||||
import s from './style.module.css'
|
import s from './style.module.css'
|
||||||
import { fetchDatasetDetail, fetchDatasetRelatedApps } from '@/service/datasets'
|
import { fetchDatasetDetail, fetchDatasetRelatedApps } from '@/service/datasets'
|
||||||
import type { RelatedApp, RelatedAppResponse } from '@/models/datasets'
|
import type { RelatedApp, RelatedAppResponse } from '@/models/datasets'
|
||||||
import { getLocaleOnClient } from '@/i18n'
|
|
||||||
import AppSideBar from '@/app/components/app-sidebar'
|
import AppSideBar from '@/app/components/app-sidebar'
|
||||||
import Divider from '@/app/components/base/divider'
|
import Divider from '@/app/components/base/divider'
|
||||||
import AppIcon from '@/app/components/base/app-icon'
|
import AppIcon from '@/app/components/base/app-icon'
|
||||||
@ -38,6 +37,7 @@ import { LanguagesSupported } from '@/i18n/language'
|
|||||||
import { useStore } from '@/app/components/app/store'
|
import { useStore } from '@/app/components/app/store'
|
||||||
import { AiText, ChatBot, CuteRobote } from '@/app/components/base/icons/src/vender/solid/communication'
|
import { AiText, ChatBot, CuteRobote } from '@/app/components/base/icons/src/vender/solid/communication'
|
||||||
import { Route } from '@/app/components/base/icons/src/vender/solid/mapsAndTravel'
|
import { Route } from '@/app/components/base/icons/src/vender/solid/mapsAndTravel'
|
||||||
|
import { getLocaleOnServer } from '@/i18n/server'
|
||||||
|
|
||||||
export type IAppDetailLayoutProps = {
|
export type IAppDetailLayoutProps = {
|
||||||
children: React.ReactNode
|
children: React.ReactNode
|
||||||
@ -119,7 +119,7 @@ type IExtraInfoProps = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const ExtraInfo = ({ isMobile, relatedApps }: IExtraInfoProps) => {
|
const ExtraInfo = ({ isMobile, relatedApps }: IExtraInfoProps) => {
|
||||||
const locale = getLocaleOnClient()
|
const locale = getLocaleOnServer()
|
||||||
const [isShowTips, { toggle: toggleTips, set: setShowTips }] = useBoolean(!isMobile)
|
const [isShowTips, { toggle: toggleTips, set: setShowTips }] = useBoolean(!isMobile)
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ const ActivateForm = () => {
|
|||||||
timezone,
|
timezone,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
setLocaleOnClient(language.startsWith('en') ? 'en' : 'zh-Hans', false)
|
setLocaleOnClient(language.startsWith('en') ? 'en-US' : 'zh-Hans', false)
|
||||||
setShowSuccess(true)
|
setShowSuccess(true)
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
|
@ -60,7 +60,7 @@ const EnterpriseSSOForm: FC<EnterpriseSSOFormProps> = ({
|
|||||||
return (
|
return (
|
||||||
<div className={
|
<div className={
|
||||||
cn(
|
cn(
|
||||||
'flex flex-col items-center w-full grow items-center justify-center',
|
'flex flex-col items-center w-full grow justify-center',
|
||||||
'px-6',
|
'px-6',
|
||||||
'md:px-[108px]',
|
'md:px-[108px]',
|
||||||
)
|
)
|
||||||
|
@ -20,7 +20,7 @@ const Forms = () => {
|
|||||||
}
|
}
|
||||||
return <div className={
|
return <div className={
|
||||||
cn(
|
cn(
|
||||||
'flex flex-col items-center w-full grow items-center justify-center',
|
'flex flex-col items-center w-full grow justify-center',
|
||||||
'px-6',
|
'px-6',
|
||||||
'md:px-[108px]',
|
'md:px-[108px]',
|
||||||
)
|
)
|
||||||
|
@ -245,7 +245,7 @@ const NormalForm = () => {
|
|||||||
<span className='cursor-pointer text-primary-600'>{t('login.forget')}</span>
|
<span className='cursor-pointer text-primary-600'>{t('login.forget')}</span>
|
||||||
</Tooltip> */}
|
</Tooltip> */}
|
||||||
</label>
|
</label>
|
||||||
<div className="relative mt-1 rounded-md shadow-sm">
|
<div className="relative mt-1">
|
||||||
<input
|
<input
|
||||||
id="password"
|
id="password"
|
||||||
value={password}
|
value={password}
|
||||||
@ -300,6 +300,15 @@ const NormalForm = () => {
|
|||||||
>{t('login.pp')}</Link>
|
>{t('login.pp')}</Link>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{IS_CE_EDITION && <div className="w-hull text-center block mt-2 text-xs text-gray-600">
|
||||||
|
{t('login.goToInit')}
|
||||||
|
|
||||||
|
<Link
|
||||||
|
className='text-primary-600'
|
||||||
|
href='/install'
|
||||||
|
>{t('login.setAdminAccount')}</Link>
|
||||||
|
</div>}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
|
@ -61,7 +61,7 @@ gtag('config', 'AW-11217955271"');
|
|||||||
{loading && (
|
{loading && (
|
||||||
<div className={
|
<div className={
|
||||||
cn(
|
cn(
|
||||||
'flex flex-col items-center w-full grow items-center justify-center',
|
'flex flex-col items-center w-full grow justify-center',
|
||||||
'px-6',
|
'px-6',
|
||||||
'md:px-[108px]',
|
'md:px-[108px]',
|
||||||
)
|
)
|
||||||
|
@ -8,13 +8,13 @@ import { getLanguage } from '@/i18n/language'
|
|||||||
type II18NContext = {
|
type II18NContext = {
|
||||||
locale: Locale
|
locale: Locale
|
||||||
i18n: Record<string, any>
|
i18n: Record<string, any>
|
||||||
setLocaleOnClient: (locale: Locale, reloadPage?: boolean) => void
|
setLocaleOnClient: (_lang: Locale, _reloadPage?: boolean) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
const I18NContext = createContext<II18NContext>({
|
const I18NContext = createContext<II18NContext>({
|
||||||
locale: 'en-US',
|
locale: 'en-US',
|
||||||
i18n: {},
|
i18n: {},
|
||||||
setLocaleOnClient: (lang: Locale, reloadPage?: boolean) => { },
|
setLocaleOnClient: (_lang: Locale, _reloadPage?: boolean) => { },
|
||||||
})
|
})
|
||||||
|
|
||||||
export const useI18N = () => useContext(I18NContext)
|
export const useI18N = () => useContext(I18NContext)
|
||||||
|
@ -44,6 +44,7 @@ const translation = {
|
|||||||
voice: {
|
voice: {
|
||||||
language: {
|
language: {
|
||||||
zhHans: 'Chinesisch',
|
zhHans: 'Chinesisch',
|
||||||
|
zhHant: 'Chinesisch (traditionell)',
|
||||||
enUS: 'Englisch',
|
enUS: 'Englisch',
|
||||||
deDE: 'Deutsch',
|
deDE: 'Deutsch',
|
||||||
frFR: 'Französisch',
|
frFR: 'Französisch',
|
||||||
@ -56,6 +57,7 @@ const translation = {
|
|||||||
ptBR: 'Portugiesisch',
|
ptBR: 'Portugiesisch',
|
||||||
ruRU: 'Russisch',
|
ruRU: 'Russisch',
|
||||||
ukUA: 'Ukrainisch',
|
ukUA: 'Ukrainisch',
|
||||||
|
viVN: 'Vietnamesisch',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
|
@ -30,6 +30,7 @@ const translation = {
|
|||||||
tos: 'Nutzungsbedingungen',
|
tos: 'Nutzungsbedingungen',
|
||||||
pp: 'Datenschutzbestimmungen',
|
pp: 'Datenschutzbestimmungen',
|
||||||
tosDesc: 'Mit der Anmeldung stimmst du unseren',
|
tosDesc: 'Mit der Anmeldung stimmst du unseren',
|
||||||
|
goToInit: 'Wenn du das Konto noch nicht initialisiert hast, gehe bitte zur Initialisierungsseite',
|
||||||
donthave: 'Hast du nicht?',
|
donthave: 'Hast du nicht?',
|
||||||
invalidInvitationCode: 'Ungültiger Einladungscode',
|
invalidInvitationCode: 'Ungültiger Einladungscode',
|
||||||
accountAlreadyInited: 'Konto bereits initialisiert',
|
accountAlreadyInited: 'Konto bereits initialisiert',
|
||||||
|
@ -44,6 +44,7 @@ const translation = {
|
|||||||
voice: {
|
voice: {
|
||||||
language: {
|
language: {
|
||||||
zhHans: 'Chinese',
|
zhHans: 'Chinese',
|
||||||
|
zhHant: 'Traditional Chinese',
|
||||||
enUS: 'English',
|
enUS: 'English',
|
||||||
deDE: 'German',
|
deDE: 'German',
|
||||||
frFR: 'French',
|
frFR: 'French',
|
||||||
@ -56,6 +57,7 @@ const translation = {
|
|||||||
ptBR: 'Portuguese',
|
ptBR: 'Portuguese',
|
||||||
ruRU: 'Russian',
|
ruRU: 'Russian',
|
||||||
ukUA: 'Ukrainian',
|
ukUA: 'Ukrainian',
|
||||||
|
viVN: 'Vietnamese',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
|
@ -31,6 +31,7 @@ const translation = {
|
|||||||
tos: 'Terms of Service',
|
tos: 'Terms of Service',
|
||||||
pp: 'Privacy Policy',
|
pp: 'Privacy Policy',
|
||||||
tosDesc: 'By signing up, you agree to our',
|
tosDesc: 'By signing up, you agree to our',
|
||||||
|
goToInit: 'If you have not initialized the account, please go to the initialization page',
|
||||||
donthave: 'Don\'t have?',
|
donthave: 'Don\'t have?',
|
||||||
invalidInvitationCode: 'Invalid invitation code',
|
invalidInvitationCode: 'Invalid invitation code',
|
||||||
accountAlreadyInited: 'Account already initialized',
|
accountAlreadyInited: 'Account already initialized',
|
||||||
|
@ -44,6 +44,7 @@ const translation = {
|
|||||||
voice: {
|
voice: {
|
||||||
language: {
|
language: {
|
||||||
zhHans: 'Chinois',
|
zhHans: 'Chinois',
|
||||||
|
zhHant: 'Chinois (traditionnel)',
|
||||||
enUS: 'Anglais',
|
enUS: 'Anglais',
|
||||||
deDE: 'Allemand',
|
deDE: 'Allemand',
|
||||||
frFR: 'Français',
|
frFR: 'Français',
|
||||||
@ -56,6 +57,7 @@ const translation = {
|
|||||||
ptBR: 'Portugais',
|
ptBR: 'Portugais',
|
||||||
ruRU: 'Russe',
|
ruRU: 'Russe',
|
||||||
ukUA: 'Ukrainien',
|
ukUA: 'Ukrainien',
|
||||||
|
viVN: 'Vietnamien',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
|
@ -30,6 +30,7 @@ const translation = {
|
|||||||
tos: 'Conditions de Service',
|
tos: 'Conditions de Service',
|
||||||
pp: 'Politique de Confidentialité',
|
pp: 'Politique de Confidentialité',
|
||||||
tosDesc: 'En vous inscrivant, vous acceptez nos',
|
tosDesc: 'En vous inscrivant, vous acceptez nos',
|
||||||
|
goToInit: 'Si vous n\'avez pas initialisé le compte, veuillez vous rendre sur la page d\'initialisation',
|
||||||
donthave: 'Vous n\'avez pas ?',
|
donthave: 'Vous n\'avez pas ?',
|
||||||
invalidInvitationCode: 'Code d\'invitation invalide',
|
invalidInvitationCode: 'Code d\'invitation invalide',
|
||||||
accountAlreadyInited: 'Compte déjà initialisé',
|
accountAlreadyInited: 'Compte déjà initialisé',
|
||||||
|
@ -11,10 +11,6 @@ export const i18n = {
|
|||||||
|
|
||||||
export type Locale = typeof i18n['locales'][number]
|
export type Locale = typeof i18n['locales'][number]
|
||||||
|
|
||||||
export const getLocaleOnClient = (): Locale => {
|
|
||||||
return Cookies.get(LOCALE_COOKIE_NAME) as Locale || i18n.defaultLocale
|
|
||||||
}
|
|
||||||
|
|
||||||
export const setLocaleOnClient = (locale: Locale, reloadPage = true) => {
|
export const setLocaleOnClient = (locale: Locale, reloadPage = true) => {
|
||||||
Cookies.set(LOCALE_COOKIE_NAME, locale)
|
Cookies.set(LOCALE_COOKIE_NAME, locale)
|
||||||
changeLanguage(locale)
|
changeLanguage(locale)
|
||||||
|
@ -44,6 +44,7 @@ const translation = {
|
|||||||
voice: {
|
voice: {
|
||||||
language: {
|
language: {
|
||||||
zhHans: '中国語',
|
zhHans: '中国語',
|
||||||
|
zhHant: '繁体字中国語',
|
||||||
enUS: '英語',
|
enUS: '英語',
|
||||||
deDE: 'ドイツ語',
|
deDE: 'ドイツ語',
|
||||||
frFR: 'フランス語',
|
frFR: 'フランス語',
|
||||||
@ -56,6 +57,7 @@ const translation = {
|
|||||||
ptBR: 'ポルトガル語',
|
ptBR: 'ポルトガル語',
|
||||||
ruRU: 'ロシア語',
|
ruRU: 'ロシア語',
|
||||||
ukUA: 'ウクライナ語',
|
ukUA: 'ウクライナ語',
|
||||||
|
viVN: 'ベトナム語',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
|
@ -30,6 +30,7 @@ const translation = {
|
|||||||
tos: '利用規約',
|
tos: '利用規約',
|
||||||
pp: 'プライバシーポリシー',
|
pp: 'プライバシーポリシー',
|
||||||
tosDesc: 'サインアップすることで、以下に同意するものとします',
|
tosDesc: 'サインアップすることで、以下に同意するものとします',
|
||||||
|
goToInit: 'アカウントを初期化していない場合は、初期化ページに移動してください',
|
||||||
donthave: 'お持ちでない場合',
|
donthave: 'お持ちでない場合',
|
||||||
invalidInvitationCode: '無効な招待コード',
|
invalidInvitationCode: '無効な招待コード',
|
||||||
accountAlreadyInited: 'アカウントは既に初期化されています',
|
accountAlreadyInited: 'アカウントは既に初期化されています',
|
||||||
|
@ -44,6 +44,7 @@ const translation = {
|
|||||||
voice: {
|
voice: {
|
||||||
language: {
|
language: {
|
||||||
zhHans: 'Chinês',
|
zhHans: 'Chinês',
|
||||||
|
zhHant: 'Chinês Tradicional',
|
||||||
enUS: 'Inglês',
|
enUS: 'Inglês',
|
||||||
deDE: 'Alemão',
|
deDE: 'Alemão',
|
||||||
frFR: 'Francês',
|
frFR: 'Francês',
|
||||||
@ -56,6 +57,7 @@ const translation = {
|
|||||||
ptBR: 'Português',
|
ptBR: 'Português',
|
||||||
ruRU: 'Russo',
|
ruRU: 'Russo',
|
||||||
ukUA: 'Ucraniano',
|
ukUA: 'Ucraniano',
|
||||||
|
viVN: 'Vietnamita',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
|
@ -30,6 +30,7 @@ const translation = {
|
|||||||
tos: 'Termos de Serviço',
|
tos: 'Termos de Serviço',
|
||||||
pp: 'Política de Privacidade',
|
pp: 'Política de Privacidade',
|
||||||
tosDesc: 'Ao se inscrever, você concorda com nossos',
|
tosDesc: 'Ao se inscrever, você concorda com nossos',
|
||||||
|
goToInit: 'Se você não inicializou a conta, vá para a página de inicialização',
|
||||||
donthave: 'Não tem?',
|
donthave: 'Não tem?',
|
||||||
invalidInvitationCode: 'Código de convite inválido',
|
invalidInvitationCode: 'Código de convite inválido',
|
||||||
accountAlreadyInited: 'Conta já iniciada',
|
accountAlreadyInited: 'Conta já iniciada',
|
||||||
|
@ -44,6 +44,7 @@ const translation = {
|
|||||||
voice: {
|
voice: {
|
||||||
language: {
|
language: {
|
||||||
zhHans: 'Китайська',
|
zhHans: 'Китайська',
|
||||||
|
zhHant: 'Китайська (традиційна)',
|
||||||
enUS: 'Англійська',
|
enUS: 'Англійська',
|
||||||
deDE: 'Німецька',
|
deDE: 'Німецька',
|
||||||
frFR: 'Французька',
|
frFR: 'Французька',
|
||||||
@ -56,6 +57,7 @@ const translation = {
|
|||||||
ptBR: 'Португальська',
|
ptBR: 'Португальська',
|
||||||
ruRU: 'Російська',
|
ruRU: 'Російська',
|
||||||
ukUA: 'Українська',
|
ukUA: 'Українська',
|
||||||
|
viVN: 'В\'є тнамська',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
|
@ -30,6 +30,7 @@ const translation = {
|
|||||||
tos: 'Умови обслуговування',
|
tos: 'Умови обслуговування',
|
||||||
pp: 'Політика конфіденційності',
|
pp: 'Політика конфіденційності',
|
||||||
tosDesc: 'Реєструючись, ви приймаєте наші',
|
tosDesc: 'Реєструючись, ви приймаєте наші',
|
||||||
|
goToInit: 'Якщо ви ще не ініціалізували обліковий запис, перейдіть на сторінку ініціалізації',
|
||||||
donthave: 'Не маєте?',
|
donthave: 'Не маєте?',
|
||||||
invalidInvitationCode: 'Недійсний код запрошення',
|
invalidInvitationCode: 'Недійсний код запрошення',
|
||||||
accountAlreadyInited: 'Обліковий запис уже ініціалізовано',
|
accountAlreadyInited: 'Обліковий запис уже ініціалізовано',
|
||||||
|
@ -56,6 +56,7 @@ const translation = {
|
|||||||
ptBR: 'Tiếng Bồ Đào Nha',
|
ptBR: 'Tiếng Bồ Đào Nha',
|
||||||
ruRU: 'Tiếng Nga',
|
ruRU: 'Tiếng Nga',
|
||||||
ukUA: 'Tiếng Ukraina',
|
ukUA: 'Tiếng Ukraina',
|
||||||
|
viVN: 'Tiếng Việt',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
|
@ -30,6 +30,7 @@ const translation = {
|
|||||||
tos: 'Điều khoản dịch vụ',
|
tos: 'Điều khoản dịch vụ',
|
||||||
pp: 'Chính sách bảo mật',
|
pp: 'Chính sách bảo mật',
|
||||||
tosDesc: 'Bằng cách đăng ký, bạn đồng ý với',
|
tosDesc: 'Bằng cách đăng ký, bạn đồng ý với',
|
||||||
|
goToInit: 'Nếu bạn chưa khởi tạo tài khoản, vui lòng đi đến trang khởi tạo',
|
||||||
donthave: 'Chưa có?',
|
donthave: 'Chưa có?',
|
||||||
invalidInvitationCode: 'Mã mời không hợp lệ',
|
invalidInvitationCode: 'Mã mời không hợp lệ',
|
||||||
accountAlreadyInited: 'Tài khoản đã được khởi tạo',
|
accountAlreadyInited: 'Tài khoản đã được khởi tạo',
|
||||||
|
@ -44,6 +44,7 @@ const translation = {
|
|||||||
voice: {
|
voice: {
|
||||||
language: {
|
language: {
|
||||||
zhHans: '中文',
|
zhHans: '中文',
|
||||||
|
zhHant: '繁体中文',
|
||||||
enUS: '英语',
|
enUS: '英语',
|
||||||
deDE: '德语',
|
deDE: '德语',
|
||||||
frFR: '法语',
|
frFR: '法语',
|
||||||
@ -56,6 +57,7 @@ const translation = {
|
|||||||
ptBR: '葡萄牙语',
|
ptBR: '葡萄牙语',
|
||||||
ruRU: '俄语',
|
ruRU: '俄语',
|
||||||
ukUA: '乌克兰语',
|
ukUA: '乌克兰语',
|
||||||
|
viVN: '越南语',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
|
@ -30,6 +30,7 @@ const translation = {
|
|||||||
tos: '使用协议',
|
tos: '使用协议',
|
||||||
pp: '隐私政策',
|
pp: '隐私政策',
|
||||||
tosDesc: '使用即代表你并同意我们的',
|
tosDesc: '使用即代表你并同意我们的',
|
||||||
|
goToInit: '如果您还没有初始化账户,请前往初始化页面',
|
||||||
donthave: '还没有邀请码?',
|
donthave: '还没有邀请码?',
|
||||||
invalidInvitationCode: '无效的邀请码',
|
invalidInvitationCode: '无效的邀请码',
|
||||||
accountAlreadyInited: '账户已经初始化',
|
accountAlreadyInited: '账户已经初始化',
|
||||||
|
@ -44,6 +44,7 @@ const translation = {
|
|||||||
voice: {
|
voice: {
|
||||||
language: {
|
language: {
|
||||||
zhHans: '中文',
|
zhHans: '中文',
|
||||||
|
zhHant: '繁體中文',
|
||||||
enUS: '英語',
|
enUS: '英語',
|
||||||
deDE: '德語',
|
deDE: '德語',
|
||||||
frFR: '法語',
|
frFR: '法語',
|
||||||
@ -56,6 +57,7 @@ const translation = {
|
|||||||
ptBR: '葡萄牙語',
|
ptBR: '葡萄牙語',
|
||||||
ruRU: '俄語',
|
ruRU: '俄語',
|
||||||
ukUA: '烏克蘭語',
|
ukUA: '烏克蘭語',
|
||||||
|
viVN: '越南語',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
unit: {
|
unit: {
|
||||||
|
@ -30,6 +30,7 @@ const translation = {
|
|||||||
tos: '使用協議',
|
tos: '使用協議',
|
||||||
pp: '隱私政策',
|
pp: '隱私政策',
|
||||||
tosDesc: '使用即代表你並同意我們的',
|
tosDesc: '使用即代表你並同意我們的',
|
||||||
|
goToInit: '如果您還沒有初始化賬戶,請前往初始化頁面',
|
||||||
donthave: '還沒有邀請碼?',
|
donthave: '還沒有邀請碼?',
|
||||||
invalidInvitationCode: '無效的邀請碼',
|
invalidInvitationCode: '無效的邀請碼',
|
||||||
accountAlreadyInited: '賬戶已經初始化',
|
accountAlreadyInited: '賬戶已經初始化',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user